MT5 и скорость в боевом исполнении - страница 69

 
Andrei Trukhanovich:

как ты себе это представляешь - параллельную обработку в одном потоке?

Цикл событий event loop.
А вообще это проблема разработчиков, почему всё выполняется в одном потоке.

Получается Обзор рынка обрабатывается асинхронно, а обработчики в пользовательских программах, синхронно.
Шикардос просто, слов нет.

 

Спасибо за отзыв по статистике! Лаги OnTick/OnBook, похоже, есть у всех. Sleep(1) либо 1 ms, либо 15 ms. Отчего зависит - непонятно.

 
fxsaber:

 Лаги OnTick/OnBook, похоже, есть у всех. 

   Я думаю вы знаете, что OnTimer() не может вызываться чаще 10-16 миллисекунд.  Логично предположить, что и другие функции OnXXX вызываются не чаще. Может быть из-за    этого  и ваши лаги беруться ?

 
pivomoe:

   Я думаю вы знаете, что OnTimer() не может вызываться чаще 10-16 миллисекунд.  Логично предположить, что и другие функции OnXXX вызываются не чаще. Может быть из-за    этого  и ваши лаги беруться ?

Не логично, обработчики не привязаны к частоте/разрешению таймера GetTickCount. События срабатывают мгновенно в момент совершения.

OnTimer тоже не привязан к погрешности в 16 мс. Запросто можно получать в подавляющем большинстве случаев таймер в 1 мс, если комп не убит и не загружен на 100%.


Проблема практически всех тестов fxsaber в том, что он пытается замерять выбросы одиночных вызовов вместо усреднения множества и не желает понять реальности работы диспетчера потоков.

У него:

  • минимум 1500-2000 потоков на 4/8 ядер
  • бедолага менеджер потоков раскидывает их по безумно малому количеству исполнителей - люди напрочь не осознают, что у их задачи сотни конкурентов
  • временами просыпаются приоритетные потоки, которые съедают квантов времени больше других на короткое время
  • любой поток в любой момент может быть отодвинут от кормушки на существенное время - вот тебе и миллисекунды на банальном i++ (сколько раз повторять это?)

Методы борьбы, чтобы приблизиться к рилтайму:

  • больше ядер, чтобы разрузить менеджер потоков
  • безусловно новые CPU, с современными кешами, хорошей тактовой частотой и повышенным IPC(instructions per cycle/clock)
  • больше быстрой памяти и nvme диски, что резко снимают влияние любых сторонних аппетитов
  • правильные драйвера и биос, чтобы банальная сетевуха не устроила тихий саботаж по прерываниям (особенно чудовищно в виртуалках, где провайдерские админы не только не подозревают о проблематике, но им вообще неведомы вопросы задержек, SR-IOV и разгрузки/развязки узких мест)
  • средненькая дискретная видеокарта, способная снять любые 2D нагрузки отрисовки интерфейсов операционки и программ (на серверах и виртуалках всегда боль)
  • уменьшение количества неиспользуемых процессов/программ
  • уменьшение количества периферийного ненужного оборудования и их драйверов

Отсюда мораль - на обычных классических VPS терминалы(как и любые другие программы) всегда будут страдать из-за неожиданных задержек. Чем более дешев/перепродан VPS, тем больше проблем.

Поинтересуйтесь на своих VPS, включен ли SR-IOV и есть ли последние(ставятся только и только вручную) специальные драйвера сетевух под него? В 99% случаев нет, так как это ломает миграцию виртуалок по зоопарку железа. А без него дополнительные задержки гарантированны просто из-за двойной(на хосте и виртуалке) передачи/обработки сетевых пакетов и повышенном количестве прерываний.

Наш VPS сервис этому подвержен на порядки меньше как по архитектуре, так и по облегченным терминалам без GUI.

 
Renat Fatkhullin:

Не логично, обработчики не привязаны к частоте/разрешению таймера GetTickCount. События срабатывают мгновенно в момент совершения.

OnTimer тоже не привязан к погрешности в 16 мс. Запросто можно получать в подавляющем большинстве случаев таймер в 1 мс, если комп не убит и не загружен на 100%.


