从Windows 10 1809开始,操作系统会生成大量的软件SMI。
我们在独立的处理器核心上运行实时应用程序,每个SMI都会产生不可预测的延迟。在1809之前,总是可以在BIOS中禁用SMI。
Windows中的调用堆栈如下:
hal!HalEfiGetEnvironmentVariable+0x56
hal!HalGetEnvironmentVariableEx+0xb572
nt!IopGetEnvironmentVariableHal+0x2a
nt!IoGetEnvironmentVariableEx+0x85
nt!ExpGetFirmwareEnvironmentVariable+0x91
nt!ExGetFirmwareEnvironmentVariable+0x110ce3
nt!NtQuerySystemEnvironmentValueEx+0x6e
通过向端口0xb2发送OUT指令可以生成SMI。从NVRAM中读取UEFI变量需要使用SMI。当BIOS处于传统模式下时,将没有SMI。
是否可以配置Windows,以便它不使用SMI访问UEFI变量?