web-dev-qa-db-fra.com

Comment trouver la taille du cache L2 sous Linux?

Je voulais savoir comment trouver la taille du cache L2 sous Linux ...

pour la taille du cache L1, je fais ce qui suit

pico /proc/cpuinfo

qu'en est-il de la taille du cache L2?

32
jkg

cat /sys/devices/system/cpu/cpu0/cache/index2/size

ou cochez dmidecode

ou utilisez lshw

28
Dakshina Dasari

EDIT 3 : Hé, désolé, faites juste Sudo dmidecode -t cache et il vous montrera les informations de cache de votre CPU. Pour savoir quelle section vous consultez (L1 ou L2), regardez la ligne Configuration:. Vous voulez Configuration: Enabled, Not Socketed, Level 2.

27
Jorge Israel Peña

Vous devriez vérifier l'outil suivant . Il fournit les informations les plus précises parmi tous les outils que j'ai essayés. Voici la version de la ligne de commande:

~$ 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)

Et voici l'interface graphique:enter image description here

17
zloster

Il suffit d'utiliser: lscpu

Exemple de sortie:

$ 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
9
user1846476

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

La bonne chose à propos de cette interface est qu’il s’agit simplement d’un wrapper autour de la fonction POSIX sysconf C (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 CPUID x86

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é l'étape de débogage/suivi 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 au moyen de registres tels que le registre CCSIDR (Cache Size ID Register). Reportez-vous au Manuel de programmation ARMv8 11.6 "Découverte de cache" pour un aperçu.

dmesg | grep cache affichera vos informations relatives à L1 et L2.

4
Dhaval Soni