Компания Tesla открыла реализацию сетевого протокола TTPoE

Компания Тesla опубликовала наработки, связанные с сетевым протоколом TTPoE (Tesla Transport Protocol over Ethernet), разработанным для снижения задержек при передаче трафика в датацентрах и инфраструктурах, обеспечивающих работу систем машинного обучения. Компания Tesla намерена стандартизировать TTPoE и для достижения данной цели присоединилась к консорциуму UEC (Ultra Ethernet Consortium). Код реализации TTPoE написан на языке Си и открыт под лицензией GPLv2.

Протокол разработан для замены TCP в применениях, требующих низких задержек и высокой скорости передачи данных. Так же как TCP протокол TTPoE допускает отбрасывание пакетов и повторную передачу, полностью гарантируя при этом доставку всех отправленных данных. TTPoE рассчитан на использование в сетях с пропускной способностью выше 100Gbps и изначально был реализован на аппаратном уровне для обеспечения взаимодействия узлов в суперкомпьютере DOJO.

Внедрение TTPoE упростило добавление новых узлов в кластер DOJO, рассчитанный на обработку визуальной информации при обучении AI-моделей, что требовало передачи очень больших объёмов данных между узлами при необходимости обеспечить минимальные задержки, не превышающие несколько десятков микросекунд. Среди требований к протоколу отмечалась возможность относительно простой его реализации полностью на аппаратном уровне. В итоге был создан протокол, работающий поверх обычного Ethernet и заменяющий уровень TCP в сетевом стеке на протокол TTP, реализуемый при помощи значительно более простого конечного автомата (state machine). Использование Ethernet дало возможность организовать работу с использованием существующих Ethernet-коммутаторов.


Для уменьшения задержек в TTP по сравнению с TCP исключено состояние ожидания закрытия соединения (TIME_WAIT) и уменьшено число шагов при согласовании закрытия соединения. В TCP закрытие соединения сводится к отправке FIN-пакета, ожиданию подтверждения получения FIN-пакета, отправке подтверждения на подтверждение и перевод сокета на какое-то время в состояние TIME_WAIT, на случай поступления вне очереди задержавшихся пакетов. В TTP для закрытия соединения достаточно отправки кода закрытия и получения подтверждения о закрытии (CLOSE, CLOSE-ACK).

Похожим образом в TTP выполнена оптимизация открытия соединений. Вместо свойственного TCP трёхэтапного согласования нового соединения
(SYN, SYN-ACK, ACK) в TTP использовано два этапа (OPEN, OPEN-ACK). Внесённые в TTP упрощения также позволяют избавить программное обеспечение от необходимости явного открытия соединения – достаточно указать адрес для отправки или получения данных.

Для управления перегрузкой (Congestion Control) в TTP как и в TCP применяется отбрасывание пакетов, но без использования усложнённых алгоритмов контроля перегрузки на основе скользящего окна, которое меняет размер в зависимости от уровня потери пакетов. В TTP размер окна не меняется в зависимости от потери пакетов – пакеты прекращают отправляться после заполнения фиксированного буфера, записи удаляются из буфера после прихода подтверждения, а потери пакетов восполняются через повторную передачу данных, хранящихся в буфере. C одной стороны такой подход позволяет снизить задержки, но с другой стороны мешает эффективному использованию TTP в низкоскоростных и некачественных сетях с большой потерей пакетов.

Опубликованная программная реализация включает в себя модуль modttpoe.ko для ядра Linux, позволяющий организовать прямой канал связи между несколькими узлами в одном сегменте сети Ethernet, а также модуль modttpip.ko с реализацией TTP-шлюза (TTP-GW, Tesla Transport Protocol Gateway), позволяющего использовать штатный стек IPv4 поверх TTPoE без необходимости внесения изменений в приложения.

Release. Ссылка here.