Для некоторого контекста я профилирую выполнение Memcached, и я хотел бы отслеживать промахи dTLB во время выполнения определенной функции. Если предположить, что Memcached порождает несколько потоков, каждый поток потенциально может выполнять функцию параллельно. Одно конкретное решение, которое я обнаружил, функции переключения событий Perf (Использование perf probe для мониторинга статистики производительности во время выполнения определенной функции.), должно позволить мне добиться этого, установив датчики при входе и выходе из функции и включив/выключив счетчик событий для каждого датчика соответственно.
Мой вопрос:
(a) Насколько я понимаю, события perf toggle были включены как часть ответвления ядра Linux 3.x. Было ли это включено в последние выпуски LTS ядра Linux 4.x? Если нет, то есть ли другие альтернативы?
(b) Еще один обходной путь, который я нашел, описан здесь: мониторинг производительности для подмножества выполнения процесса. Однако я не слишком уверен, правильно ли это сработает для рассматриваемой проблемы. Меня беспокоит, что, поскольку Memcached является многопоточным, создание каждым потоком нового дочернего процесса может привести к слишком большим накладным расходам.
Какие-либо предложения?





Я смог найти реализацию функции переключения событий только в репозитории /perf/core_toggle, который поддерживается разработчиком этой функции. Вероятно, вы можете скомпилировать этот код и поиграть с функцией самостоятельно. Вы можете найти примеры того, как его использовать здесь. Однако я не думаю, что это было принято в основном репозитории Linux для любой версии ядра.
Если вы хотите измерить количество одного или нескольких событий, существуют альтернативы, которые просты в использовании, но требуют добавления нескольких строк кода в кодовую базу. Вы можете программно использовать безупречный интерфейс или другие сторонние инструменты, которые предлагают такие API, как ПАПИ и ЛИКВИД.
@ shreyas42 Shreyas42 Под прекращением вы подразумеваете, что в какой-то момент она поддерживалась, но позже эта функция была удалена? Функция переключения событий звучит очень полезно. Вы знаете, для каких версий ядра он поддерживается и почему его убрали?
Итак, в своем письме Иржи Олса (автор toggle_events) упомянул, что работа над функциональностью переключения событий была прекращена и что сейчас никто этим не занимается. Я не совсем уверен, почему они так решили. На самом деле я клонировал репозиторий perf/core_toggle и собрал ядро Linux. Если я правильно помню, это версия ядра Linux 3.12.x. Это было немного неприятно, много проблем, таких как неподдерживаемый gcc-5 и так далее. В конце концов, я решил не использовать его, учитывая, что на данный момент этому ядру около 6 лет.
@ shreyas42 shreyas42 Но ветка perf/core_toggle никогда не объединялась с основным репозиторием ядра, верно? Кстати, если это отвечает на ваш вопрос, вы можете нажать на галочку под кнопками голосования.
Да, я не думаю, что он был объединен с основным репозиторием ядра.
perf_event_open.
Да, perf_toggle_events больше не поддерживается в последних версиях ядра Linux. Мне удалось связаться с автором функции, и он подтвердил это. Сейчас я работаю над инструментированием своего кода с помощью системного вызова perf_event_open. Я опубликую обновление к этому сообщению, как только я заставлю его работать правильно.