Пожалуйста, включите вещество для ответов. Не просто упоминайте названия команд, но покажите их результаты.
SLM
lshw(конечно, запускался с правами суперпользователя) не дал мне информацию о кеше. но lscpuи dmidecodeинструменты дали мне результаты.
Шнд
19
lscpu
Если вы заботитесь только о размерах, попробуйте lscpuот util-linux.
пример
$ 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
Там также должен быть пакет / команда с именем x86info. Предполагая, что у вас i386 / x86_64, x86info -cследует предоставить более подробную информацию о кешах.
пример
$ x86info -c
x86info v1.30. Dave Jones 2001-2011
Feedback to <davej@redhat.com>.
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
Крутая вещь в этом интерфейсе состоит в том, что он является просто оболочкой для функции POSIX sysconfC (аргументы кэша не являются расширениями POSIX), поэтому его можно использовать и из кода C.
Проверено в Ubuntu 16.04.
инструкция CPUID x86
Инструкция CPUID x86 также предлагает информацию о кеше, и доступ к ней может быть получен непосредственно пользователем: https://en.wikipedia.org/wiki/CPUID
glibc, похоже, использует этот метод для x86. Я не подтвердил пошаговую отладку / трассировку инструкций, но источник для 2.28 sysdeps/x86/cacheinfo.cделает это:
ARM также имеет механизм, определяемый архитектурой для определения размеров кэша через регистры, такие как регистр идентификатора размера кэша (CCSIDR), см. Руководство для программистов ARMv8 11.6 «Обнаружение кэша».
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
Идентификационные файлы:
What: /sys/devices/system/cpu/cpu*/cache/index*/id
Date: September 2016
Contact: Linux kernel mailing list <linux-kernel@vger.kernel.org>
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, ...
Интересно , почему на моей машине index0и index1как делать level1на ядре v4.15, это сбивает с толку. 0-индексное превентивное кодирование? :-)
Сиро Сантилли 事件 18 中心 法轮功 六四 事件
1
@CiroSantilli (涌 低端 人口 六四 事件 法轮功 (с именем, которое не произносить), вероятно, index0 - это примерно L1 с typeданными (кэш данных L1), а index1 - это L1 с typeинструкциями (кэш инструкций L1). Тогда index2 имеет typeUnified и level2 (кэш L2, может хранить как данные, так и инструкции)
osgx
о да! Я должен быть более терпеливым, чтобы читать документы :-)
Сиро Сантилли 新疆 改造 中心 法轮功 六四 事件
1
CPUID
Другой вариант - программа cpuid . Он использует CPUIDинструкции и не требует рута. Это также может работать через cpuidмодуль ядра Linux.
Ответы:
Если вы
lshw
установили:пример
источник
lshw
(конечно, запускался с правами суперпользователя) не дал мне информацию о кеше. ноlscpu
иdmidecode
инструменты дали мне результаты.lscpu
Если вы заботитесь только о размерах, попробуйте
lscpu
отutil-linux
.пример
x86info
Там также должен быть пакет / команда с именем x86info. Предполагая, что у вас i386 / x86_64,
x86info -c
следует предоставить более подробную информацию о кешах.пример
источник
Вы можете попробовать эту команду.
пример
Чтобы увидеть оперативную память, просто добавьте дополнительный переключатель
-t memory
.Ссылки
источник
getconf
дает:
Или для одного уровня:
Крутая вещь в этом интерфейсе состоит в том, что он является просто оболочкой для функции POSIX
sysconf
C (аргументы кэша не являются расширениями POSIX), поэтому его можно использовать и из кода C.Проверено в Ubuntu 16.04.
инструкция CPUID x86
Инструкция CPUID x86 также предлагает информацию о кеше, и доступ к ней может быть получен непосредственно пользователем: https://en.wikipedia.org/wiki/CPUID
glibc, похоже, использует этот метод для x86. Я не подтвердил пошаговую отладку / трассировку инструкций, но источник для 2.28
sysdeps/x86/cacheinfo.c
делает это:TODO создать минимальный пример C, ленивый сейчас, по адресу: /programming/14283171/how-to-receive-l1-l2-l3-cache-size-using-cpuid-instruction-in-x86
ARM также имеет механизм, определяемый архитектурой для определения размеров кэша через регистры, такие как регистр идентификатора размера кэша (CCSIDR), см. Руководство для программистов ARMv8 11.6 «Обнаружение кэша».
источник
Существуют специальные файлы, экспортируемые в
sysfs
файловую систему Linux / sys с 2008 года:https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-system-cpu
Идентификационные файлы:
источник
index0
иindex1
как делатьlevel
1
на ядре v4.15, это сбивает с толку. 0-индексное превентивное кодирование? :-)type
данными (кэш данных L1), а index1 - это L1 сtype
инструкциями (кэш инструкций L1). Тогда index2 имеетtype
Unified иlevel
2 (кэш L2, может хранить как данные, так и инструкции)CPUID
Другой вариант - программа cpuid . Он использует
CPUID
инструкции и не требует рута. Это также может работать черезcpuid
модуль ядра Linux.Обратите внимание, что на обычных потребительских ЦП кэш-память L1 и L2 приходится на ядро, а кэш-память L3 используется всеми ядрами.
источник
если вы хотите только L3, то этого
grep "cache size" < /proc/cpuinfo
должно быть достаточно.Однако, поскольку способ кэширования L3 совместно используется архивами процессоров, он может нуждаться в нормализации.
источник