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

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


Запуск и управление трассировкой из программы

Функцию трассировки можно запустить из программы с помощью функции trcstart(), которая расположена в библиотеке librts.a. Ниже описан синтаксис функции trcstart():

int trcstart(char *args)

где args - это список параметров для команды trace. По умолчанию запускается трассировка системных событий (канал 0). Для запуска трассировки общего назначения укажите в строке параметров args опцию -g. После успешного завершения функция trcstart() возвратит ИД канала. Для трассировки общего назначения с помощью данного ИД канала можно записывать частный канал общего назначения.

При компиляции программы с помощью этой функции необходимо отдельно отправить запрос на ссылку на библиотекуlibrts.a (в качестве опции компиляции укажите -l rts).

Управление трассировкой путем вызова функции трассировки

Процедурой trace можно управлять с помощью вызова функций из библиотеки librts.a. При успешном завершении функции возвращают 0. Список функций:

int trcon()
Начинает или возобновляет сбор данных трассировки.

int trcoff()
Приостанавливает сбор данных трассировки.

int trcstop()
Прекращает сбор данных трассировки и завершает работу процедуры trace.

Управление трассировкой с помощью вызовов ioctl()

При вызове каждой из перечисленных выше фунций управления трассировкой выполняются следующие действия:

Для более оптимального включения и выключения трассировки для отдельных разделов кода можно отправлять вызовы ioctl() непосредственно. Это позволит избежать многократных открытий и закрытий устройства управления трассировкой. Для применения интерфейса ioctl() в программе включите библиотеку sys/trcctl.h для того чтобы определить команды ioctl(). Ниже описан синтаксис функции ioctl():

ioctl (fd, CMD, канал)

где:

дескриптор_файла
- это дескриптор, возвращенный после открытия /dev/systrctl

CMD
является одним из: TRCON, TRCOFF, TRCSTOP

канал
- это канал трассировки (0 для системной трассировки)

В приведенном ниже примере показано, как включить трассировку только для определенного участка кода:

#include <fcntl.h>
#include <sys/trcctl.h>
extern int trcstart(char *arg);
char *ctl_dev ="/dev/systrctl";
int ctl_fd;
main()
{
     printf("настройка процедуры трассировки \n");
     if (trcstart("-ad")){
         perror("trcstart");
         exit(1);
     }
 
     printf("открытие устройства трассировки \n");
     if((ctl_fd =open (ctl_dev,O_RDWR))<0){
         perror("open ctl_dev");
         exit(1);
     }
 
     printf("включение трассировки \n");
     if(ioctl(ctl_fd,TRCON,0)){
         perror("TRCON");
         exit(1);
     }
 
     /* *** эта строка будет трассироваться *** */
     printf("Код, выводящий эту строку, будет трассироваться.");
 
     printf("выключение трассировки \n");
     if (ioctl(ctl_fd,TRCOFF,0)){
         perror("TRCOFF");
         exit(1);
     }
 
     printf("останов системы трассировки \n");
     if (trcstop(0)){
         perror("trcstop");
         exit(1);
     }
 
     exit(0);
}

Поскольку в качестве параметра функции trcstart() не был задан файл вывода, вывод трассировки помещается в файл /var/adm/ras/trcfile, который также является файлом ввода по умолчанию для команды trcrpt.


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