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

게임 렉 백서 › L2 클라이언트 OS·기기

수신 버퍼 넘침 Socket receive buffer overflow

원인 ID co-rcvbuf · 주 담당 게임개발팀·클라이언트 개발

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

게임이 바빠서 소켓(OS가 제공하는 네트워크 송수신 인터페이스)에서 패킷을 늦게 꺼내면 OS 버퍼가 넘칩니다.

왜 프레임이 밀려 게임이 소켓을 늦게 읽음 → 그러면 OS 수신 버퍼가 가득 차 UDP는 버리고 TCP는 수신 윈도우를 줄여 송신을 멈추게 함 → 화면에서는 순간이동(UDP) 또는 몰아치기(TCP)

증상
순간이동, 몰아치기
요인
손실, 정체
누가 겪나
나만
언제
사람이 몰릴 때
담당
주 담당 게임개발팀·클라이언트 개발
게임개발팀 할 일
수신 전용 스레드, 버퍼 크기 조정(SO_RCVBUF).
수치 감각
기본 수신 버퍼는 OS·설정에 따라 수십~수백 KB. 사람 많은 곳의 업데이트는 1초에 수백 KB가 되기도 합니다.
그래프에서는
인원·부하를 따라 오름 · UDP 수신 버퍼 폐기 수, 프레임 시간
확인할 곳
윈도우 성능 모니터의 Microsoft Winsock BSP\Dropped Datagrams(소켓 수신 버퍼가 모자라 버린 UDP 수)와 UDPv4\Datagrams Received Errors를 프레임 시간과 함께 기록하고, 게임은 받은 패킷 순번의 빈 곳을 셈
이러면 맞음
사람 많은 곳이나 긴 프레임 직후 Dropped Datagrams가 늘고 같은 순간 게임 순번에 빈 곳이 생김. 같은 시각 회선 쪽 손실은 없음
이러면 아님
Dropped Datagrams는 그대로인데 순번만 빠지면 경로상의 손실
확인 수단
유저 쪽 환경에서 확인

출처

  1. socket(7) — Linux manual page Linux man-pages
    SO_RCVBUF는 소켓 수신 버퍼 최대 크기, 기본값은 rmem_default, 최대값은 rmem_max로 정해짐(안드로이드도 리눅스 커널)
  2. SOL_SOCKET Socket Options (Winsock2.h) Microsoft
    윈도우 SO_RCVBUF: 소켓마다 수신용으로 잡아 두는 버퍼 공간
  3. RFC 9293: Transmission Control Protocol (TCP) IETF
    TCP 윈도우 필드는 수신 측이 더 받을 수 있는 바이트 수, 0이면 송신 측은 제로 윈도우 프로브만 보내며 기다림
  4. Low Latency Workloads Management and Operations Microsoft
    Microsoft Winsock BSP 카운터 세트의 Dropped Datagrams·Dropped Datagrams/sec: 앱이 처리하는 속도보다 UDP가 빨리 오거나 수신 소켓 버퍼가 모자라 버린 수
  5. Network-Related Performance Counters Microsoft
    UDPv4·UDPv6: Datagrams Received Errors, Microsoft Winsock BSP: Dropped Datagrams 카운터

함께 보면 좋은 원인

같은 층: L2 클라이언트 OS·기기

같은 증상(순간이동)의 다른 층 원인

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