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

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

Медленный старт после простоя Slow start after idle

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

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

Если соединение какое-то время простаивало, TCP снова уменьшает окно перегрузки (объём, который можно отправить за раз), и внезапно понадобившийся большой объём данных уходит в несколько заходов.

Почему По простаивавшему соединению отправляется большой объём данных, например при входе в город → Следствие Окно перегрузки уменьшено, и передача растягивается на несколько RTT → На экране Сразу после входа окружающие персонажи и NPC появляются с опозданием на несколько RTT (тем заметнее, чем дальше сервер)

Симптомы
Задержка ввода, Невидимки / фантомы
Факторы
Задержка
У кого
Только у меня
Когда
В движении и при смене локации, После бездействия
Ответственные
Основной ответственный Команда инфраструктуры · Серверная инфраструктура · Совместно Команда разработки · Разработка сервера
Команда разработки: задачи
Уменьшить объём данных при входе (сначала отправлять самое необходимое).
Команда инфраструктуры: задачи
Выключить tcp_slow_start_after_idle (Linux, настройка на весь сервер).
Цифры для ориентира
Если простой дольше RTO, окно перегрузки начинает уменьшаться и после долгого простоя опускается примерно до 14 KB (10 пакетов). Тогда 100 KB не уйдут за один раз и будут переданы за 3 RTT.
На графике
Высоко только у некоторых · время передачи сразу после входа (у игроков с большим RTT)
Где смотреть
Проверить значение sysctl net.ipv4.tcp_slow_start_after_idle и в момент входа в локацию после простоя посмотреть в ss -ti, не уменьшился ли cwnd (окно перегрузки) этого соединения
Подтверждает
Параметр равен 1 (по умолчанию), в момент входа после простоя cwnd падает примерно до 10, и передача растягивается на несколько RTT. Чем больше RTT у игрока, тем позже всё появляется, а при значении 0 эффект пропадает
Опровергает
Если cwnd остаётся большим, а объекты всё равно появляются поздно, дело в обработке входа на сервере («Лавина спавна при входе в людное место»)
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)

Источники

  1. IP Sysctl Linux kernel
    tcp_slow_start_after_idle по умолчанию включён: после простоя длиной в RTO окно перегрузки уменьшается (по схеме RFC 2861)
  2. RFC 5681: TCP Congestion Control IETF
    Если данные не отправлялись дольше RTO, окно перегрузки уменьшается до окна перезапуска min(IW, cwnd) или меньше и начинается медленный старт
  3. RFC 6928: Increasing TCP's Initial Window IETF
    Начальное окно 10 сегментов, не больше 14 600 байт
  4. ss(8) — Linux manual page iproute2
    cwnd (окно перегрузки) и ssthresh (порог медленного старта) в выводе -i

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

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

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

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