如何检测模型特定寄存器是否存在

How to detect if model specific register exist

我正在尝试检查 IA32_VMX_EPT_VPID_CAP (48CH) 中的位是否清楚,但在某些情况下,我使用的硬件本身没有 msr(q9300),我遇到了段错误。我想知道是否有指令或 "nice" 方法来首先检查 msr 是否存在。我知道我可能可以处理段错误或检查 CPU 模型并将其与准备好的 table 进行比较,后者具有 CPU 的 msr,但这些解决方案对我来说似乎有点混乱。我查看了 Intel Manuel,但我没有找到任何关于检查它的方法的参考。有没有比上面提到的方法更合适的约定或更合适的方法?

来自英特尔 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)