Stima i tempi di elaborazione dei frame di CPU e GPU

Stimare i tempi di elaborazione dei frame della CPU e della GPU (durata frame) è essenziale per comprendere le prestazioni dell'app e individuare i colli di bottiglia. Quando profili un'app con AGI, System Profiler fornisce dati di traccia che puoi utilizzare per stimare la durata frame.

Tempi della CPU

In AGI, puoi visualizzare la durata frame totale e attiva della CPU nella traccia della CPU di un profilo di sistema.

Tempo di CPU totale

Per misurare il tempo di CPU totale trascorso, seleziona l'intervallo di tempo che include il tempo tra gli eventi di invio dei frame successivi. Gli eventi di invio dei frame sono eglSwapBuffers (per OpenGL) e vkQueuePresentKHR (per Vulkan).

Uno screenshot degli eventi eglSwapBuffer.
Figura 1. Tempo tra due eventi eglSwapBuffer.


Uno screenshot di un evento vkQueuePresentKHR.
Figura 2. Tempo tra due eventi vkQueuePresentKHR.

Questa misurazione è una stima del tempo di CPU totale,ma non rappresenta necessariamente il tempo di CPU attivo. Ad esempio, nelle app con vincoli di GPU, la CPU potrebbe attendere il completamento del lavoro della GPU prima di inviare un nuovo frame. Questo accade spesso quando un evento dequeueBuffer, eglSwapBuffer (per OpenGL) o vkQueuePresent (per Vulkan) occupa una parte significativa del tempo di CPU. Il tempo di attesa è incluso nel tempo di CPU totale, ma non nel tempo di CPU attivo.

Uno screenshot che mostra un'ampia quantità di inattività durante gli eventi dequeueBuffer ed eglSwapBuffer.
Figura 3. Una grande quantità di inattività della CPU durante dequeueBuffer e eglSwapBuffer eventi.

Tempo di CPU attivo

Il tempo di CPU attivo determina quando la CPU esegue il codice dell'app senza essere in uno stato di inattività.

Per misurare il tempo di CPU attivo, visualizza le sezioni In esecuzione appena sopra gli eventi della CPU. Conta tutte le parti della traccia tra i due eventi di invio dei frame che si trovano nello stato In esecuzione. Assicurati di includere i thread di lavoro.

Uno screenshot di due periodi di tempo della CPU che possono essere utilizzati per misurare il tempo della CPU attivo.
Figura 5. Due periodi di tempo di CPU che possono essere utilizzati per misurare il tempo di CPU attivo.


Uno screenshot di un'app multithread che ha altri thread di lavoro mentre il thread principale è inattivo.
Figura 6. Un'app multithread che ha altri thread di lavoro mentre il thread principale è inattivo.

Un altro modo per misurare il tempo di CPU attivo è visualizzare le sezioni dell'app nelle tracce della CPU. Queste sezioni indicano quando la CPU è in esecuzione e corrispondono alle sezioni In esecuzione.

Uno screenshot che mostra lo stato di esecuzione di un thread bloccato che corrisponde alla traccia della CPU.
Figura 7. Lo stato di esecuzione del thread bloccato corrisponde alla traccia della CPU.

Per identificare le sezioni dell'app, puoi aggiungere indicatori ATrace all' app. Questi indicatori verranno visualizzati nella traccia della CPU di System Profiler.

Uno screenshot delle sezioni ATrace mostrate in una traccia della CPU.
Figura 8. Sezioni ATrace mostrate in una traccia della CPU.

Stimare la durata frame della GPU

Per stimare la durata frame della GPU, puoi utilizzare le sezioni della GPU o i contatori della GPU in System Profiler. La stima è più precisa quando si utilizzano le sezioni della GPU.

Sezioni della GPU

Se System Profiler dispone di informazioni sulle sezioni della GPU, puoi ottenere informazioni molto precise sulla durata frame della GPU misurando la quantità totale di tempo che l'app dedica all'esecuzione delle attività associate a un singolo frame.

Dispositivi Mali

Sui dispositivi Mali, le sezioni della GPU hanno tracce frammento, non frammento e occasionalmente non frammento supplementare. Per i frame meno complessi, il lavoro di frammento e non frammento è sequenziale, quindi è possibile distinguere il lavoro di un frame da un altro cercando le lacune tra il lavoro attivo della GPU.

In alternativa, se hai familiarità con il lavoro inviato alla GPU, l'identificazione del pattern dei passaggi di rendering inviati fornisce informazioni su quando inizia e termina un frame.

Uno screenshot di più frame eseguiti in sequenza.
Figura 9. Più frame eseguiti in sequenza.
Uno screenshot in cui l'AGI è ingrandita sul lavoro di un singolo frame.
Figura 10. Zoom su un singolo frame.

Per le app con un flusso di lavoro della GPU più parallelizzato, puoi ottenere la durata frame della GPU cercando tutti i frame con lo stesso submissionID nel riquadro Selezione per ogni sezione.

Per le app basate su Vulkan, è possibile utilizzare più invii per comporre un frame. Tieni traccia degli ID di invio utilizzando la traccia Eventi Vulkan, che contiene una sezione per ogni invio. Selezionando una sezione di invio, verranno evidenziate tutte le sezioni di attività della GPU corrispondenti all'invio.

Uno screenshot di un workload della GPU parallelizzato, in cui il lavoro su un frame può sovrapporsi a un altro.
Figura 11. Un workload della GPU parallelizzato, in cui il lavoro su un frame può sovrapporsi a un altro.


Uno screenshot di diversi eventi Vulkan selezionati per un frame.
Figura 12. Diversi eventi Vulkan selezionati per un frame.

Dispositivi Adreno

Sui dispositivi Adreno, le sezioni della GPU vengono visualizzate nella traccia Coda GPU 0 e sono sempre rappresentate in sequenza, quindi puoi esaminare tutte le sezioni che rappresentano i passaggi di rendering per un frame e utilizzarle per misurare la durata frame della GPU.

Uno screenshot di più frame eseguiti in sequenza.
Figura 13. Più frame eseguiti in sequenza.
Uno screenshot in cui AGI è ingrandito su un frame con più passaggi di rendering.
Figura 14. Zoom su un frame con più passaggi di rendering.

Analogamente allo scenario Mali descritto in precedenza, se l'app utilizza Vulkan, la traccia Eventi Vulkan fornisce informazioni sul lavoro inviato per eseguire il frame. Per evidenziare i passaggi di rendering, fai clic sulle sezioni Eventi Vulkan associate al frame.

Screenshot di un'app basata su Vulkan in cui sono selezionati gli eventi Vulkan del frame.
Figura 15. Un'app basata su Vulkan in cui sono selezionati gli eventi Vulkan per un frame.

In alcuni scenari, i limiti dei frame della GPU sono più difficili da distinguere perché l'app è fortemente vincolata alla GPU. In questi scenari, se hai familiarità con il lavoro inviato alla GPU, puoi identificare il pattern con cui vengono eseguiti i passaggi di rendering e determinare i limiti dei frame da queste informazioni.

Screenshot di un'app fortemente legata alla GPU con un pattern di pass di rendering che aiuta a identificare i limiti dei frame.
Figura 16. Un'app fortemente vincolata alla GPU con un pattern di passaggi di rendering che aiuta a identificare i limiti dei frame.

Contatori della GPU

Se le informazioni sulle sezioni della GPU non sono disponibili in una traccia, puoi stimare la durata frame della GPU utilizzando le tracce del contatore della GPU.

Dispositivi Mali

Sui dispositivi Mali, puoi utilizzare la traccia Utilizzo GPU per stimare la durata frame della GPU per un'app che non è a uso intensivo della GPU. Quando le app sono meno a uso intensivo della GPU, hanno periodi regolari di attività della GPU alta e bassa, anziché un'attività costantemente elevata. Per stimare la durata frame della GPU utilizzando la traccia Utilizzo GPU, misura la durata dei periodi di attività elevata nella traccia.

Screenshot delle tracce Utilizzo GPU e Coda GPU su un dispositivo Mali.
Figura 17. Le tracce Utilizzo GPU e Coda GPU su un dispositivo Mali.

Se l'app è più a uso intensivo della GPU, l'utilizzo della GPU può essere costantemente molto elevato. In questo caso, puoi utilizzare le tracce Utilizzo coda frammenti e Utilizzo coda non frammenti per monitorare l'attività della GPU e stimare la durata frame della GPU. Cercando i pattern nelle tracce frammenti e non frammenti , puoi ottenere una stima approssimativa dei limiti di un frame e utilizzarla per misurare la durata frame della GPU.

Uno screenshot delle tracce frammentate e non frammentate.
Figura 18. Tracce frammenti e non frammenti.

Dispositivi Adreno

Sui dispositivi Adreno, se l'app non è a uso intensivo della GPU, puoi stimare la durata frame della GPU nello stesso modo in cui puoi farlo con i dispositivi Mali nella sezione precedente.

Uno screenshot della percentuale di utilizzo della GPU e delle tracce della coda della GPU su un dispositivo Adreno.
Figura 19. Le tracce Percentuale di utilizzo GPU e Coda GPU su un dispositivo Adreno.

Se l'app è più a uso intensivo della GPU e la percentuale di utilizzo della GPU è costantemente elevata, puoi utilizzare le tracce Istruzioni vertici/secondo e Istruzioni frammenti / secondo per stimare la durata frame della GPU. Cercando i pattern nei livelli di attività di queste tracce, puoi ottenere una stima approssimativa dei limiti di un frame e utilizzarla per misurare la durata frame della GPU.

Uno screenshot delle istruzioni di Vertex / della seconda traccia.
Figura 20. La traccia Istruzioni vertici / secondo.

Queste altre tracce potrebbero fornire informazioni simili:

  • Vertici ombreggiati / secondo
  • Frammenti ombreggiati / secondo
  • % di tempo per ombreggiare i vertici
  • % di tempo per ombreggiare i frammenti