профилировщик webkit - PullRequest
       13

профилировщик webkit

2 голосов
/ 25 сентября 2010

Что такое столбцы «Я» и «Всего»? Столбец «итого» не суммирует до 100% (намного выше) и выглядит так, как это делает сам. Я подозреваю, что «я» не накапливается, а общее. Таким образом, если methodA вызывает methodB, вызывает methodC, в self Id видеть% для каждого вызова метода в отдельности, тогда как в целом methodA будет показывать сумму всех трех методов, methodB будет показывать 2 и т. Д.

Это правильно?

1 Ответ

3 голосов
/ 26 сентября 2010

Предположим, у вас есть эта программа:

main () вызывает A (), вызывает B (), вызывает C (), и C зависает в цикле на 10 секунд. Профилировщик процессора скажет что-то вроде этого:

total time: 10 sec
routine   self%  inclusive%
   main      0         100
   A         0         100
   B         0         100
   C       100         100

Собственное время C будет 10 секунд, 100%. Собственное время других было бы практически нулевым.

Общее (включительно) время каждого из них составит 10 секунд или 100%. Вы не складываете их.

С другой стороны, предположим, что C тратит 10 секунд на ввод / вывод. Тогда профилировщик только для процессора скажет что-то вроде этого:

total time: 0 sec
routine   self%  inclusive%
   main      ?           ?
   A         ?           ?
   B         ?           ?
   C         ?           ?

потому что единственное фактическое время ЦП, которое он использует, настолько мало, что сэмплы практически не попадают в него, поэтому, чтобы получить проценты, которые он делит на ноль.

OTOH, если сэмплы были на часах настенного времени, вы получили бы первый вывод.

Лучшим типом профилировщика является тот, который производит выборку стека вызовов по настенным часам и сообщает вам включенное время в процентах от общего, а также дает его вам на уровне строки кода, а не только для функций. Это полезно, потому что это прямая мера того, сколько можно было бы сэкономить, если бы строка выполнялась меньше, и от нее почти невозможно было спрятаться. Примерами таких профилировщиков являются Zoom и LTProf , и мне сказали, что OProfile может это сделать. Существует простой метод , который работает с любым языком и требует только отладчик.

Вот обсуждение вопросов.

...