XDA Myth Busters: Linaro 4.7.4 vs. CCG 4.7

L'importanza di una toolchain ottimizzata è uno degli argomenti più caldi nel mondo degli sviluppatori Android. Molti di voi potrebbero aver sentito parlare di GCC e Linaro, che sono i due più grandi progetti di questo tipo. GCC è un veterano uscito inizialmente nel 1987, mentre Linaro è un giocatore relativamente giovane a soli quattro anni.

Immergiamoci prima nella storia di questi due progetti. Come ho detto prima, la GNU Compiler Collection è vecchia. Nel corso degli anni è stato utilizzato per compilare vari progetti, incluso Android. Google ha deciso di utilizzare le versioni 4.6 e 4.7 come toolchain predefinite e vorrei concentrarmi sulla versione 4.7 in questa serie di test.

Linaro è stato lanciato nel 2010 ed è stato ottimizzato per le architetture ARM. E, naturalmente, ARM è utilizzato nella stragrande maggioranza degli smartphone e tablet basati su Android. Puoi trovare Linaro come una toolchain utilizzata per compilare kernel o intere ROM e molti sviluppatori affermano che questa toolchain è più veloce e potente di GCC.

Ispirato dal nostro amministratore sviluppatore Pulser_G2, ho deciso di dare una possibilità a questo mito e vedere se queste affermazioni sono reali. Per fare ciò, ho prima scaricato il sorgente AOSP. Ho costruito un aosp_mako-eng target per il mio Nexus 4 utilizzando il set predefinito di precostruiti di Google. Dopo crea otapackage, Ho un file zip da 183115481 byte pronto per essere flashato. Successivamente, ho scaricato la toolchain Linaro 4.7.4 e ho sostituito GCC precompilati/gcc/linux-86. Ho eseguito le modifiche necessarie per impostare il livello O3 di ottimizzazione. Poiché AOSP supporta solo kernel precompilati (senza modifiche), ho creato un kernel da solo con Linaro e ho sostituito il kernel in mako-kernel con il mio blob.

 Di seguito potete vedere i due archivi risultanti. Come puoi vedere, l'archivio di Linaro è leggermente più grande, quindi questa toolchain in realtà fa qualcosa con le cartelle bin e xbin. Anche il file del kernel stesso è più grande.

Ma la dimensione del file non è la cosa più importante. Concentriamoci invece sulle prestazioni. Per misurarlo, ho utilizzato il benchmark AnTuTu. Per una maggiore precisione, ho eseguito ciascun test tre volte. Come puoi vedere di seguito, la differenza è piuttosto grande. Tuttavia, non riporrei troppa fiducia cieca in questi test, poiché i risultati differivano in ogni test. Detto questo, Linaro era di qualche punto migliore di GCC, ma AnTuTu non è così affidabile come potresti pensare.

CCG

Linaro

I seguenti test sono stati eseguiti con 3DMark per vedere se una toolchain può influire sulle prestazioni grafiche. La differenza era ancora più significativa rispetto a Antutu. Potresti guadagnare pochi FPS con GCC, ma la fluidità complessiva è migliore con Linaro. Anche il punteggio è leggermente più alto.

CCG

Linaro

Il test finale è stato eseguito utilizzando il gioco Asphalt 8: Airborne. Di seguito puoi vedere due video del gioco in esecuzione su entrambe le toolchain. Il primo è stato realizzato con Linaro, mentre il secondo con GCC. Personalmente, penso che Linaro sembri un po' più fluido rispetto a GCC, ma potrebbe essere solo l'effetto placebo poiché non si trattava di un test in doppio cieco. Entrambi i kernel erano originali e privi di modifiche, overclocking e qualsiasi altra modifica fantasiosa per migliorare le prestazioni.

//www.youtube.com/embed/BZRZenaNr9A

Quindi Linaro è meglio?

Anche se all'inizio ero scettico, devo ammettere che Linaro sembra essere una scelta migliore di GCC, almeno per la mia configurazione hardware. Il sistema operativo è sembrato più reattivo e veloce rispetto a quando è stato creato utilizzando GCC. Tuttavia, GCC è ancora solido come una roccia, quindi se hai bisogno della massima stabilità, potrebbe comunque essere la scelta migliore.

Nei prossimi episodi cercherò di confrontare altre toolchain come SaberMod e Linaro 4.8. Fateci sapere quali sono le vostre toolchain preferite nei commenti qui sotto. E se desideri che testiamo altre toolchain, dillo!