Latensmätning och PresentMon
På den här sidan
PCBenchmarkX mäter intern bearbetningslatens och latens för bildutmatning separat. Dessa programvarumetrik beskriver inte hela vägen från musklick till att pixeln lyser på skärmen. Den fullständiga mätcykeln beskrivs i metodiken.
Egen programvarustimulus
Section titled “Egen programvarustimulus”En kontinuerlig ström genererar signaler med deterministiska intervall på 8-12 ms. Om Windows tillåter det skapar den en väntande timer med hög precision; annars använder den en vanlig väntande timer. Väntan på händelsen sker utan kontinuerlig avfrågning, som skulle belasta kärnan. Den globala upplösningen för systemtimern ändras inte.
För varje signal loggas planerad tidpunkt, generatorns uppvaknande, den faktiska signalen, mottagarens uppvaknande, simulering, kommandosändning, GPU-tidsstämplar och visningshändelser. En gemensam bildruteidentifierare kopplar samman alla steg.
Planerad tidpunkt → generatorns uppvaknande → signal ↓ mottagarens uppvaknande ↓ CPU → kommandon → GPU ↓ Present → utmatningshändelseI dessa flöden syns både timerns försening och mottagarens uppvakningslatens separat. Början av Core Latency är den faktiska signalen, därför räknas steget från planerad tidpunkt till signal inte in i detta metrikvärde.
Uppdelning av latensvägen per steg
Section titled “Uppdelning av latensvägen per steg”Resultatet innehåller en uppdelning per steg av den uppmätta vägen latency_path — separat för Baseline och Loaded. Stegen räknas från den faktiska signalen:
| Steg | Vad som mäts |
|---|---|
signal_to_consumer_wake |
från signal till mottagarens uppvaknande |
cpu_processing |
CPU-bearbetning: simulering och förberedelse av bildrutedata |
cpu_end_to_submit_start |
paus från slutet av CPU-arbetet till början av förberedelsen för sändning |
workload_submit_cpu_span |
förberedelse och skrivning av kommandon för grafik-API |
submit_start_to_gpu_begin |
från början av förberedelsen till början av GPU-arbetet; detta är inte ren kölatens |
gpu_execution |
själva utförandet av GPU-arbetet, i GPU-takter |
| presentation spans | visning: omslutning av Present och intervall från signal och från slutet av GPU-arbetet till ScreenTime |
Varje steg ges som en fördelning med statistik och percentiler. Segmenten beräknas för varje par av markeringar separat, inte genom att subtrahera två medianer. Om stegets slutmarkering saknas eller är otillförlitlig förblir dess fördelning tom — inga ersättningsvärden finns. Timerns försening (avvikelsen mellan planerad tidpunkt och faktisk signal) registreras som en separat diagnostik före signalen och ingår inte i vägens summerade värden.
QPC och egna GPU-tidsstämplar
Section titled “QPC och egna GPU-tidsstämplar”CPU-tid registreras via QueryPerformanceCounter. För GPU placerar motorn två timestamp queries runt det uppmätta arbetet, hämtar könns frekvens via GetTimestampFrequency och omvandlar skillnaden i tick till millisekunder:
GPU work, ms = (GPU_end − GPU_begin) × 1000 / GPU_frequencyEnligt Microsofts dokumentation om D3D12 timing återspeglar timestamp query arbetets gång till slutet av pipelinen, och GPU- och CPU-räknare kopplas samman via GetClockCalibration.
Ett kalibreringspar GPU/QPC gör det möjligt att uttrycka slutförandet av GPU-arbetet på samma tidsskala som signalen:
GPU_completion_QPC = calibration_QPC + (GPU_end − calibration_GPU) × QPC_frequency / GPU_frequency
Core Latency, ms = (GPU_completion_QPC − signal_QPC) × 1000 / QPC_frequencyNoggrannheten i denna uppskattning beror till stor del på hur exakt CPU- och GPU-klockorna matchas. Den täcker ändå inte musens USB-väg, matrisens skanningstid eller pixelns respons. Microsoft beskriver separat detaljerna kring högprecisa QPC-markeringar.
Baseline och Loaded
Section titled “Baseline och Loaded”Baseline mäter latensen i denna belastnings minimala konfiguration. Loaded arbetar med en GPU-belastning kalibrerad till 8,333333 ms, det vill säga en beräkningsbudget på ungefär 120 Hz. Den fysiska skärmen kan ha en annan frekvens.
Kalibreringen ändrar komplexiteten inuti shadern i intervallet 1-4096. Antalet pass förblir fast: fyra efterpass. Först anpassas ett intervall kring måltiden, sedan förfinas det och den valda konfigurationen verifieras. För att uppta samma tid på ett snabbt grafikkort krävs mer komplext arbete.
I prestandatester är arbetsmängden fast. I Loaded Latency kalibreras belastningen så att GPU-arbetets tid blir liknande på olika grafikkort. De erhållna tidsmarkeringarna normaliseras inte efter mätningen.
Bildutmatningen i latenstestet går via en separat presentationsväg: ett ramlöst fönster i flip-discard-läge, maximal bildrutedlatens (maximum frame latency) 1, förväntat DXGI-objekt och tearing om systemet stöder det. Denna väg är åtskild från den fasta prestandabelastningen, som körs utanför skärmbufferten och inte orsakar Present.
PresentMons roll
Section titled “PresentMons roll”För visningshändelser används biblioteket PresentMon 2.5.1. Det är ett ETW-projekt för analys av grafikhändelser i Windows, beskrivet av dess upphovsmän. Procmon / Process Monitor används inte i denna mätkedja.
PCBenchmarkX startar en egen insamlingssession, filtrerar händelser från sin egen process och kopplar bildrutor till programvarusignaler. Detta kräver ingen separat tjänst och ingen manuell start av en separat PresentMon.
Ytterligare intervall sparas:
- från signal till
Present; - från
PresenttillScreenTime; - från signal till
ScreenTime.
ScreenTime är en programvaruhändelse för bildvisning; ingen fotodiod används för att mäta ljus från skärmen. I basmodellen CPU/GPU/Latency är vikterna för Baseline och Loaded 20/80 inom latenskomponenten. Visningsmetriken ingår inte i PC Score; vad som ingår beskrivs i beräkningen av poäng. Att starta en ETW-session kan kräva körning som administratör eller medlemskap i gruppen “Performance Log Users”. Om sessionen inte kunde startas uteblir detta diagnostikblock, och felet registreras explicit i resultatet. Frånvaro av data är inte lika med noll latens.
PresentMons GPU-tid lagras också separat från den egna D3D12-tiden. PresentMons utvecklare noterar begränsningar i noggrannheten för GPU-metrik vid HAGS. Därför ersätter motorn inte egna GPU-tidsstämplar med en uppskattning från ETW.
Vad som utvecklats i PCBenchmarkX
Section titled “Vad som utvecklats i PCBenchmarkX”I PCBenchmarkX har signalgeneratorn, kopplingen av bildrutesteg, CPU-simulering, D3D12-belastningar, kalibrering av Loaded, ordningen för upprepade block, insamling av mätningar, statistisk bearbetning och poängmodellen utvecklats. QPC och D3D12 tillhandahålls av Windows. För insamling av grafik händelser via ETW används det öppna projektet PresentMon.
Beskrivningen av mätningen uppdaterades 2026-10-02 för motorn 0.8.0. Microsofts dokumentation om QPC och D3D12 granskades på nytt detta datum. PresentMon-referensen avser den använda versionen 2.5.1.
