Профилятор gprof: Как разобраться в простом профиле
Вперед Назад Содержание5. Как разобраться в простом профиле
Простой профиль показывает общий итог времени, затраченного на исполнение каждой функции вашей программы. Если не указана опция `-z', то функции без явных затрат времени на их выполнение, без явных вызовов, не упоминаются. Заметим, что функция, не откомпилированная для профилирования и не выполнявшаяся достаточное для отображения на гистограмме время, неотличима от функции, которая никогда не вызывалась.
Здесь показан пример простого профиля небольшой программы:
Flat profile: (Простой профиль:)
Each sample counts as 0.01 seconds. (Каждый отсчет == 0.01 сек.)
% cumulative self self total
time seconds seconds calls ms/call ms/call name
33.34 0.02 0.02 7208 0.00 0.00 open
16.67 0.03 0.01 244 0.04 0.12 offtime
16.67 0.04 0.01 8 1.25 1.25 memccpy
16.67 0.05 0.01 7 1.43 1.43 write
16.67 0.06 0.01 mcount
0.00 0.06 0.00 236 0.00 0.00 tzset
0.00 0.06 0.00 192 0.00 0.00 tolower
0.00 0.06 0.00 47 0.00 0.00 strlen
0.00 0.06 0.00 45 0.00 0.00 strchr
0.00 0.06 0.00 1 0.00 50.00 main
0.00 0.06 0.00 1 0.00 0.00 memcpy
0.00 0.06 0.00 1 0.00 10.11 print
0.00 0.06 0.00 1 0.00 0.00 profil
0.00 0.06 0.00 1 0.00 50.00 report
...
Функции упорядочены по убыванию времени, затраченного на их выполнение.
Функции `mcount' и `profil' являются частью аппарата профилирования и
появляются в каждом простом профиле; их время несколько увеличивает
ожидаемое при профилировании время выполнения.
Период отсчета является оценкой границ возможной ошибки в каждом отсчете времени. Отсчеты времени, ненамного превышающие эту величину, ненадежны. В данном примере поле `собственных секунд' (`self seconds') для `mcount' может отлично получиться и `0.00', и `0.04' при других запусках. *См. Оценка ошибки:: для более полного обсуждения.
Что же означают поля в каждой строке:
- `% time' (`% времени')
Это процент от общего времени исполнения вашей программы, затраченный на выполнение этой функции. Сумма по всем строкам должна составлять 100%.
- `cumulative seconds' (`секунды нарастающим итогом')
Это общее время в секундах, которое затратил компьютер на выполнение этой функции, плюс время, затраченное на выполнение всех функций, перечисленных выше в этой таблице.
- `self seconds' (`собственных секунд')
Это количество секунд, подсчитанных только для этой функции. Листинг простого профиля сперва упорядочивается по этому количеству.
- `calls' (`вызовов')
Это общее количество вызовов этой функции--сколько раз она была вызвана. Если функция ни разу не вызывалась или количество вызовов не может быть определено (возможно, из-за того, что функция не была откомпилирована для профилирования), то поле `calls' (`вызовов') остается пустым.
- `self ms
call' (`собственных миллисекунд на вызов') /
Это поле представляет собой среднее количество миллисекунд, затраченных этой функцией на вызов, если эта функция профилируется. Иначе это поле остается пустым для этой функции.
- `total ms
call' (`всего миллисекунд на вызов') /
Это поле представляет собой среднее количество миллисекунд, затраченных этой функцией и ее подпрограммами на вызов, если эта функция профилируется. Иначе это поле остается пустым для этой функции.
- `name' (`имя функции')
Это имя функции. Листинг простого профиля упорядочивается по этому полю в алфавитном порядке после упорядочения по полю `self seconds' (`собственных секунд').
Вперед Назад Содержание