Разработка клиент-серверного приложения. Алгоритм круговой интерполяции. Реализация алгоритма интерполяции в виде клиент-серверного приложения, страница 6

2.  Function Instrumentation profiling — позволяет определить более точное время выполнения участков кода программы с помощью специальных профилировачных функций, которые определены в библиотеке libprofilingS.a. Профилировачные функции вызываются в точках входа и выхода функции и собирают информацию о времени выполнения. Для использования такого профайлинга исполняемый файл должен быть собран с помощью опции линкера -lprofilingS.

            4.1. Исследование разработанного приложения с помощью Sampling and Call Count instrumentation profiling.

Следующие результаты приведены для данных результат интерполяции которых соответствует рис. 2.1.1. Клиент вызывается один раз.



Клиент посылает три сообщения — это подтверждается, функция обработки сообщения MsgProc() вызывается три раза.

Функции вычисления очередной точки вызываются столько раз, сколько точек в файлах с результатами интерполяции X.txt и Y.txt.  Так как две дуги из трех строятся в направлении по часовой стрелке, то функция nextPointClockWise() вызывается большее число раз.

Так же помимо написанных функций, в графе отражены функции стандартной библиотеки языка С++ - функции для работы с объектом стандартной библиотеки вектором, выделение памяти под элементы вектора, добавление нового элемента, удаление из памяти, работа с потоками ввода-вывода.

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

Суммарное для трех точек время выполнения интерполяции составляет приблизительно 2.7 мс.

По результатам полученным с помощь Sampling and Call Count, что суммарное время выполнения интерполяции меньше 1 миллисекунды. Получается довольно большая ошибка.

Особенность использования статистического профайлинга для определения времени работы программы — для точного результата необходимо достаточное число проеденных экспериментов.

Также можно было бы изменить период сбора статистической информации, но он задан 1 миллисекунде и его нельзя изменить.

Результат для более длительного времени работы:


Один клиент был запущен подряд 14 раз. Видно, что постепенно начинает набираться статистика.

4.2. Исследование разработанного приложения с помощью Function Instrumentation profiling. 

Function Instrumentation profiling позволяет более точно определить время выполнения участков кода.

Следующие результаты приведены для данных результат интерполяции которых соответствует рис. 2.1.1. Клиент вызывается один раз.


            Функция вычисления очередной точки интерполяции выполняется 2.9 мс, что согласуется с результатами, полученными с помощью системного профайлинга (приблизительно 2.7).

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

Так же при  Function Instrumentation profiling учитывается время, когда поток находится в блокированном состоянии. При использовании Sampling and Call Count instrumentation profiling учитывается только время, когда поток выполняется.

Выводы.

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

С помощью средств профилирования IDE Momentics можно определить важные характеристики ПО систем реального времени, а именно:

·  Время реакции системы на воздействие, время передачи/приема сообщений  (Kernel Trace);

·  Выявить наиболее затратные по времени участки кода  с целью дальнейшей оптимизации (Статистический анализ или Sampling and Call Count).

Так же с помощью  IDE Monentics довольно легко исследовать распределенные приложения, поскольку можно без проблем подключиться к нескольким целевым системам.