Podaj treść odpowiedzi. Nie wymieniaj tylko nazw poleceń, ale pokaż ich wyniki.
slm
lshw(działał oczywiście za zgodą roota) nie podał mi informacji o pamięci podręcznej. ale lscpui dmidecodenarzędzia dał mi wyniki.
Shnd,
19
lscpu
Jeśli zależy Ci tylko na rozmiarach, spróbuj lscpuod util-linux.
Przykład
$ 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
Powinien również istnieć pakiet / komenda o nazwie x86info. Zakładając, że masz i386 / x86_64, x86info -cpowinien zawierać bardziej szczegółowe informacje na temat pamięci podręcznych.
Przykład
$ 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
Fajną rzeczą w tym interfejsie jest to, że jest on tylko opakowaniem wokół funkcji POSIX sysconfC.
Testowane w Ubuntu 16.04.
Instrukcja CPUID x86
Instrukcja CPUID x86 oferuje również informacje o pamięci podręcznej i może być bezpośrednio dostępna dla użytkownika: https://en.wikipedia.org/wiki/CPUID
glibc wydaje się używać tej metody dla x86. Nie potwierdziłem debugowania krokowego / śledzenia instrukcji, ale źródło 2.28 sysdeps/x86/cacheinfo.crobi to:
ARM ma również zdefiniowany przez architekturę mechanizm znajdowania rozmiarów pamięci podręcznej przez rejestry, takie jak Rejestr ID rozmiaru pamięci podręcznej (CCSIDR), zobacz przegląd ARMv8 dla programistów 11.6 „ Wykrywanie pamięci podręcznej”.
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
Pliki identyfikacyjne:
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, ...
Zastanawiam się, dlaczego na mojej maszynie index0i index1obu level1na jądrze v4.15 jest to mylące. Kodowanie zapobiegawcze 0-indeksowe? :-)
Ciro Santilli 27 改造 中心 法轮功 六四 事件
1
@CiroSantilli 华 涌 低端 人口 六四 事件 法轮功, (z nazwą, aby nie wymawiać), prawdopodobnie indeks0 dotyczy L1 z typedanymi (pamięć podręczna danych L1), a indeks1 dotyczy L1 z typeinstrukcją (pamięć podręczna instrukcji L1). Następnie index2 jest typeUnified i level2 (pamięć podręczna L2, może przechowywać zarówno dane, jak i instrukcje)
osgx
o tak! Powinienem bardziej cierpliwie czytać dokumenty :-)
Ciro Santilli 27 改造 中心 法轮功 六四 事件
1
cpuid
Inną opcją jest program cpuid . Używa CPUIDinstrukcji i nie wymaga rootowania. Może również działać przez cpuidmoduł jądra Linux.
Należy pamiętać, że na popularnych procesorach konsumenckich pamięci podręczne L1 i L2 są na rdzeń, a pamięć podręczna L3 jest współdzielona przez wszystkie rdzenie.
Odpowiedzi:
Jeśli
lshw
zainstalowałeś:Przykład
źródło
lshw
(działał oczywiście za zgodą roota) nie podał mi informacji o pamięci podręcznej. alelscpu
idmidecode
narzędzia dał mi wyniki.lscpu
Jeśli zależy Ci tylko na rozmiarach, spróbuj
lscpu
odutil-linux
.Przykład
x86info
Powinien również istnieć pakiet / komenda o nazwie x86info. Zakładając, że masz i386 / x86_64,
x86info -c
powinien zawierać bardziej szczegółowe informacje na temat pamięci podręcznych.Przykład
źródło
Możesz spróbować tego polecenia.
Przykład
Aby zobaczyć pamięć RAM, po prostu dodaj dodatkowy przełącznik
-t memory
.Bibliografia
źródło
getconf
daje:
Lub dla jednego poziomu:
Fajną rzeczą w tym interfejsie jest to, że jest on tylko opakowaniem wokół funkcji POSIX
sysconf
C.Testowane w Ubuntu 16.04.
Instrukcja CPUID x86
Instrukcja CPUID x86 oferuje również informacje o pamięci podręcznej i może być bezpośrednio dostępna dla użytkownika: https://en.wikipedia.org/wiki/CPUID
glibc wydaje się używać tej metody dla x86. Nie potwierdziłem debugowania krokowego / śledzenia instrukcji, ale źródło 2.28
sysdeps/x86/cacheinfo.c
robi to:TODO stwórz minimalny przykład C, leniwy teraz, zadany na stronie : /programming/14283171/how-to-receive-l1-l2-l3-cache-size-using-cpuid-instruction-in-x86
ARM ma również zdefiniowany przez architekturę mechanizm znajdowania rozmiarów pamięci podręcznej przez rejestry, takie jak Rejestr ID rozmiaru pamięci podręcznej (CCSIDR), zobacz przegląd ARMv8 dla programistów 11.6 „ Wykrywanie pamięci podręcznej”.
źródło
Istnieją specjalne pliki eksportowane do
sysfs
systemu plików / sys Linux od 2008 roku:https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-system-cpu
Pliki identyfikacyjne:
źródło
index0
iindex1
obulevel
1
na jądrze v4.15 jest to mylące. Kodowanie zapobiegawcze 0-indeksowe? :-)type
danymi (pamięć podręczna danych L1), a indeks1 dotyczy L1 ztype
instrukcją (pamięć podręczna instrukcji L1). Następnie index2 jesttype
Unified ilevel
2 (pamięć podręczna L2, może przechowywać zarówno dane, jak i instrukcje)cpuid
Inną opcją jest program cpuid . Używa
CPUID
instrukcji i nie wymaga rootowania. Może również działać przezcpuid
moduł jądra Linux.Należy pamiętać, że na popularnych procesorach konsumenckich pamięci podręczne L1 i L2 są na rdzeń, a pamięć podręczna L3 jest współdzielona przez wszystkie rdzenie.
źródło
jeśli chcesz tylko L3, to
grep "cache size" < /proc/cpuinfo
powinno wystarczyć.Ponieważ jednak sposób, w jaki pamięć podręczna L3 jest współużytkowana przez archiwa procesora, różni się, jej wartość może wymagać normalizacji
źródło