Измеряем скорость света в домашних условиях
…или как измерить задержки вашего HFT-сетапа не привлекая санитаров.
Эта статья является развернутым ответом на комментарий. Дело в том, что во многих статьях любят показать модное оборудование за триллиарды долларов, или выпендриться какими-то крутыми новинками.
Я хочу показать, что всё это можно сделать из говна и палок дешёвых старых компонентов. И ответить на несколько типичных вопросов, первый из которых, сколько времени задержки добавляет лишняя длина кабеля. В биржевой инфраструктуре обычно используется 10G сеть, и для любых нетривиальных расстояний (более 3 м, за пределы стойки) это будет оптика. Итак, мы будем измерять скорость света в оптическом кабеле, то есть в стекле.
Из школьного курса физики мы знаем, что скорость света это самая большая скорость во вселенной. Но она такая только в вакууме. А вот в любой прозрачной среде она зависит от показателя преломления, причём зависит достаточно просто: V = C/n, где V — скорость света в нашей среде, C — скорость в вакууме (≈3×10⁸м/c), n — показатель преломления (для стекла обычно ≈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 за штуку, либо старый добрый Mellanox Nvidia mcx312a чуть дороже (за $30–40);
оптический сплиттер (он же fiber tap) за $15 (полно вариантов производства NetOptics ixia Keysight);
карта захвата фирмы Endace — самое дорогое оборудование в этом списке, $50.
$110 лута с eBay
Как оказалось, «модные» карты для 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 fiber, в которых обещают что свет будет передаваться со скоростью света. Если у кого-нибудь есть такое на тест, то с радостью приму ;)