Как перф использует оффшорные события? - PullRequest
0 голосов
/ 16 января 2019

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

1 Ответ

0 голосов
/ 17 января 2019

Массив MSR оффшорных PM хранится здесь для SnB, другие архитектуры близки.
Макрос INTEL_UEVENT_EXTRA_REG здесь здесь , и он просто устанавливает msr для второго параметра, config_mask - 0x000000FFULL и valid_mask - для третьего параметра (первый - событие для запрограммируйте связанный обычный PMR с).

Значения snb_hw_cache_extra_regs - это то, что будет записано в выбранном PM MSR 1 .
Этот массив ищется здесь и используется здесь для выбора первого совпадения MSR PM, где аргумент config берется из массива hw_cache_event_ids.

Таким образом, это в основном цикл тестирования нескольких битовых масок, пока не будет найдена совместимая PM MSR, я думаю, вы можете просто пропустить это и посмотреть значения, хранящиеся в массиве snb_hw_cache_extra_regs.


1 Так как макрос, определенный для создания значений в snb_hw_cache_extra_regs, никогда не используется повторно в источнике, и значения отображаются непосредственно на схему MSR, задокументированную в руководствах Intel, я не стал проверять это утверждение.

...