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

Sách trắng lag game › L2 OS và thiết bị phía client

Độ phân giải timer Timer resolution (Windows 15.6ms)

ID nguyên nhân co-timer · Phụ trách chính Phát triển client (Đội phát triển game)

Mở thẻ gốc có hình minh họa và thí nghiệm →

Timer mặc định của Windows có bước 15,6 ms, nên lệnh “chỉ nghỉ 1 ms” thực tế kéo dài tới chu kỳ timer kế tiếp, lâu nhất tới 15,6 ms.

Vì sao Giới hạn khung hình và gửi gói tin được cài đặt bằng Sleep (chờ một chút) → Dẫn đến OS chỉ đánh thức theo bước 15,6 ms → Trên màn hình Khoảng cách giữa các khung hình và giữa các lần gửi input lúc dài lúc ngắn

Triệu chứng
Giật khựng
Yếu tố
Jitter
Ai gặp phải
Chỉ mình tôi
Khi nào
Luôn luôn
Phụ trách
Phụ trách chính Phát triển client (Đội phát triển game)
Việc cần làm (Đội phát triển game)
Dùng timer độ phân giải cao, điều nhịp khung hình (pacing) dựa trên event hoặc V-Sync thay vì chờ bằng Sleep.
Con số tham khảo
Với bước 15,6 ms thì không thể canh đúng khoảng 16,7 ms, nên khoảng cách khung hình nhảy qua lại giữa 15,6 ms và 31,2 ms.
Trên đồ thị
Luôn cao ngay từ đầu · Phân bố khoảng cách khung hình
Chỗ cần xem
Phân bố MsBetweenPresents (khoảng cách khung hình) của PresentMon và mục “Platform Timer Resolution” trong báo cáo powercfg /energy (tiến trình đã đổi độ phân giải timer)
Đúng nếu
khoảng cách khung hình dồn vào các bội số của 15,6 ms như 15,6 ms và 31,2 ms, và game không yêu cầu độ phân giải timer cao hơn
Loại trừ nếu
khoảng cách phân tán đều → xem “Tiến trình chạy nền chiếm giữ CPU” hoặc tải khung hình
Cách kiểm tra
Kiểm tra ở môi trường phía người chơi
Tìm hiểu thêm
Ở Windows đời cũ, chỉ cần một chương trình đổi timer thành 1 ms là mọi chương trình đều được áp dụng. Vì thế từng có lời đồn “bật trình duyệt thì game mượt hơn”. Từ bản Windows 10 2004, thiết lập này chỉ áp dụng cho chương trình yêu cầu, còn Windows 11 có thể bỏ qua yêu cầu của cửa sổ đang thu nhỏ hoặc bị che hoàn toàn và không phát âm thanh.

Nguồn

  1. _WDF_TIMER_CONFIG (wdftimer.h) Microsoft
    Độ chính xác của timer thông thường bằng khoảng cách tick đồng hồ hệ thống, mặc định 15,6 ms; timer độ phân giải cao là 1 ms
  2. timeBeginPeriod function (timeapi.h) Microsoft
    Trước bản Windows 10 2004 là thiết lập toàn cục, từ bản đó trở đi chỉ áp dụng cho tiến trình yêu cầu; Windows 11 không bảo đảm độ phân giải cao cho tiến trình có cửa sổ bị che hoặc thu nhỏ
  3. CreateWaitableTimerExW function (synchapi.h) Microsoft
    Cờ cho waitable timer độ phân giải cao CREATE_WAITABLE_TIMER_HIGH_RESOLUTION
  4. PresentMon Capture Application (README-CaptureApplication.md) Intel
    MsBetweenPresents: thời gian giữa lần gọi Present() này và lần gọi trước (ms)
  5. Results for the Idle Energy Efficiency Assessment Microsoft
    Độ phân giải timer hệ thống mặc định 15,6 ms; tìm tiến trình đã đổi độ phân giải timer ở mục “Platform Timer Resolution” trong báo cáo năng lượng
  6. Powercfg command-line options Microsoft
    powercfg /energy: phân tích hệ thống và tạo báo cáo năng lượng (HTML)

Nguyên nhân nên xem cùng

Cùng tầng: L2 OS và thiết bị phía client

Nguyên nhân ở tầng khác gây cùng triệu chứng (Giật khựng)

Xem thẻ gốc có hình minh họa và thí nghiệm