Por favor, inclua a substância nas respostas. Não mencione apenas nomes de comandos, mas mostre sua saída.
slm
lshw(funcionou com permissão de root, é claro) não me forneceu informações de cache. mas lscpue dmidecodeferramentas me deram os resultados.
Shnd 18/03/16
19
lscpu
Se você só se preocupa com os tamanhos, tente lscpupartir util-linux.
Exemplo
$ 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
Também deve haver um pacote / comando chamado x86info. Supondo que você tenha o i386 / x86_64, x86info -cdeve fornecer informações mais detalhadas sobre caches.
Exemplo
$ 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
O interessante dessa interface é que ela é apenas um invólucro da sysconffunção POSIX C (argumentos de cache são extensões não POSIX) e, portanto, pode ser usada também a partir do código C.
O glibc parece usar esse método para x86. Não confirmei pela etapa depuração / rastreamento de instruções, mas a fonte da 2.28 sysdeps/x86/cacheinfo.cfaz isso:
O ARM também possui um mecanismo definido pela arquitetura para encontrar tamanhos de cache por meio de registradores como o CCSIDR (Registro de ID de Tamanho de Cache); consulte o Manual do Programador do ARMv8 11.6 "Descoberta de cache" para obter uma visão geral.
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
Arquivos de identificação:
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, ...
Eu me pergunto por que na minha máquina index0e index1ambos fazem level1no kernel v4.15, é confuso. Codificação preventiva de índice 0? :-)
Ciro Santilli escreveu:
11
@CiroSantilli (涌 pronounce 人口 六四 事件 法轮功, (com o nome para não pronunciar), provavelmente index0 é sobre L1 com typedados (cache de dados L1) e index1 é sobre L1 com typeinstrução (cache de instruções L1). Então index2 é de typeUnified e levelde 2 (cache L2, pode armazenar dados e instruções)
osgx
Ah sim! Eu deveria ser mais paciente para ler docs :-)
Ciro Santilli新疆改造中心法轮功六四事件
1
cpuid
Outra opção é o programa cpuid . Ele usa CPUIDinstruções e não requer raiz. Também pode funcionar através do cpuidmódulo do kernel Linux.
Respostas:
Se você
lshw
instalou:Exemplo
fonte
lshw
(funcionou com permissão de root, é claro) não me forneceu informações de cache. maslscpu
edmidecode
ferramentas me deram os resultados.lscpu
Se você só se preocupa com os tamanhos, tente
lscpu
partirutil-linux
.Exemplo
x86info
Também deve haver um pacote / comando chamado x86info. Supondo que você tenha o i386 / x86_64,
x86info -c
deve fornecer informações mais detalhadas sobre caches.Exemplo
fonte
Você pode tentar este comando.
Exemplo
Para ver a RAM, basta adicionar a opção adicional
-t memory
.Referências
fonte
getconf
dá:
Ou para um único nível:
O interessante dessa interface é que ela é apenas um invólucro da
sysconf
função POSIX C (argumentos de cache são extensões não POSIX) e, portanto, pode ser usada também a partir do código C.Testado no Ubuntu 16.04.
instrução CPUID x86
A instrução CPUID x86 também oferece informações de cache e pode ser acessada diretamente pelo usuário: https://en.wikipedia.org/wiki/CPUID
O glibc parece usar esse método para x86. Não confirmei pela etapa depuração / rastreamento de instruções, mas a fonte da 2.28
sysdeps/x86/cacheinfo.c
faz isso:TODO criar um exemplo C mínimo, preguiçoso agora, perguntou em: /programming/14283171/how-to-receive-l1-l2-l3-cache-size-using-cpuid-instruction-in-x86
O ARM também possui um mecanismo definido pela arquitetura para encontrar tamanhos de cache por meio de registradores como o CCSIDR (Registro de ID de Tamanho de Cache); consulte o Manual do Programador do ARMv8 11.6 "Descoberta de cache" para obter uma visão geral.
fonte
Existem arquivos especiais exportados para o sistema de
sysfs
arquivos Linux / sys desde 2008:https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-system-cpu
Arquivos de identificação:
fonte
index0
eindex1
ambos fazemlevel
1
no kernel v4.15, é confuso. Codificação preventiva de índice 0? :-)type
dados (cache de dados L1) e index1 é sobre L1 comtype
instrução (cache de instruções L1). Então index2 é detype
Unified elevel
de 2 (cache L2, pode armazenar dados e instruções)cpuid
Outra opção é o programa cpuid . Ele usa
CPUID
instruções e não requer raiz. Também pode funcionar através docpuid
módulo do kernel Linux.Observe que nas CPUs de consumidor comuns, os caches L1 e L2 são por núcleo, enquanto o cache L3 é compartilhado por todos os núcleos.
fonte
Se você quer apenas o L3,
grep "cache size" < /proc/cpuinfo
deve ser o suficiente.No entanto, como a maneira como o cache L3 é compartilhado entre os processadores da CPU é diferente, seu valor pode precisar de normalização
fonte