尝试在Core i7系统中禁用硬件预取器时出现错误。我按照链接How do I programmatically disable hardware prefetching?的方法
在我的系统中
CONFIG_X86_DEBUGCTLMSR = y
CONFIG_X86_MSR = y
CONFIG_SCSI_ARCMSR = m
这是我的错误信息
停用相邻缓存行预取器时,出现了相同的错误
任何想法如何解决这个问题?提前致谢 。
最佳答案
如Intel Architectures Software Developer Manuals第35章中所述,MSR规范特定于Intel处理器系列。因此,您必须首先检查是否可以通过MSR禁用CPU的预取器,然后检查必须为此切换哪个寄存器的位。
对于我的处理器,英特尔至强5650(06_2CH系列),该手册指定了地址0x1A0处的寄存器IA32_MISC_ENABLE的位10至8。我想这意味着我无法通过MSR打开和关闭预取器。根据英特尔员工的回答here:"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就是这种情况。