Посмотреть размер кэша процессора через командную строку?

8

Как посмотреть размер кеша моего процессора с помощью командной строки?

Я хочу просмотреть информацию о кэш-памяти L1, L2 и L3.

Кроме того, можно ли выводить только информацию в кэш, чтобы вся другая информация отфильтровывалась?

Скажи мне почему
источник

Ответы:

11

lscpu предоставит информацию, которую вы ищете.

lscpu | grep "cache"отфильтровывать только информацию кеша. Это приведет к чему-то вроде:

L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              3072K
Э.Ф. Нийбоер
источник
3

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), и поэтому его можно использовать и из кода C.

Проверено в Ubuntu 16.04.

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

Инструкция 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 «Обнаружение кэша».

Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
источник
-1

Найдите команду ниже, чтобы перечислить размер всех существующих папок, связанных с кэшем.

 for i in $(find /  -iname '*cache*'); do du -sh $i ; done 2> /dev/null | grep 'G\|M\|K\|B'| nl
Мистер линукс
источник