İçeriğe geç

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.

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.

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.

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_frequency

Microsoft’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_frequency

Bu 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, 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.

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 Present kadar;
  • Present ile ScreenTime arasında;
  • sinyalden ScreenTime kadar.

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 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.