Як знайти розмір кешу L2 в Linux?


Відповіді:



27

EDIT 3 : Хе, вибачте, просто зробіть, sudo dmidecode -t cacheі він покаже інформацію про кеш вашого CPU. Щоб сказати, який розділ ви шукаєте (L1 або L2), подивіться на Configuration:рядок. Ти хочеш Configuration: Enabled, Not Socketed, Level 2.


17

Ви повинні перевірити наступний інструмент . Він дає найточнішу інформацію з усіх інструментів, які я спробував. Це вихід версії командного рядка:

~$ lstopo-no-graphics
Machine (7984MB)
  Socket L#0
    L2 L#0 (4096KB)
      L1d L#0 (32KB) + L1i L#0 (32KB) + Core L#0 + PU L#0 (P#0)
      L1d L#1 (32KB) + L1i L#1 (32KB) + Core L#1 + PU L#1 (P#1)
    L2 L#1 (4096KB)
      L1d L#2 (32KB) + L1i L#2 (32KB) + Core L#2 + PU L#2 (P#2)
      L1d L#3 (32KB) + L1i L#3 (32KB) + Core L#3 + PU L#3 (P#3)

А це графічний інтерфейс:введіть тут опис зображення


9

Просто використовуйте: lscpu

Вибірка зразка:

$ 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:    1
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 42
Stepping:              7
CPU MHz:               3401.000
BogoMIPS:              6784.57
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              8192K
NUMA node0 CPU(s):     0-3

lscpuне є точним для деяких процесорів з екзотичною конфігурацією. Наприклад, CPU з моєї відповіді дає наступне (пропущено деяку інформацію): сімейство процесорів: 6 Модель: 15 Крок: 11 МГц процесора: 1866.742 BogoMIPS: 3733.48 Віртуалізація: VT-x L1d кеш: 32K кеш L1i: 32K L2 кеш: 4096K NUMA node0 CPU (s): 0-3 Процесором є Xeon L5320 з 8MB L2 всього.
zloster

5

getconf

getconf -a | grep CACHE

дає:

LEVEL1_ICACHE_SIZE                 32768
LEVEL1_ICACHE_ASSOC                8
LEVEL1_ICACHE_LINESIZE             64
LEVEL1_DCACHE_SIZE                 32768
LEVEL1_DCACHE_ASSOC                8
LEVEL1_DCACHE_LINESIZE             64
LEVEL2_CACHE_SIZE                  262144
LEVEL2_CACHE_ASSOC                 8
LEVEL2_CACHE_LINESIZE              64
LEVEL3_CACHE_SIZE                  20971520
LEVEL3_CACHE_ASSOC                 20
LEVEL3_CACHE_LINESIZE              64
LEVEL4_CACHE_SIZE                  0
LEVEL4_CACHE_ASSOC                 0
LEVEL4_CACHE_LINESIZE              0

Або для одного рівня:

getconf LEVEL2_CACHE_SIZE

Класна річ у цьому інтерфейсі полягає в тому, що він є лише обгорткою навколо функції POSIX sysconfC (аргументи кеша - це не-POSIX розширення), і тому його можна використовувати і з коду С.

Тестовано в Ubuntu 16.04.

x86 CPUID інструкція

Інструкція CPUID x86 також пропонує інформацію про кеш, і до неї можна отримати прямий доступ у користувальницькій країні: https://en.wikipedia.org/wiki/CPUID

glibc, здається, використовує цей метод для x86. Я не підтвердив крок налагодження / відстеження інструкцій, але джерело для 2,28 sysdeps/x86/cacheinfo.cробить це:

__cpuid (2, eax, ebx, ecx, edx);

TODO створити мінімальний приклад C, ледачий зараз, запитайте на: https://stackoverflow.com/questions/14283171/how-to-receive-l1-l2-l3-cache-size-using-cpuid-instruction-in-x86

ARM також має механізм, визначений архітектурою для пошуку розмірів кешу через регістри, такі як регістр ідентифікатора розміру кеша (CCSIDR), див. Посібник програмістів ARMv8 11.6 "Виявлення кешу" для огляду.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.