Проблема практически всех тестов fxsaber в том, что он пытается замерять выбросы одиночных вызовов вместо усреднения множества и не желает понять реальности работы диспетчера потоков.

У него:

  • минимум 1500-2000 потоков на 4/8 ядер
  • бедолага менеджер потоков раскидывает их по безумно малому количеству исполнителей - люди напрочь не осознают, что у их задачи сотни конкурентов
  • временами просыпаются приоритетные потоки, которые съедают квантов времени больше других на короткое время
  • любой поток в любой момент может быть отодвинут от кормушки на существенное время - вот тебе и миллисекунды на банальном i++ (сколько раз повторять это?)

Методы борьбы, чтобы приблизиться к рилтайму:

  • больше ядер, чтобы разрузить менеджер потоков
  • безусловно новые CPU, с современными кешами, хорошей тактовой частотой и повышенным IPC(instructions per cycle/clock)
  • больше быстрой памяти и nvme диски, что резко снимают влияние любых сторонних аппетитов
  • правильные драйвера и биос, чтобы банальная сетевуха не устроила тихий саботаж по прерываниям (особенно чудовищно в виртуалках, где провайдерские админы не только не подозревают о проблематике, но им вообще неведомы вопросы задержек, SR-IOV и разгрузки/развязки узких мест)
  • средненькая дискретная видеокарта, способная снять любые 2D нагрузки отрисовки интерфейсов операционки и программ (на серверах и виртуалках всегда боль)
  • уменьшение количества неиспользуемых процессов/программ
  • уменьшение количества периферийного ненужного оборудования и их драйверов

Отсюда мораль - на обычных классических VPS терминалы(как и любые другие программы) всегда будут страдать из-за неожиданных задержек. Чем более дешев/перепродан VPS, тем больше проблем.

Поинтересуйтесь на своих VPS, включен ли SR-IOV и есть ли последние(ставятся только и только вручную) специальные драйвера сетевух под него? В 99% случаев нет, так как это ломает миграцию виртуалок по зоопарку железа. А без него дополнительные задержки гарантированны просто из-за двойной(на хосте и виртуалке) передачи/обработки сетевых пакетов и повышенном количестве прерываний.

Наш VPS сервис этому подвержен на порядки меньше как по архитектуре, так и по облегченным терминалам без GUI.

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

 
Roman:

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

Не будет никакого ускорения. Представьте Ваши выкладки, хотя бы в приблизительных цифрах, доказывющие многократное ускорение.

Гонки за ресурсы? Бесконтрольное создание новых потоков? Конфликты на ровном месте?

Хотите необъяснимых тормозов?

В событийной модели все события всегда ходили строем, по очереди. Жёвано - пережёвано.

 
Renat Fatkhullin:

Наш VPS сервис этому подвержен на порядки меньше как по архитектуре, так и по облегченным терминалам без GUI.

Если будут лаги на Вашем VPS-сервисе - будете воспринимать всерьез?

Кто использует VPS от MQ, просьба поделиться результатом работы там следующих программ.

  1. Советник, который ловит лаги OnTick/OnBook.
  2. Советник, который ловит тики со старым временем.
  3. Скрипт, который замеряет среднее время выполнения Sleep(1).
 
Как заставить Sleep(1) выполняться быстрее?
 
fxsaber:

Если будут лаги на Вашем VPS-сервисе - будете воспринимать всерьез?

Интересно, сколько еще раз повторять, что при таком (тысячи) количестве потоков на ограниченное количество ядер вообще безумно говорить о стабильности выделения квантов времени на поток?


Вы всегда гарантированно будете иметь провалы на рандомных одиночных замерах любых команд, включая простейшие ассемблерные типа inc eax. Это архитектурно и объясняется физическими ограничениями "честного распределения квантов времени тысяч потоков на маленькое количество ядер".

Хватит уже тупить и продолжать ловить одиночные выбросы на миллион запросов.

 
Renat Fatkhullin:

Хватит уже тупить и продолжать ловить одиночные выбросы на миллион запросов.

С одиночными выбросами понятно, спасибо за подробные объяснения. В данный момент все же обсуждаем не SymbolInfoTick, а лаги другого характера, которые сыпятся почти на каждом тике.