Perché Android Boot è relativamente lento?


8

Questa domanda mi preoccupa (e forse molti là fuori) perché non c'è parte che gira nel mio telefono.

Il mio telefono ha un Quad Core, 3 Gig di RAM e così tanto spazio di archiviazione, tutto come SSD in natura, con incredibili velocità di lettura / scrittura.

Con tutto ciò, Android (sia KitKat che Lollipop) impiega circa 80 secondi per avviarsi fino al completamento. Ci vuole molto meno su Ubuntu usando systemd o upstart. (alcuni utenti riportano meno di 10 secondi di avvio utilizzando Ubuntu con systemd e circa 20 secondi quando utilizzano Upstart, con specifiche come Intel i5 e RAM da 8 Gig)

Quindi, cosa rende l'avvio di Android così lento? E c'è qualcosa come utente che posso fare per accelerare il processo di avvio?

Modifica: secondo il processo di avvio spiegato ( https://android.stackexchange.com/a/29738/27870 ), non sembrano esserci molte differenze nel processo di avvio complessivo rispetto al sistema operativo convenzionale come Ubuntu. Dove Android va storto nel processo.


1) Hai scritto le specifiche ma non il nome del modello! 2) Stai utilizzando anche più ROM? 2) Qual è il punto nel confrontare un desktop con un cellulare che differisce tanto in OS e HW? 3) Quale versione ROM e Android stai attualmente utilizzando? 4) Hai provato a rimuovere le app dall'avvio? 5) Hai confrontato la differenza nel tempo di avvio tra una nuova ROM e ROM installata con tutte le tue app? // Uso Autostarts per rimuovere le app dall'avvio.
Firelord

Molte persone usano i moduli Xposed per fare il lavoro. Immagino che tu abbia bisogno di Google per questo. Forse qualcun altro può menzionarli.
Firelord

@Firelord Sto usando solo una ROM. Entrambi sebbene funzionino su desktop e telefoni, entrambi dipendono da kernel simili se non simili (compilati solo per architetture diverse). Attualmente sto usando 5.1.1. Sono stati utilizzati dalla 4.0 e la velocità di avvio non aumenta mai. Anche con una nuova velocità di avvio installata rispetto a quando vengono caricate le mie app complete, non c'è alcuna differenza di tempo significativa. Utilizzando l'avvio automatico, quanto velocemente si avvia il telefono? A proposito, sono su xperia z2
KhoPhi

1
La mia preoccupazione deve riguardare più di Android out of the box. È lento. Il suo vero ARM non è vicino ai processori su PC, ma la velocità con cui la maggior parte dei telefoni è equipaggiata in questi giorni, mi aspettavo che i tempi di avvio migliorassero, ma non lo è. ART è stato progettato per rendere più veloci le app in esecuzione. Chi sta lavorando su uno per rendere l'avvio più veloce fuori dalla scatola ?
KhoPhi,

1
Non sono convinto che sia ARM perché il mio Chromebook basato su ARM molto più vecchio si avvia immediatamente e intendo praticamente letteralmente.
rjt

Risposte:


10

Pochi anni fa, ho lavorato sull'ottimizzazione del tempo di avvio di Android, come sviluppatore Android. Ovviamente, nell'ambito di questo lavoro, dovevamo prima analizzare dove Android trascorre il tempo durante l'avvio.

Di seguito sono riportati i brevi risultati:

Hardware utilizzato : OMAP3430 Boardche è come una scheda di sviluppo su cui viene eseguito il flash di Stock Android. Sul dispositivo commerciale / di produzione reale, ci sarà un hardware specifico aggiuntivo. Per visualizzare il tempo di avvio, abbiamo utilizzato uno strumento di sviluppo chiamatobootchart

Il maggior tempo trascorso da Android è nelle seguenti 2 aree:

  1. Processo di zigote . All'avvio del sistema operativo Android, avvierà il processo Zygote, precaricando le classi per creare un'area di memoria condivisa per le applicazioni. Questo lavoro di pre-caricamento delle classi Java richiede @ 23 secondi per il suo completamento.

Perché? Perché il precaricamento della classe zygote è essenziale per una buona prestazione del sistema dopo l'avvio. Quindi, una volta caricate le classi di tutte le app, il tempo di esecuzione dell'app è molto più veloce.

  1. Servizio di gestione pacchetti. Nell'output di logcat, possiamo vedere che Gestione pacchetti esegue la scansione di 4 directory. /system/app, /system/framework, /data/app, /data/app-private.

