Я хотел бы профилировать поток кода в ядре, чтобы понять, где находится узкое место. Я обнаружил, что профилировщик функций делает именно это для меня: https://lwn.net/Articles/370423/ К сожалению, вывод, который я вижу, не имеет для меня никакого смысла. Из приведенной выше ссылки вывод профилировщика функций:
Function Hit Time Avg
-------- --- ---- ---
schedule 22943 1994458706 us 86931.03 us
Где «Время» — это общее время, проведенное внутри этой функции во время выполнения. Итак, если у меня есть функция_A, которая вызывает функцию_B, если я правильно понял вывод, «Время», измеренное для функции_A, включает также продолжительность функции_B.
Когда я действительно запускаю это на своем компьютере, я вижу еще один новый столбец, отображаемый для вывода:
Function Hit Time Avg s^2
-------- --- ---- --- ---
__do_page_fault 3077 477270.5us 155.109 us 148746.9us
(more functions..)
Что означает s^2? Это не может быть стандартным отклонением, потому что оно выше среднего...
Я измерил общую продолжительность этого потока кода из пользовательского пространства и получил 400 мс. При суммировании столбца s^2 оно приблизилось к 400 мс. Это заставляет меня думать, что, возможно, это «чистое» время, потраченное на __do_page_fault, которое не включает продолжительность вложенных функций.
Это правильно? Я не нашел никакой документации по столбцу s^2, поэтому сомневаюсь в своих выводах.
Благодарю вас!