...или как измерить задержки вашего HFT‑сетапа не привлекая санитаров.
Эта статья является развернутым ответом на комментарий. Дело в том, что во многих статьях любят показать модное оборудование за триллиарды долларов, или выпендриться какими‑то крутыми новинками.
Я хочу показать, что всё это можно сделать из говна и палок дешёвых старых компонентов. И ответить на несколько типичных вопросов, первый из которых, сколько времени задержки добавляет лишняя длина кабеля. В биржевой инфраструктуре обычно используется 10G сеть, и для любых нетривиальных расстояний (более 3м, за пределы стойки) это будет оптика. Итак, мы будем измерять скорость света в оптическом кабеле, то есть в стекле.
Из школьного курса физики мы знаем, что скорость света это самая большая скорость во вселенной. Но она такая только в вакууме. А вот в любой прозрачной среде она зависит от показателя преломления, причём зависит достаточно просто: , где — скорость света в нашей среде, — скорость в вакууме (≈3×10⁸м/c), — показатель преломления (для стекла обычно ≈1.5). Значит V ≈ 200 тыс. км/c, давайте убедимся, что нас нигде не обманывают.
Итак, для эксперимента нам понадобится:
-
стеклянный провод, в котором собственно мы и будем гонять свет (у меня было несколько MM патч‑кордов разной длины);
-
лазеры и фотодиоды, а точнее, обычные SFP+трансиверы, которые будут отправлять свет в провод (и принимать его);
-
сетевая карта, которая будет управлять трансиверами (сами‑то они не сообразят когда и что делать);
-
ещё одна сетевая карта (а точнее, карта захвата), чтобы записывать, когда мимо неё пролетел свет;
-
способ отвести немного пролетающего мимо света из длинного кабеля (оптический сплиттер).
Для всего этого мы не будем использовать лабораторное оборудование, или специальные low‑latency свитчи. Попробуем пройтись по самому дну eBay и поймать что‑то там. Вот что у меня вышло:
-
MM LC‑LC провода бывают в очень разную цену, мне как‑то удалось урвать 3шт 20-метровых кабелей всего за $15. Короткие кабели китайцы продают за 1–2$;
-
SFP+трансиверы мультимод на 10г сейчас продаются за $5, иногда идут в комплекте с сетевухами, или даже на авито можно найти не сильно дороже;
-
сетевые карты:
Solarflare,простите, Xilinx, AMD предыдущих поколений (sfn6122f/sfn7122f) стоят в районе $20 за штуку, либо старый добрыйMellanoxNvidia mcx312a чуть дороже (за $30–40); -
оптический сплиттер (он же fiber tap) за $15 (полно вариантов производства
NetOpticsixiaKeysight); -
карта захвата фирмы после недолгой интрижки с Emulex-ом компания вернула старое название</p>" data-abbr="Endace ">Endace — самое дорогое оборудование в этом списке, $50.
Как оказалось, «модные» карты для HFT (даже SF или Mlnx, что уж говорить про всякий интел), совершенно не умеют засекать маленькие интервалы времени. Для этого и была приобретена карта захвата. Но с ней другой прикол: без набора софта она абсолютно бесполезна (именно по этой причине на ебее они продаются сильно дешевле своей List Price). Для Solarflare или Mellanox базовые драйвера уже есть в ядре линукса (а к некоторым картам присутствуют и в стандартной поставке винды), а вот для Endace нам внезапно помогут итальянские хакеры, а точнее не они сами, а факт того, что они обделались в далёком 2015-м году и устроили незапланированный распределённый бэкап своих репозиториев, в одном из которых можно гуглить HackedTeam</p>" data-abbr="найти">найти полный комплект нужного нам софта (правда, под очень древний линукс, ну штош...). Да, пришлось покопаться в софтовых окаменелостях, зато используемая карта даёт погрешность всего‑лишь +-7.5ns, а мелланокс вообще интервалы меньше 200ns не видит.
Если месиво проводов на картинке выше не очень понятно, то вот схема
Дальше мы просто отправляем одинокий пинг, а в это время записываем трафик через tcpdump dagsnap. После того, как проделаем эту операцию несколько раз с кабелями разной длины, составим итоговую таблицу, скорость посчитаем с учётом того, что внутри сплиттера есть 30–50 см «лишнего» кабеля, а точность измерения времени ±7.5нс:
длина кабеля, м |
время, нс |
скорость, тысяч км/c |
1 |
7, 7, 8, 7, 7, 7, 8 |
93..∞ |
5 |
29, 30, 30, 30, 30 |
145..235 |
7 |
30, 38, 44, 38, 38, 30 |
168..240 |
20 |
111, 105, 111, 104, 105 |
183..208 |
40 |
201, 201, 201, 202, 201 |
194..208 |
60 |
298, 298, 298, 305, 306, 298 |
194..206 |
три провода по 20м, туда-обратно</p>" data-abbr="120">120 |
603, 604, 603, 604, 604, 604 |
197..201 |
Вывод: мы успешно подогнали лабораторку измерили скорость света в стекле, и получили значение, очень похожее на правду.
А что там с HFT? А с ним всё просто. Тем же немудрёным способом, и тем же дешёвым железом можно измерить задержку от пакета с рыночными данными и до пакета выставления заявки.
Очень часто в рекламных буклетах есть заявления вида «лейтенси нашей вундер‑вафли составляет Х микросекунд! *» и * — измерено софтом. Рекомендуется всегда уточнять так называемый wire latency, да и измерить собственный тоже не помешает. В некоторых случаях результат может вас неприятно удивить...
«Классические» 5нс/метр оптики мы получили выше экспериментальным путём, но уже изобретено более быстрое волокно — hollow core fiber или photonic crystal fiber, в которых обещают что свет будет передаваться со скоростью света. Если у кого‑нибудь есть такое на тест, то с радостью приму;)
Автор: Антон Д