게임 렉 백서 › 동기화 설계
락스텝에서 가장 느린 플레이어 대기 Lockstep waits for the slowest peer
원인 ID sy-lockstep · 주 담당 게임개발팀·서버 개발 · 함께 게임개발팀·클라이언트 개발
그림과 실험이 있는 원본 카드로 열기 →
모두가 같은 턴을 함께 계산하는 구조에서는, 한 명의 입력이 늦으면 모두가 기다립니다.
왜 턴마다 모든 플레이어의 입력이 모여야 계산 가능 → 그러면 한 명의 입력이 지터·손실로 늦게 도착 → 화면에서는 모든 사람이 동시에 멈칫, 심하면 “플레이어 기다리는 중” 창
- 증상
- 멈춤, 뚝뚝 끊김, 입력 지연
- 요인
- 지터, 손실, 정체
- 누가 겪나
- 특정 장소·채널
- 언제
- 가끔 무작위로
- 담당
- 주 담당 게임개발팀·서버 개발 · 함께 게임개발팀·클라이언트 개발
- 게임개발팀 할 일
- 서버: 입력 지연을 핑에 맞춰 자동 조절, 늦는 사람만 잠깐 떨어뜨려 나머지는 기다리지 않고 진행. 클라이언트: 정해진 입력 지연 적용, 중계 서버 없는 P2P라면 입력 지연 조절과 늦는 사람 처리도 호스트 클라이언트가 맡기.
- 수치 감각
- 입력 지연을 “입력이 상대에게 닿는 시간 + 지터”보다 짧게 잡으면 멈춤이 잦아집니다. 닿는 시간은 서로 직접 주고받으면 핑의 절반, 중계 서버를 거치면 두 사람 핑을 더한 값의 절반쯤입니다.
- 그래프에서는
- 가끔 무작위로 튐 · 턴 대기 시간, 플레이어별 입력 도착 지연
- 확인할 곳
- 턴마다 플레이어별 입력 도착 시각과 턴이 멈춰 기다린 시간을 남기고 멈춘 턴에서 누구의 입력을 기다렸는지 봄. 중계 서버가 있으면 서버 쪽 패킷 캡처에서 플레이어별 입력 패킷의 도착 간격으로도 볼 수 있음
- 이러면 맞음
- 멈춘 턴마다 같은 한 사람의 입력이 입력 지연보다 늦게 도착했고 그 시각에 그 사람의 지터·손실이 튐
- 이러면 아님
- 입력은 모두 제때 왔는데 멈추면 가장 느린 PC의 계산 시간이나 서버 처리 문제. 멈춤 없이 두 화면의 결과만 달라지면 계산 결과의 어긋남(desync)이니 명령 동기화의 경로 계산 불일치를 봄
- 확인 수단
- 게임 서버·클라이언트의 로그·지표가 필요
출처
- Deterministic Lockstep Gaffer On Games
프레임 n의 입력이 모두 와야 계산할 수 있어 늦으면 기다림. 지터를 흡수하는 재생 지연 버퍼가 작으면 멈칫함 - 1500 Archers on a 28.8: Network Programming in Age of Empires and Beyond Game Developer
명령을 두 턴 뒤에 실행하도록 예약하고 가장 느린 컴퓨터와 핑에 맞춰 턴 길이를 조절(Speed Control) - A Survey and Taxonomy of Latency Compensation Techniques for Network Computer Games (ACM Computing Surveys, 2022) ACM
입력 지연(incoming delay)을 “A→서버 + 서버→B” 지연만큼 두어 모두가 같은 순간에 적용
함께 보면 좋은 원인
같은 층: 동기화 설계
같은 증상(멈춤)의 다른 층 원인
그림과 실험이 있는 원본 카드 보기