...или как измерить задержки вашего 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);карта захвата фирмы Endace — самое дорогое оборудование в этом списке, $50.
Как оказалось, «модные» карты для HFT (даже SF или Mlnx, что уж говорить про всякий интел), совершенно не умеют засекать маленькие интервалы времени. Для этого и была приобретена карта захвата. Но с ней другой прикол: без набора софта она абсолютно бесполезна (именно по этой причине на ебее они продаются сильно дешевле своей List Price). Для Solarflare или Mellanox базовые драйвера уже есть в ядре линукса (а к некоторым картам присутствуют и в стандартной поставке винды), а вот для Endace нам внезапно помогут итальянские хакеры, а точнее не они сами, а факт того, что они обделались в далёком 2015-м году и устроили незапланированный распределённый бэкап своих репозиториев, в одном из которых можно найти полный комплект нужного нам софта (правда, под очень древний линукс, ну штош...). Да, пришлось покопаться в софтовых окаменелостях, зато используемая карта даёт погрешность всего‑лишь +-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 |
120 |
603, 604, 603, 604, 604, 604 |
197..201 |
Вывод: мы успешно подогнали лабораторку измерили скорость света в стекле, и получили значение, очень похожее на правду.
А что там с HFT? А с ним всё просто. Тем же немудрёным способом, и тем же дешёвым железом можно измерить задержку от пакета с рыночными данными и до пакета выставления заявки.
Очень часто в рекламных буклетах есть заявления вида «лейтенси нашей вундер‑вафли составляет Х микросекунд! *» и * — измерено софтом. Рекомендуется всегда уточнять так называемый wire latency, да и измерить собственный тоже не помешает. В некоторых случаях результат может вас неприятно удивить...
«Классические» 5нс/метр оптики мы получили выше экспериментальным путём, но уже изобретено более быстрое волокно — hollow core fiber или photonic crystal fiber, в которых обещают что свет будет передаваться со скоростью света. Если у кого‑нибудь есть такое на тест, то с радостью приму;)
Комментарии (21)
Dynasaur
00.00.0000 00:00+8Ого! По-моему это очень круто! И оригинально.
Даже не верится что результат так точно совпал с теоретическим.
valvalva
00.00.0000 00:00Здравствуйте! Расскажите про dagsnap, ну и прочие подробности, какими командами пользовались?
YDR
00.00.0000 00:00+2я делал простенькую установку для измерения задержки распространения в логических элементах на основе генератора 20-100(?) МГц и фазового детектора на основе одного элемента 74АС86 и RC-цепочки (и вольтметра).
Измерения проводились на ряде частот, типа 20-25-30-35-..., затем строилась зависимость напряжения от частоты (вида "пила"), и из нее вычислялось время задержки.
Если заменить логический элемент на оптический передатчик и приемник, пусть даже медленный, даже 100 мегабит, то можно построить зависимость задержки от длины кабеля.
atd Автор
00.00.0000 00:00+1Да, кстати, надо попробовать с лазерной указкой и фотодиодом. Частота кварца на той плате 133.33 мгц, это вполне реально сделать на отдельных элементах или простенькой фпга.
me21
00.00.0000 00:00+8А я помню на Ютюбе видео, там внутрь микроволновки без поворотного столика клали шоколадку, чтобы она лежала на месте. Включали микроволновку, пока шоколад не начинал плавиться. Мерили расстояние между расплавленными пятнами на шоколаде и определяли длину волны. Частоту знаем. Считаем скорость)
Примерно так, если мне память не изменяет.
Dynasaur
00.00.0000 00:00+1Только что подумалось, что можно ведь измерить скорость света (в воздухе или стекле) ещё проще: Ставим зеркало подальше , шлём на него импульсы светодиодным лазером и принимаем отражённый сигнал фотодиодом. Если точно замерить разницу между отправленным импульсом и принятым сигналом - то вот оно. В принцпе, так работает лидар, то есть можно залезть в электронику готового лидара и считать оттуда задержку. В общем, я ничего не изобрёл :-)
rPman
00.00.0000 00:00+4Самый простой эксперимент, доступный сегодня обывателю — это прямое измерение скорости света (лазерная указка) в воздухе, проходящее через вращающееся колесо с периодическими отверстиями по периметру (или зубчатое колесо), и затем отраженное от зеркала (уголковый отражатель), размещенного на достаточном удалении, и вернувшееся обратно, проходящее через соседнее отверстие.
Более сложная схема, ее можно упростить благодаря лазерной указке
настраивается прибор таким образом чтобы пока колесо не вращается, луч света проходит дважды через него и виден глазу, затем необходимо вращать колесо с такой скоростью, чтобы луч света перестал мигать и погас (т.е. пока он двигается до зеркала и обратно, колесо должно провернуться минимум на один зуб), соответственно вычислять скорость света через расстояние до зеркала и скорость смены зуб/отверстие (фактически количество зубьев и обороты в секунду)
zanzack
00.00.0000 00:00+3получили значение, очень похожее на правду
Похоже на что? Погрешность у этого измерения есть?
Может там получилось 197 тыс км/с ± 100 тыс?atd Автор
00.00.0000 00:00+1197..201 это как раз с учётом заявленной погрешности в ±7.5нс (если записать по-другому, то получилось 199±2)
d33
Тем самым вы измерили скорость света в световоде оптического кабеля, которая в любом случае меньше, чем скорость света в вакууме.
atd Автор
Да, об этом несколько раз упоминается в тексте.
Balling
В любом случае? А это что?
https://en.wikipedia.org/wiki/Cherenkov_radiation
Gutt
Это движение заряженных частиц со скоростью, большей скорости света в данной среде. Так что да, в любом случае.
Tarakanator
Не обязательно. ТЕОРЕТИЧЕСКИ может быть и выше.
https://ru.wikipedia.org/wiki/Вакуум_Казимира#:~:text=Вакуум Казимира — форма физического вакуума,обычном вакууме (эффект Шарнхорста).