2

我正在尝试禁用硬件预取器以在 Intel core i5 2500 上运行一些内存基准测试。问题是我的 BIOS 中没有任何选项可以启用或禁用预取器。所以我试图使用 msr-tools 来禁用预取器。但是 msr-tool 无法将某些特定值写入所需的寄存器 (0x1a0h)。

$ rdmsr -p 0 0x1a0
850089

$ wrmsr -p 0 0x1a0 0x850289
wrmsr: CPU 0 cannot set MSR 0x000001a0 to 0x0000000000850289

这对所有 cpu 都是一样的。但是,如果我尝试写入值 0x850088(仅选择用于测试),它将成功写入该值。

谁能指出问题出在哪里以及解决方案是什么?

我也觉得奇怪的是我的 BIOS 中没有预取器禁用选项。这是某些版本的 BIOS 的情况吗?

谢谢。

4

2 回答 2

0

如果您有 Nehalem、Westmere、Sandy Bridge、Ivy Bridge、Haswell 或 Broadwell Intel CPU,您可以使用 MSR 0x1a4 的位 0:4 启用/禁用各种预取器。请参阅:https ://software.intel.com/content/www/us/en/develop/articles/disclosure-of-hw-prefetcher-control-on-some-intel-processors.html

# E.g. showing initially all enabled:
rdmsr -a -c 0x1a4
> 0xf
> <etc>

# Disable all 4 prefetchers, by setting all 4 bits:
wrmsr -a 0x1a4 $(( 2**0 | 2**1 | 2**2 | 2**3))
rdmsr -a -c 0x1a4
> 0xf
> <etc>

对于具有随机存取内存密集型工作负载的应用程序,这为我带来了大约 5% 的性能提升。

对于较旧的 Intel Core / NetBurst 架构,它似乎是一个不同的 MSR,0x1a0,能够通过位 9 和 19 启用/禁用 2 个不同的预取器。请参阅:

https://software.intel.com/content/www/us/en/develop/articles/optimizing-application-performance-on-intel-coret-microarchitecture-using-hardware-implemented-prefetchers.html

要禁用/启用它们,您可能会执行类似的操作(未经测试,因为我没有核心 CPU - 所以如果我尝试设置这 2 位,我会收到错误消息):

MSRORIG=$(printf "0x%x\n" $(rdmsr -c 0x1a0)) 
# To set bits 9 and 19 and disable the prefetchers:
wrmsr -a 0x1a0 $((MSRORIG | 1<<19 | 1<<9))
# To unset and enable:
wrmsr -a 0x1a0 $((MSRORIG & ~(1<<19 | 1<<9)))
于 2021-07-21T08:15:36.847 回答
0
sudo modprobe msr
sudo rdmsr -p $i 0x1a0 -f 3:0

L2 硬件预取器 - 位 0

L2 相邻高速缓存行预取器 - 位 1

DCU 预取器 - 位 2

DCU IP 预取器 - 位 3

[1]

我得到 9 作为响应。如果该位被设置,则预取器关闭。L2 硬件预取器和 DCU IP 预取器对我来说是关闭的。要打开它们:

$ sudo rdmsr -p 0 0x1a0
850089
# now we update bits 0 and 3
$ sudo wrmsr -p 0 0x850080 # 0b1001 = 0x9 wheras 0b0000 = 0x0
# check it took
$ sudo rdmsr -p 0 0x1a0
850080

所有预取器现在都打开了

关闭它们是类似的 $ sudo wrmsr -p0 0x85008f #这对我来说失败了,我可以设置位 1 以便 L2 adacent 缓存行预取器保持打开 $ suod wrmsr -p0 0x85008d # 其他可以关闭

[1] https://software.intel.com/en-us/articles/disclosure-of-hw-prefetcher-control-on-some-intel-processors

于 2017-10-10T04:33:06.500 回答