https://brooker.co.za/blog/2024/05/09/nagle.html #DistributedSystems #Myths #TechStories #HackerNews #ngated
[Перевод] Дело всегда в TCP_NODELAY
Занимаясь отладкой проблем в легаси-системах, я первым делом проверяю, включён ли режим TCP_NODELAY . И так делаю не только я. Все знакомые мне разработчики распределённых систем потратили немало часов на решение проблем с задержкой, которые быстро исправлялись простым включением этой опции сокета, указывая на ошибочность базовых настроек или использование устаревшей концепции. Но для начала давайте проясним, о чём вообще речь. Лучше всего нам в этом поможет документ RFC896 , изданный Джоном Нейглом в 1984 1 году. Вот описание задачи: Обработка малых пакетов сопряжена с одной специфичной проблемой. Когда для передачи односимвольных сообщений с клавиатуры используется TCP, обычно для отправки одного байта полезных данных задействуется пакет размером 41 байт (один байт данных и 40 байт заголовка). Такие издержки в 4 000%, конечно, раздражают, но в слабо нагруженных сетях ещё терпимы. Если коротко, то Нейгл хотел сократить затраты на отправку TCP-заголовков, чтобы повысить пропускную способность сети — вплоть до 40х! Эти крохотные пакеты поступали из двух основных источников: интерактивных приложений вроде оболочек, где пользователь вводил по одному байту за раз, и плохо реализованных программ, которые передавали сообщения ядру через множество вызовов write() . Предложенное Нейглом исправление оказалось простым и продуманным.
https://habr.com/ru/companies/ruvds/articles/890874/
#ruvds_перевод #tcp #tcp_nodelay #алгоритм_нейгла #delayed_ack