如英特尔架构软件开发人员手册第 35 章所述,MSR 规范特定于英特尔处理器系列因此,您必须首先检查是否可以通过 MSR 禁用 CPU 的预取器,然后检查必须切换哪个寄存器的哪些位为了那个原因。
对于我的处理器,英特尔至强 5650(06_2CH 系列),手册指定地址 0x1A0 处的寄存器 IA32_MISC_ENABLE 的第 10 位到第 8 位是保留的。我想这意味着我无法通过 MSR 打开和关闭预取器。根据英特尔员工的回答:"Intel has not disclosed how to disable the prefetchers on processors from Nehalem onward. You'll need to disable the prefetchers using options in the BIOS."
在我的工作站上,运行
sudo wrmsr -p 0 0x1a0 0x850289
结果是:
wrmsr: CPU 0 cannot set MSR 0x000001a0 to 0x0000000000850289
但
sudo wrmsr -p 0 0x1a0 0x850088
作品。
这似乎证实了我无法使用 MSR 禁用预取。请注意,此错误与您的错误不同,在阅读上述第 35.9 章提到的英特尔手册后,您的处理器似乎也无法使用 MSR 禁用预取器。我不知道为什么我们没有相同的错误消息,您的 msr 模块和 Linux 内核的版本是什么?( modinfo msr
)
因此,BIOS 可能是禁用不同预取器的唯一方法,我的 Xeon 5650 就是这种情况。