Condividi tramite


Profilare la CPU e la GPU con acquisizioni temporali

Le acquisizioni temporali combinano i dati di profilatura della CPU e della GPU in un'unica acquisizione per l'analisi approfondita dell'applicazione. Questi dati vengono raccolti durante l'esecuzione del gioco e con un sovraccarico minimo, in modo da poter visualizzare elementi come il funzionamento distribuito tra core CPU, la latenza tra il lavoro grafico inviato dalla CPU ed eseguito dalla GPU, quando si verificano accessi di I/O ai file e allocazioni di memoria e così via. Sono inclusi anche eventi, indicatori e contatori definiti dall'applicazione tramite PixEvents.

Acquisizione di intervalli

Dalla visualizzazione Connessione avviare o collegare al processo desiderato (verificando che l'opzione Appropriata per l'acquisizione GPU sia deselezionata).

Configurare le opzioni di acquisizione di intervallo in base alle esigenze e, quando si è pronti, fare clic sul pulsante Avvia acquisizione intervallo per iniziare la registrazione. Fare clic su Arresta acquisizione intervallo (o terminare l'app) per terminare la registrazione. Dopo un breve periodo di elaborazione, l'acquisizione verrà aperta.

Opzioni di acquisizione temporizzazione

Nome Descrizione
Modalità acquisizione Sequenziale: registra l'intera quantità di eventi tra l'avvio e l'arresto dell'acquisizione.
Circolare: registra gli eventi in un buffer a dimensione fissa, salvando solo gli ultimi n secondi di dati. Per altri dettagli, vedere questo post di blog Sulle acquisizioni circolari.
Esempi di CPU Eseguire la profilatura di esempio per vedere dove la CPU impiega tempo. La frequenza di campionamento è configurabile.
Callstacks on Context Switch Raccogliere gli stack di chiamate quando un thread cambia contesti.
Accessi ai file Tenere traccia degli accessi ai file.
Tempi GPU Raccogliere informazioni dettagliate sulla tempistica all'avvio e all'arresto del lavoro gpu.
Risorse GPU Raccogliere informazioni dettagliate sugli oggetti D3D, ad esempio heap e risorse. Tenere traccia anche della residenza della GPU, delle allocazioni abbassate di livello e delle migrazioni di allocazione.
Eventi VirtualAlloc/VirtualFree Tiene traccia delle allocazioni effettuate tramite le funzioni VirtualAlloc e VirtualFree.
Eventi HeapAlloc/HeapFree Tiene traccia delle allocazioni effettuate tramite le funzioni HeapAlloc e HeapFree.
Eventi di allocatore personalizzati Tiene traccia delle allocazioni effettuate dagli allocatori di memoria personalizzati instrumentati con PixEvents.
Eventi di errore di pagina Raccogliere dati in caso di errori di pagina che si verificano quando l'acquisizione è in esecuzione. Gli errori di pagina vengono visualizzati nella sequenza temporale e nella visualizzazione dei dettagli dell'elemento.
Callstacks for non-title processes Acquisire gli stack di chiamate per i processi diversi dal processo del titolo (avviato o collegato al processo).
Informazioni sull'immagine del kernel Raccogliere informazioni che devono mostrare gli stack di chiamate per i file binari del kernel.
Generare il file con estensione etl anziché il file con estensione wpix Il file con estensione etl generato può essere convertito in un secondo momento in un file con estensione wpix nel file | Menu Converti. Questa opzione è utile quando si segnalano repros di bug al team PIX o se si dispone di altri strumenti per l'elaborazione dei dati ETW.

Acquisizioni a livello di codice

È possibile acquisire un'acquisizione a livello di codice usando WinPixEventRuntime. Per informazioni dettagliate, vedere il post di blog Acquisizione a livello di codice.

Profilatura della CPU

L'abilitazione dell'opzione Esempi CPU quando si acquisisce un'acquisizione consente di individuare le funzioni lente nel percorso critico dell'applicazione, nonché di individuare i problemi relativi alle attese dei thread e ai commutatori di contesto. Sarà anche possibile tenere traccia di diversi tipi di allocazioni (con l'opzione di acquisizione appropriata abilitata).

Esistono diversi post di blog che illustrano in dettaglio queste funzionalità:

Profilatura GPU

L'app riscontra un calo intermittente dei fotogrammi? Utilizzo eccessivo di VRAM? Operazioni di paging impreviste tra memoria di sistema e VRAM? Le funzionalità di profilatura GPU in PIX consentono di raggiungere la parte inferiore di queste situazioni comuni e difficili da analizzare.

Tempi GPU

Abilitare l'opzione Temporizzazione GPU quando si acquisisce un'acquisizione per raccogliere i dati di temporizzazione per il lavoro della GPU. Nella visualizzazione Sequenza temporale è possibile trovare corsie per ogni coda GPU (nel selettore corsia è possibile aggiungere rapidamente tali corsie con la configurazione aggiunta delle code API). Queste corsie contengono diverse sottolane:

  • Eventi PIX (GPU): aree gerarchicamente definite dall'applicazione del lavoro GPU. Vedere PixEvents.
  • Esecuzioni GPU: le esecuzioni corrispondono agli invii di lavoro a livello di API; ad esempio, tramite ExecuteCommandLists.
  • Lavoro GPU: qualsiasi lavoro che si verifica sulla GPU; Ad esempio, Disegni, Invii, Copie.
  • Marcatori PIX (GPU): indicatori definiti dall'applicazione. Vedere PixEvents.

Quando si seleziona un evento nella corsia, verranno visualizzate le frecce che indicano dove ha avuto origine l'evento sulla CPU. Sono disponibili anche varie opzioni di visualizzazione nel menu opzioni corsia (l'icona a forma di ingranaggio accanto al nome della corsia). In particolare, le opzioni Flatten Events e Flatten GPU Work sono abilitate per impostazione predefinita per mantenere lo spazio, ma potrebbe essere necessario visualizzare la gerarchia completa di eventi PIX o la paralellizzazione lavoro GPU durante l'immersione in un frame specifico.

Tali dati sono disponibili anche in formato tabulare tramite la visualizzazione Dettagli intervallo selezionando la categoria pertinente nell'elenco a discesa Elementi da visualizzare .

Visualizzazione degli eventi GPU PIX non gonfiati e del lavoro della GPU nella corsia coda API, con una freccia che mostra il thread della CPU che ha inviato il lavoro della GPU

Presentazione e visualizzazione di informazioni

I Vsync vengono visualizzati come marcatori in una corsia di monitoraggio separata e sono disponibili nella visualizzazione Dettagli intervallo all'interno della categoria Altro.

Memoria GPU e oggetti Direct3D

Abilitare l'opzione risorse GPU quando si acquisisce un'acquisizione per raccogliere informazioni sugli oggetti Direct3D. Per visualizzare un grafico dell'utilizzo complessivo della memoria, è possibile trovare diversi contatori nella visualizzazione Metriche . È possibile configurare varie linee di budget per ottenere un'idea rapida del raggiungimento degli obiettivi di utilizzo della memoria. Quando si trova un'area di interesse, è possibile esaminare ulteriormente selezionando l'intervallo di tempo, facendo clic su Visualizzazione Sequenza temporale zoom per selezionare Intervallo nel menu di scelta rapida e impostando l'elenco a discesa Intervallo di tempo selezionato su Seleziona intervallo visibile.

Visualizzazione dell'utilizzo della memoria dell'oggetto dell'API D3D nella visualizzazione Metriche

Suggerimento

L'impostazione dello stile linea su Quadrato rende più semplice vedere dove vengono effettuate le allocazioni.

Nella visualizzazione Dettagli intervallo è possibile visualizzare varie informazioni sugli oggetti API Direct3D, ad esempio heap, risorse e oggetti di stato della pipeline. Per semplificare l'individuazione di eventuali oggetti sospetti, tali informazioni vengono raggruppate in base a quando sono state allocate e liberate.

Visualizzazione di oggetti API D3D nella visualizzazione Dettagli intervallo

Residenza

Per i problemi relativi alla residenza, vedere le categorie Operazioni di residenza, Allocazioni abbassate e Migrazioni allocazioni della visualizzazione Dettagli intervallo. Tali indicatori ed eventi vengono visualizzati anche nella corsia Delle operazioni di residenza.

Le operazioni di residenza includono le operazioni MakeResident e Evict (avviate tramite l'API Direct3D 12), nonché le operazioni PageIn e PageOut (per altri dettagli, vedere Residenza). Le allocazioni abbassate si verificano quando il kernel grafico (DXGK) non può allocare una risorsa nella VRAM della GPU (a causa di una pressione di memoria o di frammentazione). In tal caso, DXGK tenterà anche di eseguire migrazioni di allocazione per tali allocazioni abbassate di livello. Si noti che queste migrazioni sono operazioni costose, perché richiedono la sospensione della GPU.

Visualizzazione delle migrazioni di allocazione

Utilizzo gpu e contatori di presentazione

Abilitare l'opzione Acquisisci contatori SysMon quando si acquisisce un'acquisizione per raccogliere i contatori presenti in Monitoraggio di sistema (noto anche come SysMon), che include vari contatori correlati alle prestazioni della GPU. In particolare, esistono contatori per:

  • L'utilizzo della GPU è suddiviso in base al motore GPU sia per il processo di destinazione che per tutti i processi.
  • Dati di presentazione, ad esempio fotogrammi al secondo (e inversa, in millisecondi, MsBetweenPresents) e MsUntilRenderComplete (tempo tra un inizio attuale e il completamento del lavoro GPU).
  • Informazioni sulla memoria GPU, inclusi l'utilizzo della memoria locale e non locale, la residenza e i budget.

Visualizzazione dei fotogrammi al secondo e utilizzo della GPU nella visualizzazione Metriche

Suggerimento

Passare il puntatore del mouse sui nomi dei contatori in Monitoraggio di sistema per una descrizione.

Questi contatori possono anche essere monitorati in tempo reale, durante l'acquisizione di tempi o facendo clic sul pulsante Avvia raccolta contatori nella visualizzazione Monitoraggio sistema. I grafici possono essere riorganizzato e i contatori possono essere aggiunti o rimossi in modo dinamico. Fare clic su Contatori per visualizzare tutti i contatori disponibili.

Visualizzazione di grafici e contatori di Monitoraggio di sistema

I/O del file Win32

Vedere il post di blog Analisi delle prestazioni di I/O dei file Win32 in Acquisizioni temporali.

Altre funzionalità di analisi