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:
- Overzicht van timing captures
- CPU-voorbeelden analyseren in tijdopnames blogpost.
- Het analyseren van haperingen en contextswitches in tijdopnames
-
Het geheugengebruik en de prestaties analyseren in tijdsopnamen
- U kunt ook uw eigen aangepaste allocators instrumenteren. Voor meer informatie, zie de blogpost over ondersteuning voor geheugenprofilering van toewijzingen die zijn gemaakt met de aangepaste allocator van een titel.
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.
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.
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.
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.
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.
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.
Win32 bestand-I/O
Zie het blogbericht De prestaties van Win32 File IO analyseren in Timing Captures.
Andere analysefuncties
- Statistische comparisies helpen bepalen welke gedeelten van een PIX-gebeurtenishiërarchie statistisch verschillende duur hebben voor de set punten die worden vergeleken. Zie het blogbericht Statistische vergelijkingsfuncties van Timing Capturevoor meer informatie.
- Door prestatiebudgetten in te stellen, kunt u snel problematische gebieden van de opname identificeren. Voor meer informatie, zie het blogbericht over het gebruik van prestatiebudgetten in de meetgegevensweergave van Timing Capture.
- Zie ook de blogpost Kritieke padanalyse in tijdopnames.