web-dev-qa-db-fra.com

Afficher la taille du cache du processeur via la ligne de commande?

Comment afficher la taille de mon cache de processeur en utilisant la ligne de commande?

Je souhaite afficher des informations sur les caches L1, L2 et L3.

Aussi, serait-il possible de sortir seulement informations sur le cache, de sorte que toutes les autres informations soient filtrées?

8
TellMeWhy

lscpu fournira les informations que vous recherchez.

lscpu | grep "cache" pour filtrer uniquement les informations de cache. Cela se traduira par quelque chose comme:

L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              3072K
11
E.F. Nijboer

sysfs

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

Donne:

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

donne:

_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
_

Ou pour un seul niveau:

_getconf LEVEL2_CACHE_SIZE
_

Ce qui est bien avec cette interface, c’est qu’il s’agit simplement d’un wrapper autour de la fonction C POSIX sysconf (les arguments du cache ne sont pas des extensions POSIX), et qu’elle peut donc également être utilisée à partir de code C.

Testé sous Ubuntu 16.04.

Instruction x86 CPUID

L'instruction CPUID x86 offre également des informations sur le cache et est accessible directement par l'utilisateur: https://en.wikipedia.org/wiki/CPUID

glibc semble utiliser cette méthode pour x86. Je n'ai pas confirmé par l'étape de débogage/traçage des instructions, mais la source de 2.28 sysdeps/x86/cacheinfo.c fait cela:

___cpuid (2, eax, ebx, ecx, edx);
_

TODO créer un exemple C minimal, lazy now, demandé à: https://stackoverflow.com/questions/14283171/how-to-receive-l1-l2-l3-cache-size-using-cpuid-instruction -in-x86

ARM dispose également d’un mécanisme défini par l’architecture permettant de rechercher la taille du cache par le biais de registres tels que le registre CCSIDR (Cache Size ID Register). Pour plus d’informations, veuillez vous reporter au Manuel de programmation ARMv8 11.6 "Découverte du cache".