IDE Momentics - profiling. Настройка IDE QNX Momentics для исследования клиент-серверного приложения на локальной машине

Страницы работы

Содержание работы

Санкт-Петербургский государственный политехнический университет

Факультет технической кибернетики

Кафедра Компьютерных систем и программных технологий

ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ

Дисциплина: СПО

Тема: IDE Momentics - profiling

Выполнил ст. группы 4081/1:                                                                   

Преподаватель                                                                                           

Санкт-Петербург 2010

Настройка IDE QNX Momentics для исследования клиент-серверного приложения на локальной машине. Рассмотрим клиент-серверное приложение для обмена импульсами.

Создадим новый проект QNX C Project:

В проект добавляются файлы программ:

Программа server.c:

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <errno.h>

#include <sys/neutrino.h>

#include <sys/iomsg.h>

#include <sys/iofunc.h>

#include <sys/dispatch.h>

int main( int argc, char **argv)

{

int rcvid;

struct _pulse pulse;

struct _msg_info info;

name_attach_t *attach;

int chid;

attach = name_attach( NULL, "serv", 0 );

if ( attach == NULL )

{

printf("server:failed to attach name, errno %d\n", errno );

exit(1);

}

while(1) {

rcvid = MsgReceivePulse( attach->chid, &pulse, sizeof(pulse), &info);

printf("received value %d\n", pulse.value.sival_int);

}

return 0;

}

Программа client.c:

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <errno.h>

#include <sys/neutrino.h>

#include <sys/iomsg.h>

#include <hw/inout.h>

int main( int argc, char **argv)

{

int id;

int i;

int pid;

int srv_coid;

if ((srv_coid = name_open("serv", 0)) == -1) {

printf("failed to find server, errno %d\n", errno );

exit(1);

}

MsgSendPulse(srv_coid, 10, 1, 5);

if (name_close(srv_coid) == -1) {

fprintf(stderr, "%s: warning: in ConnectDetach(): %s\n", argv[0], strerror(errno));

}

return 0;

}

Отметим, что отслеживать информацию об изменении системы позволяет программа tracelogger:

tracelogger -w [-b num] [-d mode]

[-f file] [-F 0-6]

[-k num] [-M] [-n num]

[-s num] [-S size] [-v[v...]]

-b num — максимальное количество буферов в tracelogger'e. По умолчанию 64. Каждый буфер примерно 11 Кб.

-f file — задает файл выхода, по умолчанию /dev/shmem/tracebuffer.kev

-F num — применение различных фильтров

-n num — количество итераций

-s num — длительность в секундах

-S size — максимальный размер лога

-w — расширенный режим

Данная утилита создает лог-файл. В последствие лог, полученный утилитой tracelogger может быть рассмотрен в удобном виде через IDE.

Во вкладке Options настройки приложения в блоке Build Options нужно отметить пункт Build with Profiling:

Комбинацией CTRL+B построим проект для создания бинарного исполняемого файла.

Для настройки запуска программы переходим в окно Run->Run:

Появляется окно настройки параметров запуска проекта. В нём нужно указать исполняемый файл для запуска. В данном окне вводим имя конфигурации запуска и выбираем исполняемый файл.

Так как мы тестируем обмен данными на локальной машине, в терминале нужно запустить утилиту qconn, что бы можно было пользоваться локальным компьютером в качестве целевой платформы. Добавляем целевую платформу. Настройки IP в данном случае не играют роли.

Далее во вкладке tools окна настройки параметров запуска проекта добавляем Application Profiler:

 

Для запуска программы на целевой машине выбираем нужную сохраненную конфигурацию:

Результаты работы приложения представлены на рисунках сервер:

клиент:

Для отслеживания событий, происходящих в системе перейдем к представлению QNX System Profiler Perspective:

На панели Target Navigator выберем нужную целевую машину и откроем для нее Kernel Events Tracing...

Получаем окно с настройками слежения за системой:

По кнопке Next открывается окно с дополнительными настройками:

При нажатии кнопки Finish происходит запись лога происходящих событий:

Информацию о нужном процессе можно просмотреть, открыв соответствующий лог-файл .kev:

Как видно, отправка импульса не блокирует процесс, отправивший импульс. В данном примере клиент посылает несколько импульсов  друг за другом. После приема первого импулься, сервер переходит в состояние ready.

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

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

Похожие материалы

Информация о работе