无法在Core i7中禁用硬件预取程序

时间:2013-10-17 19:43:41

标签: linux cpu-architecture microprocessors prefetch msr

尝试在Core i7系统中禁用硬件预取程序时出现错误。我按照链接How do I programmatically disable hardware prefetching?

关注该方法

在我的系统中

  

grep -i msr / boot / config - $(uname -r)

CONFIG_X86_DEBUGCTLMSR = Y

CONFIG_X86_MSR = Y

CONFIG_SCSI_ARCMSR = M

这是我的错误消息

  

root @ ./rdmsr 0x1a0

     

850089

     

[root @ ./wrmsr -p 0 0x1a0 0x850289(禁用Core i7中的硬件预取器)

     

wrmsr:pwrite:输入/输出错误

我因为禁用相邻的缓存行预取而得到同样的错误

知道如何解决这个问题吗?提前谢谢。

2 个答案:

答案 0 :(得分:4)

MSR规范特定于英特尔处理器系​​列,如Intel Architectures Software Developer Manuals第35章所述。因此,您必须首先检查您是否可以通过MSR禁用CPU的预取器,然后检查哪些位注册必须切换它。

对于我的处理器,Intel Xeon 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一样。

答案 1 :(得分:3)

事实证明,0x1A0位9和19是奔腾4和其他一些旧型号的正确MSR /位,但 0x1A4位0-3 是几个最近的模型的正确MSR位Nehalem开始。我用Skylake服务器测试了0x1A4,它运行良好,而0x1A0没有。

此处提供快速文档:Disclosure of H/W prefetcher control on some Intel processors

在开发人员手册的第3卷中有关于此和其他MSR的更完整的文档:(click here)。该文件还确认在较旧的处理器型号中使用了0x1A0位9和19,但0x14A用于更新的型号。

其他MSR看起来也非常有趣,也可以进行实验('禁用L3缓存'任何人?)。只需确保在正确的处理器系列下寻找MSR!