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

게임 렉 백서 › L8 소켓과 프로토콜

유휴 후 슬로 스타트 Slow start after idle

원인 ID sk-slowstart · 주 담당 인프라팀·서버 인프라 · 함께 게임개발팀·서버 개발

그림과 실험이 있는 원본 카드로 열기 →

TCP는 한동안 유휴 상태면 혼잡 윈도우(한 번에 보낼 수 있는 양)를 다시 줄여, 갑자기 큰 데이터를 보낼 때 여러 번에 나눠 보냅니다.

왜 유휴 상태이던 연결로 마을 입장 등 큰 데이터를 보냄 → 그러면 혼잡 윈도우가 줄어 있어 여러 왕복에 나눠 전송 → 화면에서는 입장 직후 주변 캐릭터와 NPC가 왕복 몇 번만큼 늦게 나타남(먼 서버일수록 눈에 띔)

증상
입력 지연, 안 보임·유령 개체
요인
지연
누가 겪나
나만
언제
이동 중·지역 전환 때, 가만히 있다가
담당
주 담당 인프라팀·서버 인프라 · 함께 게임개발팀·서버 개발
게임개발팀 할 일
입장 데이터 줄이기(꼭 필요한 것부터 먼저 보내기).
인프라팀 할 일
tcp_slow_start_after_idle 끄기(리눅스, 서버 전체 설정).
수치 감각
RTO보다 오래 유휴 상태면 혼잡 윈도우가 줄기 시작해, 오래 유휴 상태였다면 약 14KB(패킷 10개)까지 내려갑니다. 그러면 100KB는 한 번에 못 보내고 왕복 3번에 나눠 보냅니다.
그래프에서는
일부만 높음 · 입장 직후 전송 시간(RTT가 긴 유저)
확인할 곳
sysctl net.ipv4.tcp_slow_start_after_idle 값을 확인하고, 유휴 뒤 지역에 입장하는 순간 그 연결의 ss -ti에서 cwnd(혼잡 윈도우)가 작아졌는지 봄
이러면 맞음
설정이 1(기본)이고 유휴 뒤 입장 순간 cwnd가 10 안팎으로 줄어 전송이 왕복 여러 번에 나뉨. 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
    -i의 cwnd(혼잡 윈도우)·ssthresh(슬로 스타트 임계값)

함께 보면 좋은 원인

같은 층: L8 소켓과 프로토콜

같은 증상(입력 지연)의 다른 층 원인

그림과 실험이 있는 원본 카드 보기