Блог им. karat39

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

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


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

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

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


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


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

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

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

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

Тут я прервусь, сохранюсь и продолжу.
★15
37 комментариев
Давайте лучше про приоритезацию интернет-трафика. Ну чтоб мои пакеты вперед всех прочих ходили.
avatar
TT, К сожалению, ничего в этом не понимаю =))
avatar
TT, кстати на IP уровне, в заголовке пакета, есть пару бит, отвечающие за приоритет. Все буквари говорят о том, что мол не используется, особенно в nix системах. Я запланировал этот миф проверить, но пока еще руки не дошли. =))
avatar
Андрей К, все современные гейтвеи игнорят этот флаг, т.к. есессно все производители начали обузить его чтоп лучше на фоне казаться
avatar
Arsen G, понятно, буду знать, спасибо.
avatar
Андрей К, это лажа  не так, просто все решения, так или иначе юзающие DSCP/TOS вендороспецифичные, и т.о. требующие условного VPN, реализуемого инфраструктурой одного ISP оператора или не одного (но на базе некой договоренности), а не так, чтоб весь такой ip-трафик ходил безусловно с приоритетом ч/з любую железку
avatar
Андрей К, я б даже сказал, все мультисервисные продукты и (кстати) «мультикастовые» решения за счет различных реализаций QoS седня и живут. для отдельных приложений  в рамках нескольких vpn-сетей (ту же биржу взять, вне коло).

а fast остался еще через инет, не?
avatar
flextrader, фаст через инет не знаю. Ни разу не пробовал. Секрет может скажет.
avatar
Про алготрейдинг будет че?)
avatar
Stoic, да вряд ли, можно расходиться =))
avatar
Это все как то наивно:). Неужели издержки на работу с сокетами оси настолько критичны по сравнению с издержками на саму сеть(передачу данных)? Не является ли это классикой преждевременной оптимизации?
avatar
sortarray sortarray, ну придумали то не просто так =). 
Хотел вам предложить померить издержки сокета, да навряд ли получится.
avatar
sortarray sortarray, забыл сказать, что это только вступление было. Подводка к основным железякам. Да я что то так выдохся, рисуя данный пост, что не знаю когда продолжу =)
avatar
Андрей К, очень понравились диалоги между железяками! рисуйте ещё! :)
avatar
avento (О.К.), =)) я старался, спасибо
avatar
sortarray sortarray, с коробочным ПО уже критично получается, наверное )
avatar
ale osetr, коробочное ПО организует на базе возможностей железа полностью свой сетевой стек. Благодаря прямому доступу конечно прирост есть, хороший. Но сами понимаете, пока они там стек построят, пока вызовы перехватят =), вообщем думаю вы меня поняли
avatar
 данные с биржи можно получать примерно по такой схеме

кстати, попутно вопрос возник. А как  получаются данные с биржи? Pull или push? То есть, клиент сам запрашивает данные, или биржа рассылает? Или и то и другое доступно? Судя по вашей схеме, там push, но я так подозреваю, что это упрощенная схема, поэтому спрашиваю
avatar
sortarray sortarray, доступно и то и то. Можно запрашивать, можно по широковещательному (multicast) получать. Данные девайсы затачивают под широковещание, так как формат общемировой и прост в обработке.
На одной из конференций, производителям задали вопрос, а почему вы то и то (какие то фишечки) не реализуете, они так и ответили — а трейдерам это не надо.

Кстати, они же, железяки, прижились и в банковской сфере, там где нагруженный трафик из за транзакций.
avatar
Та это все детский сад, уже есть решения на масс маркете куда по продвинутее, но все ровно будет проигрывать всякого рода айсикам.
avatar
Алексей С, продвинутей старшие серии карт, lan + fpga на одной плате. Я просто не дописал, устал это писать.
avatar
Андрей К, Алексей имел в виду, что шунтирование IP слоя в приложение не является эксклюзивной задачей трейдеров. Это очень популярная технология и применяется для многих high-load сетевых решений. На счет lan+fpga, это может имееть смысл для аппаратного декодирования fast. Идея правильная им всячески интересная, но пока биржа не разберется с тем как ущербно она распространяет дату, это все не имеет смысла, по крайней мере на срочке.
avatar
— а почему ничего не сказано по миграцию части кода на GPU ?
— не нужны эти карты за 1.5k — системный вызов используешь для байпаса и все
avatar
nbvehrfr, я планировал затронуть чуть позже. Но честно сказать, я эту тему знаю поверхностно. GPU больше для обработки больших массивов данных, я с таким трейдингом не очень знаком. А частота ядер на gpu не айс, точнее мне точно не подойдет. Я планировал, если кто в обсуждении затронет, я бы с удовольствием почитал
avatar
На чем писали? Какой терминал? Какое подключение?
avatar
Чёрный кот, для такого железа терминалы не нужны.
Если использовать с коробочным ПО, то можно писать на многом. 
В тексте речь больше не о подключениях, а о сетевом стеке =)
avatar
Андрей К, понятно)  Ну GPU думаю не поможет, т.к. там больше для параллельной обработки нескольких потоков вычислений. Если потоков мало, то нет ничего быстрее FPGA.
avatar
Чёрный кот, если отдельный fpga, без сети, то вопрос такой скользкий. В эту fpga нужно траффик еще доставить. 

Другой момент, что брать сразу lan + fpga на одной плате и там два чипа связаны одной шиной, это да. 7500$ цена такого уровня железа.

Есть еще интересный момент. Насчет fpga. Когда intel начали пиарить в 2014году свои процессоры на одной крупной конференции, они провели масштабные тесты, где показали, что такая сетевая карта + их последний cpu на 4 ядра на тот момент, обходит последнюю fpga altera при разборе UDP
avatar
Андрей К, так вроде полно плат с lan + fpga, а 7500 это за какую плис?

Если без сети, то есть типа PCIe FPGA Accelerator Card. Сразу в комп втыкается.

Вы мутите какой-то супер HFT?
avatar
Чёрный кот, 7500 за топовую вышеупомянутую =). Про другие я как то не подумал. Тут лучше в этом деле использовать устоявшиеся =) На мой взгляд. Все таки еще нужно учесть какие есть возможности для их программирования и совмести это все со своим опытом.

Без сети, я все таки придерживаюсь мнения, что уже не так актуально. Я примерно знаю задержки, чтобы доставить пакеты в эту pci-e fpga через общую шину. Скользкий вопрос. Тут нужно обладать результатами многих карт, чтобы сразу потратиться на нужную, а такого никто не даст.
avatar
Чёрный кот, а за ссылку спасибо кстати. Поковыряю, что за интел железяка.
avatar

Народ, это было введение.

В следующем посте будет адрес той питерской конторы. 

Бабки все приготовили? Ха-ха-ха!

avatar
rename37, нет, желание пока пропало писать. А адрес и название компании все знают, писать незачем.
avatar
да… щас бы ос выкинуть нахрен как ненужный рудимент когда сидишь по инету из дома и пару раз в секунду чёто там где-то проверяешь)))
Интересно и полезно для образования. Пиши дальше.
avatar
Господа, а может просто поторгуем :))))
avatar
Игорь Алексеевский, может и поторгуем
avatar

теги блога Андрей К

....все тэги



UPDONW
Новый дизайн