3.1.1. Один сервер один клиент.
Результаты для трех входных данных с предыдущего рисунка (три дуги).
Из диаграммы видно, что сама интерполяция требует гораздо меньше времени, чем файловые операции выполняемые клиентом (особенно вывод результатов интерполяции в файл).
Сервер выходит из Receive-блокированного состояния 4 раза — три раза выполняет запросы клиента на интерполяцию и один раз принимает пульс посылаемый клиентом при отключении от канала (в name_close посылается пульс).
Некоторые участки более подробно.
Trace Log для сервера и клиента, в котором более подробно описаны
события отраженные на диаграмме.
По временной диаграмме и трейс логу видно,что довольно много времени занимает выделение памяти, потому что интерполяция выполняется в первый раз, и нужно выделить память под результат. На временной диаграмме этому соответствует розовая линия, в Trace Log это событие 3183 — сервер находиться в состоянии блокировки WaitPage, то есть ожидает выделания страницы памяти. Выделение памяти занимает порядка 3.5 ms.
Выполнение интерполяции сервером для второй дуги графика.
Trace Log:
По Trace Log можно определить сколько времени занимал прием сообщения, сколько времени интерполяция и сколько времени отправка результата.
Время передачи сообщения от клиента к серверу |
196.100 us |
Выполнение интерполяции |
503.617 us |
Время передачи ответного сообщения |
350.553 us |
Время реакции. Время между вызовами MsgSendEnter() и MsgSendExit() |
1.050 ms |
Выполнение интерполяции для третей дуги.
Trace Log.
Временные характеристики:
Время передачи сообщения от клиента к серверу |
237.100 us |
Выполнение интерполяции |
988.617 us |
Время передачи ответного сообщения |
281.988 us |
Время реакции. Время между вызовами MsgSendEnter() и MsgSendExit() |
1.507 ms |
Если провести сравнение характеристик выполнения интерполяций для каждой дуги, которые изображены на рисунке, то можно сделать следующие выводы.
Первая интерполяция имеет значительно большее время отклика из-за того, что происходит выделения памяти. Сам только процесс выделения памяти занимал порядка 3.5 ms.
Если сравнить интерполяцию второй и третей дуг, то для третей дуги время реакции больше так как она имеет больше точек(по графику видно). То есть результат закономерен. Чем больше точек — тем больше время реакции.
3.1.2. Один сервер и множество клиентов.
Эксперимент поставлен следующим образом:
· Сервер запускается из IDE, вместе с сервером запускается Trace Log;
· Клиенты запускаются на целевой платформе, для этого написан соответствующий скрипт, который так же можно запускать из IDE использую удаленный доступ через telnet.
Листинг 3.1.2. Скрипт запуска клиентов run_clients.sh
#!/bin/sh
cd Client_1
./CircularInterpolation_Client -l &
cd ../Client_2
./CircularInterpolation_Client -l &
cd ../Client_3
./CircularInterpolation_Client -l &
cd ../Client_4
./CircularInterpolation_Client -l &
cd ../Client_5
./CircularInterpolation_Client -l &
cd ../Client_6
./CircularInterpolation_Client -l &
cd ../Client_7
./CircularInterpolation_Client -l &
Timeline-диаграмма:
По диаграмме видно, что сервер опять же большую времени находится в ожидании. Время затрачиваемое на интерполяцию значительно меньше, чем время затрачиваемое на вывод результатов интерполяции в файл.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.