Latensmätning och PresentMon
På den här sidan
PCBenchmarkX mäter separat den interna bearbetningsfördröjningen och fördröjningen för bildutmatning. Dessa programvarumätvärden beskriver inte hela vägen från musklick till att en pixel 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 den planerade tidsfristen, generatorns uppvaknande, den faktiska signalen, mottagarens uppvaknande, simuleringen, kommandosändningen, GPU-tidsstämplar och visningshändelser. En gemensam bildruteidentifierare kopplar samman alla steg.
Planerad tidsfrist → generatorns uppvaknande → signal ↓ mottagarens uppvaknande ↓ CPU → kommandon → GPU ↓ Present → utmatningshändelseI dessa flöden syns både timerns försening och mottagarens uppvakningsfördröjning separat. Början av Core Latency är den faktiska signalen, därför räknas steget från den planerade tidsfristen till signalen inte in i detta mätvärde.
Uppdelning av fördröjningsvägen per steg
Section titled “Uppdelning av fördröjningsvä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 bildrutans data |
cpu_end_to_submit_start |
pausen 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öfördröjning |
gpu_execution |
själva utförandet av GPU-arbetet, i GPU-tick |
| presentation spans | visning: omslutningen Present och intervallen från signalen 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 tidsfrist 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 tickdifferensen 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.
Kalibreringsparet 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 pixlarnas respons. Microsoft beskriver separat detaljerna kring högprecisa QPC-markeringar.
Baseline och Loaded
Section titled “Baseline och Loaded”Baseline mäter fördröjningen 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 monitorn kan ha en annan frekvens.
Kalibreringen ändrar komplexiteten inuti shadern inom intervallet 1-4096. Antalet pass förblir fast: fyra efterpass. Först söks ett intervall runt måltiden av, 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 Performance ä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.
Bildrutorna för fördröjningstestet matas ut via en separat presentationsväg: ett ramlöst fönster i flip-discard-läge, maximal bildrutefördröjning (maximum frame latency) 1, ett 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 grafik händelser i Windows, beskrivet av dess upphovsmän. Procmon / Process Monitor används inte i denna mätkedja.
PCBenchmarkX startar en egen insamlingssession, väljer ut händelser från sin egen process och kopplar bildrutor till programvarusignalerna. 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 bildrutans visning; ingen fotodiod används för att mäta ljus från skärmen. Visningsmätvärdena 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 “Användare av prestandaloggen”. Om sessionen inte kunde startas kommer detta diagnostikblock inte att finnas, och felet registreras explicit i resultatet. Frånvaro av data är inte lika med noll fördröjning.
PresentMons GPU-tid lagras också separat från den egna D3D12-tiden. PresentMons utvecklare noterar begränsningar i noggrannheten för GPU-mätvärden vid HAGS. Därför ersätter motorn inte sina 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 bildrutans steg, CPU-simuleringen, D3D12-belastningarna, kalibreringen av Loaded, ordningen för upprepade block, insamlingen av mätningar, den statistiska bearbetningen 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.
Teknisk information och externa källor verifierades 2026-09-20 för motorn 0.5.2.
