¿Hay alguna forma de saber el tamaño de caché L1, L2, L3 y RAM en ubuntu?


Respuestas:


12

Información de la CPU

Use el comando lscpu :

$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                2
On-line CPU(s) list:   0,1
Thread(s) per core:    1
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            15
Model:                 6
Stepping:              5
CPU MHz:               2400.000
BogoMIPS:              6000.33
L1d cache:             16K
L2 cache:              2048K
NUMA node0 CPU(s):     0,1

La información listada es por núcleo de CPU.

Información de la memoria

Existe el comando libre (-h da resultados en forma legible para humanos, es decir, GiB en lugar de bytes):

$ free -h
             total       used       free     shared    buffers     cached
Mem:          2.0G       390M       1.6G        10M        15M       160M
-/+ buffers/cache:       215M       1.7G
Swap:         2.0G         0B       2.0G

3

Esto le dará su información de caché. Designación de socket le dirá a qué caché se hace referencia en la sección

sudo dmidecode -t cache

Para RAM hay un par de cosas que ver, pero meminfo debería hacerlo. Usé grep aquí para mostrar solo total / gratis, pero podrías usar menos o cat para ver todo. Muestra mucha más información sobre el tamaño y el uso de la memoria que solo el tamaño.

grep Mem /proc/meminfo

1

Basado en la respuesta de jkabrams con el siguiente comando y filtrando "caché" de él, cada elemento de caché se le mostrará.

lscpu | grep cache

y RAM:

free -h

Para obtener más información sobre RAM, procesos, etc., puede usar htop en su distribución. Instálalo así en ubuntu.

sudo apt-get install htop

0

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 mínimo de C, 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 de programadores de ARMv8 11.6 "Descubrimiento de caché" para obtener una descripción general.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.