Google ritocca il cuore di Android: perché i telefoni sembrano più veloci con AutoFDO

Google introduce AutoFDO nel kernel Android: il compilatore usa dati reali di utilizzo per riorganizzare il codice. L’obiettivo è rendere smartphone più veloci, fluidi ed efficienti.
Google ritocca il cuore di Android: perché i telefoni sembrano più veloci con AutoFDO

Il funzionamento di Android dipende in larga parte da un componente spesso invisibile agli utenti: il kernel che gestisce CPU, memoria, driver hardware e comunicazione tra applicazioni e sistema. Intervenire su questa base significa modificare il comportamento dell’intero sistema operativo. Google ha iniziato a introdurre una nuova strategia di ottimizzazione che sfrutta dati di utilizzo reale per migliorare l’efficienza del codice del kernel Android. L’obiettivo è ridurre i tempi di esecuzione delle operazioni più frequenti e rendere gli smartphone più reattivi senza cambiare l’hardware.

L’iniziativa è il risultato del lavoro del team che sviluppa e mantiene la toolchain Android basata su LLVM, cioè l’insieme di strumenti di compilazione utilizzati per trasformare il codice sorgente delle applicazioni e dei componenti di sistema in codice eseguibile ottimizzato per i dispositivi Android.

Il ruolo del kernel nelle prestazioni di Android

Il punto di partenza è un dato significativo: il kernel Android può arrivare a occupare circa il 40% del tempo di CPU su uno smartphone.

Anche piccoli miglioramenti a questo livello producono effetti tangibili sull’esperienza d’uso quotidiana: dal lancio delle applicazioni alla gestione del multitasking. Per questo motivo Google ha iniziato a portare nel kernel una tecnica di ottimizzazione già utilizzata da tempo per librerie e componenti di sistema.

Quando un’app richiede risorse alla CPU o interagisce con componenti come modem, fotocamera o GPU, il kernel coordina la richiesta attraverso il sottosistema appropriato. Operazioni come scheduling dei thread, gestione degli interrupt e accesso al file system sono quindi tra le più eseguite. Ottimizzare queste parti riduce il numero di cicli di CPU necessari per completare azioni ripetute migliaia di volte al giorno.

Come funziona l’ottimizzazione AutoFDO

La tecnica introdotta da Google si chiama Automatic Feedback-Directed Optimization, abbreviata in AutoFDO. Si tratta di un metodo di ottimizzazione basato su profili di esecuzione reali. In pratica il compilatore riceve informazioni su quali parti del codice sono eseguite più spesso durante l’utilizzo reale del sistema.

Il processo parte dalla raccolta dei profili di esecuzione. Google ha costruito un ambiente di test controllato basato su dispositivi Pixel, dove un set rappresentativo di applicazioni Android viene eseguito ripetutamente. Il carico di lavoro include le 100 app più popolari e simula attività tipiche come apertura delle applicazioni, navigazione nelle interfacce e operazioni in background.

Funzionamento pipeline AutoFDO kernel Android

Fonte dell’immagine: Google, Android Developers Blog

Durante questi test, appositi strumenti di profiling analizzano il comportamento della CPU e registrano i percorsi di esecuzione più frequenti.

Il sistema utilizza strumenti come simpleperf e le estensioni hardware di tracciamento presenti nei chip ARM moderni, tra cui Embedded Trace Extension e Trace Buffer Extension: sono soluzioni che permettono di raccogliere la cronologia dei salti condizionali e identificare le porzioni di codice più attive, spesso chiamate “hot paths“.

I dati raccolti sono poi aggregati e convertiti in profili utilizzabili dal compilatore. Durante la compilazione successiva del kernel, questi profili guidano le decisioni di ottimizzazione. Il compilatore può ad esempio collocare funzioni molto usate in regioni di memoria contigue, ridurre i salti di controllo o scegliere strategie di inlining più efficaci.

Dalla profilazione alla ricompilazione del kernel

Una volta generati i profili AutoFDO, il kernel viene ricompilato con queste informazioni integrate. Il compilatore riorganizza il layout del codice privilegiando le funzioni più utilizzate.

L’effetto principale è una riduzione dei cache miss – cioè dei casi in cui la CPU non trova i dati richiesti nella memoria cache e deve recuperarli da livelli di memoria più lenti – insieme a una diminuzione dei salti di esecuzione (branch) meno probabili, ovvero quei percorsi del codice che il processore effettua di rado e che possono rallentare il flusso di esecuzione.

Prima della distribuzione, ogni profilo passa attraverso una fase di validazione. Gli ingegneri confrontano i nuovi profili con quelli precedenti, verificano la consistenza dei campioni raccolti e analizzano le modifiche nella sezione di codice eseguibile del kernel. Solo dopo benchmark e test di stabilità il kernel ottimizzato è integrato nelle build ufficiali.

Distribuzione nelle versioni recenti del kernel Android

Google ha iniziato a integrare queste ottimizzazioni nei rami principali del kernel Android utilizzati dal progetto AOSP (Android Open Source Project). In particolare la tecnologia AutoFDO è già in fase di distribuzione nei rami android16-6.12 e android15-6.6, che rappresentano le basi delle versioni più recenti del sistema operativo.

Il meccanismo riguarda principalmente la Generic Kernel Image, il kernel condiviso che i produttori utilizzano come base per i propri dispositivi. Ciò significa che le ottimizzazioni non restano limitate ai telefoni Pixel utilizzati per i test ma possono propagarsi anche ai dispositivi di altri produttori man mano che adottano queste versioni del kernel.

Google ha già indicato alcune direzioni per l’evoluzione futura. L’obiettivo consiste nell’estendere la profilazione a ulteriori sottosistemi del kernel e ai moduli aggiuntivi. Tra questi figurano i driver sviluppati dai produttori per componenti specifici come sensori fotografici, modem cellulari e GPU. Ottimizzare anche queste parti potrebbe amplificare gli effetti sulle prestazioni complessive dei dispositivi Android.

Ti consigliamo anche

Link copiato negli appunti