Gecikme ölçümü ve PresentMon
Sayfa içeriği
PCBenchmarkX, iç işleme gecikmesini ve kare çıktı gecikmesini ayrı ayrı ölçer. Bu yazılım metrikleri, fare tıklamasından ekrandaki pikselin yanmasına kadar olan tüm yolu tanımlamaz. Tam ölçüm döngüsü metodolojide açıklanmıştır.
Kendi yazılım uyaranı
Bölüm başlığı “Kendi yazılım uyaranı”Sabit akış, 8-12 ms aralıklarla deterministik sinyaller üretir. Windows izin veriyorsa yüksek hassasiyetli bir bekleyen zamanlayıcı oluşturur; aksi halde normal bir bekleyen zamanlayıcı kullanır. Olay bekleme, çekirdeği meşgul edecek sürekli yoklamaya başvurmadan gerçekleşir. Sistem zamanlayıcısının genel çözünürlüğü bu sırada değişmez.
Her sinyal için planlanan zaman, üreticinin uyanması, gerçek sinyal, alıcının uyanması, simülasyon, komut gönderimi, GPU zaman damgaları ve gösterim olayları kaydedilir. Ortak kare tanımlayıcısı tüm aşamaları birbirine bağlar.
Planlanan zaman → üreticinin uyanması → sinyal ↓ alıcının uyanması ↓ CPU → komutlar → GPU ↓ Present → çıktı olayıBu şeritlerde hem zamanlayıcı gecikmesi hem de alıcının uyanma gecikmesi ayrı ayrı görülür. Core Latency’nin başlangıcı gerçek sinyaldir, bu nedenle bu metrikte planlanan zamandan sinyale kadar olan adım sayılmaz.
Gecikme yolunun aşama bazında dökümü
Bölüm başlığı “Gecikme yolunun aşama bazında dökümü”Sonuç, ölçülen yolun latency_path aşama bazında dökümünü içerir — Baseline ve Loaded için ayrı ayrı. Aşamalar gerçek sinyalden itibaren hesaplanır:
| Aşama | Neyi ölçer |
|---|---|
signal_to_consumer_wake |
sinyalden alıcının uyanmasına kadar |
cpu_processing |
CPU işlemesi: simülasyon ve kare verisinin hazırlanması |
cpu_end_to_submit_start |
CPU işinin bitiminden gönderim hazırlığının başlangıcına kadar olan duraklama |
workload_submit_cpu_span |
grafik API komutlarının hazırlanması ve yazılması |
submit_start_to_gpu_begin |
hazırlığın başlangıcından GPU işinin başlangıcına kadar; bu saf kuyruk gecikmesi değildir |
gpu_execution |
GPU işinin kendisinin yürütülmesi, GPU çevrimlerinde |
| presentation spans | gösterim: Present sarmalayıcısı ve sinyalden ve GPU işinin bitiminden ScreenTime kadar olan aralıklar |
Her aşama istatistikler ve persentiller içeren bir dağılımla verilir. Segmentler iki medyanın çıkarılmasıyla değil, her işaret çifti için ayrı ayrı hesaplanır. Bir aşamanın bitiş işareti yoksa veya güvenilmezse, dağılımı boş kalır — yerine konulmuş değer yoktur. Zamanlayıcı gecikmesi (planlanan zaman ile gerçek sinyal arasındaki fark) sinyalden önce ayrı bir tanılama olarak kaydedilir ve yolun toplam değerlerine dahil edilmez.
QPC ve kendi GPU timestamps
Bölüm başlığı “QPC ve kendi GPU timestamps”CPU zamanı QueryPerformanceCounter üzerinden kaydedilir. GPU için motor, ölçülen işin etrafına iki timestamp query yerleştirir, kuyruk frekansını GetTimestampFrequency üzerinden alır ve tik farkını milisaniyeye çevirir:
GPU work, ms = (GPU_end − GPU_begin) × 1000 / GPU_frequencyMicrosoft’un D3D12 timing belgelerine göre, timestamp query işin konveyörün sonuna kadar ilerlemesini yansıtır ve GPU ile CPU sayaçları GetClockCalibration üzerinden ilişkilendirilir.
GPU/QPC kalibrasyon çifti, GPU işinin tamamlanmasını sinyalle aynı zaman ölçeğinde ifade etmeyi sağlar:
GPU_completion_QPC = calibration_QPC + (GPU_end − calibration_GPU) × QPC_frequency / GPU_frequency
Core Latency, ms = (GPU_completion_QPC − signal_QPC) × 1000 / QPC_frequencyBu tahminin doğruluğu büyük ölçüde CPU ve GPU saatlerinin ne kadar doğru eşleştirildiğine bağlıdır. Yine de farenin USB yolunu, matris tarama süresini veya piksel tepkisini kapsamaz. Microsoft, yüksek hassasiyetli QPC işaretlerinin ayrıntılarını ayrıca açıklar.
Baseline ve Loaded
Bölüm başlığı “Baseline ve Loaded”Baseline, gecikmeyi bu yükün minimum yapılandırmasında ölçer. Loaded, 8,333333 ms değerine kalibre edilmiş bir GPU yüküyle, yani yaklaşık 120 Hz’lik bir hesaplama bütçesiyle çalışır. Fiziksel monitör farklı bir frekansa sahip olabilir.
Kalibrasyon, shader içindeki karmaşıklığı 1-4096 aralığında değiştirir. Geçiş sayısı sabit kalır: dört post-geçiş. Önce hedef süre etrafında bir aralık belirlenir, ardından bu aralık daraltılır ve seçilen yapılandırma doğrulanır. Hızlı bir ekran kartında aynı süreyi doldurmak için daha karmaşık bir iş gerekir.
Performance’ta iş hacmi sabittir. Loaded Latency’de yük, GPU iş süresinin farklı ekran kartlarında yakın olması için kalibre edilir. Elde edilen zaman damgaları ölçümden sonra normalleştirilmez.
Gecikme testinin kare çıktısı ayrı bir sunum yolu üzerinden gider: flip-discard modunda çerçevesiz pencere, maksimum kare gecikmesi (maximum frame latency) 1, beklenen DXGI nesnesi ve sistem destekliyorsa tearing. Bu yol, ekran tamponu dışında yürütülen ve Present çağırmayan sabit performans yükünden ayrıdır.
PresentMon’un rolü
Bölüm başlığı “PresentMon’un rolü”Gösterim olayları için PresentMon 2.5.1 kütüphanesi kullanılır. Bu, Windows’ta grafik olaylarını analiz eden ve yazarları tarafından açıklanan bir ETW projesidir. Bu ölçüm hattında Procmon / Process Monitor kullanılmaz.
PCBenchmarkX kendi toplama oturumunu başlatır, kendi sürecinin olaylarını seçer ve kareleri yazılım sinyalleriyle ilişkilendirir. Bunun için ayrı bir hizmet ve ayrı bir PresentMon’un elle başlatılması gerekmez.
Ek aralıklar kaydedilir:
- sinyalden
Presentkadar; PresentileScreenTimearasında;- sinyalden
ScreenTimekadar.
ScreenTime yazılımsal bir kare gösterim olayıdır; ekrandan ışık ölçmek için fotodiyot kullanılmaz. Gösterim metrikleri PC Score’a dahil değildir; nelerin dahil olduğu puan hesaplamasında açıklanmıştır. ETW oturumunun başlatılması, yönetici olarak çalıştırmayı veya «Performans Günlüğü Kullanıcıları» grubunun üyeliğini gerektirebilir. Oturum başlatılamazsa, bu tanılama bloğu olmaz ve hata sonuçta açıkça kaydedilir. Veri eksikliği sıfır gecikmeye eşit değildir.
PresentMon’un GPU zamanı da kendi D3D12 zamanından ayrı olarak saklanır. PresentMon geliştiricileri HAGS altında GPU metriklerinin doğruluk sınırlamalarını belirtir. Bu nedenle motor, kendi GPU timestamps’ını ETW’den gelen tahminle değiştirmez.
PCBenchmarkX’te neler geliştirildi
Bölüm başlığı “PCBenchmarkX’te neler geliştirildi”PCBenchmarkX’te sinyal üreteci, kare aşamalarının eşleştirilmesi, CPU simülasyonu, D3D12 yükleri, Loaded kalibrasyonu, yinelenen blokların sırası, ölçüm toplama, istatistiksel işleme ve puan modeli geliştirilmiştir. QPC ve D3D12’yi Windows sağlar. ETW üzerinden grafik olaylarını toplamak için açık kaynak PresentMon projesi kullanılır.
Teknik bilgiler ve harici kaynaklar, 0.5.2 motoru için 2026-09-20 tarihinde doğrulanmıştır.
