Санкт-Петербургский государственный политехнический университет
Факультет технической кибернетики
Кафедра Компьютерных систем и программных технологий
ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ
Дисциплина: СПО
Тема: 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.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.