Как я просматриваю размер своего кэша ЦП с помощью командной строки?
Я хочу просмотреть информацию о L1, L2 и кэше L3.
Кроме того, это было бы возможно к ouput только информация о кэше, так, чтобы вся другая информация была отфильтрована?
lscpu
обеспечит информацию, которую Вы ищете.
lscpu | grep "cache"
для отфильтровывания только информации о кэше. Это приведет к чему-то как:
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 3072K
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 sysconf
C (аргументами кэша являются расширения неPOSIX), и таким образом, это может использоваться из кода C также.
Протестированный в 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
AR M также имеет определенный архитектурой механизм, чтобы найти размеры кэша через регистры, такие как идентификационный Регистр Размера кэша (CCSIDR), видеть Руководство 11.6 Программистов ARMv8 "Исследование кэша" для обзора.
Ниже приведена команда для отображения размера всех существующих папок, связанных с кешем.
for i in $(find / -iname '*cache*'); do du -sh $i ; done 2> /dev/null | grep 'G\|M\|K\|B'| nl