Измеряем скорость света в домашних условиях

…или как измерить задержки вашего HFT-сетапа не привлекая санитаров.

Эта статья является развернутым ответом на комментарий. Дело в том, что во многих статьях любят показать модное оборудование за триллиарды долларов, или выпендриться какими-то крутыми новинками.

Я хочу показать, что всё это можно сделать из говна и палок дешёвых старых компонентов. И ответить на несколько типичных вопросов, первый из которых, сколько времени задержки добавляет лишняя длина кабеля. В биржевой инфраструктуре обычно используется 10G сеть, и для любых нетривиальных расстояний (более 3 м, за пределы стойки) это будет оптика. Итак, мы будем измерять скорость света в оптическом кабеле, то есть в стекле.

Из школьного курса физики мы знаем, что скорость света это самая большая скорость во вселенной. Но она такая только в вакууме. А вот в любой прозрачной среде она зависит от показателя преломления, причём зависит достаточно просто: V = C/n, где V — скорость света в нашей среде, C — скорость в вакууме (≈3×10⁸м/c), n — показатель преломления (для стекла обычно ≈1.5). Значит V ≈ 200 тыс. км/c, давайте убедимся, что нас нигде не обманывают.

Итак, для эксперимента нам понадобится:

  • стеклянный провод, в котором собственно мы и будем гонять свет (у меня было несколько MM патч-кордов разной длины);

  • лазеры и фотодиоды, а точнее, обычные SFP+трансиверы, которые будут отправлять свет в провод (и принимать его);

  • сетевая карта, которая будет управлять трансиверами (сами-то они не сообразят когда и что делать);

  • ещё одна сетевая карта (а точнее, карта захвата), чтобы записывать, когда мимо неё пролетел свет;

  • способ отвести немного пролетающего мимо света из длинного кабеля (оптический сплиттер).

Для всего этого мы не будем использовать лабораторное оборудование, или специальные low-latency свитчи. Попробуем пройтись по самому дну eBay и поймать что-то там. Вот что у меня вышло:

  1. MM LC-LC провода бывают в очень разную цену, мне как-то удалось урвать 3шт 20-метровых кабелей всего за $15. Котроткие кабели китайцы продают за 1–2$;

  2. SFP+трансиверы мультимод на 10 г сейчас продаются за $5, иногда идут в комплекте с сетевухами, или даже на авито можно найти не сильно дороже;

  3. сетевые карты: Solarflare, простите, Xilinx, AMD предыдущих поколений (sfn6122f/sfn7122f) стоят в районе $20 за штуку, либо старый добрый Mellanox Nvidia mcx312a чуть дороже (за $30–40);

  4. оптический сплиттер (он же fiber tap) за $15 (полно вариантов производства NetOptics ixia Keysight);

  5. карта захвата фирмы Endace — самое дорогое оборудование в этом списке, $50.

$110 лута с eBay

$110 лута с eBay

Как оказалось, «модные» карты для HFT (даже SF или Mlnx, что уж говорить про всякий интел), совершенно не умеют засекать маленькие интервалы времени. Для этого и была приобретена карта захвата. Но с ней другой прикол: без набора софта она абсолютно бесполезна (именно по этой причине на ебее они продаются сильно дешевле своей List Price). Для Solarflare или Mellanox базовые драйвера уже есть в ядре линукса (а к некоторым картам присутствуют и в стандартной поставке винды), а вот для Endace нам внезапно помогут итальянские хакеры, а точнее не они сами, а факт того, что они обделались в далёком 2015-м году и устроили незапланированный распределённый бэкап своих репозиториев, в одном из которых можно найти полный комплект нужного нам софта (правда, под очень древний линукс, ну штош…). Да, пришлось покопаться в софтовых окаменелостях, зато используемая карта даёт погрешность всего-лишь ±7.5ns, а мелланокс вообще интервалы меньше 200ns не видит.

собираем несложную конструкцию

собираем несложную конструкцию

Если месиво проводов на картинке выше не очень понятно, то вот схема

4a9088859e352b3ae96263b5567aef88.jpg

Дальше мы просто отправляем одинокий пинг, а в это время записываем трафик через 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, в которых обещают что свет будет передаваться со скоростью света. Если у кого-нибудь есть такое на тест, то с радостью приму ;)

© Habrahabr.ru