Использование perf для отслеживания доступа к памяти каждого процессора

Я пытаюсь использовать linux perf tool для выборки обращений к памяти в моей программе. В частности, я использую perf для отслеживания доступа для чтения / записи каждого процессора в NUMA.

Теперь я могу контролировать каждый доступ ЦП для чтения и записи к памяти, но я также должен знать, является ли доступ доступом к локальной памяти или удаленным доступом к памяти.

Я использовал список perf для просмотра списка событий, но я просто узнал некоторые события о доступе к памяти сокета.

Вопросы

  1. Есть ли способ получить удаленный доступ к памяти каждого ЦП при использовании perf?
  2. Есть ли вариант лучше, чем perf?

person Aries_Liu    schedule 16.01.2017    source источник


Ответы (1)


Да, блок PMU в вашем процессоре, вероятно, может делать то, что вы хотите, с помощью различных счетчиков uncore - в частности, они могут подсчитывать различные ответы вне ядра для доступа к нелокальной памяти. Это сообщение в блоге является разумным отправная точка.

Основная проблема заключается в том, что часто инструмент perf, привязанный к конкретной версии ядра, отстает в поддержке современных процессоров 1, особенно когда дело доходит до uncore и событий, связанных с NUMA 2.

Чтобы обойти это, вы можете использовать pmu-tools, который предоставляет ocperf сценарий оболочки который использует все perf, лежащие в основе вашей системы, но с актуальными идентификаторами событий, загруженными непосредственно с Intel. Обычно это дает вам доступ к нужным событиям uncore.

Конечно, даже когда это работает, эти события часто очень трудно интерпретировать, особенно потому, что ваша ментальная модель запросов к памяти усложняется множеством факторов, таких как поведение предварительной выборки, запрос на владение, доступы. которые "попадают" в строчку-буфер в процессе заполнения и т. д. и т. д.


1 И то, и другое из-за добавления новых процессоров / событий из-за некоторой задержки, но особенно потому, что инструмент привязан к ядру, и вы, вероятно, не используете передовое ядро, поэтому даже если основная ветка perf может иметь поддержку , вы застряли с версией perf, связанной с вашим ядром.

2 Вероятно, потому что большинство разработчиков ядра, как и разработчики в целом, не работают с системами NUMA.

person BeeOnRope    schedule 16.01.2017