Warum ist Android Boot so langsam?


8

Diese Frage ist für mich (und vielleicht für viele da draußen) von Belang, da mein Telefon keinen sich drehenden Teil enthält.

Mein Telefon verfügt über einen Quad Core, 3 Gig RAM und so viel Speicherplatz, alle SSD-ähnlich, mit erstaunlichen Lese- / Schreibgeschwindigkeiten.

Mit all dem benötigt Android (sowohl KitKat als auch Lollipop) etwa 80 Sekunden, um vollständig zu starten. Unter Ubuntu dauert es mit systemd oder upstart viel weniger. (Einige Benutzer berichten von einer Startzeit von weniger als 10 Sekunden mit Ubuntu mit systemd und etwa 20 Sekunden bei Verwendung von Upstart mit Spezifikationen wie Intel i5 und RAM von 8 Gig.)

Was macht Android so langsam booten? Und kann ich als Benutzer etwas tun, um den Startvorgang zu beschleunigen?

Bearbeiten: Laut dem erklärten Bootvorgang ( https://android.stackexchange.com/a/29738/27870 ) scheint es keine großen Unterschiede im gesamten Bootvorgang im Vergleich zu herkömmlichen Betriebssystemen wie Ubuntu zu geben. Wo geht Android dabei schief?


1) Sie haben die Spezifikationen geschrieben, aber nicht den Modellnamen! 2) Verwenden Sie auch mehrere ROMs? 2) Was bringt es, einen Desktop mit einem Handy zu vergleichen, das sich in Betriebssystem und Hardware so stark unterscheidet? 3) Welche ROM- und Android-Version verwenden Sie derzeit? 4) Haben Sie versucht, Apps vom Start zu entfernen? 5) Haben Sie den Unterschied in der Startzeit zwischen einem neuen ROM und einem mit all Ihren Apps installierten ROM verglichen? // Ich verwende Autostarts , um Apps vom Start zu entfernen.
Feuerlord

Viele Leute verwenden Xposed- Module, um die Arbeit zu erledigen. Ich denke, Sie müssen für solche Google. Vielleicht kann jemand anderes sie erwähnen.
Feuerlord

@Firelord Ich benutze nur ein ROM. Beide laufen zwar auf Desktop- und Telefonen, aber beide hängen von einem ähnlichen Kernel ab, wenn nicht ähnlich (nur für verschiedene Architekturen kompiliert). Ich verwende derzeit 5.1.1. Habe seit 4.0 verwendet und die Startgeschwindigkeit steigt nie an. Selbst bei einer neu installierten Startgeschwindigkeit im Vergleich zum Laden meiner vollständigen Apps gibt es keinen signifikanten Zeitunterschied. Wie schnell startet Ihr Telefon mit dem Autostart? Übrigens bin ich auf xperia z2
KhoPhi

1
Mein Anliegen muss sich mehr mit sofort einsatzbereitem Android befassen. Es ist langsam. Sein wahres ARM ist nicht in der Nähe von Prozessoren auf PCs, aber die Geschwindigkeit, mit der die meisten Telefone heutzutage ausgestattet sind, ich habe erwartet, dass sich die Startzeiten verbessern, aber es ist nicht so. ART wurde entwickelt, um das Ausführen von Apps zu beschleunigen. Wer arbeitet an einem Boot schneller machen aus der Box ?
KhoPhi

1
Ich bin nicht davon überzeugt, dass es sich um ARM handelt, da mein viel älteres ARM-basiertes Chromebook sofort hochfährt und ich meine das so ziemlich wörtlich.
7.

Antworten:


10

Vor ein paar Jahren habe ich als Android-Entwickler an der Optimierung der Android-Startzeit gearbeitet. Als Teil dieser Arbeit mussten wir natürlich zunächst analysieren, wo Android während des Bootens Zeit verbringt.

Nachfolgend die kurzen Ergebnisse:

Verwendete Hardware : OMAP3430 BoardDies ist wie ein Entwicklungsboard, auf dem Stock Android geflasht ist. Auf dem tatsächlichen kommerziellen / Produktionsgerät wird es zusätzliche spezifische Hardware geben. Um die Startzeit zu visualisieren, haben wir ein Entwicklertool namens verwendetbootchart

Die meiste Zeit verbringt Android in den folgenden 2 Bereichen:

  1. Zygote-Prozess . Wenn das Android-Betriebssystem gestartet wird, wird der Zygote-Prozess gestartet. Es lädt Klassen vor, um einen gemeinsam genutzten Speicherbereich für Anwendungen zu erstellen. Diese Arbeit zum Proloading von Java-Klassen dauert @ 23 Sekunden, bis sie abgeschlossen ist.

