Por que o Android Boot é relativamente lento?

8

Esta pergunta é preocupante para mim (e talvez muitas por aí), porque não há parte giratória no meu telefone.

Meu telefone possui um Quad Core, 3 GB de RAM e muito espaço de armazenamento, todo tipo SSD, com incríveis velocidades de leitura / gravação.

Com tudo isso, o Android (KitKat e Lollipop) leva cerca de 80 segundos para inicializar. Demora muito menos no Ubuntu usando systemd ou upstart. (alguns usuários relatam menos de 10 segundos de tempo de inicialização usando o Ubuntu com systemd e cerca de 20 segundos ao usar o Upstart, com especificações como Intel i5 e RAM de 8 Gig)

Então, o que torna a inicialização do Android tão lenta? E, como usuário, posso fazer algo para acelerar o processo de inicialização?

Edit: de acordo com o processo de inicialização explicado ( https://android.stackexchange.com/a/29738/27870 ), não parece haver muitas diferenças no processo geral de inicialização em comparação com o sistema operacional convencional como o Ubuntu. Onde o Android dá errado no processo.

KhoPhi
fonte
1) Você escreveu as especificações, mas não o nome do modelo! 2) Você também está usando várias ROMs? 2) Qual é o sentido em comparar um desktop com um móvel que difere tanto do SO e do HW? 3) Qual versão da ROM e do Android você está usando no momento? 4) Você tentou remover aplicativos da inicialização? 5) Você comparou a diferença no tempo de inicialização entre uma nova ROM e a ROM instalada com todos os seus aplicativos? // Uso o Autostarts para remover aplicativos da inicialização.
Firelord
Muitas pessoas usam os módulos Xposed para fazer o trabalho. Eu acho que você precisa do Google para tal. Pode ser que alguém mais possa mencioná-los.
Firelord
@Firelord Estou usando apenas uma ROM. Embora rodando em computadores e telefones, ambos dependem de um kernel semelhante, se não for semelhante (apenas compilado para arquiteturas diferentes). Atualmente, estou usando o 5.1.1. Utilizado desde o 4.0 e a velocidade de inicialização nunca aumenta. Mesmo com a nova velocidade de inicialização instalada em comparação com quando meus aplicativos completos são carregados, não há diferença horária significativa. Usando a inicialização automática, com que rapidez o seu telefone é inicializado? By the way, eu estou em z2 xperia
KhoPhi
11
Minha preocupação é lidar mais com o Android pronto para uso. É lento. Seu verdadeiro ARM não está próximo dos processadores nos PCs, mas a velocidade com a qual a maioria dos telefones está equipada atualmente, esperava que os tempos de inicialização melhorassem, mas não está. O ART foi projetado para tornar os aplicativos em execução mais rápidos. Quem está trabalhando em um para fazer a inicialização mais rápido fora da caixa ?
KhoPhi #
11
Não estou convencido de que seja ARM, porque meu Chromebook baseado em ARM, muito mais antigo, é inicializado imediatamente e quero dizer isso literalmente.
RJT

Respostas:

10

Alguns anos atrás, trabalhei na otimização do tempo de inicialização do Android, como desenvolvedor do Android. Obviamente, como parte deste trabalho, primeiro precisamos analisar onde o Android gasta tempo durante a inicialização.

Abaixo estão as breves descobertas:

Hardware usado : OMAP3430 Boardque é como uma placa de desenvolvimento na qual o Stock Android é exibido. No dispositivo comercial / de produção real, haverá hardware específico adicional. Para visualizar o tempo de inicialização, usamos uma ferramenta de desenvolvedor chamadabootchart

A maior parte do tempo gasto pelo Android ocorre nas seguintes 2 áreas:

  1. Processo zigoto . Quando o sistema operacional Android é iniciado, ele inicia o processo Zygote, pré-carrega as classes para criar uma área de memória compartilhada para aplicativos. Este trabalho de proloading de classes java leva 23 segundos para sua conclusão.

