PROF(1)

НАЗВАНИЕ
prof - вывод результатов профилирования

СИНТАКСИС


      prof  [-t] [-c] [-a] [-n] [-o] [-x] [-g] [-z] [-h] [-s] [-m файл_профиля]

            [прогр]

ОПИСАНИЕ
Команда prof интерпретирует файл_профиля, подготовленный с помощью функции monitor(3C). При этом читается таблица имен об ектного файла прогр (по умолчанию a.out) и соотносится с файлом_профиля (по умолчанию mon.out). Для каждого внешнего объекта из секции команд выдается время (в процентах), затраченное на выполнение участка программы между адресом данного объекта и адресом следующего. Кроме того, печатается число вызовов каждой функции и среднее время в миллисекундах, затраченное на один вызов.

Следующие взаимоисключающие опции определяют критерий сортировки выводимых строк:
-t Сортировать по уменьшению доли общего времени (применяется по умолчанию).
-c Сортировать по уменьшению количества вызовов.
-a Сортировать по увеличению адресов.
-n Сортировать по именам лексикографически.

Взаимоисключающие опции -o и -x задают формат вывода адресов объектов:
-o Выводить вместе с именем восьмеричный адрес объекта.
-x Выводить вместе с именем шестнадцатеричный адрес объекта.

Следующие опции можно использовать в произвольной комбинации:
-g Включить в выдачу неглобальные объекты (статические функции).
-z Включить в выдачу все объекты из диапазона профилирования [см. monitor(3C)], даже если соответствующие им количество вызовов и доля общего времени равны нулю.
-h Подавить выдачу обычно печатаемого заголовка. (Данная опция полезна, если результаты предназначены для последующей обработки.)
-s Выдать в стандартный протокол итоговую информацию о профилировании.
-m файл_профиля Использовать в качестве исходного файл_профиля, а не mon.out.

Программа создает файл с данными профилирования, если редактирование связей выполнялось командой cc(1) с опцией -p. При применении данной опции в начало и конец программы вставляются вызовы функции monitor(3C). Второй из этих вызовов приводит к записи файла с результатами профилирования. Если нужно, чтобы для какой-то функции было выдано количество ее вызовов, файл с данной функцией следует компилировать с опцией -p.

Имя файла, создаваемого профилируемой программой, определяется по переменной окружения PROFDIR. В случае отсутствия переменной PROFDIR, в каталоге, текущем на момент окончания программы, создается файл mon.out. Если PROFDIR=цепочка, то создается файл цепочка/идентификатор_процесса.имя_программы, где имя_программы задается аргументом командной строки argv[0] с удаленным маршрутным префиксом. Если значение PROFDIR является пустой цепочкой, то данные о профилировании в файл не записываются.

В целях профилирования функция может быть разбита на подфункции с помощью макроса MARK [см. prof(5)].

ФАЙЛЫ


     mon.out         Подразумеваемый файл профиля.

     a.out           Подразумеваемый файл с таблицей имен.

СМ. ТАКЖЕ
cc(1).
exit(2), profil(2), monitor(3C), prof(5) в Справочнике программиста.

ПРЕДОСТЕРЕЖЕНИЯ
Временные данные, выдаваемые для последовательных идентичных вызовов программы могут варьироваться в пределах 20 и более процентов из-за различий в скорости работы кэш-памяти, разделяемой с другими процессами. Даже если Вам кажется, что программа исполняется на компьютере в гордом одиночестве, то и тогда скрытые фоновые или асинхронные процессы могут исказить получаемые данные. В редких случаях сильное искажение измерений может произойти вследствие наложения циклов в программе и тактов часов, инициирующих запись программного счетчика.

Если не используется опция -g, то время выполнения статических функций приписывается к предыдущим внешним объектам. Однако количество вызовов внешних функций сообщается верно.

ОГРАНИЧЕНИЯ
Создание файла профиля гарантируется только для программ, вызывавших exit(2) или выполняющих возврат из функции main. В других случаях нужно позаботиться о явном заключительном вызове функции monitor.

При использовании для профилирования опции -p в команде cc(1) есть предел числа функций (600), для которых во время выполнения программы подсчитывается число вызовов. Для увеличения этого предела следует вызывать функцию monitor самостоятельно. Если лимит будет превышен, то произойдет наложение данных и файл mon.out окажется испорченным. Число использованных счетчиков сообщается командой prof автоматически в том случае, если оно превысило 5/6 максимума.