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 アーキテクチャの場合、ビット 9 と 19 を介して 2 つの異なるプリフェッチャーを有効/無効にする機能を持つ、別の MSR 0x1a0 のようです。以下を参照してください。

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 に答える