Использует ли linux perf kprobe для детальной разбивки измерений каждой функции ядра? - PullRequest
2 голосов
/ 15 июня 2019

Когда мы включаем запись perf call-графа (например, perf запись -g), инструмент perf может детально разбивать измерения каждой маленькой функции на пути вызова, независимо от того, ядро ​​это или пользовательские функции.

Мне интересно, как perf может добиться этого для функций ядра. Я предполагаю, что perf использует kprobe для обратного вызова при каждом вызове функции ядра. Как то так:

  • Позвоните в foo ()
    • Ловушка для основного слоя kprobe
    • kprobe обратный вызов обработчика perf, который настраивает PMC
  • Run foo ()
  • ret of foo ()
    • Снова перехватить слой ядра kprobe
    • kprobe обратный вызов обработчика perf, который читает PMC
  • Вернуться к звонящему

Это правильно? Или Linux на самом деле использует какую-то другую магию? Спасибо.

...