Андрей К
Андрей К личный блог
22 марта 2017, 18:19

Современные железяки в алго.

Вместо введения


Представим ситуацию.

  • Написали код алгоритма. Оказался медленный.
  • Посидели, подумали, перестроили алгоритмы расчета. Ускорился. Мало.
  • Применили мета программирование в сложных расчетах. Получше.
  • Посидели, по профилировали, нашли узкие места в коде. Ускорили. Уже ничего.
  • Применили разные модели распараллеливания кода. Сервисные функции закинули в одно ядро, расчеты раскинули по ядрам. Сидим греем камень. Получше.
  • Максимум попытались убрать места, чтобы код не обращался в ОС
В общем что дальше? Дальше ищем прирост в железе. Вроде логично. Про бытовые моменты писать не буду, процессор там погнать или еще чего. Затрону специфичное оборудование.

Сетевой уровень.


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


Для обычного разработчика тут достаточно много черного ящика. Мол, мое приложение получает данные, а что там и как там происходит, мне не подвластно и закрыто. По запросам западных алготрейдеров, производители пошли на встречу и разработали такое сетевое оборудование, которое такую схему превращает в следующую:
Современные железяки в алго.
Рассмотрим классическую подробную схему получения сетевых данных на уровне приложения.
Современные железяки в алго.

Современные железяки в алго.
Современные железяки в алго.

Как видим, приложение приходится общаться с ОС. На профессиональном сленге, это звучит как «вывалиться в kernel-space» или «вывалиться в ядро». Дело в том, что общение с ОС это всегда дорого по времени. Разработчики при проектировании всегда стараются оставаться в пределах user-space и не вываливаться в ядро. Тут то на помощь и пришли производители оборудования. По запросу трейдеров начали выпускать специальное сетевое оборудование. И классическая схема на сетевом уровне преобразовывается в следующую схему:

Современные железяки в алго.
Современные железяки в алго.
     Как видим. ОС мы вообще выключили из цепи. Приложение работает у себя только с памятью. При этом, при правильном построении методов работы, можно значительно сократить операций копирования памяти, операций обработки массивов данных. Все это несомненный плюс приросту.
     ТОП производители на сегодняшний день это Intel, Solarflare. Ценовой уровень оригинальных карт хорошего класса на сегодняшний день примерно 1500$. Есть конечно и китайские аналоги на оригинальных чипах, подешевле. Для набития шишек и они наверное пойдут.
     Карты так же поставляются с коробочным ПО, при котором разработчику ничего не нужно делать. Коробочное ПО само перехватывает все сетевые вызовы приложения, обрабатывает и отдает результат. Кстати основные разработчики данного ПО — это российская компания из Питера. Мастера своего дела, их знает весь мир.
     Так же есть и low-level API, где разработчик сам может опуститься на низкий уровень программирования и поработать с картой напрямую. 

Тут я прервусь, сохранюсь и продолжу.
37 Комментариев
  • TT
    22 марта 2017, 18:43
    Давайте лучше про приоритезацию интернет-трафика. Ну чтоб мои пакеты вперед всех прочих ходили.
  • Stoic
    22 марта 2017, 19:01
    Про алготрейдинг будет че?)
  • sortarray sortarray
    22 марта 2017, 19:01
    Это все как то наивно:). Неужели издержки на работу с сокетами оси настолько критичны по сравнению с издержками на саму сеть(передачу данных)? Не является ли это классикой преждевременной оптимизации?
  • sortarray sortarray
    22 марта 2017, 19:09
     данные с биржи можно получать примерно по такой схеме

    кстати, попутно вопрос возник. А как  получаются данные с биржи? Pull или push? То есть, клиент сам запрашивает данные, или биржа рассылает? Или и то и другое доступно? Судя по вашей схеме, там push, но я так подозреваю, что это упрощенная схема, поэтому спрашиваю

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн