首页 > 解决方案 > 如何检测是否存在特定于模型的寄存器

问题描述

我正在尝试检查 IA32_VMX_EPT_VPID_CAP (48CH) 中的某个位是否清晰,但在某些情况下,我正在使用本身没有那个 msr(q9300) 的硬件并且我得到了段错误。我想知道是否有一条指令或一种“好”的方式来检查 msr 是否首先存在。我知道我可能可以处理段错误或检查 CPU 型号并将其与准备好的表进行比较,该表具有哪些 CPU 具有 msr,但这些解决方案对我来说似乎有点混乱。我查看了英特尔手册,但我没有找到任何关于检查它的方法的参考。有没有比上述方式更合适的约定或更合适的方式?

标签: cx86intelvirtualizationmsr

解决方案


来自英特尔 SDM 的 A.10 节:

IA32_VMX_EPT_VPID_CAP MSR 存在于支持 EPT 或 VPID 的处理器上。

因此,您应该检查以下内容:

  • IA32_VMX_PROCBASED_CTLS MSR 的第 63 位为 1(支持辅助控件)
  • 并且 IA32_VMX_PROCBASED_CTLS2 MSR 的第 33 位或第 37 位为 1(支持 EPT 或 VPID)

推荐阅读