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

Руководство по настройке производительности


Добавление новых событий трассировки

В комплект поставки операционной системы входят ключевые события. Для получения потока событий от операционной системы пользователю достаточно активизировать трассировку. При отладке приложения у разработчика может возникнуть необходимость введения в приложение собственных событий трассировки. Это помогает лучше понять взаимодействие приложения с системой.

Для добавления события трассировки необходимо определить формат записей трассировки, создаваемых программой, в соответствии со стандартами интерфейсов трассировки. Затем в соответствующих точках программы размещают макрокоманды, задающие точки трассировки. После этого инициировать и управлять трассировкой можно будет любым стандартным способом (с помощью команд, подкоманд и вызовов функций). Для форматирования трассировок с помощью команды trcrpt добавьте в файл формата трассировки разделы с описанием и требованиями по форматированию для каждой новой записи трассировки.

Возможные формы записи события трассировки

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

Рис. 12-2. Формат записи трассировки событий. На рисунке изображена таблица, состоящая из 7 строк. Ячейки в первой строке содержат 12--разрядный ИД точки трассировки, 4--разрядный тип и 16--разрядное поле данных. Следующие 5 строк содержат слова данных с 1 по 5, а последняя строка - 32--разрядное значение системного времени. Для первой строки задан обязательный заголовок Ключевое слово. Для следующих 5 строк заданы необязательные заголовки с D1 по D5. Для последней строки задан необязательный заголовок T.
Рисунок h11i4

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

Каналы трассировки

Функция трассировки позволяет поддерживать до восьми одновременных каналов трассировки с номерами от 0 до 7. Канал 0 всегда используется для трассировки системных событий, однако его можно использовать и для событий приложений. С помощью остальных семи каналов, которые называются каналами общей трассировки, можно выполнять трассировку программ.

При запуске трассировки по умолчанию применяется канал 0. Для запуска трассировки в канал общего назначения введите команду trace -n номер_канала. При применении каналов общего назначения действуют некоторые ограничения:

Макрокоманды для записи событий трассировки

Макрокоманды, позволяющие регистрировать события всех типов, определены в файле /usr/include/sys/trcmacros.h. ИД событий определены в файле /usr/include/sys/trchkid.h. Эти файлы необходимо включить в программу, которая регистрирует события трассировки.

Для регистрации событий в канал 0 с указанием системного времени используются команды:

TRCHKL0T(hw)
TRCHKL1T(hw,D1)
TRCHKL2T(hw,D1,D2)
TRCHKL3T(hw,D1,D2,D3)
TRCHKL4T(hw,D1,D2,D3,D4)
TRCHKL5T(hw,D1,D2,D3,D4,D5)

Для регистрации событий в канале 0 без указания системного времени используются команды:

TRCHKL0(hw)
TRCHKL1(hw,D1)
TRCHKL2(hw,D1,D2)
TRCHKL3(hw,D1,D2,D3)
TRCHKL4(hw,D1,D2,D3,D4)
TRCHKL5(hw,D1,D2,D3,D4,D5)

Тип поля записи события трассировки задается командой независимо от значения 4 разрядов параметра hw.

Регистрировать события в каналах общего назначения (1-7) можно только с помощью следующих 2 макросов:

TRCGEN(ch,hw,D1,len,buf)
TRCGENT(ch,hw,D1,len,buf)

Эти макросы регистрируют в потоке событий, заданном параметром канала (ch), ключевое слово (hw), слово данных (D1) и len байт, пользовательского сегмента данных с байта, заданного значением buf.

Использование ИД событий

ИД события в записи трассировки служит для указания класса, к которому относится это событие. ИД события служит критерием как для регистрации или игнорирования событий алгоритмом трассировки, так и для включения или исключения командой trcrpt записей трассировки в отформатированный отчет.

ИД события представляет собой 12-разрядное двоичное число (три шестнадцатиричные цифры), поэтому всего возможно 4096 различных ИД. Зарезервированные ИД событий, для которых код задан по умолчанию, фиксируются для предотвращения дублирования. Для определения событий в пользовательских средах или для использования в процессе разработки ИД событий в диапазоне от x010 до x0FF зарезервированы для временного использования. ИД событий из этого диапазона можно применять в пользовательских средах (то есть в любом наборе систем, в котором можно гарантировать уникальность события с этим ИД).

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

