Gestione delle prestazioni

Gestire la potenza e le prestazioni dei dispositivi Android può contribuire a garantire che le applicazioni vengano eseguite in modo coerente e fluido su un'ampia gamma di hardware. In Android 7.0 e versioni successive, gli OEM possono implementare il supporto per suggerimenti sulle prestazioni sostenuti che consentono alle app di mantenere prestazioni costanti del dispositivo e specificare un core esclusivo per migliorare le prestazioni per le applicazioni in primo piano ad uso intensivo della CPU.

Prestazioni sostenute

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

Per risolvere queste limitazioni, Android 7.0 ha introdotto il supporto per prestazioni sostenute, consentendo agli OEM di fornire suggerimenti sulle capacità prestazionali del dispositivo per applicazioni a lunga esecuzione. Gli sviluppatori di app possono utilizzare questi suggerimenti per ottimizzare le applicazioni per un livello prevedibile e coerente di prestazioni del dispositivo per lunghi periodi di tempo.

Architettura

Un'applicazione Android può richiedere alla piattaforma di entrare in una modalità di prestazione sostenuta in cui il dispositivo Android può mantenere un livello costante di prestazioni per periodi di tempo prolungati.

Figura 1. Architettura della modalità prestazioni sostenute

Implementazione

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

  • Apporta modifiche specifiche del dispositivo all'HAL di potenza per bloccare le frequenze massime di CPU/GPU o eseguire altre ottimizzazioni per prevenire la limitazione termica.
  • Implementa il nuovo suggerimento POWER_HINT_SUSTAINED_PERFORMANCE nel power HAL.
  • Dichiara il supporto restituendo TRUE tramite l'API isSustainedPerformanceModeSupported() .
  • Implementare Window.setSustainedPerformanceMode .

Nell'implementazione di riferimento del Nexus, il suggerimento di potenza limita le frequenze massime di CPU e GPU ai livelli più alti sostenibili. Tieni presente che abbassando la barra MAX della frequenza CPU/GPU si abbasserà il frame rate, ma questo tasso più basso è preferibile in questa modalità per via della sua sostenibilità. Ad esempio, un dispositivo che utilizza i normali clock massimi potrebbe essere in grado di eseguire il rendering a 60 FPS per alcuni minuti, ma dopo che il dispositivo si è riscaldato, potrebbe rallentare a 30 FPS entro la fine dei 30 minuti. Quando si utilizza la modalità sostenuta, il dispositivo può, ad esempio, eseguire il rendering costantemente a 45 FPS per tutti i 30 minuti. L'obiettivo è un frame rate quando si utilizza la modalità che sia altrettanto alto (o superiore) rispetto al frame rate quando non si utilizza la modalità e coerente nel tempo in modo che gli sviluppatori non debbano inseguire un bersaglio in movimento.

Consigliamo vivamente di implementare la modalità sostenuta in modo tale che il dispositivo raggiunga le massime prestazioni sostenute possibili, non solo i valori minimi richiesti per superare il test (ad esempio, scegliere i limiti di frequenza MAX più alti possibili che non causino una limitazione termica del dispositivo nel tempo).

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

Validazione

Gli OEM possono utilizzare un test CTS (Android 7.0 e versioni successive) per verificare l'implementazione dell'API per prestazioni sostenute. Il test esegue un carico di lavoro per circa 30 minuti e confronta le prestazioni con e senza la modalità sostenuta abilitata:

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

Inoltre, puoi testare manualmente la tua implementazione con diversi carichi di lavoro ad uso intensivo di CPU e GPU per garantire che il dispositivo non subisca limitazioni termiche dopo 30 minuti di utilizzo. Nei test interni, abbiamo utilizzato carichi di lavoro campione inclusi giochi e app di benchmarking (ad esempio gfxbench ).

Nuclei esclusivi

Per i carichi di lavoro ad uso intensivo della CPU e sensibili al tempo, essere anticipati da un altro thread può fare la differenza tra rispettare o meno le scadenze dei frame. Per le app che hanno requisiti rigorosi di latenza e frame rate (come app audio o di realtà virtuale), avere un core CPU esclusivo può garantire un livello di prestazioni accettabile.

I dispositivi con Android 7.0 o versioni successive ora possono riservare esplicitamente un core per l'applicazione in primo piano, migliorando le prestazioni di tutte le app in primo piano e offrendo alle app con carichi di lavoro ad alta intensità un maggiore controllo su come il loro lavoro viene allocato tra i core della CPU.

Per supportare un core esclusivo su un dispositivo:

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

Per determinare quali processi sono pianificati su quali core, utilizzare systrace durante l'esecuzione di qualsiasi carico di lavoro e verificare che nessun thread dello spazio utente da applicazioni diverse dall'applicazione in primo piano sia pianificato sul core esclusivo.

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