Delen via


De CPU en GPU profileeren met tijdsopnamen

Timing captures combineren zowel CPU- als GPU-profileringsgegevens in één opname voor diepgaande analyse van uw toepassing. Deze gegevens worden verzameld terwijl de game wordt uitgevoerd en met minimale overhead, zodat u dingen kunt zien zoals hoe werk wordt verdeeld over CPU-kernen, de latentie tussen grafisch werk dat wordt verzonden door de CPU en wordt uitgevoerd door de GPU, wanneer bestands-IO toegang heeft tot en geheugentoewijzingen plaatsvinden, enzovoort. Dit omvat ook toepassingsgedefinieerde gebeurtenissen, markeringen en tellers via PixEvents.

Een tijdopname maken

Start of koppel deze vanuit de weergave aan het gewenste proces (zorg ervoor dat de relevante Voor GPU Capture optie is uitgeschakeld).

Stel indien nodig de opties voor tijdsopname in en klik, wanneer u klaar bent, op de knop Start Timing Capture om de opname te starten. Klik op Stop Timing Capture (of beëindig uw app) om de opname te stoppen. Na een korte verwerkingsperiode wordt de opname geopend.

Opties voor het vastleggen van tijdsinstellingen

Naam Beschrijving
Opnamemodus Opeenvolgend: noteer alle gebeurtenissen tussen het starten en stoppen van de opname.
Cirkel: Leg gebeurtenissen vast in een buffer met een vaste grootte, waardoor alleen de laatste n seconden aan gegevens worden opgeslagen. Zie dit blogbericht Circular Timing Captures voor meer informatie.
CPU-voorbeelden Voer voorbeeldprofilering uit om te zien waar CPU tijd besteedt. De samplefrequentie kan worden geconfigureerd.
Callstacks bij context switches Verzamel callstacks wanneer een thread van context verandert.
Toegang tot bestanden Bestandstoegang bijhouden.
GPU-tijdsinstellingen Verzamel gedetailleerde tijdsinstellingen over wanneer GPU-werk wordt gestart en gestopt.
GPU-bronnen Verzamel gedetailleerde informatie over D3D-objecten, zoals heaps en resources. Houd ook GPU-verblijf, gedegradeerde toewijzingen en toewijzingsmigraties bij.
VirtualAlloc/VirtualFree-gebeurtenissen Houdt toewijzingen bij die zijn gemaakt via de functies VirtualAlloc en VirtualFree.
HeapAlloc/HeapFree-gebeurtenissen Houdt toewijzingen bij die zijn gemaakt via de functies HeapAlloc en HeapFree.
Aangepaste allocator-gebeurtenissen Houdt toewijzingen bij die zijn gemaakt door aangepaste geheugentoewijzingen die zijn geïnstrueerd met PixEvents.
Gebeurtenissen van paginafout Verzamel gegevens op paginafouten die optreden wanneer de opname wordt uitgevoerd. De paginafouten worden weergegeven in de tijdlijn en in de weergave met elementdetails.
Callstacks voor nevenprocessen Leg callstacks vast voor andere processen dan het titelproces (het gestarte of gekoppelde proces).
Informatie over kernelafbeeldingen Verzamel informatie die nodig is om callstacks weer te geven voor binaire kernelbestanden.
.etl-bestand genereren in plaats van .wpix-bestand Het gegenereerde ETL-bestand kan later worden geconverteerd naar een .wpix-bestand in het bestand | Menu Converteren. Deze optie is handig bij het rapporteren van fouten aan het PIX-team of als u andere hulpprogramma's hebt voor het verwerken van ETW-gegevens.

Geautomatiseerde opnamen

U kunt programmatisch een opname maken met behulp van WinPixEventRuntime. Zie de blogpost Programmatic Capturevoor meer informatie.

CPU-profilering

Door de CPU-voorbeelden optie in te schakelen bij het maken van een opname, kunt u trage functies in het kritieke pad van uw toepassing identificeren, evenals problemen vinden die te maken hebben met threadwachttijden en contextswitches. U kunt ook verschillende soorten toewijzingen bijhouden (met de juiste optie voor vastleggen ingeschakeld).

Er zijn verschillende blogberichten die deze functies in detail behandelen:

GPU-profilering

Ondervindt uw app onregelmatige framedruppels? Overmatig VRAM-gebruik? Onverwachte pagineringsbewerkingen tussen systeemgeheugen en VRAM? De GPU-profileringsfuncties in PIX kunnen u helpen om tot de onderkant van deze veelvoorkomende en moeilijk te analyseren situaties te komen.

GPU-tijdsinstellingen

Schakel de optie GPU-tijdbepalingen in bij het maken van een opname om tijddatasets voor GPU-werk te verzamelen. In de tijdlijn weergave vindt u lanes voor elke GPU-wachtrij (in de Lane Selectorkunt u deze lanes snel vastzetten met de vastgezette API-wachtrijen configuratie). Deze banen bevatten verschillende subbanen:

  • PIX Events (GPU): Hiërarchische, toepassingsgedefinieerde regio's van GPU-werk. Zie PixEvents.
  • GPU-uitvoeringen: uitvoeringen komen overeen met werkinzendingen op API-niveau; bijvoorbeeld via ExecuteCommandLists.
  • GPU-werk: elk werk dat optreedt op de GPU; Bijvoorbeeld Tekenen, Verzendingen, Kopieën.
  • PIX-markeringen (GPU): door toepassing gedefinieerde markeringen. Zie PixEvents.

