게임 렉 백서 › L1 클라이언트 게임 프로세스
시계 동기화 오차 Clock sync error
원인 ID cg-clock · 주 담당 게임개발팀·클라이언트 개발
그림과 실험이 있는 원본 카드로 열기 →
클라이언트가 추정한 서버 시각이 틀리면 보간 시점과 쿨타임 판정이 어긋납니다.
왜 접속할 때 한 번만 서버 시간을 맞추고 핑이 변해도 그대로 둠 → 그러면 보간할 시점·쿨타임 끝나는 시각이 서버와 어긋남 → 화면에서는 상대가 가끔 멈칫, 쿨타임이 끝났는데 스킬이 거절됨
- 증상
- 뚝뚝 끊김, 씹힘·롤백
- 요인
- 지연
- 누가 겪나
- 나만
- 언제
- 오래 켜 둘수록, 가끔 무작위로
- 담당
- 주 담당 게임개발팀·클라이언트 개발
- 게임개발팀 할 일
- 주기적으로 시간 동기화(왕복 시간 측정 후 보정), 급하게 바꾸지 말고 서서히 맞추기, 경과 시간은 PC 시각 대신 단조 시계(monotonic clock)로 재기.
- 그래프에서는
- 서서히 오름 · 추정 서버 시각의 오차
- 확인할 곳
- 클라이언트가 추정한 서버 시각과 서버가 패킷에 담아 보낸 서버 시각(틱 번호)의 차이를 주기적으로 기록
- 이러면 맞음
- 오차가 접속 뒤 시간이 지날수록 커지거나 PC 시계가 맞춰지는 순간 한 번에 튀고, 그 무렵 스킬 거절·멈칫 제보가 늘어남
- 이러면 아님
- 오차가 작게 유지되는데 스킬이 거절되면 서버 판정·지연 쪽
- 확인 수단
- 게임 서버·클라이언트의 로그·지표가 필요
- 더 알아보기
- 경과 시간을 PC의 날짜·시각(wall clock)으로 재면, 윈도우가 인터넷 시간에 맞춰 시계를 고치거나 사용자가 시계를 바꾸는 순간 게임 시각이 튑니다. 경과 시간은 되돌아가지 않는 단조 시계(monotonic clock, Stopwatch 등)로 재야 합니다.
출처
- RFC 5905: Network Time Protocol Version 4: Protocol and Algorithms Specification IETF
요청·응답의 네 시각으로 왕복 지연과 시계 오차를 계산하는 방식 - Acquiring high-resolution time stamps Microsoft
QueryPerformanceCounter(Stopwatch가 사용)는 외부 시각과 동기화되지 않는 경과 시간용 시계, UTC 시각이 필요할 때만 시스템 시각 사용 - Time synchronization (Netcode for Entities 6.5) Unity
왕복 시간으로 서버 시각을 추정하고 시각을 크게 바꾸지 않고 진행 속도를 조금씩 조정해 맞춤
함께 보면 좋은 원인
같은 층: L1 클라이언트 게임 프로세스
같은 증상(뚝뚝 끊김)의 다른 층 원인
그림과 실험이 있는 원본 카드 보기