Como melhorar o desempenho do Android: conheça o AutoFDO para o kernel
Leitura de 4 min
Somos a equipe do conjunto de ferramentas LLVM do Android. Uma das nossas principais prioridades é melhorar o desempenho do Android usando técnicas de otimização no ecossistema do LLVM. Estamos sempre buscando maneiras de tornar o Android mais rápido, fluido e eficiente. Embora grande parte do nosso trabalho de otimização aconteça no espaço do usuário, o kernel continua sendo o coração do sistema. Hoje, temos o prazer de compartilhar como estamos levando a Otimização Automática Direcionada por Feedback (AutoFDO, na sigla em inglês) ao kernel do Android para oferecer melhorias significativas de desempenho aos usuários.
O que é o AutoFDO?
Durante um build de software padrão, o compilador toma milhares de pequenas decisões, como se deve incorporar uma função e qual ramificação de uma condicional provavelmente será usada, com base em dicas de código estático.Embora essas heurísticas sejam úteis, elas nem sempre preveem com precisão a execução de código durante o uso real do smartphone.
O AutoFDO muda isso usando padrões de execução reais para orientar o compilador. Esses padrões representam os caminhos de execução de instruções mais comuns que o código segue durante o uso real, capturados pelo registro do histórico de ramificação da CPU. Embora esses dados possam ser coletados de dispositivos da frota, para o kernel, nós os sintetizamos em um ambiente de laboratório usando cargas de trabalho representativas, como a execução dos 100 apps mais usados. Usamos um criador de perfil de amostragem para capturar esses dados, identificando quais partes do código são "quentes" (usadas com frequência) e quais são "frias". Quando recriamos o kernel com esses perfis, o compilador pode tomar decisões de otimização muito mais inteligentes, adaptadas às cargas de trabalho reais do Android.
Para entender o impacto dessa otimização, considere estes fatos importantes:
- No Android, o kernel é responsável por cerca de 40% do tempo de CPU.
- Já usamos o AutoFDO para otimizar executáveis e bibliotecas nativos no espaço do usuário, alcançando uma melhoria de cerca de 4% na inicialização a frio de apps e uma redução de 1% no tempo de inicialização.
Ganhos de desempenho no mundo real
Tivemos melhorias impressionantes nas principais métricas do Android ao usar perfis de ambientes de laboratório controlados. Esses perfis foram coletados usando o rastreamento e o lançamento de apps e medidos em dispositivos Pixel nos kernels 6.1, 6.6 e 6.12.
As melhorias mais notáveis estão listadas abaixo. Confira detalhes sobre os perfis do AutoFDO para essas versões do kernel nos respectivos repositórios do kernel do Android para android16-6.12 e android15-6.6.
Esses números não são apenas teóricos. Eles se traduzem em uma interface mais rápida, troca de apps mais ágil, maior duração da bateria e um dispositivo mais responsivo para o usuário final.
Como funciona: o pipeline
Nossa estratégia de implantação envolve um pipeline sofisticado para garantir que os perfis permaneçam relevantes e o desempenho estável.
Etapa 1: coleta de perfis
Embora usemos nossa frota de testes interna para criar perfis de binários de espaço do usuário, mudamos para um ambiente de laboratório controlado para a imagem genérica do kernel (GKI, na sigla em inglês). A separação da criação de perfil do ciclo de lançamento do dispositivo permite atualizações flexíveis e imediatas, independentemente das versões do kernel implantadas. É importante ressaltar que os testes confirmam que esses dados de laboratório oferecem ganhos de desempenho comparáveis aos de frotas reais.
- Ferramentas e ambiente: instalamos a imagem de kernel mais recente nos dispositivos de teste e usamos o simpleperf para capturar fluxos de execução de instruções. Esse processo depende de recursos de hardware para registrar o histórico de ramificação, especificamente usando ARM Embedded Trace Extension (ETE) e ARM Trace Buffer Extension (TRBE) em dispositivos Pixel.
- Cargas de trabalho: criamos uma carga de trabalho representativa usando os 100 apps mais acessados do conjunto de teste de compatibilidade de apps Android (C-Suite). Para capturar os dados mais precisos, nos concentramos em:
- Inicialização de apps: otimização para os atrasos mais visíveis do usuário
- Rastreamento de apps com tecnologia de IA: simulação de interações contínuas e em evolução do usuário
- Monitoramento de todo o sistema: captura não apenas as atividades do aplicativo em primeiro plano, mas também as cargas de trabalho críticas em segundo plano e as comunicações entre processos.
- Validação: essa carga de trabalho sintetizada mostra uma semelhança de 85% com os padrões de execução coletados da nossa frota interna.
- Dados direcionados: ao repetir esses testes o suficiente, capturamos padrões de execução de alta fidelidade que representam com precisão a interação real do usuário com os aplicativos mais conhecidos. Além disso, esse framework extensível permite integrar outras cargas de trabalho e comparativos de mercado para ampliar nossa cobertura.
Etapa 2: processamento do perfil
Processamos os dados de trace brutos para garantir que estejam limpos, eficazes e prontos para o compilador.
- Agregação: consolidamos dados de várias execuções de teste e dispositivos em uma única visualização do sistema.
- Conversão : convertemos os traces brutos no formato de perfil do AutoFDO, filtrando símbolos indesejados conforme necessário.
- Remoção de perfis: removemos perfis para excluir dados de funções "frias", permitindo que usem a otimização padrão. Isso evita regressões em códigos raramente usados e aumentos desnecessários no tamanho do binário.
Etapa 3: teste de perfil
Antes da implantação, os perfis passam por uma verificação rigorosa para garantir que ofereçam ganhos de desempenho consistentes sem riscos de estabilidade.
- Análise de perfil e binária: comparamos rigorosamente o conteúdo do novo perfil (incluindo funções quentes, contagens de amostras e tamanho do perfil) com as versões anteriores. Também usamos o perfil para criar uma nova imagem do kernel, analisando binários para garantir que as mudanças na seção de texto sejam consistentes com as expectativas.
- Verificação de desempenho: executamos comparativos de mercado direcionados na nova imagem do kernel. Isso confirma que ele mantém as melhorias de desempenho estabelecidas pelas referências anteriores.
Atualizações contínuas
O código naturalmente "muda" ao longo do tempo, então um perfil estático acabaria perdendo a eficácia. Para manter o desempenho máximo, executamos o pipeline continuamente para gerar atualizações regulares:
- Atualização regular: atualizamos os perfis nas ramificações LTS do kernel do Android antes de cada lançamento da GKI, garantindo que cada build inclua os dados de perfil mais recentes.
- Expansão futura: no momento, estamos enviando essas atualizações para as ramificações
android16-6.12eandroid15-6.6e vamos expandir o suporte para versões mais recentes da GKI, como a próximaandroid17-6.18.
Como garantir a estabilidade
Uma pergunta comum sobre a otimização guiada por perfil é se ela apresenta riscos de estabilidade. Como o AutoFDO influencia principalmente as heurísticas do compilador, como o inlining de funções e o layout do código, em vez de alterar a lógica do código-fonte, ele preserva a integridade funcional do kernel. Essa tecnologia já foi comprovada em grande escala, servindo como uma otimização padrão para bibliotecas da plataforma Android, ChromeOS e a própria infraestrutura de servidores do Google há anos.
Para garantir ainda mais um comportamento consistente, aplicamos uma estratégia "conservadora por padrão". As funções não capturadas nos perfis de alta fidelidade são otimizadas usando métodos de compilador padrão. Isso garante que as partes "frias" ou raramente executadas do kernel se comportem exatamente como em um build padrão, evitando regressões de desempenho ou comportamentos inesperados em casos extremos.
O que nos espera
No momento, estamos implantando o AutoFDO nas ramificações android16-6.12 e android15-6.6. Além desse lançamento inicial, vemos várias possibilidades promissoras para melhorar ainda mais a tecnologia:
- Alcance ampliado: esperamos implantar perfis do AutoFDO em versões mais recentes do kernel da GKI e em outros destinos de build além do suporte atual ao
aarch64. - Otimização do módulo GKI: no momento, nossa otimização está focada no binário principal do kernel (
vmlinux). Expandir o AutoFDO para módulos GKI pode trazer benefícios de desempenho para uma parte maior do subsistema do kernel. - Suporte a módulos de fornecedores: também queremos oferecer suporte ao AutoFDO para módulos de fornecedores criados com o Kit de Desenvolvimento de Drivers (DDK). Com o suporte já disponível no nosso sistema de build (Kleaf) e nas ferramentas de criação de perfil (simpleperf), os fornecedores podem aplicar essas mesmas técnicas de otimização aos drivers de hardware específicos.
- Cobertura de perfil mais ampla: é possível coletar perfis de uma variedade maior de jornadas ideais do usuário (CUJs) para otimizá-las.
Ao trazer o AutoFDO para o kernel do Android, garantimos que a base do SO seja otimizada para a forma como você usa o dispositivo todos os dias.
-
Notícias sobre produtosHoje, no Android Dev Summit, anunciamos a ampla disponibilidade de muitas ferramentas e APIs projetadas para remover o atrito diário e oferecer mais flexibilidade para criar ótimos apps Android.
Matthew McCullough • Leitura de 4 min -
Notícias sobre produtosO Android Studio Rabbit 2 já está estável e pronto para uso em produção. Esta versão inclui recursos importantes para melhorar seu desenvolvimento, como o Bring Your Own Agent, novos recursos do emulador de XR, uma atualização do LeakCanary, uma nova ferramenta de gerenciamento de habilidades do agente, revisão de código com IA e muito mais.
Matthew Warner • Leitura de 3 min -
Notícias sobre produtosOs apps destinados à próxima versão do Android não poderão mais gravar diretamente nos contatos com a permissão WRITE_CONTACTS.
Roxanna Aliabadi Walker • Leitura de 6 min
Receba os insights mais recentes sobre o desenvolvimento para Android na sua caixa de entrada toda semana.