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 vista Connessione avvia o collega al processo desiderato (verificando che l'opzione Per l'acquisizione GPU sia deselezionata).

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

Opzioni di acquisizione temporale

Nome Descrizione
Modalità acquisizione Sequenziale: Registra l'intero svolgimento degli eventi tra l'inizio e la fine dell'acquisizione.
Circolare: registra gli eventi in un buffer a dimensione fissa, salvando solo gli ultimi n secondi di dati. Per maggiori dettagli, vedere questo post sul blog sulle acquisizioni tramite temporizzazione circolare.
Esempi di CPU Eseguire la profilatura di esempio per vedere dove la CPU impiega tempo. La frequenza di campionamento è configurabile.
Callstack sui Cambi di Contesto Raccogli gli stack di chiamate quando un thread cambia contesto.
Accessi ai file Tenere traccia degli accessi ai file.
Tempi GPU Raccogliere informazioni dettagliate sulla tempistica riguardante l'inizio e la fine del lavoro della 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.
Pile di chiamate per processi non-titolo Acquisire gli stack di chiamate per i processi diversi dal processo principale (il processo avviato o a cui si è collegati).
Informazioni sull'immagine del kernel Raccogliere le informazioni necessarie per mostrare i callstack per i 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 programmatiche

È possibile creare un'acquisizione programmaticamente usando WinPixEventRuntime. Per informazioni dettagliate, vedere il post del blog Acquisizione programmatica.

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 sta riscontrando un calo intermittente dei fotogrammi? Utilizzo eccessivo di VRAM? Operazioni di paging impreviste tra memoria di sistema e VRAM? Le funzionalità di profilazione della GPU in PIX consentono di comprendere a fondo queste situazioni comuni e difficili da analizzare.

Tempi GPU

Abilitare l'opzione tempistiche GPU quando si effettua un'acquisizione per raccogliere i dati temporali per il lavoro della GPU. Nella Visualizzazione Sequenza Temporale, è possibile trovare corsie per ogni coda GPU (nel Selettore Corsia, è possibile fissare rapidamente tali corsie con la configurazione Code API fissate). 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 tabellare tramite la visualizzazione Dettagli Intervallo, selezionando la categoria pertinente dall'elenco a discesa Elementi da visualizzare.

Visualizzazione degli eventi GPU PIX non appiattiti e del lavoro GPU in coda API, con una freccia che indica quale thread della CPU ha inviato il lavoro GPU

Presentazione e visualizzazione di informazioni

I Vsync vengono visualizzati come marcatori in una corsia Monitor separata e possono essere trovati 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 Zoom della sequenza temporale per selezionare l'intervallo nel menu di scelta rapida e impostando l'opzione a discesa Intervallo di tempo selezionato su Seleziona intervallo visibile.

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

Suggerimento

Impostare lo stile linea su Quadrato rende più facile vedere dove vengono effettuate le allocazioni.

Nella visualizzazione Dettagli intervallo, è possibile vedere varie informazioni sugli oggetti delle API Direct3D, come 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 vista Dettagli intervallo

Residenza

Per i problemi relativi alla residenza, vedere le categorie Operazioni di Residenza, Allocazioni declassate e Migrazioni di Allocazione nella visualizzazione Dettagli Intervallo. Tali indicatori ed eventi vengono visualizzati anche nella corsia Operazioni 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 quelle allocazioni retrocesse. Si noti che queste migrazioni sono operazioni costose, perché richiedono la sospensione della GPU.

Visualizzazione delle migrazioni di allocazione

Utilizzo della GPU e i contatori di presentazione

Abilitare l'opzione Acquisisci contatori SysMon durante l'acquisizione per raccogliere i contatori presenti nel 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, come fotogrammi al secondo (e il loro inverso, in millisecondi, MsBetweenPresents) e MsUntilRenderComplete (tempo tra l'inizio di una presentazione 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 nel System Monitor per visualizzare una descrizione.

Questi contatori possono anche essere monitorati in tempo reale, durante l'acquisizione del cronometraggio, oppure 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

Consulta il post sul blog Analisi delle prestazioni di I/O dei file Win32 nelle Acquisizioni temporali.

Altre funzionalità di analisi