我正在尝试禁用我的机器上的硬件预取:
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,或者如何做到这一点。我试图使用这篇文章:
但是我认为帖子有点旧并且不使用 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
- 命令做了很多假设,我不确定我是否正确使用它。我试图提供所有信息,但如果有其他需要,请告诉我。 (我已经缩短了帖子,因为我猜它太长了)
我发现这个命令工作正常。 sudo modprobe msr - 不过应该首先执行。主要问题是我用 papi 事件测试它的方式