¿Por qué Android Boot es relativamente lento?

8

Esta pregunta me preocupa (y quizás muchas por ahí) porque no hay una parte giratoria en mi teléfono.

Mi teléfono tiene un Quad Core, 3 Gig de RAM y mucho espacio de almacenamiento, todo de tipo SSD, con increíbles velocidades de lectura / escritura.

Con todo esto, Android (tanto KitKat como Lollipop) tarda unos 80 segundos en iniciarse para completarse. Se necesita mucho menos en Ubuntu usando systemd o upstart. (algunos usuarios informan menos de 10 segundos de tiempo de arranque usando Ubuntu con systemd y unos 20 segundos cuando usan Upstart, con especificaciones como Intel i5 y RAM de 8 Gig)

Entonces, ¿qué hace que el arranque de Android sea tan lento? ¿Y puedo hacer algo como usuario para acelerar el proceso de arranque?

Edición: de acuerdo con el proceso de arranque explicado ( https://android.stackexchange.com/a/29738/27870 ), no parece haber muchas diferencias en el proceso de arranque general en comparación con el sistema operativo convencional como Ubuntu. ¿Dónde se equivoca Android en el proceso?

KhoPhi
fuente
1) ¡Escribiste las especificaciones pero no el nombre del modelo! 2) ¿Está utilizando varias ROM también? 2) ¿Cuál es el punto de comparar una computadora de escritorio con un móvil que difiere tanto en SO y HW? 3) ¿Qué versión de ROM y Android estás usando actualmente? 4) ¿Has intentado eliminar aplicaciones del inicio? 5) ¿Ha comparado la diferencia en el tiempo de arranque entre una nueva ROM y una ROM instalada con todas sus aplicaciones? // Uso Autostarts para eliminar aplicaciones del inicio.
Señor del fuego
Muchas personas usan módulos Xposed para hacer el trabajo. Supongo que necesitas Google para tal. Puede haber alguien más que pueda mencionarlos.
Señor del fuego
@Firelord, estoy usando solo una ROM. Ambos, aunque se ejecutan en computadoras de escritorio y teléfonos, dependen de un núcleo similar si no es similar (solo compilado para diferentes arquitecturas). Actualmente estoy usando 5.1.1. Lo he usado desde 4.0 y la velocidad de arranque nunca aumenta. Incluso con una nueva velocidad de arranque instalada en comparación con cuando se cargan mis aplicaciones completas, no hay ninguna diferencia de tiempo significativa. Usando el inicio automático, ¿qué tan rápido se inicia el teléfono? Por cierto, estoy en xperia z2
KhoPhi
1
Mi preocupación tiene que ver más con Android listo para usar. Es lento. Su verdadero ARM no está cerca de los procesadores en las PC, pero la velocidad con la que la mayoría de los teléfonos están equipados en estos días, esperaba que los tiempos de arranque mejoren, pero no lo es. ART fue diseñado para acelerar la ejecución de aplicaciones. ¿Quién está trabajando en uno para hacer el arranque más rápido fuera de la caja ?
KhoPhi
1
No estoy convencido de que sea ARM porque mi Chromebook basado en ARM mucho más antiguo se inicia inmediatamente y lo digo literalmente.
rjt

Respuestas:

10

Hace unos años, trabajé en la optimización del tiempo de arranque de Android, como desarrollador de Android. Obviamente, como parte de este trabajo, primero necesitábamos analizar dónde Android pasa tiempo durante el arranque.

A continuación se presentan los breves hallazgos:

Hardware utilizado : OMAP3430 Boardque es como una placa de desarrollo en la que se muestra Stock Android. En el dispositivo comercial / de producción real, habrá hardware específico adicional. Para visualizar el tiempo de arranque, utilizamos una herramienta de desarrollador llamadabootchart

La mayor parte del tiempo que dedica Android es en las siguientes 2 áreas:

  1. Proceso de cigoto . Cuando se inicia Android OS, iniciará el proceso Zygote, precarga las clases para crear un área de memoria compartida para las aplicaciones. Este trabajo de recarga de clases de Java tarda @ 23 segundos para su finalización.