Por quê? Porque o pré-carregamento da classe zygote é essencial para o bom desempenho do sistema após a inicialização. Assim, quando as classes são carregadas de todos os aplicativos, o tempo de execução do aplicativo é muito mais rápido.

  1. Serviço de gerenciamento de pacotes. Na saída do logcat, podemos ver que o Gerenciador de Pacotes verifica 4 diretórios. /system/app, /system/framework, /data/app, /data/app-private.

Em seguida, existe um componente chamado Activity Manager que inicia serviços diferentes, como serviço de localização, serviço de telefonia etc. E leva cerca de 11 a 12 segundos para concluir isso.

Por quê? Porque, em princípio, a verificação de pacotes pode armazenar em cache alguns de seus resultados após a primeira inicialização e verificar se há vulnerabilidades de segurança.

Se você somar essas duas vezes, são cerca de 35 segundos

Você pode ignorar esses números no dia e na idade de hoje, mas o ponto que esses números indicam é onde o código AOSP do Android gasta tempo durante a inicialização. Os OEMs têm seu próprio conjunto de hardware, que varia de dispositivo para dispositivo.

Obviamente, existem outras inicializações de hardware e software que o Android precisa executar após essas duas etapas demoradas, o que pode aumentar ainda mais o tempo de inicialização.

E, como usuário, posso fazer algo para acelerar o processo de inicialização?

Acho que não muito. A comunidade de desenvolvedores do Android e os OEMs ainda estão trabalhando para acelerar o tempo de inicialização, mas como você pode imaginar, não é tão fácil e fazer alterações para otimizar o tempo de inicialização pode acabar causando mais tempo de carregamento do aplicativo durante operações normais, como sugerido pela estrutura do Android engenheiro .

AADAndroidEntusiastas
fonte
Por que a imagem do processo zygote não é armazenada em cache como toda boa VM faz (como smalltalk e lisp)? Por que a GUI do Android não pode surgir antes que a API de telefonia esteja pronta. Por que tudo isso é seqüencial? POR QUE AINDA USAMOS JAVA. Não há nenhuma razão para que o tempo de inicialização Android deve ser mais lento, em seguida, um tempo de inicialização C64 que significa um segundo
Lothar
4

A inicialização do Android é lenta?

Meu telefone possui um Quad Core, 3 GB de RAM ... O Android (KitKat e Lollipop) leva cerca de 80 segundos para inicializar.

Meu telefone é apenas dual core com 1G RAM (Zenfone 4) e nunca tenho esse problema. Inicialização a frio em ~ 60 segundos, reinicialize em 40-ish (CyannogenMod 12.1).

alguns usuários relatam menos de 10 segundos de tempo de inicialização usando o Ubuntu com systemd e cerca de 20 segundos ...

Depende da configuração e do que você considerou "tempo de inicialização" . Meu laptop (i5 de 1ª geração, 4 GB de RAM com disco giratório) é considerado utilizável (inicialização concluída) após cerca de 90 segundos. Claro que posso atrasar / desativar alguns dos serviços para obter um tempo de inicialização mais rápido e iniciá-los manualmente, conforme necessário. Mas, no meu ponto de vista, com base na minha preferência, isso não será considerado útil .

No PC vs Celular

algumas diferenças que você deve considerar ao comparar entre pc e mobile linux. da CPU até o kernel . Diferenças mais notáveis:

  • Devido à natureza do dispositivo, a CPU móvel foi projetada principalmente com a conservação de energia como principal consideração. Isso afeta muito o desempenho.
  • O kernel do Android possui alguns recursos específicos para dispositivos móveis que podem afetar o tempo de inicialização e o acesso de E / S do hardware.
  • Além disso, o kernel do Android conhecido por ter problemas de compatibilidade com o mainline / stable. Isso se deve principalmente à preferência do fornecedor em manter a versão antiga do kernel compatível com os drivers de dispositivo. O AOSP Marshmallow é executado 3.18.10enquanto o kernel estável está atualmente em 4.6.2.

