Вывод профилировщика функций Linux
Я хотел бы профилировать поток кода в ядре, чтобы понять, где узкое место. Я обнаружил, что профилировщик функций делает именно это для меня: https://lwn.net/Articles/370423/ К сожалению, вывод, который я вижу, не имеет смысла для меня. По ссылке выше вывод профилировщика функции:
Function Hit Time Avg
-------- --- ---- ---
schedule 22943 1994458706 us 86931.03 us
Где "Время" - это общее время, проведенное внутри этой функции во время выполнения. Так что если у меня есть function_A, которая вызывает function_B, если я правильно понял вывод, то "Время", измеренное для function_A, также включает в себя продолжительность function_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, поэтому не решаюсь сделать выводы.
Спасибо!
1 ответ
Вы можете увидеть код, который рассчитывает s^2
колонка здесь. Кажется, что это дисперсия (стандартное отклонение в квадрате). Если вы возьмете корень из числа в вашем примере, вы получите 385 нас, что ближе к среднему в этом примере.
Стандартное отклонение все еще больше, чем среднее значение, но это нормально.