7

尝试在我的 Core i7 系统中禁用硬件预取器时出现错误。我按照链接如何以编程方式禁用硬件预取?

在我的系统中

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

CONFIG_X86_DEBUGCTLMSR=y

CONFIG_X86_MSR=y

CONFIG_SCSI_ARCMSR=m

这是我的错误信息

根@ ./rdmsr 0x1a0

850089

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

wrmsr:pwrite:输入/输出错误

我在禁用相邻缓存行预取器时遇到同样的错误

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

4

2 回答 2

4

如英特尔架构软件开发人员手册第 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 就是这种情况。

于 2014-01-27T14:12:02.870 回答
4

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

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

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

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

于 2016-03-31T17:02:07.237 回答