x86 MSR 名称的 IA32 与 MSR 前缀

Posted

技术标签:

【中文标题】x86 MSR 名称的 IA32 与 MSR 前缀【英文标题】:IA32 vs MSR prefix for x86 MSR names 【发布时间】:2020-04-30 15:41:31 【问题描述】:

英特尔有时使用 MSR_ 前缀作为 MSR 名称,有时使用 IA32_即使是同一个 MSR。

例如,在 SNB 上,在 SDM Volume 4 中,他们为 MSR 0x198 记录了 IA32_PERF_STATUSMSR_PERF_STATUS,但位的值有些不同(但并不完全不一致1) :

这是怎么回事?


1IA32 版本中定义为保留 的位在MSR 版本中具有特定含义。

【问题讨论】:

【参考方案1】:

一些 MSR 寄存器是体系结构的,这意味着它们保证在所有未来的处理器上都得到支持(并且定义的位字段在未来将具有相同的含义)。英特尔 SDM 第 4 卷(2019 年 10 月)的第 2.1 节指定架构 MSR 具有前缀“IA32_”,而所有其他 MSR 都是非架构的。

MSR 的子集和相关的位字段,不会随时间改变 未来的处理器代,现在被认为是架构 MSR。 由于历史原因(从 Pentium 4 处理器开始),这些 “架构 MSR”被赋予前缀“IA32_”。

架构 MSR 没有必要使其所有位字段也都是架构的。 MSR 198H 是一个架构 MSR,因为它的名称为 IA32_PERF_STATUS。根据其架构规范,位 15:0 具有一定意义,而 MSR 的其余部分被保留。如果架构 MSR 中有非架构位字段,则在手册中的单独条目中定义,并且为同一 MSR 指定一个不以“IA32_”为前缀的名称。在这种情况下,非架构位字段在名称MSR_PERF_STATUS 下定义。不保证在任何其他处理器中都支持这些位字段(具有相同的含义)。

此命名约定是在支持某些架构 MSR 后引入的。这些 MSR 的名称可能与此约定不同。手册中提供了当前名称(根据命名约定)和以前的名称。后来的 MSR 仅具有遵循约定的名称。

MSR 仅针对特定供应商(在本例中为英特尔)具有架构性。上述命名约定仅遵循英特尔。 AMD 处理器上的架构 MSR 没有前缀。因此,本文中的“架构”一词应该在供应商级别而不是 ISA 级别来理解。

当 MSR 首次在 Pentium 处理器中引入时,它们被称为特定型号,因为英特尔不想承诺让任何或所有未来的 x86 英特尔处理器都支持它们。从 Pentium 4 开始,Intel 决定制作 MSR 架构的子集,并提出了在这些 MSR 前面加上“IA32_”前缀的命名约定,这使得程序员更容易通过查看 MSR 的名称来确定 MSR 是否是架构的.虽然称它们为“特定于模型”在技术上不再准确,但它仍然存在。

【讨论】:

以上是关于x86 MSR 名称的 IA32 与 MSR 前缀的主要内容,如果未能解决你的问题,请参考以下文章

windows ssdt

windows ssdt

磁盘中的esp分区与msr分区

华三msr3640支持用户量

令状态寄存器访问指令(MRS,MSR)

为啥 ryzen 上的 p-state 状态 MSR 没有改变?