Pourquoi Android Boot est-il relativement lent?


8

Cette question me préoccupe (et peut-être beaucoup d'autres là-bas) car il n'y a pas de partie tournante dans mon téléphone.

Mon téléphone a un quad core, 3 Go de RAM et tellement d'espace de stockage, tous de type SSD, avec des vitesses de lecture / écriture incroyables.

Avec tout cela, Android (KitKat et Lollipop) prend environ 80 secondes pour démarrer. Cela prend beaucoup moins sur Ubuntu en utilisant systemd ou upstart. (certains utilisateurs signalent moins de 10 secondes de démarrage avec Ubuntu avec systemd et environ 20 secondes avec Upstart, avec des spécifications comme Intel i5 et RAM de 8 Gig)

Alors, qu'est-ce qui rend le démarrage d'Android si lent? Et puis-je faire quelque chose en tant qu'utilisateur pour accélérer le processus de démarrage?

Edit: selon le processus de démarrage expliqué ( https://android.stackexchange.com/a/29738/27870 ), il ne semble pas y avoir beaucoup de différences dans le processus de démarrage global par rapport à un système d'exploitation conventionnel comme Ubuntu. Où Android va-t-il mal dans le processus.


1) Vous avez écrit les spécifications mais pas le nom du modèle! 2) Utilisez-vous également plusieurs ROM? 2) Quel est l'intérêt de comparer un ordinateur de bureau avec un mobile qui diffère tellement en OS et HW? 3) Quelle ROM et quelle version d'Android utilisez-vous actuellement? 4) Avez-vous essayé de supprimer des applications du démarrage? 5) Avez-vous comparé la différence de temps de démarrage entre une nouvelle ROM et une ROM installée avec toutes vos applications? // J'utilise Autostarts pour supprimer les applications du démarrage.
Firelord

Beaucoup de gens utilisent des modules Xposed pour faire le travail. Je suppose que vous avez besoin de Google pour cela. Peut-être que quelqu'un d'autre peut les mentionner.
Firelord

@Firelord J'utilise une seule ROM. Bien que fonctionnant sur le bureau et les téléphones, les deux dépendent d'un noyau similaire sinon similaire (juste compilé pour différentes architectures.) J'utilise actuellement 5.1.1. J'ai utilisé depuis 4.0 et la vitesse de démarrage n'augmente jamais. Même avec une nouvelle vitesse de démarrage installée par rapport au chargement de mes applications complètes, il n'y a pas de différence de temps significative. En utilisant le démarrage automatique, à quelle vitesse votre téléphone démarre-t-il? Au fait, je suis sur xperia z2
KhoPhi

1
Ma préoccupation doit traiter plus de la boîte Android. C'est lent. Son véritable ARM n'est pas proche des processeurs sur PC, mais la vitesse dont la plupart des téléphones sont équipés de nos jours, je m'attendais à ce que les temps de démarrage s'améliorent, mais ce n'est pas le cas. ART a été conçu pour accélérer l'exécution des applications. Qui travaille sur l'un d'eux pour accélérer le démarrage de la boîte ?
KhoPhi

1
Je ne suis pas convaincu que ce soit ARM parce que mon Chromebook beaucoup plus ancien basé sur ARM démarre immédiatement et je veux dire à peu près littéralement.
rjt

Réponses:


10

Il y a quelques années, j'ai travaillé sur l'optimisation du temps de démarrage Android, en tant que développeur Android. Évidemment, dans le cadre de ce travail, nous devions d'abord analyser où Android passe du temps pendant le démarrage.

Voici les brèves conclusions:

Matériel utilisé : OMAP3430 Boardqui est comme une carte de développement sur laquelle Stock Android est flashé. Sur un appareil commercial / de production réel, il y aura du matériel spécifique supplémentaire. Pour visualiser l'heure de démarrage, nous avons utilisé un outil de développement appelébootchart

Le plus de temps passé par Android se situe dans les 2 domaines suivants:

  1. Processus Zygote . Lorsque le système d'exploitation Android est démarré, il démarre le processus Zygote, il précharge les classes pour créer une zone de mémoire partagée pour les applications. Ce travail de proloading de classes java prend @ 23 secondes pour son achèvement.

