The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа
Вперед Назад Содержание

8. Реализация профилирования

Профилирование работает на изменениях, которые делает компилятор, когда компилирует вашу программу с опцией `-pg'. Каждая функция в вашей программе откомпилирована так, чтобы при своем вызове она порождала некоторую информацию о том, откуда она была вызвана. Отсюда профилятор может выяснить, какая функция ее вызвала, и сможет подсчитать, сколько раз она была вызвана.

Профилирование также подключает отслеживание того, как выполняется ваша программа, и снимает гистограмму, где (по какому адресу) находился программный счетчик. Обычно программный счетчик опрашивается около 100 раз в секунду, но точная частота может отличаться от системы к системе.

Специальная процедура запуска выделяет память под накопление гистограммы и устанавливает обработчик сигнала от часов для занесения записей в нее. Применение этой специальной процедуры запуска обусловлено использованием `gcc ... -pg' для сборки (линковки). Также в этом файле содержится функция `exit', ответственная за запись файла `gmon.out'.

Информация о количестве вызовов для библиотечных функций накапливается при использовании специальной версии Си-библиотеки. Функции в ней точно такие же, как и в обычной библиотеке, но откомпилированы с опцией `-pg'. Если вы собираете (линкуете) вашу программу через `gcc ... -pg', то автоматически будет использована профилирующая версия библиотеки.

Вывод `gprof' не отметит, какие части вашей программы ограничены пропускной способностью ввода/вывода или свопинга. Это потому, что отсчеты с программного счетчика снимаются через фиксированные интервалы времени исполнения программы. Следовательно, замеры времени в выводе `gprof' ничего не скажут про время, в течении которого ваша программа не выполнялась. Например, часть программы, создающая очень много данных, не может вместить их всех разом в физическую память, и будет исполнятся очень медленно, но `gprof' будет сообщать, что она занимает немного времени. С другой стороны, ведение отсчета по времени исполнения имеет то преимущество, что нагрузка, создаваемая другими пользователями, не должна оказывать непосредственного влияния на полученные при профилировании данные.


Вперед Назад Содержание

Закладки на сайте
Проследить за страницей
Created 1996-2019 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру
Hosting by Ihor