¿Por qué? Porque la precarga de la clase zygote es esencial para un buen rendimiento del sistema después del arranque. Entonces, una vez que se cargan las clases de todas las aplicaciones, el tiempo de ejecución de la aplicación es mucho más rápido.

  1. Servicio de administrador de paquetes. En la salida de logcat, podemos ver que Package Manager escanea 4 directorios. /system/app`` /system/framework` /data/app` /data/app-private.

A continuación, hay un componente llamado Administrador de actividades que inicia diferentes servicios, como el servicio de ubicación, el servicio de telefonía, etc. Y toma cerca de 11-12 segundos terminar esto.

¿Por qué? Porque, la exploración del paquete puede, en teoría, almacenar en caché algunos de sus resultados después del primer arranque y puede verificar si hay vulnerabilidades de seguridad.

Si suma estas 2 veces, son aproximadamente 35 segundos

Puede ignorar estos números hoy en día, pero el punto que indican estos números es donde el código AOSP de Android pasa tiempo durante el arranque. Los OEM tienen su propio conjunto de hardware que varía de dispositivo a dispositivo.

Por supuesto, hay otras inicializaciones de hardware y software que Android necesita hacer después de estos 2 pasos que consumen mucho tiempo, lo que puede alargar aún más el tiempo de arranque.

¿Y puedo hacer algo como usuario para acelerar el proceso de arranque?

No mucho, supongo. La comunidad de desarrolladores de Android y los fabricantes de equipos originales todavía están trabajando para acelerar el tiempo de arranque, pero como puede imaginar, no es tan fácil y hacer cambios para optimizar el tiempo de arranque puede terminar causando más tiempo de carga de la aplicación durante las operaciones normales, como lo sugiere el marco de Android ingeniero .

AADAAndroidEntusiastas
fuente
¿Por qué la imagen del proceso cigoto no se almacena en caché como todas las máquinas virtuales buenas (como smalltalk y lisp)? ¿Por qué no puede aparecer la GUI de Android antes de que la API de telefonía esté lista? ¿Por qué es todo esto secuencial? ¿POR QUÉ TODAVÍA USAMOS JAVA? No hay ninguna razón por la cual el tiempo de arranque de Android debería ser más lento que el tiempo de arranque de C64, lo que significa 1 segundo
Lothar
4

¿El arranque de Android es lento?

Mi teléfono tiene un Quad Core, 3 Gig de RAM ... Android (KitKat y Lollipop) tarda unos 80 segundos en iniciarse para completarse.

Mi teléfono es de doble núcleo con 1G de RAM (Zenfone 4) y nunca tengo ese problema. Arranque en frío en ~ 60 segundos, reiniciar en 40-ish (CyannogenMod 12.1).

algunos usuarios informan menos de 10 segundos de tiempo de arranque usando Ubuntu con systemd y unos 20 segundos ...

Depende de la configuración y de lo que consideró "tiempo de arranque" . Mi computadora portátil (i5 1st Gen, 4 GB de RAM con disco giratorio) se considera utilizable (arranque finalizado) después de aproximadamente 90 segundos. Claro que puedo retrasar / deshabilitar algunos de los servicios para obtener un tiempo de arranque más rápido e iniciarlos manualmente según sea necesario. Pero en mi punto de vista, según mi preferencia, eso no contará como utilizable .

En PC vs móvil

Hay algunas diferencias que debe considerar al comparar entre PC y Linux móvil. desde la CPU hasta el núcleo . Diferencias más notables:

  • Debido a la naturaleza del dispositivo, la CPU móvil está diseñada principalmente con la conservación de energía como consideración principal. Esto afecta en gran medida el rendimiento.
  • El kernel de Android tiene algunas características específicas para dispositivos móviles que pueden afectar el tiempo de arranque y el acceso de E / S de hardware.
  • Además, se sabe que el kernel de Android tiene problemas de compatibilidad con mainline / stable. Esto se debe principalmente a la preferencia del proveedor de seguir con la versión antigua del kernel que sea compatible con los controladores de sus dispositivos. AOSP Marshmallow se ejecuta 3.18.10mientras el kernel estable está actualmente en 4.6.2.

