Полную картину иерархии кэша можно найти программным способом, открыв файлы в /sys
(sysfs).
Каждый «поток» или «логический процессор» представлен подкаталогом в /sys/devices/system/cpu/
. В этом каталоге вы найдете каталог кеша. Например, информацию о кеше для первого логического процессора можно найти здесь:
$ ls /sys/devices/system/cpu/cpu0/cache/
index0
index1
index2
index3
power
uevent
Каждый объект кеша, связанный с этим логическим процессором, представлен каталогом index[0-9]*
. Число после индекса не представляет уровень. Один и тот же объект кэша может быть указан несколько раз под разными логическими процессорами. В этих каталогах вы можете найти все свойства объекта кэша (уровень, наборы, размер строки и т. Д. c).
$ ls /sys/devices/system/cpu/cpu0/cache/index0
coherency_line_size
level
number_of_sets
physical_line_partition
power
shared_cpu_list
shared_cpu_map
size
type
uevent
ways_of_associativity
Полную документацию можно найти здесь .
Самое главное, чтобы получить желаемый результат, вам нужно проверить shared_cpu_list
:
$ cat /sys/devices/system/cpu/cpu0/cache/index0/shared_cpu_list
0,28
Это покажет вам, какие логические процессоры совместно используют эту сущность кэша. Осматривая все объекты (/sys/devices/system/cpu/cpu*/cache/index*/
) и удаляя дубликаты с помощью shared_cpu_list
, вы можете программным образом получить доступ ко всем требуемым данным.
Обратите внимание, что ваш гипервизор не обязан передавать точную информацию. Это покажет вам только иерархию кэша в том виде, в каком ее видит гостевое ядро.