Gibt es eine Möglichkeit, die Größe von L1-, L2-, L3-Cache und RAM in Ubuntu zu ermitteln?


Antworten:


12

CPU-Informationen

Verwenden Sie den Befehl 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

Die aufgeführten Informationen beziehen sich auf den CPU-Kern.

Speicherinformationen

Es gibt den freien Befehl (-h gibt Ergebnisse in lesbarer Form an, dh GiB statt 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

Dadurch erhalten Sie Ihre Cache-Informationen. Die Socket-Bezeichnung gibt an, auf welchen Cache im Abschnitt verwiesen wird.

sudo dmidecode -t cache

Für RAM gibt es ein paar Dinge zu beachten, aber meminfo sollte es tun. Ich habe grep hier verwendet, um nur total / free anzuzeigen, aber Sie könnten weniger oder cat verwenden, um das Ganze zu sehen. Es zeigt viel mehr Informationen zur Speichergröße und -nutzung als nur zur Größe.

grep Mem /proc/meminfo

1

Basierend auf jkabrams Antwort mit folgendem Befehl und Filtern von "Cache" daraus wird jedes Cache-Element angezeigt.

lscpu | grep cache

und RAM:

free -h

Für weitere Informationen über RAM, Prozesse usw. können Sie htop in Ihrer Distribution verwenden. Installieren Sie es so auf 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

Gibt:

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

gibt:

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

Oder für eine einzelne Ebene:

getconf LEVEL2_CACHE_SIZE

Das Coole an dieser Schnittstelle ist, dass sie nur ein Wrapper um die POSIX sysconfC-Funktion ist (Cache-Argumente sind Nicht-POSIX-Erweiterungen) und daher auch aus C-Code verwendet werden kann.

Getestet in Ubuntu 16.04.

x86-CPUID-Anweisung

Die CPUID x86-Anweisung bietet auch Cache-Informationen und kann vom Benutzerland direkt aufgerufen werden: https://en.wikipedia.org/wiki/CPUID

glibc scheint diese Methode für x86 zu verwenden. Ich habe nicht durch schrittweises Debuggen / Anweisungsverfolgung bestätigt, aber die Quelle für 2.28 sysdeps/x86/cacheinfo.cmacht das:

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

TODO erstellen Sie ein minimales C-Beispiel, das jetzt faul ist und gefragt wird: /programming/14283171/how-to-receive-l1-l2-l3-cache-size-using-cpuid-instruction-in-x86

ARM verfügt außerdem über einen architekturdefinierten Mechanismus zum Ermitteln von Cache-Größen über Register wie das Cache Size ID Register (CCSIDR). Eine Übersicht finden Sie im ARMv8-Programmierhandbuch 11.6 "Cache- Erkennung ".

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.