Warum? Denn das Vorladen der Zygote-Klasse ist für eine gute Leistung des Systems nach dem Start unerlässlich. Sobald also Klassen aller Apps geladen sind, ist die Laufzeit der App viel schneller.

  1. Paketmanager-Service. In der Logcat-Ausgabe sehen wir, dass der Paketmanager 4 Verzeichnisse durchsucht. /system/app, /system/framework, /data/app, /data/app-private.

Als nächstes gibt es eine Komponente namens Activity Manager, die verschiedene Dienste wie Standortdienst, Telefoniedienst usw. startet. Der Abschluss dauert fast 11 bis 12 Sekunden .

Warum? Denn der Paket-Scan kann theoretisch nach dem ersten Start einige Ergebnisse zwischenspeichern und nach Sicherheitslücken suchen.

Wenn Sie diese 2 Mal addieren, sind es ungefähr 35 Sekunden

Sie können diese Zahlen in der heutigen Zeit ignorieren, aber der Punkt, den diese Zahlen angeben, ist, wo der Android AOSP-Code während des Startvorgangs Zeit verbringt. OEMs verfügen über eine eigene Hardware, die von Gerät zu Gerät unterschiedlich ist.

Natürlich gibt es andere Hardware- und Software-Initialisierungen, die Android nach diesen zwei zeitaufwändigen Schritten durchführen muss, wodurch die Startzeit weiter verlängert werden kann.

Und kann ich als Benutzer etwas tun, um den Startvorgang zu beschleunigen?

Nicht viel, denke ich. Die Android-Entwickler-Community und die OEMs arbeiten immer noch daran, die Startzeit zu verkürzen. Wie Sie sich vielleicht vorstellen können, ist dies jedoch nicht so einfach. Änderungen zur Optimierung der Startzeit können dazu führen, dass während des normalen Betriebs mehr App-Ladezeit entsteht, wie vom Android-Framework angedeutet Ingenieur .


Warum wird das Zygote-Prozess-Image nicht wie bei jeder guten VM zwischengespeichert (wie Smalltalk und Lisp)? Warum kann die Android-Benutzeroberfläche nicht aufgerufen werden, bevor die Telefonie-API bereit ist? Warum ist das alles sequentiell? WARUM VERWENDEN WIR JAVA NOCH? Es gibt keinen Grund, warum die Android-
Lothar,

4

Android Boot ist langsam?

Mein Telefon verfügt über einen Quad Core, 3 Gig RAM ... Android (sowohl KitKat als auch Lollipop) benötigt ca. 80 Sekunden, um vollständig zu starten.

Mein Telefon ist nur Dual Core mit 1G RAM (Zenfone 4) und ich habe dieses Problem nie. Kaltstart in ~ 60 Sekunden, Neustart in 40 Sekunden (CyannogenMod 12.1).

Einige Benutzer berichten von einer Startzeit von weniger als 10 Sekunden mit Ubuntu mit systemd und etwa 20 Sekunden ...

Dies hängt von der Konfiguration und der von Ihnen als "Startzeit" betrachteten Zeit ab . Mein Laptop (i5 1st Gen, 4 GB RAM mit sich drehender Festplatte) gilt nach ca. 90 Sekunden als verwendbar (beendetes Booten). Natürlich kann ich einige Dienste verzögern / deaktivieren, um eine schnellere Startzeit zu erzielen und sie bei Bedarf manuell zu starten. Aber aus meiner Sicht, basierend auf meiner Präferenz, wird das nicht als brauchbar gelten .

Auf PC vs Mobile

Es gibt einige Unterschiede, die Sie beim Vergleich zwischen PC und Mobile Linux berücksichtigen sollten. von der CPU bis zum Kernel . Bemerkenswerteste Unterschiede:

  • Aufgrund der Beschaffenheit des Geräts ist die mobile CPU hauptsächlich auf Energieeinsparung ausgelegt. Dies wirkt sich stark auf die Leistung aus.
  • Der Android-Kernel verfügt über einige mobile spezifische Funktionen, die sich auf die Startzeit und den Hardware-E / A-Zugriff auswirken können .
  • Darüber hinaus hat der Android-Kernel bekanntermaßen Kompatibilitätsprobleme mit Mainline / Stable. Dies ist hauptsächlich auf die Präferenz des Herstellers zurückzuführen, bei der alten Kernel-Version zu bleiben, die mit den Gerätetreibern kompatibel ist. AOSP Eibisch läuft 3.18.10während Stable - Kernel ist derzeit auf 4.6.2.

Was macht Android so langsam booten?

