[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Программирование: Разработка и отладка программ


Глава 27. Трассировщик

Трассировщик служит для локализации неполадок в системе путем отслеживания указанных системных событий. Можно отслеживать следующие события: вызов и возврат из выбранных функций, функций ядра, функций расширений ядра и обработчиков прерываний. Если трассировщик включен, информация об этих событиях заносится в системный файл протокола трассировки. Трассировщик содержит команды для включения трассировки, управления трассировкой и создания отчетов о трассировке. Приложения и расширения ядра могут заносить в протокол дополнительные события с помощью ряда специальных функций.

Дополнительная информация о трассировщике приведена в следующих разделах:


Основные сведения о планировщике

Планировщик находится в наборе файлов bos.sysmgt.trace. Для того чтобы проверить, установлен ли данный набор файлов, введите команду

lslpp -l | grep bos.sysmgt.trace

Если в данные вывода содержат строку bos.sysmgt.trace , то набор файлов установлен, в противном случае, его необходимо установить.

В разделе обсуждаются следующие вопросы:

Трассировщик системы AIX позволяет записать события трассировки, которые затем могут быть отформатированы командой trace report. События трассировки включены в ядро или код приложения, но отслеживаются только во время трассировки.

Запустить трассировку позволяет команда trace и функция trcstart. Для завершения трассировки предназначены команда trcstop и функция trcstop. Для приостановки и возобновления трассировки предназначены команды trcoff и trcon, а также функции trcoff и trcon.

После того как трассировка была остановлена с помощью команды trcstop, команда trcrpt позволяет создать отчет. Формат записей, применяемый данной командой, задается в файле шаблона /etc/trcfmt. Для установки шаблонов предназначена команда trcupdate. Дополнительная информация о шаблонах приведена в описании команды trcupdate.


Управление трассировкой

Команда trace позволяет запустить трассировку событий системы и осуществляет управление размером буфера и файла протокола трассировки. Информация об этой команде приведена в разделе, посвященном демону trace, книги Command's Reference.

Существует три способа сбора данных трассировки.

  1. По умолчанию данные непрерывно собираются в два буфера, причем пока данные трассировки заносятся в один буфер, данные другого буфера записываются в файл протокола. Если файл протокола достигает максимального размера, новые данные записываются поверх наиболее ранних записей.
  2. При круговом способе сбор данных осуществляется непрерывно, однако файл протокола записывается только после завершения трассировки. Этот способ применяется при отладке локализованной ошибки, если необходимо получить данные в момент ее возникновения. Трассировку можно запустить в любой момент, а затем завершить ее сразу после возникновения ошибки, таким образом будут получены данные о событиях, предшествовавших по времени возникновению ошибки. Для применения этого способа трассировки необходимо указать флаг демона трассировки -l.
  3. При третьем способе применяется один буфер, трассировка завершается при его заполнении, после чего данные из буфера записываются в файл протокола. В этот момент трассировка не завершается, а отключается (как если бы была введена команда trcoff ). Для завершения трассировки необходимо ввести команду trcstop. Этот способ применяется, если до сбора данных трассировка не должна заменять ввод-вывод и буферы. Для применения этого способа трассировки необходимо указать флаг -f.

Обычно, команда trace запускается в асинхронном режиме, т.е. после ее запуска можно продолжить работу в обычном режиме. Для запуска трассировки в асинхронном режиме следует указать флаг -a. В этом случае для завершения трассировки необходимо ввести команду trcstop.

Рекомендуется ограничивать отслеживаемую информацию. Флаги -j events и -k events позволяют указать наборы событий, которые будут включены (-j) в трассировку или исключены (-k) из нее. Обратите внимание, что для просмотра названий программ, связанных с точками трассировки, необходимо включить соответствующие точки трассировки. Дополнительная информация по этому вопросу приведена в описании команды trace command . Включить эти точки трассировки можно также, выбрав группу точек трассировки tidhk в программе SMIT.

Например, для трассировки точки mbuf, 254, и просмотра названий программ необходимо ввести следующую команду trace:

trace -aj 106,10c,134,139,465,254

Выполняется трассировка.

trcstop

trcrpt -O exec=on

Точки трассировки, необходимые для просмотра названий программ, меняются в зависимости от выпуска; дополнительная информация приведена в описании команды trace command. Опция trcrpt -O exec=on позволяет просмотреть названия программ, см. описание команды trcrpt command.

В некоторых случаях рекомендуется указывать размер буфера и максимальный размер файла протокола. Для буферов трассировки необходима физическая память, так как запись точек трассировки должна осуществляться без подкачки. После достижения максимального размера файла протокола данные трассировки записываются поверх наиболее ранних записей. Флаги -T размер и -L размер позволяют указать в байтах размер буферов и максимальный размер данных трассировки в файле протокола.

Примечание: Так как трассировщик резервирует для буферов сбора данных определенный объем оперативной памяти системы, трассировка может оказать негативное влияние на производительность системы с ограниченным объемом оперативной памяти. Если трассируемому приложению достаточно оперативной памяти, или объем памяти, используемой функцией трассировки составляет небольшой процент от общего объема оперативной памяти системы, влияние трассировки на производительность будет небольшим. Если значение не указано, применяется размер, заданный по умолчанию.

Следует также отметить, что по умолчанию память для буфера выделяется из кучи ядра. Если в куче недостаточно свободной памяти, она выделяется из отдельных сегментов. В загруженной системе рекомендуется выделять память из отдельных сегментов, чтобы не уменьшать размер кучи ядра. Для этого предназначен флаг -B команды trace .

Управление трассировкой может также осуществляться из приложения. Дополнительная информация приведена в описаниях команд trcstart и trcstop.


Запись данных событий трассировки

Существует два типа данных трассировки.

Общие данные
состоят из слова данных, буфера скрытых данных и длины этих данных. Этот тип применяется для трассировки таких элементов, как полные имена файлов. См. пункт Каналы трассировки общего назначения в раздела Общие сведения о трассировщике.Он находится в разделе Глава 27, Трассировщик.

Специальные данные
Это стандартные данные трассировки операционной системы AIX. Записи этого типа состоят из слова точки трассировки и до пяти слов данных трассировки. В 64-разрядных приложениях это 8-байтовые слова. При программировании на языке C для записи специальных данных предназначены макрокоманды TRCHKL0 - TRCHKL5 и TRCHKL0T - TRCHKL5T, определенные в файле /usr/include/sys/trcmacros.h. Если применить эти макрокоманды невозможно, обратитесь к описанию функции utrchook.

Создание отчета трассировки

Полное описание команды trcrpt приведено в разделе команда trcrpt. Эта команда позволяет создать из файла протокола, записанного командой trace, отчет для пользователя. По умолчанию команда форматирует данные из файла протокола /var/adm/ras/trcfile. Выходные данные команды trcrpt отправляется в стандартный вывод.

Для создания отчета трассировки из файла по умолчанию и его записи в /tmp/rptout, введите команду

trcrpt >/tmp/rptout

Для создания отчета трассировки с названиями программ и именами системных вызовов из файла /tmp/tlog и его записи в файл /tmp/rptout введите команду

trcrpt -O exec=on,svc=on /tmp/tlog >/tmp/rptout


Получение данных трассировки из дампа

Если во время трассировки был создан системный дамп, данные трассировки можно получить с помощью команды trcdead. Для того чтобы сохранить в системе файл протокола трассировки по умолчанию, укажите опцию -o файл-вывода.

Например команда

trcdead /o /tmp/tlog /var/adm/ras/vmcore.0

создает файл протокола трассировки /tmp/tlog, который затем может быть отформатирован командой

trcrpt /tmp/tlog


Команды трассировщика

Перечисленные команды являются частью трассировщика:

trace Запускает трассировку системных событий. С помощью этой команды можно определять размер и параметры файла протокола трассировки, а также внутренних буферов трассировки, в которых хранятся данные об отслеживаемых событиях.
trcdead Извлекает трассировочную информацию из системного дампа. Если в момент останова системы работали средства трассировки, то содержимое внутренних буферов трассировки будет включено в дамп. Эта команда извлекает данные об отслеживаемых событиях из файла дампа и записывает их в файл протокола трассировки.
trcnm Генерирует список имен ядра для команды trcrpt. Этот список формируется из таблицы имен и таблицы имен загрузчика для объектного файла. С помощью файла имен ядра команда trcrpt выполняет преобразование адресов при формировании отчета из файла протокола трассировки.
trcrpt Формирует отчеты об отслеживаемых событиях, занесенных в файл протокола трассировки. При вызове этой команды можно указать, какие события следует включить в отчет или, наоборот, не включать в него, а также определить формат вывода. Способ интерпретации командой trcrpt данных, относящихся к каждому событию, определяется шаблонами, хранящимися в файле /etc/trcfmt.
trcstop Прекращает трассировку системных событий.
trcupdate Обновляет шаблоны форматирования трассировки в файле /etc/trcfmt. При добавлении новых приложений или расширений ядра, регистрирующих события трассировки, в файл /etc/trcfmt необходимо добавить шаблоны для этих событий. Шаблоны форматирования трассировки определяют способ интерпретации данных, относящихся к каждому событию, в команде trcrpt. Программные продукты, выполняющие регистрацию событий, обычно запускают команду trcupdate во время установки.

Вызовы и функции трассировщика

Трассировщик включает в себя следующие вызовы и функции:

trcgen, trcgent Регистрирует наступление отслеживаемых событий в виде записей, состоящих более чем из пяти слов данных. С помощью функции trcgen можно регистрировать события в канале трассировки системных событий (канал 0) или в канале трассировки общего назначения (каналы 1-7). Номер канала передается в функцию при регистрации события. Функция trcgent добавляет к данным регистрации текущее системное время.
trchook, utrchook Регистрирует наступление отслеживаемых событий в виде записей, состоящих не более чем из пяти слов данных. С помощью этих функций можно регистрировать события в канале трассировки системных событий (канал 0). Функция utrchook для повышения производительности использует специальный путь FAST-SVC; ее следует вызывать из программ пользовательского (прикладного) уровня.
trcgenk, trcgenkt Регистрирует наступление отслеживаемых событий в виде записей, состоящих более чем из пяти слов данных. С помощью функции trcgenk можно регистрировать события в канале трассировки системных событий (канал 0) или в канале трассировки общего назначения (каналы 1-7). Номер канала передается в функцию при регистрации события. Функция trcgenkt добавляет к данным регистрации текущее системное время.
trcoff Приостанавливает регистрацию отслеживаемых событий в канале трассировки системных событий (канал 0) или в канале трассировки общего назначения (каналы 1-7). При этом канал трассировки остается активным. Возобновить регистрацию событий можно с помощью функции trcon.
trcon Запускает регистрацию отслеживаемых событий в канале трассировки системных событий (канал 0) или в канале трассировки общего назначения (каналы 1-7). Однако канал трассировки необходимо предварительно активизировать с помощью команды trace или функции trcstart. Приостановить регистрацию событий можно с помощью команды trcoff.
trcstart Запрашивает канал трассировки общего назначения. Эта функция активизирует канал трассировки общего назначения и возвращает в вызывающее приложение номер канала, который впоследствии будет передаваться в функции trcgen, trcgent, trcgenk и trcgenkt.
trcstop Освобождает и деактивизирует канал трассировки общего назначения.

Файлы трассировщика


/etc/trcfmt Содержит шаблоны форматирования трассировки, с помощью которых команда trcrpt определяет способ интерпретации данных, относящихся к каждому событию.
/var/adm/ras/trcfile Является файлом протокола трассировки по умолчанию. В команде trace можно указать другое имя файла протокола трассировки.
/usr/include/sys/trchkid.h Содержит определения идентификаторов точек трассировки.
/usr/include/sys/trcmacros.h Содержит набор часто применяемых макроопределений для регистрации отслеживаемых событий.

Записи о событиях трассировки

Запись о наступлении каждого отслеживаемого события имеет следующий формат: слово, содержащее идентификатор точки трассировки и ее тип, затем переменное количество слов данных трассировки и, наконец, необязательное системное время. Слово, содержащее идентификатор и тип точки трассировки, называется ключевым словом. Оставшиеся два байта ключевого слова называются данными точки трассировки и могут применяться для регистрации события.

Идентификаторы точек трассировки

Идентификатор точки трассировки представляет собой трехзначное шестнадцатеричное число, соответствующее отслеживаемому событию. Идентификатор точки трассировки занимает первые двенадцать разрядов ключевого слова. Идентификаторы точек трассировки определяются в файле /usr/include/sys/trchkid.h. В пользовательских приложениях могут применяться значения в диапазоне 0x010-0x0FF. Все остальные значения зарезервированы для системных целей. Список определенных в данный момент идентификаторов точек трассировки можно просмотреть с помощью команды trcrpt -j.

Типы точек трассировки

Тип точки трассировки определяет формат данных о событии и указывается пользователем. Тип точки трассировки хранится в разрядах 12-16 ключевого слова. Более подробная информация о типах точек трассировки приведена в описаниях функций trcgen, trcgenk и trchook.

Каналы трассировки общего назначения

Трассировщик может поддерживать до восьми активных сеансов трассировки одновременно. Каждый сеанс трассировки работает с отдельным каналом специального файла мультиплексной трассировки /dev/systrace. Канал 0 служит для регистрации системных событий. Трассировка системных событий запускается командой trace и прекращается командой trcstop. Каналы 1-7 называются каналами трассировки общего назначения и могут использоваться подсистемами для трассировки других событий, например, событий передачи данных.

Для инициализации канала трассировки общего назначения подсистема вызывает функцию trcstart, которая активизирует канал трассировки и возвращает его номер. После этого модули подсистемы могут регистрировать события с помощью функций trcgen, trcgent,trcgenk или trcgenkt. Номер канала, возвращаемый функцией trcstart, должен передаваться в эти функции в числе прочих параметров. Подсистема может приостановить регистрацию с помощью функции trcoff, возобновить ее с помощью функции trcon и деактивизировать канал трассировки с помощью функции trcstop. События, отслеживаемые в каждом канале, должны заноситься в отдельный файл протокола трассировки, имя которого необходимо указать при вызове функции trcstart. Для активизации и деактивизации трассировки в подсистеме в последней должен быть предусмотрен пользовательский интерфейс.

Каналы трассировки работают с общими идентификаторами точек трассировки, хранящимися в файле /usr/include/sys/trchkid.h, и шаблонами форматирования трассировки, хранящимися в файле /etc/trcfmt.

Связанная информация

Описание демона trace в книге AIX 5L Version 5.1 Commands Reference.

Описания команд trcdead , trcnm, trcrpt, trcstop, trcupdate в книге AIX 5L Version 5.1 Commands Reference.

Описания функций trchook , trcgen, trcoff, trcon, trcstart, trcstop в книге AIX 5L Version 5.1 Technical Reference: Base Operating System and Extensions Volume 2.


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]