Некоторые встроенные perf
события сопоставляются со второстепенными событиями. Например, LLC-loads
и LLC-load-misses
отображаются на OFFCORE_RESPONSE.
события. Это можно легко определить, как описано в здесь. Однако эти второстепенные события требуют записи определенных значений в определенные регистры MSR, чтобы фактически указать конкретное событие. perf
, похоже, использует массив с названием что-то вроде snb_hw_cache_extra_regs, чтобы указать, какие значения записывать в какие регистры MSR. Хотелось бы узнать, как используется этот массив. В основном я хочу знать, как определить конкретное событие offcore, которому сопоставляется событие perf
, просмотрев исходный код.
Как perf использует оффкорные события?
Ответы (1)
Массив MSR внеядерных PM хранится здесь для SnB, другие архитектуры близки.
Макрос INTEL_UEVENT_EXTRA_REG
- это здесь, и он просто устанавливает msr
на второй параметр, config_mask
на 0x000000FFULL
и valid_mask
на третий параметр (первое - событие для программирования связанный обычный ПМР с).
Значения snb_hw_cache_extra_regs
- это именно то, что будет записано в выбранном PM MSR 1.
Этот массив ищется здесь и используется здесь, чтобы выбрать первое сопоставление PM MSR, где config
arg берется из массива _ 8_.
По сути, это цикл, проверяющий пару битовых масок до тех пор, пока не будет найден совместимый PM MSR. Думаю, вы можете просто пропустить это и посмотреть на значения, хранящиеся в массиве snb_hw_cache_extra_regs
.
1 Поскольку макрос, определенный для создания значений в snb_hw_cache_extra_regs
, никогда не используется повторно в исходном коде, а значения сопоставляются непосредственно с макетом MSR, задокументированным в руководствах Intel, я не стал проверять это утверждение.