Wanneer u een gebeurtenis in de rijstrook selecteert, ziet u pijlen die aangeven waar op de CPU dat evenement is ontstaan. Er zijn ook verschillende visualisatieopties in het menu lane options (het tandwielpictogram naast de naam van de rijbaan). Met name de opties Platgemaakte gebeurtenissen en Platgemaakt GPU-werk zijn standaard ingeschakeld om ruimte te besparen, maar mogelijk wilt u de volledige PIX-gebeurtenishiërarchie of GPU-workloadparallelisatie zien wanneer u in een specifiek frame duikt.

Deze gegevens zijn ook beschikbaar in tabelvorm via weergave Bereikdetails door de relevante categorie te selecteren in de Items om vervolgkeuzelijst weer te geven.

Het weergeven van ongestructureerde PIX GPU-gebeurtenissen en GPU-werk in de API Queue Lane, met een pijl die aangeeft welke CPU-thread het GPU-werk heeft ingediend

Presentatie- en weergavegegevens

Vsyncs worden weergegeven als markeringen in een afzonderlijke Monitor rij en zijn te vinden in de Bereikdetails weergave binnen de Overige categorie.

GPU-geheugen en Direct3D-objecten

Schakel de optie GPU-resources in tijdens het maken van een opname om informatie over Direct3D-objecten te verzamelen. Om het totale geheugengebruik te grafieken, kunt u verschillende tellers vinden in metrische weergave. U kunt verschillende budgetlijnen configureren om een snel beeld te krijgen van of u voldoet aan uw geheugengebruiksdoelen. Wanneer u een interessegebied hebt gevonden, kunt u verder onderzoeken door het tijdsbereik te selecteren, op Tijdlijnweergave in- en uitzoomen te klikken om Bereik te selecteren in het snelmenu met de rechtermuisknop en de vervolgkeuzelijst voor Geselecteerd Tijdsbereik in te stellen op Zichtbaar Bereik.

Geheugengebruik van D3D API-objecten weergeven in de Metrics-weergave

Tip

Als u de lijnstijl instelt op vierkante, kunt u gemakkelijker zien waar de toewijzingen worden gemaakt.

In bereikdetails weergave kunt u verschillende informatie bekijken over Direct3D-API-objecten, zoals heaps, resources en pijplijnstatusobjecten. Om het gemakkelijker te maken verdachte objecten vast te stellen, wordt die informatie gegroepeerd op het moment dat deze is toegewezen en vrijgemaakt.

D3D-API-objecten weergeven in de weergave Bereikdetails

Residentie

Gebruik de categorieën voor Verblijfsbewerkingen, Gedegradeerde toewijzingen, en Toewijzingsmigraties in de bereikdetailweergavevoor kwesties met betrekking tot verblijf. Deze markeringen en gebeurtenissen worden ook weergegeven in de Residence Operations lane.

Verblijfsbewerkingen omvatten de bewerkingen MakeResident en Evict (geïnitieerd via de Direct3D 12-API) en eventuele PageIn- en PageOut-bewerkingen (zie Residency). Toewijzingen naar een lagere prioriteit treden op wanneer de grafische kernel (DXGK) geen resource kan toewijzen in de VRAM van uw GPU (door geheugendruk of fragmentatie). Als dat gebeurt, probeert DXGK ook toewijzingsmigraties uit te voeren voor deze gedegradeerde toewijzingen. Houd er rekening mee dat deze migraties dure bewerkingen zijn, omdat ze de GPU moeten onderbreken.

toewijzingsmigraties bekijken

GPU-gebruik en presentatietellingers

Schakel de optie "Capture SysMon-tellers" in tijdens het vastleggen om tellers te verzamelen die aanwezig zijn in de systeemmonitor (ook wel SysMon genoemd), waaronder tellers die verband houden met GPU-prestaties. Er zijn met name tellers voor:

  • GPU-gebruik opgesplitst per GPU-engine voor zowel het doelproces als alle processen.
  • Presentatiegegevens, zoals frames per seconde (en de omgekeerde waarde, in milliseconden, MsBetweenPresents) en MsUntilRenderComplete (tijd tussen het begin van een presentatie en de voltooiing van GPU-werk).
  • GPU-geheugengegevens, waaronder lokaal en niet-lokaal geheugengebruik, verblijf en budgetten.

Frames per seconde en GPU-gebruik weergeven in de metrische weergave

Tip

Beweeg de muisaanwijzer over de tellernamen in de Systeemmonitor voor een beschrijving.

Deze tellers kunnen ook in realtime worden bewaakt, tijdens het uitvoeren van een timing capture of door te klikken op de knop Tellerverzameling starten in de weergave System Monitor. De grafieken kunnen opnieuw worden gerangschikt en tellers kunnen dynamisch worden toegevoegd of verwijderd. Klik op tellers om alle beschikbare tellers weer te geven.

Systeemmonitor-grafieken en -tellers weergeven

Win32 bestand-I/O

Zie het blogbericht De prestaties van Win32 File IO analyseren in Timing Captures.

Andere analysefuncties