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

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

타이머 해상도 Timer resolution (Windows 15.6ms)

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

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

윈도우의 기본 타이머는 15.6ms 단위라 “1ms만 쉬기”가 실제로는 다음 타이머 주기까지, 길게는 15.6ms로 늘어납니다.

왜 프레임 제한·패킷 전송을 Sleep(잠깐 대기) 방식으로 구현 → 그러면 OS가 15.6ms 단위로만 깨워 줌 → 화면에서는 프레임 간격과 입력 전송 간격이 들쭉날쭉

증상
뚝뚝 끊김
요인
지터
누가 겪나
나만
언제
항상
담당
주 담당 게임개발팀·클라이언트 개발
게임개발팀 할 일
고해상도 타이머 사용, 대기 대신 이벤트·V-Sync 기반 페이싱.
수치 감각
15.6ms 단위로는 16.7ms 간격을 맞출 수 없어, 프레임 간격이 15.6ms와 31.2ms 사이를 오갑니다.
그래프에서는
처음부터 늘 높음 · 프레임 간격 분포
확인할 곳
PresentMon의 MsBetweenPresents(프레임 간격) 분포와, powercfg /energy 보고서의 “Platform Timer Resolution” 항목(타이머 해상도를 바꾼 프로세스)을 봄
이러면 맞음
프레임 간격이 15.6ms와 31.2ms처럼 15.6ms의 배수에 몰려 있고, 게임이 더 높은 타이머 해상도를 요청하지 않음
이러면 아님
간격이 고르게 흩어져 있으면 타이머 탓보다 “백그라운드 프로세스의 CPU 점유”나 프레임 부하 쪽
확인 수단
유저 쪽 환경에서 확인
더 알아보기
예전 윈도우는 한 프로그램이 타이머를 1ms로 바꾸면 모든 프로그램에 적용됐습니다. 그래서 “브라우저를 켜 두면 게임이 부드러워진다”는 말도 있었습니다. 윈도우 10 2004 버전부터는 요청한 프로그램에만 적용되고 윈도우 11은 최소화되거나 완전히 가려져 소리도 내지 않는 창의 요청을 적용하지 않을 수 있습니다.

출처

  1. _WDF_TIMER_CONFIG (wdftimer.h) Microsoft
    일반 타이머의 정확도는 시스템 클록 틱 간격인 기본 15.6ms, 고해상도 타이머는 1ms
  2. timeBeginPeriod function (timeapi.h) Microsoft
    윈도우 10 2004 이전에는 전역 설정, 이후에는 요청한 프로세스에만 적용, 윈도우 11은 가려지거나 최소화된 창의 프로세스에 높은 해상도를 보장하지 않음
  3. CreateWaitableTimerExW function (synchapi.h) Microsoft
    고해상도 대기 타이머 플래그 CREATE_WAITABLE_TIMER_HIGH_RESOLUTION
  4. PresentMon Capture Application (README-CaptureApplication.md) Intel
    MsBetweenPresents: 이번 Present() 호출과 이전 호출 사이 시간(ms)
  5. Results for the Idle Energy Efficiency Assessment Microsoft
    기본 시스템 타이머 해상도 15.6ms, 에너지 보고서의 “Platform Timer Resolution” 항목에서 타이머 해상도를 바꾼 프로세스를 찾음
  6. Powercfg command-line options Microsoft
    powercfg /energy: 시스템을 분석해 에너지 보고서(HTML)를 만듦

함께 보면 좋은 원인

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

같은 증상(뚝뚝 끊김)의 다른 층 원인

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