Volevo sapere come trovare la dimensione della cache L2 in Linux ...
per la dimensione della cache L1, sto facendo quanto segue
pico /proc/cpuinfo
che dire della dimensione della cache L2?
Volevo sapere come trovare la dimensione della cache L2 in Linux ...
per la dimensione della cache L1, sto facendo quanto segue
pico /proc/cpuinfo
che dire della dimensione della cache L2?
Risposte:
cat /sys/devices/system/cpu/cpu0/cache/index2/size
oppure controlla dmidecode
o usare lshw
EDIT 3 : Heh, scusa, fallo sudo dmidecode -t cache
e ti mostrerà le informazioni sulla cache della tua CPU. Per sapere quale sezione stai guardando (L1 o L2), guarda la Configuration:
linea. Tu vuoi Configuration: Enabled, Not Socketed, Level 2
.
Dovresti controllare il seguente strumento . Fornisce le informazioni più accurate da tutti gli strumenti che ho provato. Questo è l'output della versione della riga di comando:
~$ lstopo-no-graphics
Machine (7984MB)
Socket L#0
L2 L#0 (4096KB)
L1d L#0 (32KB) + L1i L#0 (32KB) + Core L#0 + PU L#0 (P#0)
L1d L#1 (32KB) + L1i L#1 (32KB) + Core L#1 + PU L#1 (P#1)
L2 L#1 (4096KB)
L1d L#2 (32KB) + L1i L#2 (32KB) + Core L#2 + PU L#2 (P#2)
L1d L#3 (32KB) + L1i L#3 (32KB) + Core L#3 + PU L#3 (P#3)
E questa è l'interfaccia grafica:
Basta usare: lscpu
Uscita campione:
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 42
Stepping: 7
CPU MHz: 3401.000
BogoMIPS: 6784.57
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 8192K
NUMA node0 CPU(s): 0-3
getconf
getconf -a | grep CACHE
dà:
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
O per un singolo livello:
getconf LEVEL2_CACHE_SIZE
La cosa interessante di questa interfaccia è che è solo un wrapper per la sysconf
funzione POSIX C (gli argomenti della cache sono estensioni non POSIX) e quindi può essere utilizzato anche dal codice C.
Testato in Ubuntu 16.04.
istruzione CPUID x86
L'istruzione CPUID x86 offre anche informazioni sulla cache e può essere letta direttamente dall'utenteland: https://en.wikipedia.org/wiki/CPUID
sembra che glibc usi quel metodo per x86. Non ho confermato dal debugging / traccia delle istruzioni, ma il sorgente per 2.28 lo sysdeps/x86/cacheinfo.c
fa:
__cpuid (2, eax, ebx, ecx, edx);
TODO crea un esempio C minimo, pigro ora, richiesto a: https://stackoverflow.com/questions/14283171/how-to-receive-l1-l2-l3-cache-size-using-cpuid-instruction-in-x86
ARM ha anche un meccanismo definito dall'architettura per trovare le dimensioni della cache attraverso registri come il registro ID dimensioni cache (CCSIDR), vedere il Manuale dei programmatori ARMv8 11.6 " Rilevamento della cache" per una panoramica.
dmesg | grep cache
mostrerà le informazioni relative a L1 e L2.
lscpu
non è preciso su alcune CPU con configurazione esotica. Ad esempio la CPU dalla mia risposta fornisce quanto segue (omesso alcune informazioni): Famiglia di CPU: 6 Modello: 15 Stepping: 11 CPU MHz: 1866.742 BogoMIPS: 3733.48 Virtualizzazione: cache VT-x L1d: 32K cache L1i: 32K cache L2: 4096K Nodo NUMA0 CPU (s): 0-3 La CPU è Xeon L5320 con un totale di 8 MB L2.