Pourquoi? Parce que le préchargement de la classe zygote est essentiel pour de bonnes performances du système après le démarrage. Ainsi, une fois que les classes sont chargées de toutes les applications, l'exécution de l'application est beaucoup plus rapide.

  1. Service de gestionnaire de packages. Dans la sortie logcat, nous pouvons voir que le gestionnaire de packages analyse 4 répertoires. /system/app, /system/framework, /data/app, /data/app-private.

Ensuite, il y a un composant appelé Activity Manager qui démarre différents services tels que le service de localisation, le service de téléphonie, etc. Et cela prend presque 11-12 secondes pour terminer cela.

Pourquoi? En effet, l'analyse du package peut en théorie effectuer une mise en cache de ses résultats après le premier démarrage et peut vérifier les failles de sécurité.

Si vous additionnez ces 2 fois, cela prend environ 35 secondes

Vous pouvez ignorer ces chiffres dans la journée et l'âge d'aujourd'hui, mais le point que ces chiffres indiquent est où le code Android AOSP passe du temps pendant le démarrage. Les OEM ont leur propre ensemble de matériel qui varie d'un appareil à l'autre.

Bien sûr, il existe d'autres initialisations matérielles et logicielles qu'Android doit faire après ces 2 étapes fastidieuses, ce qui peut allonger le temps de démarrage.

Et puis-je faire quelque chose en tant qu'utilisateur pour accélérer le processus de démarrage?

Pas beaucoup je suppose. La communauté des développeurs Android et les OEM travaillent toujours à accélérer le temps de démarrage, mais comme vous pouvez l'imaginer, ce n'est pas si facile et apporter des modifications pour optimiser le temps de démarrage peut finir par entraîner plus de temps de chargement des applications pendant les opérations normales, comme le suggère le cadre Android. ingénieur .


Pourquoi l'image de processus zygote n'est-elle pas mise en cache comme le font toutes les bonnes machines virtuelles (comme smalltalk et lisp)? Pourquoi l'interface utilisateur Android ne peut-elle pas apparaître avant que l'API de téléphonie ne soit prête. Pourquoi tout cela est-il séquentiel? POURQUOI UTILISONS-NOUS TOUJOURS JAVA. Il n'y a aucune raison pour que le temps de démarrage Android soit plus lent qu'un temps de démarrage C64, ce qui signifie 1 seconde
Lothar

4

Le démarrage Android est lent?

Mon téléphone a un Quad Core, 3 Go de RAM ... Android (KitKat et Lollipop) prend environ 80 secondes pour démarrer.

Mon téléphone est uniquement dual core avec 1G RAM (Zenfone 4) et je n'ai jamais ce problème. Démarrage à froid en ~ 60 secondes, redémarrage en 40 ish (CyannogenMod 12.1).

certains utilisateurs signalent moins de 10 secondes de temps de démarrage en utilisant Ubuntu avec systemd et environ 20 secondes ...

Cela dépend de la configuration et de ce que vous considérez comme le "temps de démarrage" . Mon ordinateur portable (i5 1st Gen, 4 Go de RAM avec disque tournant) est considéré comme utilisable (démarrage terminé) après environ 90 secondes. Bien sûr, je peux retarder / désactiver certains services pour obtenir un temps de démarrage plus rapide et les démarrer manuellement si nécessaire. Mais à mon avis, selon ma préférence, cela ne comptera pas comme utilisable .

Sur PC vs mobile

Il y a quelques différences que vous devriez considérer lors de la comparaison entre Linux et Mobile Linux. du CPU au noyau . Différences les plus notables:

  • En raison de la nature de l'appareil, le processeur mobile est principalement conçu avec la conservation de l'énergie comme considération principale. Cela affecte considérablement les performances.
  • Le noyau Android possède des fonctionnalités spécifiques aux mobiles qui peuvent affecter le temps de démarrage et l'accès aux E / S matérielles.
  • De plus, le noyau Android est connu pour avoir des problèmes de compatibilité avec mainline / stable. Cela est principalement dû à la préférence du fournisseur de s'en tenir à l'ancienne version du noyau compatible avec leurs pilotes de périphérique. AOSP Marshmallow s'exécute 3.18.10alors que le noyau stable est actuellement à 4.6.2.

