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

게임 렉 백서 › 동기화 설계

락스텝에서 가장 느린 플레이어 대기 Lockstep waits for the slowest peer

원인 ID sy-lockstep · 주 담당 게임개발팀·서버 개발 · 함께 게임개발팀·클라이언트 개발

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

모두가 같은 턴을 함께 계산하는 구조에서는, 한 명의 입력이 늦으면 모두가 기다립니다.

왜 턴마다 모든 플레이어의 입력이 모여야 계산 가능 → 그러면 한 명의 입력이 지터·손실로 늦게 도착 → 화면에서는 모든 사람이 동시에 멈칫, 심하면 “플레이어 기다리는 중” 창

증상
멈춤, 뚝뚝 끊김, 입력 지연
요인
지터, 손실, 정체
누가 겪나
특정 장소·채널
언제
가끔 무작위로
담당
주 담당 게임개발팀·서버 개발 · 함께 게임개발팀·클라이언트 개발
게임개발팀 할 일
서버: 입력 지연을 핑에 맞춰 자동 조절, 늦는 사람만 잠깐 떨어뜨려 나머지는 기다리지 않고 진행. 클라이언트: 정해진 입력 지연 적용, 중계 서버 없는 P2P라면 입력 지연 조절과 늦는 사람 처리도 호스트 클라이언트가 맡기.
수치 감각
입력 지연을 “입력이 상대에게 닿는 시간 + 지터”보다 짧게 잡으면 멈춤이 잦아집니다. 닿는 시간은 서로 직접 주고받으면 핑의 절반, 중계 서버를 거치면 두 사람 핑을 더한 값의 절반쯤입니다.
그래프에서는
가끔 무작위로 튐 · 턴 대기 시간, 플레이어별 입력 도착 지연
확인할 곳
턴마다 플레이어별 입력 도착 시각과 턴이 멈춰 기다린 시간을 남기고 멈춘 턴에서 누구의 입력을 기다렸는지 봄. 중계 서버가 있으면 서버 쪽 패킷 캡처에서 플레이어별 입력 패킷의 도착 간격으로도 볼 수 있음
이러면 맞음
멈춘 턴마다 같은 한 사람의 입력이 입력 지연보다 늦게 도착했고 그 시각에 그 사람의 지터·손실이 튐
이러면 아님
입력은 모두 제때 왔는데 멈추면 가장 느린 PC의 계산 시간이나 서버 처리 문제. 멈춤 없이 두 화면의 결과만 달라지면 계산 결과의 어긋남(desync)이니 명령 동기화의 경로 계산 불일치를 봄
확인 수단
게임 서버·클라이언트의 로그·지표가 필요

출처

  1. Deterministic Lockstep Gaffer On Games
    프레임 n의 입력이 모두 와야 계산할 수 있어 늦으면 기다림. 지터를 흡수하는 재생 지연 버퍼가 작으면 멈칫함
  2. 1500 Archers on a 28.8: Network Programming in Age of Empires and Beyond Game Developer
    명령을 두 턴 뒤에 실행하도록 예약하고 가장 느린 컴퓨터와 핑에 맞춰 턴 길이를 조절(Speed Control)
  3. A Survey and Taxonomy of Latency Compensation Techniques for Network Computer Games (ACM Computing Surveys, 2022) ACM
    입력 지연(incoming delay)을 “A→서버 + 서버→B” 지연만큼 두어 모두가 같은 순간에 적용

함께 보면 좋은 원인

같은 층: 동기화 설계

같은 증상(멈춤)의 다른 층 원인

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