Количество доступных ИД событий невелико, поэтому не следует выделять их без необходимости; Для увеличения количества идентификаторов можно применять 16-разрядное поле данных. В результате каждому формальному ключевому ИД можно сопоставить 65536 различных событий. Единственное преимущество применения уникальных ИД связано с тем, что сбор и фильтрация данных утилитой трассировки производится именно на уровне ИД.

Пользовательское событие можно отформатировать с помощью команды trcrpt, если указанный файл формата трассировки содержит соответствующий раздел. Файл формата трассировки - это изменяемый текстовый файл (дополнительная информация приведена в разделе Синтаксис разделов файла формата трассировки).

Примеры программирования и форматирования событий

Ниже приведен пример оценки времени выполнения цикла программы с помощью событий трассировки:

#include <sys/trcctl.h>
#include <sys/trcmacros.h>
#include <sys/trchkid.h>
char *ctl_file = "/dev/systrctl";
int ctlfd;
int i;
main()
{
  printf("настройка сбора данных трассировки \n");
  if (trcstart("-ad")){
    perror("trcstart");
    exit(1);
  }
 
  printf("открытие устройства трассировки \n");
  if((ctlfd = open(ctl_file,0))<0){
    perror(ctl_file);
    exit(1);
  }
 
  printf("начало трассировки \n");
  if(ioctl(ctlfd,TRCON,0)){
    perror("TRCON");
    exit(1);
  }
 
  for(i=1;i<11;i++){
    TRCHKL1T(HKWD_USER1,i);
 
    /* Здесь следует контролируемый фрагмент программы. Интервал */
    /* между появлениями THKWD_USER1 в файле трассировки */
    /* равен полному времени одной итерации */
  }
 
  printf("завершение трассировки \n");
  if(ioctl(ctlfd,TRCSTOP,0)){
    perror("TRCOFF");
    exit(1);
  }
 
  printf("завершение работы демона трассировки \n");
  if (trcstop(0)){
    perror("trcstop");
    exit(1);
  }
 
  exit(0);
}

При компилировании примера программы необходимо использовать ссылку на библиотеку librts.a следующим образом:

# xlc -O3 sample.c -o sample -l rts

HKWD_USER1 - это событие с ИД x010 (для дополнительной проверки обратитесь к файлу /usr/include/sys/trchkid.h). Средство создания отчетов будет форматировать событие HKWD_USER1, только если файл формата трассировки содержит соответствующие правила. Для этого можно использовать следующий пример раздела для события HKWD_USER1:

# Раздел описания правил форматирования HKWD_USER1
# Правила описывают использование события программой-примером
010 1.0 L=APPL "USER EVENT - HKWD_USER1" O2.0      \n \
               "Количество итераций =" U4  \n \
               "Время последнего цикла = " \
                endtimer(0x010,0x010) starttimer(0x010,0x010)

При вводе примера раздела не изменяйте файл основного формата /etc/trcfmt; рекомендуется создать его копию и сохранить в своем пользовательском каталоге (например, mytrcfmt). При запуске примера программы необработанные данные о событиях заносятся в файл протокола по умолчанию, поскольку для функции trcstart() не был задан другой файл протокола. Для получения данных только о нужных событиях с финальным отчетом можно использовать фильтр. Для этого введите команду trcrpt со следующими параметрами:

# trcrpt -d 010 -t mytrcfmt -O "exec=on" > sample.rpt

Для просмотра результатов вы можете обратиться к файлу sample.rpt.

Синтаксис разделов файла формата трассировки

Файл формата трассировки содержит правила представления и просмотра данных для каждого ИД события. Это позволяет форматировать новые события, не внося изменений в средства генерации отчетов. Правила для новых событий просто добавляются в файл форматирования. Синтаксис правил обеспечивает гибкость представления данных.

Раздел файла форматирования может иметь любой размер, необходимый для описания правил для определенного события. Для того чтобы продолжить раздел на следующей строке, в конце текущей строки указывают символ продолжения '\'. Эти поля описаны в книге Файлы AIX 5L версии 5.1.

Информация о прочих возможностях макрокоманд и функции форматирования, а также определении дополнительных макрокоманд приведена в файле /etc/trcfmt.


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