Alors, qu'est-ce qui rend le démarrage d'Android si lent?

Pourquoi ne vérifions-nous pas? :)

Si vous avez accès à adb et activez déjà les options pour les développeurs , consultez le journal de démarrage à l'aide de

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

sur mon appareil, voici la sortie:

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

Comme vous pouvez le voir, le temps total de démarrage depuis le démarrage de la machine virtuelle jusqu'au dessin d'écran initial par le gestionnaire de fenêtres est d'environ 40 secondes. Le temps supplémentaire sur l'espace du micrologiciel et du noyau (sur votre réponse liée, cela se traduit par l'étape 1-4) n'est pas inclus.

Notez qu'il faut environ 18 secondes pour traiter l' apk ( boot_progress_pms_*) du système entier , ce qui correspond à environ 45% du temps de démarrage, ce qui comprend:

  • le nettoyage de packages système inexistants et l'installation incomplète de packages,
  • valider les applications installées,
  • définition du chemin d'accès à la bibliothèque,
  • etc (voir: code source complet de PackageManagerService )

Donc, généralement, le temps de démarrage total dépend du nombre de packages (application) installés sur l'appareil. Plus d'application signifie plus d'attente pendant le processus pms. De plus, le démarrage des activités prend environ 5 secondes / 20% du temps de démarrage. Le reste n'est ni significatif ni modifiable en toute sécurité sans connaissance approfondie des comportements du système.

Puis-je faire quelque chose pour accélérer le processus de démarrage?

  • Essayez une autre ROM. Sony est l'un des «bons gars» qui offrent un environnement sain aux tweakers. Je recommande AOSP ou Cyanogen . Soyez conscient des limites
  • Testez, ne partez pas du principe! Il est facile de supposer que A démarre lentement, B est plus rapide. Une simple commande logcat comme ci-dessus révélerait des informations utiles pour l'analyse comparative de base du temps de démarrage entre les ROM.
  • Si vous savez ce que vous faites , le Wiki Linux embarqué a une liste de réglages possibles pour améliorer le temps de démarrage.

Sur l'amélioration du temps de démarrage

Sur votre commentaire

ART a été conçu pour accélérer l'exécution des applications. Qui travaille sur l'un d'eux pour accélérer le démarrage de la boîte ?

À mon avis, le réglage du temps de démarrage est à la fois non nécessaire et offre un gain insignifiant. Puisque votre téléphone restera théoriquement debout la plupart du temps; il est beaucoup plus important de maintenir la stabilité du système (avec le compromis d'un processus de démarrage plus long) pour garantir une disponibilité plus élevée et moins d'erreurs.


adb logcat -d -b events -v threadtime | grep "boot"renvoie vide. J'ai vérifié le redémarrage et toujours aucun journal correspondant boot.
KhoPhi

@Rexford: hmmm, le mien fonctionne très bien. Vous pouvez essayer de tuyau à un téléavertisseur (par exemple: moins) et la recherche à partir de là: adb logcat -d -b events -v threadtime | less. Ou modifiez le tampon de l'anneau logcat
bangbambang

0

Pour ce que ça vaut, j'exécute Android-x86 dans une machine virtuelle sous Linux et il démarre en environ 22 secondes, ce qui est comparable à la plupart des distributions GNU / Linux et Windows 10 sur un lecteur SSD avec un processeur de bureau à quatre cœurs.

Je ne considère donc pas le temps de démarrage Android comme particulièrement lent.


Gardez à l'esprit que la question a été soumise en 2015.
Andy Yan

@AndyYan, j'ai remarqué, mais Android-x86 est beaucoup plus ancien.
Marc.2377

Les spécifications matérielles sont là; la pression logicielle importe beaucoup moins sous un matériel aussi puissant (même après une dégradation de l'efficacité dans les machines virtuelles).
Andy Yan

@AndyYan Je suis d'accord ... mais mon point est que, selon certaines normes, il n'y a rien inhérent à Android qui le définit comme lent. C'est, en comparaison avec d'autres systèmes d'exploitation à part entière, pour un matériel similaire. J'ai senti que cela valait la peine d'être ajouté.
Marc.2377
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.