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

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

#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.