Botnet & Velocity
Привет, Велосити. Когда-нибудь задумывалась, как задержка пакетов может испортить личный рекорд? Я тут цифры перебирал, микросекундные изменения высчитывал, чтобы миллисекунды от высокочастотных сделок выжать – может, поделимся опытом, как выжать максимум скорости?
Божечки, пинг просто ужасный — каждая микросекунда на счету, когда вырываешься из позиции. Я тут даже сетевые задержки записываю, время отклика и глубину очереди роутера. Давай обменяемся данными; могу прислать тебе свой лог задержек, и кину тебе свои идеи по оптимизации. Вместе обязательно выжмем эти секунды.
Отлично, договорились. Пришли мне лог и информацию о внесенных изменениях, я быстро пробегусь по нему и поищу, как еще можно выжать 10-15 микросекунд из твоих RTT. Потом скину тебе пару идей, как удержать глубину очереди от роста. Только данные чистые, без всяких секретов, и будет все в порядке.
Вот лог, как есть, без всяких наворотов и скрытых пакетов. Я выделила скачки джиттера и предупреждения о переполнении очереди. Мои основные изменения: уменьшила размер окна TCP до 32 килобайта, включила передачу без копирования и увеличила объединение прерываний сетевой карты до 20 микросекунд. Убери все лишние вычисления контрольных сумм, старайся держать размер пакетов минимальным. Проверь, пожалуйста, я надеюсь, ты заметишь участок длительностью 10-15 микросекунд. Расскажи, что найдёшь.
Я проанализировал трассировку. Скачки джиттера совпадают с прерываниями сетевой карты – уже сейчас слияние до 20 микросекунд близко к пределу. Zero-copy и оптимальный размер пакета помогают, но окно в 32 килобайта слишком мало для линии на 100 мегабит; я вижу затор, который добавляет около 8 микросекунд на пакет, когда очередь достигает 4 пакета. Если увеличишь окно до 64 килобайта и оставишь zero-copy, очередь будет очищаться быстрее, примерно на 12 микросекунд. Попробуй ещё отключить TCP-метки времени; лишний 12-байтный заголовок добавляет микрозадержку на каждом узле. Эти два изменения должны привести тебя к оптимальным 10-15 микросекунд.
Отличная работа, эта подстройка окна позволит поддерживать стабильный поток — сэкономлено ровно то, что мне нужно. Отключение меток времени – хорошая идея, эти 12-байтные обрезки – просто мусор. Я сниму 64-килобайтную настройку, оставлю zero-copy и перемеряю. Если джиттер все равно будет скакать возле 20 микросекунд, попробую увеличить объединение до 15 микросекунд и посмотрю, справится ли с этим аппаратная часть сетевой карты. Зафиксируем это и следим, чтобы очередь не превышала двух пакетов. Готова добиваться желаемого диапазона 10-15 микросекунд.
Отлично, зафиксируй настройки и следи за глубиной очереди. Если эти 20-микросекундные всплески всё ещё будут, попробуй установить коалесценцию в 15 микросекунд – это может снизить джиттер. Только убедись, что частота прерываний сетевой карты не взлетит до небес. Сообщи, как выглядят новые замеры. Удачи с переключением.
Настройки зафиксированы, буфер окна выставлен на 64 килобайта, zero-copy работает, метки времени отключены. Я только что посмотрела свежий трейс — глубина очереди остаётся на двух пакетах, джиттер около 12 микросекунд, и пики в 20 микросекунд пропали. Кажется, мы попали в оптимальную зону. Слежу за частотой прерываний, пока всё стабильно. Дай знать, если что-то изменится.
Отличная работа, Велосити. Джиттер 12 микросекунд, очередь на двух – очень даже неплохо. Следи за количеством прерываний; если начнёт расти – придётся снизить объединение. Но пока ты попала в идеальную точку. Пиши, если что-то изменится.