Lewati ke konten

Pengukuran latensi dan PresentMon

Di halaman ini

PCBenchmarkX mengukur secara terpisah latensi pemrosesan internal dan latensi penyajian frame. Metrik perangkat lunak ini tidak menggambarkan seluruh jalur dari klik mouse hingga piksel menyala di layar. Siklus pengukuran lengkap dijelaskan dalam metodologi.

Aliran tetap menghasilkan sinyal dengan interval deterministik 8-12 mс. Jika Windows mengizinkan, ia membuat timer tunggu presisi tinggi; jika tidak, ia menggunakan timer tunggu biasa. Penantian peristiwa berlangsung tanpa polling terus-menerus yang akan membebani inti. Resolusi global timer sistem tidak berubah.

Untuk setiap sinyal dicatat tenggat terjadwal, kebangkitan generator, sinyal aktual, kebangkitan penerima, simulasi, pengiriman perintah, timestamp GPU, dan peristiwa penyajian. Pengenal frame umum menghubungkan semua tahap.

Tenggat terjadwal → kebangkitan generator → sinyal
↓
kebangkitan penerima
↓
CPU → perintah → GPU
↓
Present → peristiwa penyajian

Dalam alur ini terlihat secara terpisah baik keterlambatan timer maupun latensi kebangkitan penerima. Awal Core Latency adalah sinyal aktual, sehingga langkah dari tenggat terjadwal hingga sinyal tidak dihitung dalam metrik ini.

Hasilnya berisi rincian per tahap dari jalur terukur latency_path — secara terpisah untuk Baseline dan Loaded. Tahap dihitung dari sinyal aktual:

Tahap Apa yang diukur
signal_to_consumer_wake dari sinyal hingga kebangkitan penerima
cpu_processing pemrosesan CPU: simulasi dan persiapan data frame
cpu_end_to_submit_start jeda dari akhir kerja CPU hingga awal persiapan pengiriman
workload_submit_cpu_span persiapan dan penulisan perintah API grafis
submit_start_to_gpu_begin dari awal persiapan hingga awal kerja GPU; ini bukan latensi antrean murni
gpu_execution pelaksanaan kerja GPU itu sendiri, dalam siklus GPU
presentation spans penyajian: pembungkus Present dan interval dari sinyal dan dari akhir kerja GPU hingga ScreenTime

Setiap tahap diberikan sebagai distribusi dengan statistik dan persentil. Segmen dihitung untuk setiap pasangan tanda secara terpisah, bukan dengan mengurangkan dua median. Jika tanda akhir tahap tidak ada atau tidak dapat diandalkan, distribusinya tetap kosong — tidak ada nilai pengganti. Keterlambatan timer (selisih antara tenggat terjadwal dan sinyal aktual) dicatat sebagai diagnostik terpisah sebelum sinyal dan tidak termasuk dalam nilai total jalur.

Waktu CPU dicatat melalui QueryPerformanceCounter. Untuk GPU, mesin menempatkan dua timestamp query di sekitar kerja yang diukur, memperoleh frekuensi antrean melalui GetTimestampFrequency, dan mengonversi selisih tick ke milidetik:

GPU work, ms = (GPU_end − GPU_begin) × 1000 / GPU_frequency

Menurut dokumentasi Microsoft tentang D3D12 timing, timestamp query mencerminkan perjalanan kerja hingga akhir pipeline, dan penghitung GPU serta CPU dihubungkan melalui GetClockCalibration.

Pasangan kalibrasi GPU/QPC memungkinkan menyatakan penyelesaian kerja GPU pada skala waktu yang sama dengan sinyal:

GPU_completion_QPC = calibration_QPC +
(GPU_end − calibration_GPU) × QPC_frequency / GPU_frequency
Core Latency, ms =
(GPU_completion_QPC − signal_QPC) × 1000 / QPC_frequency

Akurasi estimasi ini sangat bergantung pada seberapa tepat jam CPU dan GPU dipetakan. Estimasi ini tetap tidak mencakup jalur USB mouse, waktu pemindaian matriks, atau respons piksel. Microsoft secara terpisah menjelaskan nuansa penanda QPC presisi tinggi.

Baseline mengukur latensi dalam konfigurasi minimal dari beban ini. Loaded bekerja dengan beban GPU yang dikalibrasi pada 8,333333 мс, yaitu pada anggaran komputasi sekitar 120 Гц. Monitor fisik dapat memiliki frekuensi berbeda.

Kalibrasi mengubah kompleksitas di dalam shader dalam rentang 1-4096. Jumlah lintasan tetap: empat post-pass. Pertama, rentang dipilih di sekitar waktu target, lalu diperhalus dan konfigurasi terpilih diverifikasi. Untuk menghabiskan waktu yang sama pada kartu grafis cepat, diperlukan kerja yang lebih kompleks.

Dalam Performance, volume kerja tetap. Dalam Loaded Latency, beban dikalibrasi agar waktu kerja GPU mendekati sama pada berbagai kartu grafis. Penanda waktu yang diperoleh setelah pengukuran tidak dinormalisasi.

Penyajian frame uji latensi melalui jalur presentasi terpisah: jendela tanpa bingkai dalam mode flip-discard, latensi frame maksimum (maximum frame latency) 1, objek DXGI yang diharapkan, dan tearing jika sistem mendukungnya. Jalur ini terpisah dari beban performa tetap, yang dijalankan di luar buffer layar dan tidak memicu Present.

Untuk peristiwa penyajian digunakan pustaka PresentMon 2.5.1. Ini adalah proyek ETW untuk analisis peristiwa grafis di Windows, dijelaskan oleh penulisnya. Procmon / Process Monitor tidak digunakan dalam pipeline pengukuran ini.

PCBenchmarkX menjalankan sesi pengumpulan sendiri, memilih peristiwa dari prosesnya sendiri, dan menghubungkan frame dengan sinyal perangkat lunak. Ini tidak memerlukan layanan terpisah atau menjalankan PresentMon terpisah secara manual.

Interval tambahan disimpan:

  • dari sinyal hingga Present;
  • dari Present hingga ScreenTime;
  • dari sinyal hingga ScreenTime.

ScreenTime adalah peristiwa penyajian frame perangkat lunak; fotodioda untuk mengukur cahaya dari layar tidak digunakan. Metrik penyajian tidak termasuk dalam PC Score; apa yang termasuk di dalamnya dijelaskan dalam perhitungan skor. Menjalankan sesi ETW mungkin memerlukan menjalankan sebagai administrator atau keanggotaan dalam grup “Pengguna Log Performa”. Jika sesi gagal dijalankan, blok diagnostik ini tidak akan ada, dan kegagalan dicatat secara eksplisit dalam hasil. Tidak adanya data tidak sama dengan latensi nol.

Waktu GPU PresentMon juga disimpan terpisah dari waktu D3D12 sendiri. Pengembang PresentMon mencatat keterbatasan akurasi metrik GPU saat HAGS. Oleh karena itu, mesin tidak menggantikan GPU timestamps sendiri dengan estimasi dari ETW.

Di PCBenchmarkX dikembangkan generator sinyal, pemetaan tahap frame, simulasi CPU, beban D3D12, kalibrasi Loaded, urutan blok berulang, pengumpulan pengukuran, pemrosesan statistik, dan model skor. QPC dan D3D12 disediakan oleh Windows. Untuk pengumpulan peristiwa grafis melalui ETW digunakan proyek terbuka PresentMon.

Informasi teknis dan sumber eksternal diverifikasi 2026-09-20 untuk mesin 0.5.2.