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

bho*_*ath 6 linux cpu-architecture prefetch microprocessors msr

尝试在我的Core i7系统中禁用硬件预取程序时,我收到错误.我按照链接按照方法如何以编程方式禁用硬件预取?

在我的系统中

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

CONFIG_X86_DEBUGCTLMSR = Y

CONFIG_X86_MSR = Y

CONFIG_SCSI_ARCMSR =米

这是我的错误消息

root @ ./rdmsr 0x1a0

850089

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

wrmsr:pwrite:输入/输出错误

我在禁用Adjacent cache line prefetcher时收到同样的错误

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

orm*_*orm 5

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

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

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

其他 MSR 的实验看起来也相当有趣(“禁用 L3 缓存”有人吗?)。只需确保在正确的处理器系列下查找 MSR!


Man*_*lva 4

MSR 规范特定于英特尔处理器系​​列,如英特尔架构软件开发人员手册第 35 章中所述。因此,您必须首先检查是否可以通过 MSR 禁用 CPU 的预取器,然后检查必须切换哪个寄存器的哪些位为了那个原因。

对于我的处理器 Intel Xeon 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
Run Code Online (Sandbox Code Playgroud)

结果是:

wrmsr: CPU 0 cannot set MSR 0x000001a0 to 0x0000000000850289
Run Code Online (Sandbox Code Playgroud)

sudo wrmsr -p 0 0x1a0 0x850088
Run Code Online (Sandbox Code Playgroud)

作品。

这似乎证实我无法使用 MSR 禁用预取。请注意,此错误与您的错误不同,并且在阅读上述第 35.9 章提到的英特尔手册后,似乎对于您的处理器,您无法使用 MSR 取消预取器。我不知道为什么我们没有相同的错误消息,您的 msr 模块和 Linux 内核版本是什么?( modinfo msr)

因此,BIOS 可能是禁用不同预取器的唯一方法,我的 Xeon 5650 就是这种情况。