Как perf использует оффкорные события?

Некоторые встроенные perf события сопоставляются со второстепенными событиями. Например, LLC-loads и LLC-load-misses отображаются на OFFCORE_RESPONSE. события. Это можно легко определить, как описано в здесь. Однако эти второстепенные события требуют записи определенных значений в определенные регистры MSR, чтобы фактически указать конкретное событие. perf, похоже, использует массив с названием что-то вроде snb_hw_cache_extra_regs, чтобы указать, какие значения записывать в какие регистры MSR. Хотелось бы узнать, как используется этот массив. В основном я хочу знать, как определить конкретное событие offcore, которому сопоставляется событие perf, просмотрев исходный код.


person Hadi Brais    schedule 16.01.2019    source источник


Ответы (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, я не стал проверять это утверждение.

person Margaret Bloom    schedule 17.01.2019