Successivamente, c'è un componente chiamato Activity Manager che avvia servizi diversi come il servizio di localizzazione, il servizio di telefonia ecc. E ci vogliono circa 11-12 secondi per terminare questo.

Perché? Perché, in teoria, la scansione dei pacchetti può eseguire la memorizzazione nella cache dei risultati dopo il primo avvio e può verificare la presenza di vulnerabilità di sicurezza.

Se sommate queste 2 volte, sono circa 35 secondi

Puoi ignorare questi numeri nel giorno e nell'età di oggi, ma il punto che questi numeri indicano è dove il codice AOSP di Android trascorre il tempo durante l'avvio. Gli OEM hanno il proprio set di hardware che varia da dispositivo a dispositivo.

Naturalmente, ci sono altre inizializzazioni hardware e software che Android deve fare dopo questi 2 passaggi che richiedono tempo, il che può allungare ulteriormente il tempo di avvio.

E c'è qualcosa come utente che posso fare per accelerare il processo di avvio?

Non molto immagino. La community di sviluppatori Android e gli OEM stanno ancora lavorando per accelerare il tempo di avvio, ma come puoi immaginare, non è così facile e apportare modifiche per ottimizzare il tempo di avvio potrebbe finire per causare più tempo di caricamento dell'app durante le normali operazioni, come suggerito dal framework Android ingegnere .


Perché l'immagine del processo zygote non viene memorizzata nella cache come fa ogni buona VM (come smalltalk e lisp)? Perché la GUI di Android non viene visualizzata prima che l'API di telefonia sia pronta? Perché è tutto questo sequenziale? PERCHÉ USIAMO ANCORA JAVA. Non vi è alcun motivo per cui il tempo di avvio di Android dovrebbe essere più lento di un tempo di avvio C64 che significa 1 secondo
Lothar,

4

L'avvio di Android è lento?

Il mio telefono ha un Quad Core, 3 Gig di RAM ... Android (sia KitKat che Lollipop) impiega circa 80 secondi per avviarsi fino al completamento.

Il mio telefono è solo dual core con 1G RAM (Zenfone 4) e non ho mai avuto questo problema. Avvio a freddo in ~ 60 secondi, riavvio in 40 secondi (CyannogenMod 12.1).

alcuni utenti riportano meno di 10 secondi di avvio utilizzando Ubuntu con systemd e circa 20 secondi ...

Dipende dalla configurazione e da quello che hai considerato "tempo di avvio" . Il mio laptop (i5 1st Gen, 4 GB RAM con disco rotante) è considerato utilizzabile (avvio completato) dopo circa 90 secondi. Certo, posso ritardare / disabilitare alcuni servizi per velocizzare l'avvio e avviarli manualmente secondo necessità. Ma dal mio punto di vista, in base alle mie preferenze, ciò non sarà considerato utilizzabile .

Su PC vs cellulare

Ci sono alcune differenze da considerare quando si confronta tra PC e Linux mobile. dalla CPU al kernel . Differenze più rilevanti:

  • A causa della natura del dispositivo, la CPU mobile è stata progettata principalmente con risparmio energetico come considerazione principale. Ciò influisce notevolmente sulle prestazioni.
  • Il kernel Android ha alcune funzionalità specifiche per dispositivi mobili che possono influire sul tempo di avvio e sull'accesso all'i / o hardware.
  • Inoltre, il kernel Android è noto per avere problemi di compatibilità con mainline / stable. Ciò è dovuto principalmente alla preferenza del fornitore di attenersi alla vecchia versione del kernel compatibile con i driver del dispositivo. AOSP Marshmallow funziona 3.18.10mentre il kernel stabile è attualmente disponibile 4.6.2.

Quindi, cosa rende l'avvio di Android così lento?

Perché non controlliamo? :)

Se hai accesso ad adb e abiliti già le Opzioni sviluppatore , controlla il registro di avvio usando

adb logcat -d -b events -v threadtime | grep "boot"

sul mio dispositivo, questo è l'output:

