Тesla представила наработки, которые касаются развития сетевого протокола TTPoE (Tesla Transport Protocol over Ethernet) для снижения задержек при передаче трафика в дата-центрах при работе систем машинного обучения. Компания присоединилась к консорциуму UEC (Ultra Ethernet Consortium) для стандартизации протокола.
Код реализации TTPoE написан на языке Си и открыт под лицензией GPLv2.
Протокол призван заменить TCP там, где требуются низкие задержки и высокая скорость передачи данных. Он предусматривает отбрасывание пакетов и повторную передачу, при этом обеспечивая доставку всех отправленных данных.
TTPoE может использоваться в сетях с пропускной способностью выше 100Gbps. Изначально его реализовали на аппаратном уровне для обеспечения взаимодействия узлов в суперкомпьютере Tesla Dojo, чтобы упростить добавления новых узлов в кластер.
Протокол относительно просто реализовать полностью на аппаратном уровне. Он работает поверх обычного Ethernet и заменяет уровень TCP в сетевом стеке на протокол TTP, который реализуется при помощи значительно более простого конечного автомата (state machine).
Использование Ethernet позволило организовать работу кластера с использованием существующих коммутаторов.
В TTP для уменьшения задержек исключено состояние ожидания закрытия соединения (TIME_WAIT) и уменьшено число шагов при согласовании закрытия соединения. В TCP закрытие соединения сводится к отправке FIN-пакета, ожиданию подтверждения его получения, отправке подтверждения и переводе сокета на какое-то время в состояние TIME_WAIT, если будет наблюдаться неупорядоченное поступление задержавшихся пакетов. В TTP для закрытия соединения достаточно отправить опкод закрытия и получить подтверждение о закрытии (CLOSE, CLOSE-ACK).
Открытие соединений в TTP выполнено похожим образом. Вместо трёхэтапного согласования нового соединения (SYN, SYN-ACK, ACK) в TTP использовано два этапа (OPEN, OPEN-ACK). Это также позволяет избавить программное обеспечение от необходимости явного открытия соединения, так как достаточно указать адрес для отправки или получения данных.
Для управления перегрузкой (Congestion Control) в TTP подобно TCP применяется отбрасывание пакетов, но без использования усложнённых алгоритмов контроля перегрузки на основе скользящего окна. В TTP размер окна не меняется в зависимости от потери пакетов, а они прекращают отправляться после заполнения фиксированного буфера, записи удаляются из буфера после прихода подтверждения, а потери пакетов восполняются через повторную передачу данных, хранящихся в буфере. Это позволяет снизить задержки, но делает неэффективным использование TTP в низкоскоростных и некачественных сетях с большой потерей пакетов.
Программная реализация включает в себя модуль modttpoe.ko для ядра Linux, чтобы организовать прямой канал связи между несколькими узлами в одном сегменте сети Ethernet, а также модуль modttpip.ko с реализацией TTP-шлюза (TTP-GW, Tesla Transport Protocol Gateway). Он позволяет использовать штатный стек IPv4 поверх TTPoE без необходимости внесения изменений в приложения.
Подробнее о протоколе можно прочитать здесь.