Что означают события персидского кеша?
Я пытаюсь понять, почему модифицированная программа на C работает быстрее, чем ее не модифицированная часть счетчика (я добавляю очень немного строк кода для выполнения дополнительной работы). В этом контексте я подозреваю, что "кеш-эффекты" являются основным объяснением (кешем команд). Таким образом, я получаю инструмент perf
(https://perf.wiki.kernel.org/index.php/Main_Page), но, к сожалению, я не могу понять значение его результатов в отношении промахов в кэше.
Предусмотрено несколько событий о кеше:
cache-references [Hardware event]
cache-misses [Hardware event]
L1-dcache-loads [Hardware cache event]
L1-dcache-load-misses [Hardware cache event]
L1-dcache-stores [Hardware cache event]
L1-dcache-store-misses [Hardware cache event]
L1-dcache-prefetches [Hardware cache event]
L1-dcache-prefetch-misses [Hardware cache event]
L1-icache-loads [Hardware cache event]
L1-icache-load-misses [Hardware cache event]
L1-icache-prefetches [Hardware cache event]
L1-icache-prefetch-misses [Hardware cache event]
LLC-loads [Hardware cache event]
LLC-load-misses [Hardware cache event]
LLC-stores [Hardware cache event]
LLC-store-misses [Hardware cache event]
LLC-prefetches [Hardware cache event]
LLC-prefetch-misses [Hardware cache event]
dTLB-loads [Hardware cache event]
dTLB-load-misses [Hardware cache event]
dTLB-stores [Hardware cache event]
dTLB-store-misses [Hardware cache event]
dTLB-prefetches [Hardware cache event]
dTLB-prefetch-misses [Hardware cache event]
iTLB-loads [Hardware cache event]
iTLB-load-misses [Hardware cache event]
branch-loads [Hardware cache event]
branch-load-misses [Hardware cache event]
node-loads [Hardware cache event]
node-load-misses [Hardware cache event]
node-stores [Hardware cache event]
node-store-misses [Hardware cache event]
node-prefetches [Hardware cache event]
node-prefetch-misses [Hardware cache event]
Где я могу найти объяснение об этих полях? Событие с кэшированием всегда меньше, чем другие события. Что измеряет это событие?
Как интерпретировать пропуски L7-icache-нагрузок 26760 для ls против 5708 промахов в следующем примере?
perf stat -e L1-icache-load-misses ls
caches caches~ out
Performance counter stats for 'ls':
26,760 L1-icache-load-misses
0.002816690 seconds time elapsed
perf stat -e cache-misses ls
caches caches~ out
Performance counter stats for 'ls':
5,708 cache-misses
0.002822122 seconds time elapsed
Ответы
Ответ 1
Кажется, что событие cache-misses
представляет собой сумму всех других промахов в кэше (L1-dcache-load-misses
и т.д.). На самом деле это не так.
Событие cache-misses
представляет собой номер доступа к памяти, который не может обслуживаться каким-либо кешем.
Я признаю, что перфекционная документация не самая лучшая.
Однако, вы можете много узнать об этом, читая (предполагая, что вы уже хорошо знаете, как работает процессор и блок мониторинга производительности, это явно не курс компьютерной архитектуры), документ perf_event_open ( ):
http://web.eece.maine.edu/~vweaver/projects/perf_events/perf_event_open.html
Например, прочитав его, вы увидите, что событие cache-misses
, показанное первичным списком, соответствует PERF_COUNT_HW_CACHE_MISSES
Ответ 2
Некоторые ответы:
-
L1
- это кеш уровня 1, самый маленький и самый быстрый. LLC
, с другой стороны, относится к последнему уровню иерархии кэша , тем самым обозначая самый большой, но самый медленный кэш.
-
i
vs. d
выделяет кеш команд из кэша данных. Только L1 разделяется таким образом, другие кеши разделяются между данными и инструкциями.
-
TLB
относится к трансляции lookaside buffer, кэш, используемый при сопоставлении виртуальных адресов с физическими.
- Различные счетчики TLB в зависимости от того, относится ли указанный адрес к инструкции или к некоторым данным.
- Для доступа к данным разные счетчики хранятся в зависимости от того, было ли прочитано, записано или предварительно выбрано заданное место памяти (то есть получено для чтения через некоторое время).
- Количество промахов указывает, как часто доступный элемент данных был доступен, но не присутствовал в кеше.
Ответ 3
Из-за ограничения репутации комментария я не могу ответить в комментарии Mvg.
Согласно справочнику, аппаратное событие относится к тем событиям, которые могут быть отображены непосредственно в evnet PMU. Но события аппаратного кэша относятся к некоторым именам аппаратных событий, предоставляемым perf, которые могут быть сопоставлены с фактическими событиями, предоставляемыми процессором.