Existe-t-il un moyen de connaître la taille du cache L1, L2, L3 et de la RAM dans Ubuntu?


Réponses:


12

Informations CPU

Utilisez la commande 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

Les informations répertoriées sont par cœur de processeur.

Informations sur la mémoire

Il y a la commande libre (-h donne des résultats sous forme lisible par l'homme, c'est-à-dire GiB plutôt que des octets):

$ 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

Cela vous donnera vos informations de cache. La désignation de socket vous indiquera à quel cache il est fait référence dans la section.

sudo dmidecode -t cache

Pour la RAM, il y a quelques choses à regarder, mais meminfo devrait le faire. J'ai utilisé grep ici pour afficher uniquement total / free mais vous pouvez utiliser moins ou cat pour voir le tout. Il affiche beaucoup plus d'informations sur la taille et l'utilisation de la mémoire que sur la taille.

grep Mem /proc/meminfo

1

Sur la base de la réponse de jkabrams avec la commande suivante et en filtrant le "cache", chaque élément de cache qui vous est présenté.

lscpu | grep cache

et RAM:

free -h

Pour plus d'informations sur la RAM, les processus, etc., vous pouvez utiliser htop sur votre distribution. Installez-le comme ceci sur 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

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

La chose intéressante à propos de cette interface est qu'elle n'est qu'un wrapper autour de la sysconffonction POSIX C (les arguments de cache sont des extensions non-POSIX), et qu'elle peut donc également être utilisée à partir du code C.

Testé dans Ubuntu 16.04.

Instruction CPUID x86

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

la glibc semble utiliser cette méthode pour x86. Je n'ai pas confirmé par étape le débogage / suivi des instructions, mais la source de 2.28 le sysdeps/x86/cacheinfo.cfait:

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

TODO créer un exemple C minimal, paresseux maintenant, demandé à: /programming/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 pour trouver les tailles de cache via des registres tels que le registre d'ID de taille de cache (CCSIDR), voir le manuel ARMv8 Programmers 'Manual 11.6 «Cache discovery» pour un aperçu.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.