Warum überprüfen wir nicht? :) :)

Wenn Sie Zugriff auf adb haben und bereits Entwickleroptionen aktivieren , überprüfen Sie das Startprotokoll mit

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

Auf meinem Gerät ist dies die Ausgabe:

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

Wie Sie sehen können, beträgt die Gesamtstartzeit vom VM-Start bis zur ersten Bildschirmzeichnung durch den Fenstermanager ~ 40 Sekunden. Zusätzliche Zeit für Firmware- und Kernel-Speicherplatz (auf Ihrer verknüpften Antwort wird dies in Schritt 1-4 übersetzt) ​​ist nicht enthalten.

Beachten Sie, dass die Verarbeitung von apk ( boot_progress_pms_*) des gesamten Systems ca. 18 Sekunden dauert. Dies entspricht ~ 45% der Startzeit . Dazu gehören:

  • Bereinigen nicht vorhandener Systempakete und unvollständige Installation von Paketen,
  • Überprüfung installierter Apps,
  • Bibliothekspfad einstellen,
  • usw. (siehe: vollständiger Quellcode von PackageManagerService )

Daher hängt die Gesamtstartzeit im Allgemeinen von der Anzahl der auf dem Gerät installierten Pakete (App) ab. Mehr App bedeutet längeres Warten während des PMS-Prozesses. Darüber hinaus dauert das Starten von Aktivitäten ~ 5 Sekunden / 20% der Startzeit. Der Rest ist ohne signifikante Kenntnis des Systemverhaltens weder signifikant noch sicher veränderbar.

Kann ich irgendetwas tun, um den Startvorgang zu beschleunigen?

  • Versuchen Sie es mit einem anderen ROM. Sony ist einer der "Guten" , die Tweakern eine gesunde Umgebung bieten. Ich empfehle AOSP oder Cyanogen . Seien Sie sich nur der Einschränkungen bewusst
  • Test, nicht annehmen! Es ist leicht anzunehmen, dass A langsam und B schneller ist. Ein einfacher logcat-Befehl wie oben würde einige nützliche Informationen für das grundlegende Benchmarking der Startzeit zwischen ROMs anzeigen.
  • Wenn Sie wissen, was Sie tun, bietet Embedded Linux Wiki eine Liste möglicher Verbesserungen, um die Startzeit zu verbessern.

Zur Verbesserung der Startzeit

Auf deinen Kommentar

ART wurde entwickelt, um das Ausführen von Apps zu beschleunigen. Wer arbeitet an einem Boot schneller machen aus der Box ?

Meiner Meinung nach ist das Optimieren der Startzeit sowohl unnötig als auch ein unbedeutender Gewinn. Da Ihr Telefon theoretisch die meiste Zeit wach bleibt ; Es ist weitaus wichtiger, die Systemstabilität (mit dem Kompromiss eines längeren Startvorgangs) aufrechtzuerhalten, um eine höhere Betriebszeit und weniger Fehler zu gewährleisten.


adb logcat -d -b events -v threadtime | grep "boot"gibt leer zurück. Ich habe beim Neustart nachgesehen und immer noch keine passenden Anmeldungen gefunden boot.
KhoPhi

@ Rexford: Hmmm, meine funktioniert gut. Sie könnten versuchen, es an einen Pager weiterzuleiten (z. B. weniger) und von dort aus suchen : adb logcat -d -b events -v threadtime | less. Oder ändern Sie den Logcat-Ringpuffer
Bangbambang,

0

Für das, was es wert ist, starte ich Android-x86 in einer virtuellen Maschine unter Linux und es startet in ungefähr 22 Sekunden, was den meisten GNU / Linux-Distributionen und Windows 10 auf einem SSD-Laufwerk mit einer Quad-Core-Desktop-CPU entspricht.

Daher halte ich die Android-Startzeit nicht für besonders langsam.


Denken Sie daran, dass die Frage im Jahr 2015 eingereicht wurde.
Andy Yan

@ AndyYan Ich habe bemerkt, aber Android-x86 ist viel älter.
23. März 1777,

Die Hardware-Spezifikationen sind da; Bei solch leistungsfähiger Hardware spielt der Softwaredruck eine viel geringere Rolle (auch nach einer Verschlechterung der Effizienz in VMs).
Andy Yan

@AndyYan Ich stimme zu ... aber mein Punkt ist, dass Android nach einigen Maßstäben nichts inhärent ist, was es als langsam definiert. Das heißt, im Vergleich zu anderen vollwertigen Betriebssystemen für ähnliche Hardware. Ich fand, das war es wert, hinzugefügt zu werden.
März 2377
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.