Событие L1-dcache-load-misses
сопоставляется с L1D.REPLACEMENT
на Sandy Bridge и более поздних микроархитектурах (или сопоставляется с аналогичным событием на более старых микроархитектурах). Это событие не поддерживает точную выборку, что означает, что выборка может указывать на инструкцию, которая не могла сгенерировать событие, для которого выполняется выборка. (Обратите внимание, что L1-dcache-load-misses
не поддерживается ни в одном текущем Atom.)
Начиная с Linux 3.11, запущенного на микроархитектуре Haswell + или Silvermont +, образцы могут быть захвачены с помощью указателей инструкций обработки событий, указав событие выборки, которое соответствует следующие два условия:
- Событие поддерживает точную выборку. Вы можете использовать, например, любое из событий, которые представляют собой прерывание памяти или удаление инструкции. Точные названия и смысл событий зависят от микроархитектуры. Обратитесь к Intel SDM Volume 3 для получения дополнительной информации. Нет события, которое поддерживает точную выборку и имеет такое же точное значение, как
L1D.REPLACEMENT
. На процессорах, поддерживающих расширенную PEBS, только часть событий PEBS поддерживает точную выборку. - Точный уровень выборки включен для события. В Linux perf это можно сделать, добавив «: pp» к имени события или кодировке необработанного события или «pp» после завершающего sla sh необработанного события, указанного в синтаксисе PMU. Например, в Haswell для события
mem_load_uops_retired.l1_miss:pp
можно указать Linux perf.
С таким событием, когда счетчик событий переполняется, оборудование PEBS ставится на охрану, что означает, что оно сейчас ищем как можно раньше возможность собрать точный образец. Когда есть хотя бы одна инструкция, которая вызовет событие в течение этого временного окна, оборудование PEBS в конечном итоге будет запущено одной из этих инструкций со смещением в сторону инструкций с высокой задержкой. Когда инструкция, запускающая PEBS, удаляется, процедура микрокода PEBS выполнит и захватит запись PEBS, которая, помимо прочего, содержит IP-адрес инструкции, запустившей PEBS (который отличается от архитектурного IP-адреса). Указатель инструкции (IP), используемый perf для отображения результатов, является этим IP-адресом события. (Я заметил, что может быть незначительное количество образцов, указывающих на инструкции, которые не могли вызвать событие.)
В более старых версиях mircroarchitecures (до Haswell и Silvermont) также поддерживается уровень точной выборки «pp» . PEBS на этих процессорах будет фиксировать только архитектурное событие, которое указывает на инструкцию stati c, которая следует сразу за инструкцией запуска PEBS в программном порядке. Linux perf по возможности использует LBR, который содержит пары исходных и целевых IP-адресов, чтобы определить, является ли этот захваченный IP-адрес целью перехода. Если это так, он добавит исходный IP-адрес в качестве IP-адреса события в образец записи.
Некоторые микроархитектуры поддерживают одно или несколько событий с лучшим распределением выборки (насколько лучше зависит от микроархитектуры, события, счетчик и инструкции, выполняемые в то время, когда счетчик собирается переполниться). В Linux perf точное распределение можно включить, если оно поддерживается, указав точный уровень «ppp».