Задался вопросом каковы потери (по времени) при использовании S# адаптера к Plaza2 (т.е. Есть ли смысл пытаться коряжеться и писать на С++?)
Не нашел подобной информации на форуме и решил поделиться полученными данными.
Задержку я измерял как время между тем как я отправил заявку и мне пришло уведомление, что заявка зарегистрирована.
Отправив таким образом 50 заявок я получил среднее значение в 60 мс.
Далее я написал в поддержку и попросил их прояснить куда уходит все это время.
Тогда они снабдили меня следующей инструкцией:
Цитата:
Включите (поставьте=1)
Send sent; id 0x%I64X; to_addr '%s'=1
Reply received; id 0x%I64X; reply_addr '%s'=1
в client_router_trace.ini. Пришлите номера заявок с вашими замерами раундтрипа мы посмотрим время обработки этих заявок на ядре торговой системы. Воспользуйтесь утилитой P2MQSender (ftp://ftp.rts.ru/pub/FORTS/Plaza2/mqsender.zip). Это клиентское приложение, подключающееся к роутеру по 4001 порту, производит замеры времени прохождения специально сформированных пакетов на сервер приема заявок. В P2MQSender.ini пропишите вместо старых
[p2syslog]
logfile=.\logs\P2MQSender.log
logfileperday=0
logfiledepth=1
logtoconsole=0
logfilecache=0
logfilenametype=1
traceini=P2MQSender_trace.ini
[options:mq]
appName=P2MQSender
port=4001
timeout=15000
host=localhost
password=
timeoutToAllReconnectingTriing=30000
[options:ap]
sendtimeout=100
;to=FINTER_FORTS3.P2MQEcho1
to=SQLPROXY1_P2FINTER.P2MQEcho
sendAmount=1000
После работы MQSender пришлите его логи.
Таким образом мы получаем две информации.
1) Время ответа шлюза на запросы отправляемые P2MQSender.
Это время можно понять открыв с генерированный им лог P2MQSender.log
Цитата:2012-12-14 15:46:31.649;;;P2MQSendMsg
2012-12-14 15:46:31.649;;error;MQ Timeout
2012-12-14 15:46:31.749;;;P2MQSendMsg
2012-12-14 15:46:31.749;;error;MQ Timeout
2012-12-14 15:46:31.849;;;P2MQSendMsg
2012-12-14 15:46:31.849;;error;MQ Timeout
2012-12-14 15:46:31.949;;;P2MQSendMsg
2012-12-14 15:46:31.949;;error;MQ Timeout
2012-12-14 15:46:32.049;;;P2MQSendMsg
2012-12-14 15:46:32.049;;error;MQ Timeout
откуда видно что задержка составляет меньше 1мс.
2) Время ответа шлюза при отправке заявки.
Это время можно понять открыв файл CLIENT_router.log и найдя в нем строки типа: (которые там появятся если внести выше описанные изменения в файл client_router.ini)
Цитата:2012-12-18 17:16:18.869;mqreply;;Send sent; id 0x31C8976FEC; to_addr 'BROK4_P2FINTER2.router';thread 0x12F8
...
2012-12-18 17:16:18.872;mqreply;;Reply received; id 0x31C8976FEC; reply_addr 'fg82cm_82000rf.router';thread 0x12F8
...
2012-12-18 17:16:19.381;mqreply;;Send sent; id 0x33C8976FEC; to_addr 'BROK4_P2FINTER2.router';thread 0x147C
2012-12-18 17:16:19.384;mqreply;;Reply received; id 0x33C8976FEC; reply_addr 'fg82cm_82000rf.router';thread 0x12F8
...
Откуда видно что на путешествие туда + обработку ядром ТС + путешествие обратно уходит ~ 3ms.
Приведу дополнительно ответ поддержки:
Цитата:
Из логов за 14 декабря видно, что задержка между отправкой пакета и получением ответа составляет в средем 3мс. Сейчас на Вашем канале round-trip min/avg/max = 1/2/8 ms
т.е. Если я все правильно понял то практически все задержки которые возникают возникают внутри адаптера к Plaza2. (По крайней мере так получаеться по словам поддержки которае подкрепляет свои слова логами)
P.S. Причем тут еще есть один нюанс. Сама по себе средняя в 60мс не так удивительна, удивительно то что значение задержки для каждой конкретной заявки варьируются от 5мс до 120мс т.е. дисперсия очень велика, что крайне не характерно для задержек вызываемых программой.