Größe des CPU-Cache über die Befehlszeile anzeigen?

8

Wie kann ich die Größe meines CPU-Caches über die Befehlszeile anzeigen?

Ich möchte Informationen zum L1-, L2- und L3-Cache anzeigen.

Wäre es auch möglich, nur Informationen im Cache auszugeben , damit alle anderen Informationen herausgefiltert werden?

Sag mir warum
quelle

Antworten:

11

lscpu liefert die Informationen, die Sie suchen.

lscpu | grep "cache"um nur Cache-Informationen herauszufiltern. Dies führt zu etwas wie:

L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              3072K
EF Nijboer
quelle
3

sysfs

for d in /sys/devices/system/cpu/cpu0/cache/index*;
  do tail -c+1 $d/{level,type,size}
  echo
done

Gibt:

==> /sys/devices/system/cpu/cpu0/cache/index0/level <==
1

==> /sys/devices/system/cpu/cpu0/cache/index0/type <==
Data

==> /sys/devices/system/cpu/cpu0/cache/index0/size <==
32K

==> /sys/devices/system/cpu/cpu0/cache/index1/level <==
1

==> /sys/devices/system/cpu/cpu0/cache/index1/type <==
Instruction

==> /sys/devices/system/cpu/cpu0/cache/index1/size <==
32K

==> /sys/devices/system/cpu/cpu0/cache/index2/level <==
2

==> /sys/devices/system/cpu/cpu0/cache/index2/type <==
Unified

==> /sys/devices/system/cpu/cpu0/cache/index2/size <==
256K

==> /sys/devices/system/cpu/cpu0/cache/index3/level <==
3

==> /sys/devices/system/cpu/cpu0/cache/index3/type <==
Unified

==> /sys/devices/system/cpu/cpu0/cache/index3/size <==
8192K

getconf

getconf -a | grep CACHE

gibt:

LEVEL1_ICACHE_SIZE                 32768
LEVEL1_ICACHE_ASSOC                8
LEVEL1_ICACHE_LINESIZE             64
LEVEL1_DCACHE_SIZE                 32768
LEVEL1_DCACHE_ASSOC                8
LEVEL1_DCACHE_LINESIZE             64
LEVEL2_CACHE_SIZE                  262144
LEVEL2_CACHE_ASSOC                 8
LEVEL2_CACHE_LINESIZE              64
LEVEL3_CACHE_SIZE                  20971520
LEVEL3_CACHE_ASSOC                 20
LEVEL3_CACHE_LINESIZE              64
LEVEL4_CACHE_SIZE                  0
LEVEL4_CACHE_ASSOC                 0
LEVEL4_CACHE_LINESIZE              0

Oder für eine einzelne Ebene:

getconf LEVEL2_CACHE_SIZE

Das Coole an dieser Schnittstelle ist, dass sie nur ein Wrapper um die POSIX sysconfC-Funktion ist (Cache-Argumente sind Nicht-POSIX-Erweiterungen) und daher auch aus C-Code verwendet werden kann.

Getestet in Ubuntu 16.04.

x86-CPUID-Anweisung

Die CPUID x86-Anweisung bietet auch Cache-Informationen und kann vom Benutzerland direkt aufgerufen werden: https://en.wikipedia.org/wiki/CPUID

glibc scheint diese Methode für x86 zu verwenden. Ich habe nicht durch schrittweises Debuggen / Anweisungsverfolgung bestätigt, aber die Quelle für 2.28 sysdeps/x86/cacheinfo.cmacht das:

__cpuid (2, eax, ebx, ecx, edx);

TODO erstellen Sie ein minimales C-Beispiel, das jetzt faul ist und gefragt wird: /programming/14283171/how-to-receive-l1-l2-l3-cache-size-using-cpuid-instruction-in-x86

ARM verfügt außerdem über einen architekturdefinierten Mechanismus zum Ermitteln von Cache-Größen über Register wie das Cache Size ID Register (CCSIDR). Eine Übersicht finden Sie im ARMv8-Programmierhandbuch 11.6 "Cache- Erkennung ".

Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
quelle
-1

Bitte finden Sie unter dem Befehl, um die Größe aller vorhandenen Cache-bezogenen Ordner aufzulisten.

 for i in $(find /  -iname '*cache*'); do du -sh $i ; done 2> /dev/null | grep 'G\|M\|K\|B'| nl
Herr Linux
quelle