한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Анатомия игровых лагов › L8 Сокеты и протоколы

Резкий спад передачи из-за управления перегрузкой Congestion control backoff

ID причины sk-congestion · Основной ответственный Команда инфраструктуры · Серверная инфраструктура · Совместно Команда разработки · Разработка сервера

Открыть карточку в основной версии с иллюстрациями и экспериментами →

TCP считает потери признаком перегрузки и снижает скорость передачи на 30–50%. Точно так же он реагирует и на потери в Wi-Fi.

Почему Когда отправлять нужно много, в Wi-Fi или на линии случаются небольшие потери → Следствие TCP резко снижает скорость передачи и восстанавливает её медленно (CUBIC, алгоритм по умолчанию в Linux и Windows, снижает на 30%) → На экране В людных местах обновления отстают: перемотка, задержка ввода

Симптомы
Перемотка, Задержка ввода
Факторы
Задержка, Остановка
У кого
Только у меня
Когда
При наплыве игроков
Ответственные
Основной ответственный Команда инфраструктуры · Серверная инфраструктура · Совместно Команда разработки · Разработка сервера
Команда разработки: задачи
Сократить объём отправки (зона интереса, только изменения), отправлять порциями, не всё разом.
Команда инфраструктуры: задачи
Перейти на другой алгоритм управления перегрузкой, например BBR (tcp_congestion_control).
На графике
Пила: плавный рост и резкий сброс · окно перегрузки (cwnd) и скорость передачи по соединениям
Где смотреть
Несколько раз снять ss -ti для соединения игрока с отстающими обновлениями и посмотреть, как меняются cwnd и ssthresh, какой алгоритм управления перегрузкой используется (cubic, bbr) и копится ли Send-Q
Подтверждает
После потерь cwnd раз за разом резко падает и медленно растёт снова, а пока он мал, копится Send-Q, и это совпадает по времени с жалобами на перемотку и задержку ввода
Опровергает
Если cwnd достаточный, а обновления всё равно отстают, дело в окне приёма («Нулевое окно (остановка, похожая на повторную передачу)») или в отправке на сервере
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)

Источники

  1. RFC 9438: CUBIC for Fast and Long-Distance Networks IETF
    При потерях CUBIC умножает окно на 0,7 (снижение на 30%), Reno на 0,5. CUBIC используется по умолчанию в Linux, Windows и у Apple
  2. TCP BBR congestion control comes to GCP – your Internet just got faster Google Cloud
    Управление перегрузкой на основе потерь сильно снижает скорость и при потерях, не связанных с перегрузкой. BBR ориентируется на скорость доставки и RTT
  3. IP Sysctl Linux kernel
    tcp_congestion_control выбирает алгоритм управления перегрузкой для новых соединений
  4. ss(8) — Linux manual page iproute2
    cwnd, ssthresh и название алгоритма управления перегрузкой в выводе -i
  5. net/ipv4/tcp_diag.c (Linux v6.12) Linux kernel
    Значения Recv-Q и Send-Q в ss: у слушающего сокета это число подключений, ждущих accept, и лимит backlog, у подключённого сокета это байты, ещё не прочитанные приложением, и отправленные байты без ACK

Смотрите также

Тот же слой: L8 Сокеты и протоколы

Причины с тем же симптомом (Перемотка) на других слоях

Карточка в основной версии с иллюстрациями и экспериментами