Вывод профилировщика функций Linux

Я хотел бы профилировать поток кода в ядре, чтобы понять, где находится узкое место. Я обнаружил, что профилировщик функций делает именно это для меня: 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, поэтому сомневаюсь в своих выводах.

Благодарю вас!


person Tanya Linder    schedule 07.08.2018    source источник


Ответы (1)


Вы можете увидеть код, вычисляющий столбец s^2 здесь. Похоже, это дисперсия (квадрат стандартного отклонения). Если из числа в вашем примере вынуть корень, то получится 385 us, что ближе к среднему по примеру.

Стандартное отклонение по-прежнему больше среднего, но это отлично.

person haggai_e    schedule 11.08.2018