Entonces, ¿qué hace que el arranque de Android sea tan lento?

¿Por qué no lo comprobamos? :)

Si tiene acceso a adb y ya habilita las Opciones de desarrollador , verifique el registro de arranque usando

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

en mi dispositivo, esta es la salida:

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

Como puede ver, el tiempo total de arranque desde el inicio de la VM hasta el dibujo inicial de la pantalla por parte del administrador de ventanas es de ~ 40 segundos. No se incluye tiempo adicional en el firmware y el espacio del kernel (en su respuesta enlazada, esto se traduce al paso 1-4).

Tenga en cuenta que se tarda ~ 18 segundos en procesar el apk de todo el sistema ( boot_progress_pms_*), esto se traduce en ~ 45% del tiempo de arranque, que incluye:

  • limpieza de paquetes de sistema inexistentes e instalación incompleta de paquetes,
  • validando aplicaciones instaladas,
  • establecer la ruta de la biblioteca,
  • etc (ver: código fuente completo de PackageManagerService )

En general, el tiempo de arranque total depende de la cantidad de paquetes (aplicación) instalados en el dispositivo. Más aplicación significa esperar más durante el proceso de pms. Además, las actividades de inicio requieren ~ 5 segundos / 20% del tiempo de arranque. El resto no es significativo ni modificable de manera segura sin un profundo conocimiento de los comportamientos del sistema.

¿Hay algo que pueda hacer para acelerar el proceso de arranque?

  • Prueba con otra ROM. Sony es uno de los "buenos" que proporcionan un entorno saludable para los retocadores. Recomiendo AOSP o Cyanogen . Solo ten en cuenta las limitaciones
  • Prueba, no asumas! Es fácil suponer que A arranca lentamente, B es más rápido. Un comando logcat simple como el anterior revelará algunas informaciones útiles para el benchmarking básico del tiempo de arranque entre ROM.
  • Si sabe lo que está haciendo , Embedded Linux Wiki tiene una lista de posibles ajustes para mejorar el tiempo de arranque.

Sobre la mejora del tiempo de arranque

En su comentario

ART fue diseñado para acelerar la ejecución de aplicaciones. ¿Quién está trabajando en uno para hacer el arranque más rápido fuera de la caja ?

En mi opinión, ajustar el tiempo de arranque es innecesario y proporciona una ganancia insignificante. Como su teléfono, en teoría , permanecerá despierto la mayor parte del tiempo; Es mucho más importante mantener la estabilidad del sistema (con el compromiso de un proceso de arranque más largo) para garantizar un mayor tiempo de actividad y menos errores.

Bangbambang
fuente
adb logcat -d -b events -v threadtime | grep "boot"vuelve vacío Revisé el reinicio, y todavía no hay registros que coincidan boot.
KhoPhi
@Rexford: hmmm, el mío está funcionando bien. Se podría tratar de tubería a un buscapersonas (por ejemplo: menos) y la búsqueda de allí: adb logcat -d -b events -v threadtime | less. O modifique el búfer de anillo logcat
bangbambang
0

Para lo que vale, ejecuto Android-x86 en una máquina virtual con Linux y arranca en unos 22 segundos, lo que está a la par con la mayoría de las distribuciones de GNU / Linux y Windows 10 en una unidad SSD con una CPU de escritorio de cuatro núcleos.

Así que no considero que el tiempo de arranque de Android sea particularmente lento.

Marc.2377
fuente
Tenga en cuenta que la pregunta se presentó en 2015.
Andy Yan
@AndyYan Me di cuenta, pero Android-x86 es mucho más antiguo.
Marc.2377
Las especificaciones de hardware están ahí; la presión del software es mucho menos importante bajo un hardware tan potente (incluso después de la degradación de la eficiencia en las máquinas virtuales)
Andy Yan
@AndyYan Estoy de acuerdo ... pero mi punto es que, según algunos estándares, no hay nada inherente a Android que lo defina como lento. Es decir, en comparación con otros sistemas operativos completos, para hardware similar. Sentí que valía la pena agregar esto.
Marc.2377