Влияние колбэков на производительность

Страницы: 1
RSS
Влияние колбэков на производительность
 
Некоторые считают, что наличие пустых колбэков в скрипте не оказывает какой-либо значительной нагрузки на CPU.
Имеется ввиду, когда скрипт работает с одним или нескольким инструментом, а в колбэке стоит фильтр, отсеивающий все остальные инструменты, вида:
Скрытый текст

Давайте проверим. Для оценки оверхэда я буду использовать таблицу обезличенных сделок.
Сначала измеряем время загрузки таблицы с запущенным скриптом без колбэков (скрипт №1):
Скрытый текст

Затем измеряем время загрузки таблицы с запущенным скриптом, с пустым колбэком OnAllTrade (скрипт №2):
Скрытый текст

Как использовать:
  1. Настройка получения данных выполняется через пункт меню Система / Настройки / Основные настройки..., раздел «Программа» / «Получение данных» / «Обезличенные сделки»
    В поле «Выбрать классы инструментов» выбрать все без фильтров! Это важно для корректных измерений, ниже объясню почему.
    Если у вас уже выбраны все классы без фильтров этот шаг можно пропустить. Если нет, - то нажать кнопку «Перезаказать данные».
     
  2. Подождать пока прокачаются все сделки и запустить первый скрипт.
     
  3. Снова перезаказать обезличенные сделки и дождаться, когда скрипт выведет итоговый результат и остановится.
     
  4. Повторить 3-й пункт со вторым скриптом.
У меня получились такие результаты в QUIK 13.0.2.20:

Скрипт №1:
Код
38.9 s; num: 5497547; avg: 0.007 ms
Скрипт №2:
Код
with OnAllTrade:  79.8 s; num: 5513332; avg: 0.014 ms
В диспетчере задач это выглядит так:
Скрытый текст

Видно, что в первом случае упор идёт на пропускную способность канала (100 Мбит/с), т.е. гипотетически сделки могли загрузиться быстрее при более широком канале. Если у вас канал шире 100 Мбит/с, напишите, какие у вас результаты.
Во втором случае - занята только половина ширины канала. Очевидно упёрлись в CPU, и скрипт не успевает обрабатывать колбэки с той скоростью, с которой поступают сделки.
Среднее время обработки одной сделки в первом случае составляет 7 мкс, а во втором - 14 мкс.
Если у вас разницы нет, что с колбэком, что без него, значит узким местом является не процессор, а например, пропускная способность сети (подключение по Wi-Fi) или сервера.
Так, если выбрать заказ не всех обезличенных сделок, а только некоторых классов или отдельных инструментов, то время прокачки сделок с первым скриптом без колбэка практически не изменится, зато со вторым скриптом уменьшится. Это говорит о том, что данные поступают медленнее, чем их обрабатывает терминал, что не годится для оценки оверхэда.

Результаты при одновременном запуске 5 и 10 копий скрипта №1:
Код
39.3 s; num: 5566964; avg: 0.007 ms
39.3 s; num: 5566984; avg: 0.007 ms
39.3 s; num: 5566984; avg: 0.007 ms
39.3 s; num: 5566984; avg: 0.007 ms
39.3 s; num: 5566984; avg: 0.007 ms
Код
39.1 s; num: 5583868; avg: 0.007 ms
39.1 s; num: 5583867; avg: 0.007 ms
39.1 s; num: 5583868; avg: 0.007 ms
39.1 s; num: 5583868; avg: 0.007 ms
39.1 s; num: 5583868; avg: 0.007 ms
39.1 s; num: 5583868; avg: 0.007 ms
39.1 s; num: 5583868; avg: 0.007 ms
39.1 s; num: 5583868; avg: 0.007 ms
39.1 s; num: 5583868; avg: 0.007 ms
39.1 s; num: 5583868; avg: 0.007 ms
Скрытый текст

Среднее время на сделку не изменилось. Ограничением по-прежнему выступает пропускная способность канала.

Результаты при одновременном запуске 2 и 3 копий скрипта №2 (с колбэком):
Код
with OnAllTrade:  132.1 s; num: 5628639; avg: 0.023 ms
with OnAllTrade:  132.1 s; num: 5628645; avg: 0.023 ms
Скрытый текст

Код
with OnAllTrade:  180.1 s; num: 5680264; avg: 0.032 ms
with OnAllTrade:  180.1 s; num: 5680264; avg: 0.032 ms
with OnAllTrade:  180.1 s; num: 5680264; avg: 0.032 ms
Скрытый текст

Среднее время на сделку увеличивается примерно на ~9 мкс с добавлением каждого нового скрипта.

Данный тест показывает, что само по себе наличие даже пустого колбэка в скрипте оказывает влияние.
А поскольку колбэки работают в основном потоке квика, то это сказывается также и на работе графического интерфейса и квика в целом.
Надо делать так, как надо. А как не надо - делать не надо.
Страницы: 1
Читают тему
Наверх