Инфраструктура исполнения — это весь путь от появления котировки в сетевой карте до подтверждения ордера обратно, и меряется он не средним значением, а распределением. Наша медианная задержка на основном контуре сейчас 41 микросекунда, но управляем мы не ею, а девяносто девятым перцентилем: он держится в пределах 96 мкс, и любой выход за 150 мкс поднимает алерт. Разница между этими числами и есть предмет работы — стратегия с медианой 41 мкс и хвостом в 600 мкс на практике работает как стратегия с задержкой 600 мкс, потому что именно на хвосте случаются самые дорогие ордера.
Октябрь 2022 года объяснил нам это дороже, чем хотелось бы. Одно из маркет-мейкинговых направлений показывало на бэктесте 0.31% в месяц, а в проде за три недели вышла в минус 0.08%. Все средние метрики выглядели штатно: медиана задержки 44 мкс, средняя 61 мкс, аптайм 100%. Проблема нашлась в хвосте — 0.4% ордеров уходили с задержкой около 640 мкс, и это были не случайные ордера, а именно те, что отправлялись в моменты всплеска потока котировок, то есть ровно тогда, когда цена двигалась. Эти 0.4% ордеров дали 34% всего отрицательного проскальзывания портфеля за период.
Причина оказалась не в сети и не в расстоянии до площадки, а в паузах сборщика мусора в компоненте нормализации котировок: при потоке выше 180 тысяч сообщений в секунду он начинал выделять память быстрее, чем успевал её освобождать. Мы переписали горячий путь на предварительно выделенных буферах без аллокаций в рантайме, зафиксировали потоки на конкретных ядрах и вынесли логирование в отдельный кольцевой буфер с записью на диск вне торгового пути. Девяносто девятый перцентиль упал с 640 до 103 мкс, медиана при этом улучшилась всего на 3 мкс — то есть средняя скорость почти не изменилась, а результат портфеля вернулся к расчётным значениям за два месяца.
Колокация даёт свои 4–6 миллисекунд по сравнению с размещением в офисе, и это первое, что стоит сделать, но она же создаёт ложное чувство завершённости работы. После переезда в лондонский дата-центр в 2019 году сетевая часть перестала быть узким местом вообще: сейчас на неё приходится около 12 мкс из 41, остальные 29 — это наш собственный код и стек операционной системы. Именно поэтому мы держим постоянное измерение задержки по каждому этапу пути с разметкой временем на входе в сетевую карту, а не по времени приложения: расхождение между этими двумя часами в худшие дни доходило у нас до 200 мкс и полностью скрывало реальную картину.
Ключевые наблюдения
- Медиана задержки на основном контуре 41 мкс, девяносто девятый перцентиль 96 мкс, алерт на 150 мкс
- В октябре 2022 хвостовые 0.4% ордеров с задержкой 640 мкс дали 34% всего отрицательного проскальзывания
- Причина была не в сети, а в паузах сборщика мусора при потоке выше 180 тыс. сообщений в секунду
- После переписывания горячего пути p99 упал с 640 до 103 мкс, медиана — всего на 3 мкс
- Из 41 мкс полного пути на сеть приходится около 12, остальное — собственный код и стек ОС
- Разметка времени берётся с сетевой карты: расхождение с часами приложения доходило до 200 мкс
Средняя задержка — самая бесполезная метрика в исполнении. Стратегию убивают 0.4% ордеров, которые уходят в десять раз медленнее остальных, причём ровно в те секунды, когда цена и двигается.
— Mr. Kernel, технический директор
Галерея
Частые вопросы
Что важнее — низкая средняя задержка или её стабильность?
Стабильность, и с большим отрывом. Контур со стабильными 90 мкс предсказуем и его поведение можно заложить в модель, а контур с медианой 40 мкс и хвостом 640 мкс ведёт себя как медленный, потому что промахи концентрируются в самые волатильные секунды.
Насколько сильно помогает колокация?
Переезд из офиса в дата-центр рядом с площадкой снимает порядка 4–6 миллисекунд, и это самый крупный единичный выигрыш, который вообще можно получить. Но после него сеть перестаёт быть узким местом: у нас на неё приходится 12 мкс из 41, а дальше борьба идёт уже с собственным кодом.
Как понять, что проблема в моей инфраструктуре, а не в стратегии?
Сравните проскальзывание на спокойном рынке и в первые секунды после выхода макроданных. Если во втором случае оно вырастает непропорционально, дело почти наверняка в хвосте задержки, а не в качестве сигнала — у нас именно это расхождение и вывело на паузы сборщика мусора.
Что происходит при отказе основного канала?
Переключение на резервный контур автоматическое, целевое время — 2 секунды, за которые новые ордера не отправляются, а открытые позиции остаются под защитой серверных стопов на стороне площадки. Проверяем это переключение раз в квартал на живом трафике в выходной, а не по документации.
Что запомнить
- Замените среднюю задержку на девяносто девятый перцентиль в своей отчётности — средняя скрывает ровно те ордера, которые стоят денег
- Разметьте время на входе в сетевую карту, а не в приложении: расхождение часов в худшие дни у нас достигало 200 мкс и делало метрики бессмысленными
- Сравните своё проскальзывание в спокойные часы и в первые секунды после макроданных — расхождение указывает на инфраструктуру, а не на стратегию
- После колокации не считайте работу законченной: у нас 29 из 41 мкс пути живут в собственном коде и стеке операционной системы