2

Что означают файлы в папке /sys/devices/system/cpu/cpu0/cache/index0? Я вижу эти файлы в папке:

coherency_line_size  number_of_sets           shared_cpu_list  size  ways_of_associativity
level                physical_line_partition  shared_cpu_map   type
  1. В чем их смысл?
  2. Как я могу узнать, является ли кэш L2 общим или нет. Если это так, как я могу узнать, с каким процессором он делится?
  3. А в чем смысл index0 index1 .. index3. Представляет ли index3 кэш L3, а index2 - кэш L2?

В /sys/devices/system/cpu/cpu0/cache/index3 есть следующие файлы:

cache_disable_0      level                    shared_cpu_list  subcaches
cache_disable_1      number_of_sets           shared_cpu_map   type
coherency_line_size  physical_line_partition  size             ways_of_associativity

Почему я не вижу вложенные кэши в index1 или index2? И shared_cpu_list показывает 0_7. Означает ли это, что этот кеш используется совместно с cpu0 для cpu7?

2 ответа2

5

Значения чисел в index0, index1 и т.д. Не обязательно соответствуют уровням; они просто пронумерованы. Если вы хотите узнать, что это за кеш уровня, посмотрите на файл уровня. 1 означает L1, 2 означает L2, 3 означает L3. Они, как правило, пронумерованы от самого низкого уровня до самого высокого, но я не знаю, есть ли какое-либо требование этого.

Чтобы узнать, является ли L2 общим, сначала определите, какой кеш является L2. Затем посмотрите на shared_cpu_list для этого кэша. Это будет startnumber-endnumber совместного использования. (Я не знаю, как это выглядит, когда к нему нет общего доступа, потому что на моем компьютере есть только общие кэши, но я бы предположил, что это просто одно число или что-то вроде «0-0».) Например, на моем четырехъядерном, многопоточном Sandy Bridge, если я смотрю на shared_cpu_list L2, я вижу «2-3», который говорит мне, что он используется совместно с cpu2 (который фактически является тем же физическим ЦП из-за гиперпоточности, так что на самом деле это не общий кеш).

Для моего кэша L3, из которых только один для всех кэшей, я вижу «0-7», поэтому я предполагаю, что это означает, что он используется для всех процессоров с 0 по 7. Я никогда не видел подчеркивания в одном из этих файлов.

Несколько других значений:

  • type- "Instruction" означает, что он используется только для кэширования инструкций (кода), "Data" означает, что он используется только для хранения данных (переменных и т. д.), а "Unified" означает, что такого разделения нет, и он может хранить и то и другое.
  • coherency_line_size - сколько байтов находится в строке кэша, которая является единицей, в которой память считывается и записывается в / из основной памяти.
  • way_of_associativity-сколько различных слотов кеша для данной строки может быть отображено. Чем выше, тем лучше (это означает, что у вас меньше шансов на то, что у вас есть рабочий набор, который меньше кеша, но не может одновременно находиться в кеше, потому что большое количество данных хочет находиться в одних и тех же строках кеша), но его трудно реализовать, особенно в низкоуровневых кешах, которые должны быть быстрее. 8 довольно часто встречается для L1.
0

На моей машине index0 имеет тип Data, а index1 имеет тип Instruction, что подразумевает, что кэш L1 для этих двух вещей различен, тогда как они совместно используют кэш L2 и L3.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .