Gestione delle prestazioni

La gestione della potenza e delle prestazioni dei dispositivi Android può contribuire a garantire che le app funzionino in modo coerente e fluido su una vasta gamma di hardware. In Android 7.0 e versioni successive, gli OEM possono implementare il supporto per i suggerimenti per le prestazioni sostenute che consentono alle app di mantenere un rendimento costante del dispositivo e specificare un core esclusivo per migliorare le prestazioni delle app in primo piano che richiedono un'elevata intensità di risorse della CPU.

Prestazioni durature

Per le app che funzionano a lungo (giochi, fotocamera, RenderScript, elaborazione audio), le prestazioni possono variare notevolmente quando vengono raggiunti i limiti di temperatura del dispositivo e i motori System on Chip (SoC) vengono limitati. Gli sviluppatori di app che creano app ad alte prestazioni e a lungo termine sono limitati perché le funzionalità della piattaforma di base sono un bersaglio mobile quando il dispositivo inizia a surriscaldarsi.

Per risolvere questi limiti, Android 7.0 ha introdotto il supporto per le prestazioni sostenute, consentendo agli OEM di fornire suggerimenti sulle funzionalità di prestazioni del dispositivo per le app a lungo termine. Gli sviluppatori di app possono utilizzare questi suggerimenti per ottimizzare le app in modo da ottenere un livello di prestazioni del dispositivo prevedibile e coerente per lunghi periodi di tempo.

Architettura

Un'app per Android può richiedere alla piattaforma di attivare una modalità di rendimento costante in cui il dispositivo Android può mantenere un livello di rendimento costante per periodi di tempo prolungati.

Figura 1. Architettura in modalità di prestazioni elevate.

Implementazione

Per supportare le prestazioni sostenute in Android 7.0 e versioni successive, gli OEM devono:

  • Apporta modifiche specifiche del dispositivo all'HAL di alimentazione per bloccare le frequenze massime della CPU/GPU o eseguire altre ottimizzazioni per evitare il throttling termico.
  • Implementa il nuovo suggerimento POWER_HINT_SUSTAINED_PERFORMANCE nell'HAL di Power.
  • Dichiara il supporto restituendo TRUE tramite l'APIisSustainedPerformanceModeSupported().
  • Implementa Window.setSustainedPerformanceMode.

Nell'implementazione di riferimento di Nexus, l'indicazione di potenza limita le frequenza massime della CPU e della GPU ai livelli più elevati sostenibili. Tieni conto che abbassare la barra MAX nella frequenza della CPU/GPU riduce la frequenza frame, ma questa frequenza inferiore è preferita in questa modalità per la sua sostenibilità. Ad esempio, un dispositivo che utilizza frequenze massime normali potrebbe essere in grado di eseguire il rendering a 60 FPS per alcuni minuti, ma dopo che il dispositivo si surriscalda, potrebbe essere limitato a 30 FPS entro 30 minuti. Quando utilizzi la modalità sostenuta, il dispositivo può, ad esempio, eseguire il rendering in modo coerente a 45 FPS per l'intera durata di 30 minuti. L'obiettivo è ottenere una frequenza frame quando si utilizza la modalità che sia uguale o superiore alla frequenza frame quando non si utilizza la modalità e che sia coerente nel tempo, in modo che gli sviluppatori non debbano inseguire un bersaglio in movimento.

Ti consigliamo vivamente di implementare la modalità sostenuta in modo che il dispositivo raggiunga le prestazioni massime possibili, non solo i valori minimi richiesti per superare il test (ad es. scegli i limiti di frequenza MAX più elevati possibili che non causano il throttling termico del dispositivo nel tempo).

Nota: non è necessario limitare le frequenze di clock MAX per implementare la modalità sostenuta.

Convalida

Gli OEM possono utilizzare un test CTS (Android 7.0 e versioni successive) per verificare la propria implementazione dell'API per il rendimento costante. Il test esegue un carico di lavoro per circa 30 minuti e esegue il benchmarking delle prestazioni con e senza la modalità sostenuta abilitata:

  • Con la modalità sostenuta attivata, la frequenza fotogrammi deve rimanere relativamente costante (il test misura la percentuale di variazione della frequenza fotogrammi nel tempo e richiede una variazione inferiore al 5%).
  • Con la modalità sostenuta attivata, la frequenza frame non deve essere inferiore alla frequenza frame al termine di 30 minuti con la modalità disattivata.

Inoltre, puoi testare manualmente l'implementazione con diversi carichi di lavoro che richiedono un'intensa attività della CPU e della GPU per assicurarti che il dispositivo non venga limitato termicamente dopo 30 minuti di utilizzo. Nei test interni, abbiamo utilizzato carichi di lavoro di esempio, tra cui giochi e app di benchmarking (ad es. gfxbench).

Core esclusivi

Per i carichi di lavoro ad alta intensità di CPU e sensibili al tempo, l'anticipazione da parte di un altro thread può fare la differenza tra rispettare o meno le scadenze dei frame. Per le app con requisiti rigorosi di latenza e frequenza fotogrammi (ad esempio app audio o di realtà virtuale), disporre di un core della CPU esclusivo può garantire un livello accettabile di prestazioni.

I dispositivi con Android 7.0 o versioni successive ora possono riservare un core esplicitamente per l'app in primo piano principale, migliorando le prestazioni di tutte le app in primo piano e offrendo alle app con carichi di lavoro ad alta intensità un maggiore controllo sulla modalità di allocazione del lavoro tra i core della CPU.

Per supportare un core esclusivo su un dispositivo:

  • Attiva cpusets e configura un cpuset che contenga solo l'app in primo piano principale.
  • Assicurati che un core (il core esclusivo) sia riservato ai thread di questo cpuset.
  • Implementa l'API getExclusiveCores per restituire il numero del nucleo esclusivo.

Per determinare quali processi sono pianificati su quali core, utilizza systrace durante l'esecuzione di qualsiasi carico di lavoro e verifica che nessun thread dello spazio utente di app diverse dall'app in primo piano principale sia pianificato sul core esclusivo.

Per visualizzare un'implementazione di riferimento per Nexus 6P, consulta android//device/huawei/angler/power/power.c.