在 Skylake 中使用 MSR 正确禁用硬件预取

问题描述 投票:0回答:1

我正在尝试禁用我的机器上的硬件预取:

CPU 系列:6

型号:78

型号名称:Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz

我已经检查过:

gcc -march=native -Q --help=target|grep march
- 命令,它是 Skylake 微架构。

我已经安装了 msr-tools。

grep -i msr /boot/config-$(uname -r)
这给出了结果:
CONFIG_X86_MSR=m
- 我不确定是否有必要将其设置为Y,或者如何做到这一点。我试图使用这篇文章:

如何以编程方式禁用硬件预取?

无法禁用 Core i7 中的硬件预取器

但是我认为帖子有点旧并且不使用 0x1a4 地址。另外,注释中没有描述如何使用该地址进行操作,也没有描述修改 0x1a4 或 0x1a0 之间是否没有区别。

我已阅读这篇文章:https://software.intel.com/en-us/articles/disclosure-of-hw-prefetcher-control-on-some-intel-processors,其中表示可以禁用预取将 0x1A4 中的 0-3 位设置为 1。 modprobe msr - 执行此命令不会给出错误(也不打印任何消息)。然后我尝试这两个命令:

$ sudo wrmsr -p 0 0x1a4 15 //for core 0

$ sudo wrmsr -p 2 0x1a4 15 //for core 2

15 用于将最后 4 位全部设置为 1

您能帮助我确保我正确禁用预取器吗?由于我对

sudo wrmsr -p 0 0x1a4 15
- 命令做了很多假设,我不确定我是否正确使用它。我试图提供所有信息,但如果有其他需要,请告诉我。 (我已经缩短了帖子,因为我猜它太长了)

x86 intel cpu-cache prefetch msr
1个回答
2
投票

我发现这个命令工作正常。 sudo modprobe msr - 不过应该首先执行。主要问题是我用 papi 事件测试它的方式

© www.soinside.com 2019 - 2024. All rights reserved.