取决于 MSR 的最大 CPUID 标准叶/CPUID 功能?
Posted
技术标签:
【中文标题】取决于 MSR 的最大 CPUID 标准叶/CPUID 功能?【英文标题】:Max CPUID standard leaf / CPUID-features dependent on MSRs? 【发布时间】:2021-10-29 13:38:20 【问题描述】:最大 CPUID 标准叶是否可以更改,即内核是否可以重新配置它以启用额外的 CPUID 值?
是否存在依赖于某些 MSR 配置的 CPUID 功能位?
【问题讨论】:
【参考方案1】:最大 CPUID 标准叶是否可以更改,即内核是否可以重新配置它以启用额外的 CPUID 值?
一般来说,没有(报告的最大标准叶是字面最大值),但是...
很久以前,如果 CPU 报告“过高”最大值,Windows NT 内核就会出现错误并崩溃。 CPUID 值(在发布内核时没有检测到,因为当时 CPU 没有报告那么多);所以为了解决这个问题,英特尔说“软件是软的,硬件是硬的,让我们在接下来的 20 多年里为硬件添加一个 hack,这样微软就不需要写一个 2 分钟的补丁”。最终结果是 IA32_MISC_ENABLE MSR (MSR 0x1A0) 位 22 处的“限制 CPUID MAXVAL”标志;哪个(如果设置)将导致 CPUID 报告最大值。值 3(而不是真正的更高的最大值)。
对于其他 80x86 CPU 制造商(AMD、VIA、Cyrix、NexGen、..),他们并没有弄乱最大值。标准 CPUID 叶子本身(并创建了自己的区域 - 例如 AMD 使用的“0x80000000+叶子”,并在可能的地方复制了英特尔的标准叶子);但是它们中的很多都允许修改诸如 CPU 供应商字符串或 CPU 品牌字符串或 CPU 功能标志之类的内容,因此您不能太信任它们(例如,修改引导加载程序以使旧的 AMD Athlon 芯片报告并不难“Core i9 8765 @ 6 GHz”并出售计算机第二手)。
【讨论】:
【参考方案2】:有几个 CPUID 结果会受到操作系统设置的控制寄存器或 MSR 的影响。
leaf (subleaf) | register[bit] | controlled by |
---|---|---|
7 (0) | ECX[4] OSPKE | CR4.PKE |
9 | EAX[31:0] | IA32_PLATFORM_DCA_CAP |
D (0) | EBX[31:0] | XCR0 |
D (1) | EBX[31:0] | XCR0 and IA32_XSS |
80000001 | EDX[11] SYSCALL/SYSRET | IA32_EFER.LMA |
【讨论】:
以上是关于取决于 MSR 的最大 CPUID 标准叶/CPUID 功能?的主要内容,如果未能解决你的问题,请参考以下文章