Veuillez inclure la substance des réponses. Ne mentionnez pas seulement les noms des commandes, mais affichez leur sortie.
slm
lshw(exécuté avec l'autorisation root bien sûr) ne m'a pas donné d'informations sur le cache. mais lscpuet les dmidecodeoutils m'ont donné les résultats.
Shnd
19
lscpu
Si vous ne vous souciez que des tailles, essayez lscpude util-linux.
Exemple
$ 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: 2
Core(s) per socket: 2
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 37
Model name: Intel(R) Core(TM) i5 CPU M 560 @ 2.67GHz
Stepping: 5
CPU MHz: 1199.000
BogoMIPS: 5319.88
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 3072K
NUMA node0 CPU(s): 0-3
x86info
Il devrait également y avoir un package / commande appelé x86info. En supposant que vous ayez i386 / x86_64, vous x86info -cdevriez fournir des informations plus détaillées sur les caches.
Exemple
$ x86info -c
x86info v1.30. Dave Jones 2001-2011
Feedback to <[email protected]>.
Found 4 identical CPUs
Extended Family: 0 Extended Model: 2 Family: 6 Model: 37 Stepping: 5
Type: 0 (Original OEM)
CPU Model (x86info's best guess): Core i7 (Nehalem) [Clarkdale/Arrandale]
Processor name string (BIOS programmed): Intel(R) Core(TM) i5 CPU M 560 @ 2.67GHz
Cache info
L1 Instruction cache: 32KB, 4-way associative. 64 byte line size.
L1 Data cache: 32KB, 8-way associative. 64 byte line size.
L2 (MLC): 256KB, 8-way associative. 64 byte line size.
TLB info
Instruction TLB: 2MB or 4MB pages, fully associative, 7 entries
Instruction TLB: 4K pages, 4-way associative, 64 entries.
Data TLB: 4KB or 4MB pages, fully associative, 32 entries.
Data TLB: 4KB pages, 4-way associative, 64 entries
Data TLB: 4K pages, 4-way associative, 512 entries.
Data TLB: 4KB or 4MB pages, fully associative, 32 entries.
Data TLB: 4KB pages, 4-way associative, 64 entries
64 byte prefetching.
Data TLB: 4K pages, 4-way associative, 512 entries.
Found unknown cache descriptors: dd
Total processor threads: 4
This system has 1 dual-core processor with hyper-threading (2 threads per core) running at an estimated 2.65GHz
La chose intéressante à propos de cette interface est qu'elle est juste un wrapper autour de la sysconffonction POSIX C (les arguments de cache sont des extensions non-POSIX), et donc elle peut é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:
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 des programmeurs ARMv8 11.6 « Détection de cache» pour un aperçu.
What: /sys/devices/system/cpu/cpu*/cache/index*/<set_of_attributes_mentioned_below>
Date: July 2014(documented, existed before August 2008)
Description: Parameters for the CPU cache attributes
allocation_policy:
- WriteAllocate: allocate a memory location to a cache line
on a cache miss because of a write
- ReadAllocate: allocate a memory location to a cache line
on a cache miss because of a read
- ReadWriteAllocate: both writeallocate and readallocate
coherency_line_size: the minimum amount of data in bytes that gets
transferred from memory to cache
level: the cache hierarchy in the multi-level cache configuration
number_of_sets: total number of sets in the cache, a set is a
collection of cache lines with the same cache index
physical_line_partition: number of physical cache line per cache tag
shared_cpu_list: the list of logical cpus sharing the cache
shared_cpu_map: logical cpu mask containing the list of cpus sharing
the cache
size: the total cache size in kB
type:
- Instruction: cache that only holds instructions
- Data: cache that only caches data
- Unified: cache that holds both data and instructions
ways_of_associativity: degree of freedom in placing a particular block
of memory in the cache
write_policy:
- WriteThrough: data is written to both the cache line
and to the block in the lower-level memory
- WriteBack: data is written only to the cache line and
the modified cache line is written to main
memory only when it is replaced
Fichiers ID:
What: /sys/devices/system/cpu/cpu*/cache/index*/id
Date: September 2016
Contact: Linux kernel mailing list <[email protected]>
Description: Cache id
The id provides a unique number for a specific instance of
a cache of a particular type. E.g. there may be a level
3 unified cache on each socket in a server and we may
assign them ids 0, 1, 2, ...
Note that id value can be non-contiguous. E.g. level 1
caches typically exist per core, but there may not be a
power of two cores on a socket, so these caches may be
numbered 0, 1, 2, 3, 4, 5, 8, 9, 10, ...
Je me demande pourquoi sur ma machine index0et les index1deux le font level1sur le noyau v4.15, c'est déroutant. Codage préventif à 0 indice? :-)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
1
@CiroSantilli 华 涌 低端 人口 六四 事件 法轮功, (avec le nom à ne pas prononcer), probablement index0 correspond à L1 avec typedonnées (cache de données L1) et index1 correspond à L1 avec typeinstruction (cache d'instructions L1). L'index2 est alors typeunifié et level2 (le cache L2 peut stocker à la fois des données et des instructions)
osgx
Ah oui! Je devrais être plus patient pour lire les documents :-)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
1
cpuid
Une autre option est le programme cpuid . Il utilise des CPUIDinstructions et ne nécessite pas de root. Il peut également fonctionner via le cpuidmodule du noyau Linux.
Réponses:
Si vous avez
lshw
installé:Exemple
la source
lshw
(exécuté avec l'autorisation root bien sûr) ne m'a pas donné d'informations sur le cache. maislscpu
et lesdmidecode
outils m'ont donné les résultats.lscpu
Si vous ne vous souciez que des tailles, essayez
lscpu
deutil-linux
.Exemple
x86info
Il devrait également y avoir un package / commande appelé x86info. En supposant que vous ayez i386 / x86_64, vous
x86info -c
devriez fournir des informations plus détaillées sur les caches.Exemple
la source
Vous pouvez essayer cette commande.
Exemple
Pour voir la RAM, ajoutez simplement le commutateur supplémentaire
-t memory
.Les références
la source
getconf
donne:
Ou pour un seul niveau:
La chose intéressante à propos de cette interface est qu'elle est juste un wrapper autour de la
sysconf
fonction POSIX C (les arguments de cache sont des extensions non-POSIX), et donc elle peut é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.c
fait: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 des programmeurs ARMv8 11.6 « Détection de cache» pour un aperçu.
la source
Il existe des fichiers spéciaux exportés vers le système de
sysfs
fichiers Linux / sys depuis 2008:https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-system-cpu
Fichiers ID:
la source
index0
et lesindex1
deux le fontlevel
1
sur le noyau v4.15, c'est déroutant. Codage préventif à 0 indice? :-)type
données (cache de données L1) et index1 correspond à L1 avectype
instruction (cache d'instructions L1). L'index2 est alorstype
unifié etlevel
2 (le cache L2 peut stocker à la fois des données et des instructions)cpuid
Une autre option est le programme cpuid . Il utilise des
CPUID
instructions et ne nécessite pas de root. Il peut également fonctionner via lecpuid
module du noyau Linux.Notez que sur les CPU grand public communs, les caches L1 et L2 sont par cœur, tandis que le cache L3 est partagé par tous les cœurs.
la source
si vous ne voulez que le L3, cela
grep "cache size" < /proc/cpuinfo
devrait suffire.Cependant, comme la façon dont le cache L3 est partagé entre les arcs de processeur diffère, sa valeur peut nécessiter une normalisation
la source