4

PCでUbuntu12.04とInteli5450を使用しています。レベル1の命令キャッシュのキャッシュラインサイズを取得するために、2つの方法を使用しました。しかし、結果は異なります。

firo@snow:~/ws$ getconf LEVEL1_ICACHE_LINESIZE

32


firo@snow:~/ws$ cat /sys/devices/system/cpu/cpu0/cache/index1/coherency_line_size 

64

何か問題がありますか?それはとても混乱しています。

4

2 に答える 2

2

Intel CPU が与えられ、標準の Linux/glibc と仮想化がないと仮定するとcpuid...

/ から報告されるキャッシュ値は、glibc の i386/sysconf.c から getconf取得されます。sysfs のものはintel_cacheinfo.cから来ています。sysconf()

最も明白な違いは、sysfs がcpuid4 からの値のみを返すのに対し、sysconf()最初にcpuid2 を見てcpuid、バイトの 1 つが0xFF. sysconf.c の 0x09 のエントリ間に不一致があります。

    { 0x09,  4, 32, M(_SC_LEVEL1_ICACHE_SIZE),   32768 },

Intel® 64 and IA-32 Architectures Software Developer's Manual の表 3-22 :

09H | キャッシュ | 第 1 レベルの命令キャッシュ: 32K バイト、4 ウェイ セット アソシアティブ、64 バイト ライン サイズ

glibcのバグのようです。

于 2013-08-25T02:26:02.357 に答える
0

getconf はカーネル構成値を返します。そのセマンティクスはカーネル コードによって決定されますが、/sys は CPU の物理特性を返します。この不一致を理解するには、カーネル構成変数がカーネル コードでどのように使用されているかを調べる必要があります。

于 2012-07-21T03:07:49.167 に答える