Por favor incluya sustancia a las respuestas. No solo mencione los nombres de los comandos, sino que muestre su salida.
slm
lshw(ejecutado con permiso de root, por supuesto) no me dio información de caché. pero lscpuy las dmidecodeherramientas me dieron los resultados.
Shnd
19
lscpu
Si solo te importan los tamaños, prueba lscpucon util-linux.
Ejemplo
$ 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
También debería haber un paquete / comando llamado x86info. Suponiendo que tiene i386 / x86_64, x86info -cdebería proporcionar información más detallada sobre los cachés.
Ejemplo
$ 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
Lo bueno de esta interfaz es que es solo un contenedor alrededor de la sysconffunción POSIX C (los argumentos de caché son extensiones que no son POSIX), por lo que también se puede usar desde el código C.
Probado en Ubuntu 16.04.
instrucción x86 CPUID
La instrucción CPUID x86 también ofrece información de caché, y se puede acceder directamente por userland: https://en.wikipedia.org/wiki/CPUID
glibc parece usar ese método para x86. No he confirmado por depuración por pasos / seguimiento de instrucciones, pero la fuente de 2.28 sysdeps/x86/cacheinfo.chace eso:
ARM también tiene un mecanismo definido por la arquitectura para encontrar tamaños de caché a través de registros como el Registro de ID de tamaño de caché (CCSIDR), consulte el Manual de programadores de ARMv8 11.6 "Descubrimiento de caché" para obtener una descripción general.
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
Archivos de identificación:
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, ...
Me pregunto por qué en mi máquina index0y en index1ambos level1en el kernel v4.15, es confuso. Codificación preventiva de índice 0? :-)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
1
@CiroSantilli 华 涌 低端 人口 六四 事件 法轮功, (con el nombre para no pronunciar), probablemente index0 se trata de L1 con typeDatos (caché de datos L1) e index1 se trata de L1 con typeInstrucción (caché de instrucciones L1). Entonces index2 es de typeUnified y levelde 2 (caché L2, puede almacenar datos e instrucciones)
osgx
¡Ah, sí! Debería ser más paciente para leer documentos :-)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
1
cpuid
Otra opción es el programa cpuid . Utiliza CPUIDinstrucciones y no requiere root. También puede funcionar a través del cpuidmódulo del kernel de Linux.
Tenga en cuenta que en las CPU de consumo comunes, las memorias caché L1 y L2 son por núcleo, mientras que la memoria caché L3 es compartida por todos los núcleos.
Respuestas:
Si ha
lshw
instalado:Ejemplo
fuente
lshw
(ejecutado con permiso de root, por supuesto) no me dio información de caché. perolscpu
y lasdmidecode
herramientas me dieron los resultados.lscpu
Si solo te importan los tamaños, prueba
lscpu
conutil-linux
.Ejemplo
x86info
También debería haber un paquete / comando llamado x86info. Suponiendo que tiene i386 / x86_64,
x86info -c
debería proporcionar información más detallada sobre los cachés.Ejemplo
fuente
Podrías probar este comando.
Ejemplo
Para ver la RAM, simplemente agregue el interruptor adicional
-t memory
.Referencias
fuente
getconf
da:
O para un solo nivel:
Lo bueno de esta interfaz es que es solo un contenedor alrededor de la
sysconf
función POSIX C (los argumentos de caché son extensiones que no son POSIX), por lo que también se puede usar desde el código C.Probado en Ubuntu 16.04.
instrucción x86 CPUID
La instrucción CPUID x86 también ofrece información de caché, y se puede acceder directamente por userland: https://en.wikipedia.org/wiki/CPUID
glibc parece usar ese método para x86. No he confirmado por depuración por pasos / seguimiento de instrucciones, pero la fuente de 2.28
sysdeps/x86/cacheinfo.c
hace eso:TODO crea un ejemplo C mínimo, perezoso ahora, preguntado en: /programming/14283171/how-to-receive-l1-l2-l3-cache-size-using-cpuid-instruction-in-x86
ARM también tiene un mecanismo definido por la arquitectura para encontrar tamaños de caché a través de registros como el Registro de ID de tamaño de caché (CCSIDR), consulte el Manual de programadores de ARMv8 11.6 "Descubrimiento de caché" para obtener una descripción general.
fuente
Hay archivos especiales exportados a / sys
sysfs
Linux filesystem desde 2008:https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-system-cpu
Archivos de identificación:
fuente
index0
y enindex1
amboslevel
1
en el kernel v4.15, es confuso. Codificación preventiva de índice 0? :-)type
Datos (caché de datos L1) e index1 se trata de L1 contype
Instrucción (caché de instrucciones L1). Entonces index2 es detype
Unified ylevel
de 2 (caché L2, puede almacenar datos e instrucciones)cpuid
Otra opción es el programa cpuid . Utiliza
CPUID
instrucciones y no requiere root. También puede funcionar a través delcpuid
módulo del kernel de Linux.Tenga en cuenta que en las CPU de consumo comunes, las memorias caché L1 y L2 son por núcleo, mientras que la memoria caché L3 es compartida por todos los núcleos.
fuente
si solo quieres el L3, entonces
grep "cache size" < /proc/cpuinfo
debería ser suficiente.Sin embargo, dado que la forma en que el caché L3 se comparte entre los archivos de la CPU es diferente, su valor puede necesitar normalización
fuente