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

게임 렉 백서 › L9 서버 게임 프로세스

브로드캐스트 폭증 Broadcast fan-out (N×N)

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

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

한 명의 움직임을 그를 보는 모두에게 보내면, 모인 인원의 제곱만큼 보낼 업데이트가 생깁니다.

왜 한 명의 변화를 볼 수 있는 모두에게 전송 → 그러면 1,000명이 서로를 보면 틱마다 100만 개 업데이트 → 화면에서는 전송 대기열과 대역폭이 포화되어 지연·손실(입력 지연·몰아치기·순간이동)

증상
입력 지연, 순간이동, 몰아치기
요인
지연, 손실
누가 겪나
특정 장소·채널, 서버 전체
언제
사람이 몰릴 때
담당
주 담당 게임개발팀·서버 개발 · 함께 인프라팀·서버 인프라
게임개발팀 할 일
거리·중요도별 갱신 빈도 낮추기(가까운 적은 매 틱, 먼 사람은 1초에 몇 번), 한 사람에게 보내는 양에 상한을 두고 중요한 것부터 채우기, 여러 업데이트를 한 패킷에 묶기, 표시 인원 상한.
인프라팀 할 일
서버별 송신 대역폭·초당 패킷 수를 NIC·인스턴스 네트워크 한도와 비교해 경보, 대규모 이벤트 전 여유 확인.
수치 감각
1,000명 × 1,000명 × 20틱 = 초당 2,000만 개. 개당 40바이트면 서버 전체 약 6.4Gbps, 받는 사람 한 명당 약 6.4Mbps. 보이는 인원을 150명으로 제한하면 전체 약 1Gbps, 한 명당 약 1Mbps.
그래프에서는
인원·부하를 따라 오름 · 서버 송신 패킷·바이트, 한곳에 모인 인원
확인할 곳
sar -n DEV 1의 txpck/s·txkB/s(서버 NIC가 초당 보낸 패킷·KB)를 인원 그래프와 함께 봄. 클라우드 인스턴스는 ethtool -S의 한도 초과 카운터(AWS ENA는 bw_out_allowance_exceeded·pps_allowance_exceeded)
이러면 맞음
모인 인원이 늘 때 송신 패킷·바이트가 인원보다 가파르게(제곱에 가깝게) 늘고, 한도에 닿은 시각부터 한도 초과 카운터나 송신 폐기가 증가
이러면 아님
송신량은 그대로인데 틱 시간만 늘면 시야 계산·게임 로직 쪽
확인 수단
인프라 도구로 확인(게임 코드 불필요)
실제 사례
CCP Games 2014: EVE Online HED-GP 대규모 함대전의 서버 과부하

출처

  1. HED-GP Technical Retrospective: What a HED-ache CCP Games
    n명이 한 행동을 n명이 봐야 하는 O(n²) 전송이 대규모 함대전의 피할 수 없는 한계 요인
  2. Actor Priority in Unreal Engine Epic Games
    연결 대역폭이 포화되면 액터마다 우선순위(거리·시선·마지막 전송 뒤 지난 시간)를 매겨 중요한 것부터 대역폭을 나눠 줌
  3. Detailed Actor Replication Flow in Unreal Engine Epic Games
    NetUpdateFrequency로 액터별 갱신 빈도를 정하고 우선순위 순으로 보내다 연결이 포화되면 나머지는 다음 틱으로 미룸
  4. sar(1) — Linux manual page sysstat
    sar -n DEV의 rxpck/s·txpck/s(초당 받은·보낸 패킷), rxkB/s·txkB/s(초당 받은·보낸 KB)
  5. Monitor network performance for ENA settings on your EC2 instance AWS
    bw_out_allowance_exceeded(송신 대역폭 한도 초과)·pps_allowance_exceeded(PPS 한도 초과)로 큐에 쌓이거나 버려진 패킷 수

함께 보면 좋은 원인

같은 층: L9 서버 게임 프로세스

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

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