PROF(1) 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 максимума.
PROF(5) PROF(5)
НАЗВАНИЕ
prof - подготовка временного профиля одной функции
СИНТАКСИС
#define MARK
#include
void MARK (name)
ОПИСАНИЕ
Вызов макроса MARK введет метку с именем name, которая
с точки зрения подготовки временного профиля трактуется
аналогично точке входа функции. Выполнение команд мак-
роса приведет к увеличению счетчика для данной метки, а
затраченное время приплюсуется к предыдущей метке, вве-
денной посредством макроса MARK, или, если таковой в
пределах функции нет, то к точке входа функции.
Имя name может быть произвольной комбинацией букв, цифр
и символов подчеркивания. В пределах одного файла все
профилируемые имена должны быть уникальными, однако они
могут совпадать с другими программными объектами.
Чтобы данная возможность тонкого профилирования работа-
ла, имя MARK должно быть определено до того, как в
текст будет включен файл . Имя MARK может быть
определено с помощью директивы препроцессора, как это
сделано выше, или с помощью аргумента командной строки,
например:
cc -p -DMARK f1.c
Если имя MARK не определено, то предложения с макросом
MARK (name) могут быть оставлены в исходных файлах, так
как они будут проигнорированы.
Просмотреть подготовленный профиль можно с помощью оп-
ции -g программы prof(1).
ПРИМЕР
В данном примере макросы можно использовать для опреде-
ления времени, затраченного на выполнение каждого цик-
ла. Если этот пример не откомпилирован с определенным в
командной строке именем MARK, то макросы игнорируются.
#include
f1 ()
{
int i,j;
...
MARK(loop1);
for (i = 0; i < 2000; i++) {
...
}
MARK(loop2);
for (j = 0; j < 2000; j++) {
...
}
}
СМ. ТАКЖЕ
profil(2), monitor(3C).
prof(1) в Справочнике пользователя.
ОГРАНИЧЕНИЯ
При вызове макроса MARK не должно быть пробелов между
скобками и именем name, так как макрос определен в виде
ассемблерных вставок и пробелы приведут к ошибке в мет-
ке.
|