Примеры кода и форматирования событий
Приведен пример оценки времени выполнения цикла программы с помощью событий трассировки.
#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 rtsHKWD_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.