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



我在尝试禁用Core i7系统中的硬件预取程序时遇到错误。我正在按照链接遵循该方法如何以编程方式禁用硬件预取?

在我的系统中

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:输入/输出错误

禁用相邻缓存行预取程序时遇到相同的错误

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

事实证明0x1A0位 9 和 19 是奔腾 4 和其他一些旧型号的正确 MSR/位,但 0-3 位0x1A4位是 Nehalem 以后几个最新型号的正确 MSR 位。我用Skylake服务器测试了0x1A4,它也可以工作,而0x1A0没有。

此处的快速文档:某些英特尔处理器上的硬件预取器控制披露

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

另一个 MSR 看起来也相当有趣("禁用 L3 缓存"有人吗?只需确保在正确的处理器家族下查找 MSR!

MSR 规范特定于英特尔处理器家族,如英特尔架构软件开发人员手册第 35 章所述 因此,您必须首先检查是否可以通过 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 就是这种情况。

相关内容

  • 没有找到相关文章

最新更新