Ниже приведен пример обычной трассировки:
Примечание: Этот пример будет более наглядным, если файл ввода еще не занесен в кэш системной памяти. Выберите в качестве исходного любой файл, размер которого превышает 50 Кб, и который не использовался в последнее время.
Данные трассировки накапливаются быстро. Максимально ограничьте сбор данных для его проведения тольков нужной области. Для этого в командной строке вводятся сразу несколько команд. Пример:
# trace -a -k "20e,20f" -o trc_raw ; cp ../bin/track /tmp/junk ; trcstop
при этом будет выполнена также и команда cp. Мы воспользовались двумя функциями команды trace. Если задана опция -k "20e,20f", то сбор данных о событиях функций lockl() и unlockl() выполняться не будет. Число таких вызовов в однопроцессорных системах, в отличие от систем SMP, значительно, и при их обработке в отчет заносится большой объем ненужной информации. Если задана опция -o trc_raw, то файл с прямым выводом трассировки будет помещен в локальный каталог.
Для создания нашего отчета была вызвана следующая команда trcrpt:
# trcrpt -O "exec=on,pid=on" trc_raw > cp.rpt
При вводе этой команды будут сохранены уточненное имя обрабатываемого файла и ИД присвоенного ему процесса.
Файл отчета содержит информацию о большом числе событий присвоения страниц VMM и удаления событий, как, например, в следующей последовательности:
1B1 ksh 8526 0.003109888 0.162816 VMM page delete: V.S=0000.150E ppage=1F7F working_storage delete_in_progress process_private computational 1B0 ksh 8526 0.003141376 0.031488 VMM page assign: V.S=0000.2F33 ppage=1F7F working_storage delete_in_progress process_private computational
В настоящий момент нас не интересуют подробности действий VMM, поэтому трассировка будет заново отформатирована следующим образом:
# trcrpt -k "1b0,1b1" -O "exec=on,pid=on" trc_raw > cp.rpt2
Параметр -k "1b0,1b1" подавляет включение в отформатированный вывод ненужной информации о событиях VMM. Если вы его укажете, то вам не придется выполнять повторную трассировку рабочей схемы для удаления этой информации. Если необходимо просмотреть действия по блокировке в какой-то точке, то для подавления событий lockl() и unlockl() можно воспользоваться не командой trace, а функцией -k команды trcrpt. Если необходимы данные только о небольшом наборе событий, то можно задать -d "hookid1,hookid2" для создания отчета только с этими событиями. Поскольку ИД точки - это самый левый столбец отчета, то для создания списка точек трассировки достаточно выполнить всего несколько действий. Полный списко ИД точек трассировки приведен в файле /usr/include/sys/trchkid.h.
В заголовке отчета трассировки указано, когда и где была выполнена трассировка, а также формат команды трассировки:
чет 28 окт 13:34:05 1999 Система: AIX texmex Узел: 4 Компьютер: 000691854C00 Адрес протокола Internet: 09359BBB 9.53.155.187 Буферизация: куча ядра trace -a -k 20e,20f -o trc_raw
Тело отчета будет выведено маленьким шифтом, аналогичным следующему:
ИД ИМЯ ПРОЦЕССА PID ВРЕМЯ(СЕК) ДЕЛЬТА(МСЕК) ПРИЛ. SYSCALL ЯДРО ПРЕРЫВАНИЕ 101 ksh 8526 0.005833472 0.107008 kfork LR = D0040AF8 101 ksh 7214 0.012820224 0.031744 execve LR = 10015390 134 cp 7214 0.014451456 0.030464 exec: cmd=cp ../bin/track /tmp/junk pid=7214 tid=24713
Файл cp.rpt2 содержит следующую информацию:
На первый взгляд, вывод трассировки выглядит громоздким. Это хороший учебный пример. Если вы сможете найти в нем описанные события, значит вы уже готовы работать с функцией трассировки и применять ее для диагностики и повышения производительности системы.
Чаще всего подробный отчет трассировки не требуется. Вы можете выбрать несколько событий, информация о которых вас интересует. Например, вам может потребоваться узнать, сколько раз произошло конкретное событие. Для определения числа выполненных запросов на открытие в примере копирования определите ИД события для системного вызова open(). Для этого введите следующую команду:
# trcrpt -j | grep -i open
Будет показана информация о том, что ИД события 15b соответствует событию OPEN SYSTEM CALL. Теперь обработайте данные примера копирования следующим образом:
# trcrpt -d 15b -O "exec=on" trc_raw
Файл отчета будет выведен стандартным образом, и вы сможете определить в нем число функций open(). Для того чтобы просмотреть только те функции open(), которые были выполнены процессом cp введите команду создания отчета со следующими параметрами:
# trcrpt -d 15b -p cp -O "exec=on" trc_raw