bambang@pamungkas ~ % adb logcat -d -b events -v threadtime | grep "boot"
06-08 04:35:01.417   193   193 I boot_progress_start: 9906
06-08 04:35:03.718   193   193 I boot_progress_preload_start: 12208
06-08 04:35:07.838   193   193 I boot_progress_preload_end: 16328
06-08 04:35:08.158   513   513 I boot_progress_system_run: 16647
06-08 04:35:09.880   513   513 I boot_progress_pms_start: 18370
06-08 04:35:10.204   513   513 I boot_progress_pms_system_scan_start: 18693
06-08 04:35:24.487   513   513 I boot_progress_pms_data_scan_start: 32977
06-08 04:35:28.552   513   513 I boot_progress_pms_scan_end: 37042
06-08 04:35:28.696   513   513 I boot_progress_pms_ready: 37186
06-08 04:35:33.088   513   513 I boot_progress_ams_ready: 41578
06-08 04:35:40.755   513   533 I boot_progress_enable_screen: 49244

Come puoi vedere, il tempo di avvio totale dalla macchina virtuale inizia fino a quando il disegno iniziale dello schermo da parte del gestore finestre è di ~ 40 secondi. Non è incluso altro tempo nello spazio del firmware e del kernel (sulla tua risposta collegata, questo passaggio al passaggio 1-4).

Si noti che occorrono ~ 18 secondi per elaborare l' apk ( boot_progress_pms_*) dell'intero sistema , questo si traduce in ~ 45% del tempo di avvio, che include:

  • pulizia di pacchetti di sistema inesistenti e installazione incompleta dei pacchetti,
  • convalida app installate,
  • impostazione del percorso della libreria,
  • ecc. (vedi: codice sorgente completo di PackageManagerService )

Quindi, in generale, il tempo di avvio totale dipende dal numero di pacchetti (app) installati sul dispositivo. Più app significa attendere più a lungo durante il processo pms. Inoltre, l'avvio delle attività richiede ~ 5 sec / 20% del tempo di avvio. Il resto non è né significativo né modificabile in modo sicuro senza una profonda conoscenza dei comportamenti del sistema.

C'è qualcosa che posso fare per accelerare il processo di avvio?

  • Prova altra ROM. Sony è uno dei "bravi ragazzi" che offrono un ambiente sano ai tweaker. Raccomando AOSP o Cyanogen . Basta essere consapevoli dei limiti
  • Prova, non dare per scontato! È facile supporre che A sia lento, B è più veloce. Un semplice comando logcat come sopra rivelerebbe alcune informazioni utili per il benchmark di base del tempo di avvio tra le ROM.
  • Se sai cosa stai facendo , Embedded Linux Wiki ha un elenco di possibili modifiche per migliorare il tempo di avvio.

Migliorare il tempo di avvio

Sul tuo commento

ART è stato progettato per rendere più veloci le app in esecuzione. Chi sta lavorando su uno per rendere l'avvio più veloce fuori dalla scatola ?

A mio avviso, ottimizzare il tempo di avvio è sia inutile che fornisce un guadagno insignificante. Dal momento che il tuo telefono, in teoria , rimarrà sveglio la maggior parte del tempo; è molto più importante mantenere la stabilità del sistema (con il compromesso di un processo di avvio più lungo) per garantire tempi di attività più elevati e meno errori.


adb logcat -d -b events -v threadtime | grep "boot"ritorna vuoto. Ho controllato al riavvio, e ancora nessun registro lì corrispondente boot.
KhoPhi,

@Rexford: hmmm, il mio funziona perfettamente. Si potrebbe provare a pipe a un cercapersone (es: meno) e cercare da lì: adb logcat -d -b events -v threadtime | less. O modificare il buffer dell'anello logcat
bangbambang,

0

Per quello che vale, eseguo Android-x86 in una macchina virtuale sotto Linux e si avvia in circa 22 secondi, il che è alla pari con la maggior parte delle distribuzioni GNU / Linux e Windows 10 su un'unità SSD con una CPU desktop quad-core.

Quindi non considero il tempo di avvio di Android particolarmente lento.


Tieni presente che la domanda è stata presentata nel 2015.
Andy Yan,

@AndyYan ho notato, ma Android-x86 è molto più vecchio.
Marc.2377,

Le specifiche hardware sono lì; la pressione del software conta molto meno con un hardware così potente (anche dopo il degrado dell'efficienza nelle macchine virtuali).
Andy Yan,

@AndyYan Sono d'accordo ... ma il mio punto è che, per alcuni standard, non c'è nulla di inerente ad Android che lo definisca lento. Cioè, rispetto ad altri sistemi operativi completi, per hardware simile. Ho pensato che valesse la pena aggiungerlo.
Marc.2377,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.