Então, o que torna a inicialização do Android tão lenta?

Por que não checamos? :)

Se você tiver acesso ao adb e já ativar as Opções do desenvolvedor , verifique o log de inicialização usando

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

no meu dispositivo, esta é a saída:

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 você pode ver, o tempo total de inicialização do início da VM até o desenho inicial da tela pelo gerenciador de janelas é de aproximadamente 40 segundos. Tempo adicional no firmware e no espaço do kernel (no seu link associado, isso traduz para as etapas de 1 a 4) não está incluído.

Observe que são necessários ~ 18 segundos para processar o apk do sistema inteiro ( boot_progress_pms_*), que se traduz em ~ 45% do tempo de inicialização, o que inclui:

  • limpeza de pacotes inexistentes do sistema e instalação incompleta de pacotes,
  • validando aplicativos instalados,
  • definindo o caminho da biblioteca
  • etc (veja: código fonte completo do PackageManagerService )

Portanto, geralmente, o tempo total de inicialização depende do número de pacotes (aplicativos) instalados no dispositivo. Mais aplicativo significa mais espera durante o processo de mensagens. Além disso, as atividades iniciais levam aproximadamente 5 segundos / 20% do tempo de inicialização. O resto não é significativo nem modificável com segurança sem um conhecimento profundo dos comportamentos do sistema.

Há algo que eu possa fazer para acelerar o processo de inicialização?

  • Tente outra ROM. A Sony é um dos "mocinhos" que proporcionam um ambiente saudável para os tweakers. Eu recomendo AOSP ou cianogênio . Esteja ciente das limitações
  • Teste, não assuma! É fácil supor que uma inicialização lenta, B seja mais rápida. Um simples comando logcat como acima revelaria algumas informações úteis para o benchmarking básico do tempo de inicialização entre ROMs.
  • Se você sabe o que está fazendo , o Embedded Linux Wiki possui uma lista de possíveis ajustes para melhorar o tempo de inicialização.

Melhorando o tempo de inicialização

No seu comentário

O ART foi projetado para tornar os aplicativos em execução mais rápidos. Quem está trabalhando em um para fazer a inicialização mais rápido fora da caixa ?

Na minha opinião, ajustar o tempo de inicialização é desnecessário e proporciona ganhos insignificantes. Como seu telefone, teoricamente , fica ativado a maior parte do tempo; é muito mais importante manter a estabilidade do sistema (com a troca de um processo de inicialização mais longo) para garantir maior tempo de atividade e menos erros.

bangbambang
fonte
adb logcat -d -b events -v threadtime | grep "boot"retorna vazio. Eu verifiquei na reinicialização, e ainda não há registros lá correspondentes boot.
KhoPhi
@Rexford: hmmm, o meu está funcionando muito bem. Você poderia tentar canalizá-lo para um pager (por exemplo: menos) e procurar a partir daí: adb logcat -d -b events -v threadtime | less. Ou tampão de anel logcat Modificar
bangbambang
0

Pelo que vale, eu corro o Android-x86 em uma máquina virtual no Linux e ele inicializa em cerca de 22 segundos, o que é parecido com a maioria das distribuições GNU / Linux e o Windows 10 em uma unidade SSD com uma CPU de desktop quad-core.

Portanto, não considero o tempo de inicialização do Android particularmente lento.

Marc.2377
fonte
Lembre-se de que a pergunta foi enviada em 2015.
Andy Yan
@ AndyYan eu notei, mas o Android-x86 é muito mais antigo.
Marc.2377
As especificações de hardware estão lá; a pressão do software importa muito menos com um hardware tão poderoso (mesmo após a degradação da eficiência nas VMs).
Andy Yan
@ AndyYan Eu concordo ... mas meu argumento é que, para alguns padrões, não há nada inerente ao Android que o defina como lento. Ou seja, em comparação com outros sistemas operacionais completos, para hardware semelhante. Eu senti que valia a pena acrescentar.
Marc.2377