Ver el tamaño del caché de la CPU a través de la línea de comandos?

8

¿Cómo veo el tamaño de la memoria caché de mi CPU usando la línea de comandos?

Quiero ver información en caché L1, L2 y L3.

Además, ¿sería posible superar solo la información en caché, de modo que toda la otra información se filtre?

Dime por qué
fuente

Respuestas:

11

lscpu le proporcionará la información que está buscando.

lscpu | grep "cache"para filtrar solo la información de caché. Esto resultará en algo como:

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

sysfs

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

Da:

==> /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

da:

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 para un solo nivel:

getconf LEVEL2_CACHE_SIZE

Lo bueno de esta interfaz es que es solo un contenedor alrededor de la sysconffunción POSIX C (los argumentos de caché son extensiones que no son POSIX), por lo que también se puede usar desde el código C.

Probado en Ubuntu 16.04.

instrucción x86 CPUID

La instrucción CPUID x86 también ofrece información de caché, y se puede acceder directamente por userland: https://en.wikipedia.org/wiki/CPUID

glibc parece usar ese método para x86. No he confirmado por depuración por pasos / seguimiento de instrucciones, pero la fuente de 2.28 sysdeps/x86/cacheinfo.chace eso:

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

TODO crea un ejemplo C mínimo, perezoso ahora, preguntado en: /programming/14283171/how-to-receive-l1-l2-l3-cache-size-using-cpuid-instruction-in-x86

ARM también tiene un mecanismo definido por la arquitectura para encontrar tamaños de caché a través de registros como el Registro de ID de tamaño de caché (CCSIDR), consulte el Manual del programador de ARMv8 11.6 "Descubrimiento de caché" para obtener una descripción general.

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

Busque debajo del comando para enumerar el tamaño de todas las carpetas relacionadas con caché existentes.

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