Notícias sobre produtos
Melhorando o desempenho do Android: apresentando o AutoFDO para o kernel
Leitura de 4 minutos
Somos a equipe do conjunto de ferramentas LLVM do Android. Uma das nossas principais prioridades é melhorar o desempenho do Android com técnicas de otimização no ecossistema LLVM. Estamos sempre buscando maneiras de tornar o Android mais rápido, fácil 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 trazendo a Otimização automática direcionada por feedback (AutoFDO) para o kernel do Android e oferecendo 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 inserir uma função e qual ramificação de uma condição 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 do código durante o uso real do smartphone.
O AutoFDO muda isso usando padrões de execução do mundo real 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 ao gravar o histórico de ramificação da CPU. Embora esses dados possam ser coletados de dispositivos da frota, para o kernel, eles são sintetizados 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 reconstruímos 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 principais:
- No Android, o kernel representa cerca de 40% do tempo de CPU.
- Já estamos usando o AutoFDO para otimizar executáveis e bibliotecas nativas no espaço do usuário, alcançando uma melhoria de cerca de 4% no lançamento de apps a frio e uma redução de 1% no tempo de inicialização.
Vitórias de performance no mundo real
Notamos melhorias impressionantes nas principais métricas do Android ao usar perfis de ambientes de laboratório controlados. Esses perfis foram coletados usando rastreamento e inicialização 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. Os detalhes sobre os perfis do AutoFDO para essas versões do kernel podem ser encontrados nos respectivos repositórios do kernel do Android para os kernels android16-6.12 e android15-6.6.
Esses não são apenas números teóricos. Isso se traduz em uma interface mais rápida, troca de apps mais rápida, bateria de longa duração 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 do 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 do 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 das frotas do mundo real.
- Ferramentas e ambiente:fazemos o flash dos dispositivos de teste com a imagem de kernel mais recente 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, usando especificamente a Extensão de rastreamento incorporado (ETE, na sigla em inglês) do ARM e a Extensão de buffer de rastreamento (TRBE, na sigla em inglês) do ARM em dispositivos Pixel.
- Cargas de trabalho: construímos uma carga de trabalho representativa usando os 100 apps mais usados do Android App Compatibility Test Suite (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 em todo o sistema:captura não apenas das atividades de aplicativos em primeiro plano, mas também de cargas de trabalho críticas em segundo plano e 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 segmentados:ao repetir esses testes o suficiente, capturamos padrões de execução de alta fidelidade que representam com precisão a interação do usuário no mundo real com os aplicativos mais usados. Além disso, essa estrutura extensível permite integrar cargas de trabalho e comparativos adicionais para ampliar nossa cobertura.
Etapa 2: processamento de perfil
Fazemos o pós-processamento dos dados de rastreamento brutos para garantir que eles estejam limpos, sejam 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 rastreamentos brutos para o formato de perfil do AutoFDO, filtrando símbolos indesejados conforme necessário.
- Remoção de perfis:removemos dados de funções "frias" para que elas possam usar a otimização padrão. Isso evita regressões em códigos raramente usados e aumentos desnecessários no tamanho 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 estritamente o conteúdo do novo perfil (incluindo funções ativas, contagens de amostras e tamanho do perfil) com as versões anteriores. Também usamos o perfil para criar uma nova imagem de kernel, analisando binários para garantir que as mudanças na seção de texto sejam consistentes com as expectativas.
- Verificação de performance:executamos comparativos de mercado segmentados na nova imagem do kernel. Isso confirma que ele mantém as melhorias de performance estabelecidas por linhas de base anteriores.
Atualizações contínuas
O código naturalmente "muda" com o tempo, então um perfil estático acabaria perdendo a eficácia. Para manter a performance máxima, 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 do GKI, como aandroid17-6.18.
Garantir a estabilidade
Uma dúvida 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 a inclusão 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 infraestrutura de servidor 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 nossos perfis de alta fidelidade são otimizadas usando métodos padrão do compilador. 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 maneiras promissoras de aprimorar ainda mais a tecnologia:
- Alcance expandido:vamos implantar perfis do AutoFDO em versões mais recentes do kernel GKI e em outros destinos de build além do suporte atual do
aarch64. - Otimização do módulo GKI:atualmente, nossa otimização está focada no principal binário do kernel (
vmlinux). A expansão do AutoFDO para módulos GKI pode trazer benefícios de desempenho para uma parte maior do subsistema do kernel. - Suporte a módulos do fornecedor:também queremos oferecer suporte ao AutoFDO para módulos do fornecedor 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), isso permite que os fornecedores apliquem as mesmas técnicas de otimização aos drivers de hardware específicos.
- Cobertura mais ampla de perfis:é 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 maneira como você usa seu dispositivo todos os dias.
Continuar lendo
-
Notícias sobre produtos
Tornar o Google Play a experiência mais segura e confiável possível. Hoje, anunciamos um novo conjunto de atualizações de políticas e um recurso de transferência de conta para aumentar a privacidade do usuário e proteger sua empresa contra fraudes.
Bennet Manuel • 3 min de leitura
-
Notícias sobre produtos
Testar interações multidispositivo ficou mais fácil do que nunca com o Android Emulator.
Steven Jenkins • 2 min de leitura
-
Notícias sobre produtos
O fluxo de trabalho e as necessidades de IA de cada desenvolvedor são únicos. Por isso, é importante poder escolher como a IA ajuda no desenvolvimento. Em janeiro, lançamos a opção de escolher qualquer modelo de IA local ou remoto para ativar a funcionalidade de IA no Android Studio.
Matthew Warner • 2 min de leitura
Fique por dentro
Receba os insights mais recentes sobre desenvolvimento Android na sua caixa de entrada semanalmente.