Чи є спосіб дізнатися розмір кешу L1, L2, L3 та оперативної пам’яті в ubuntu?


Відповіді:


12

Інформація про процесор

Використовуйте команду lscpu :

$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                2
On-line CPU(s) list:   0,1
Thread(s) per core:    1
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            15
Model:                 6
Stepping:              5
CPU MHz:               2400.000
BogoMIPS:              6000.33
L1d cache:             16K
L2 cache:              2048K
NUMA node0 CPU(s):     0,1

Інформація, що перерахована, є на центральному процесорі.

Інформація про пам'ять

Існує вільна команда (-h дає результати в читаній людині формі, тобто GiB, а не байти):

$ free -h
             total       used       free     shared    buffers     cached
Mem:          2.0G       390M       1.6G        10M        15M       160M
-/+ buffers/cache:       215M       1.7G
Swap:         2.0G         0B       2.0G

3

Це дасть вам інформацію про кеш. Позначення сокета повідомить вам, про який кеш йде мова в розділі.

sudo dmidecode -t cache

Для оперативної пам’яті слід переглянути кілька речей, але пам’ятка повинна це робити. Я використовував греп тут, щоб показати лише тотальне / вільне, але ви можете використовувати менше або кішку, щоб побачити все. Він показує набагато більше інформації про розмір та використання пам’яті, ніж просто розмір.

grep Mem /proc/meminfo

1

На підставі відповіді jkabrams з наступною командою та фільтруванням "кеша" з неї кожен елемент кешу, який ви показали.

lscpu | grep cache

і ОЗУ:

free -h

Для отримання додаткової інформації про оперативну пам'ять, процеси та інше ви можете використовувати htop на своєму дистрибутиві. Встановіть його так на ubuntu.

sudo apt-get install htop

0

sysfs

for d in /sys/devices/system/cpu/cpu0/cache/index*;
  do tail -c+1 $d/{level,type,size}
  echo
done

Дає:

==> /sys/devices/system/cpu/cpu0/cache/index0/level <==
1

==> /sys/devices/system/cpu/cpu0/cache/index0/type <==
Data

==> /sys/devices/system/cpu/cpu0/cache/index0/size <==
32K

==> /sys/devices/system/cpu/cpu0/cache/index1/level <==
1

==> /sys/devices/system/cpu/cpu0/cache/index1/type <==
Instruction

==> /sys/devices/system/cpu/cpu0/cache/index1/size <==
32K

==> /sys/devices/system/cpu/cpu0/cache/index2/level <==
2

==> /sys/devices/system/cpu/cpu0/cache/index2/type <==
Unified

==> /sys/devices/system/cpu/cpu0/cache/index2/size <==
256K

==> /sys/devices/system/cpu/cpu0/cache/index3/level <==
3

==> /sys/devices/system/cpu/cpu0/cache/index3/type <==
Unified

==> /sys/devices/system/cpu/cpu0/cache/index3/size <==
8192K

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, ледачий зараз, запитуйте на: /programming/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.