Mejora el rendimiento de Android: Presentamos AutoFDO para el kernel
Lectura de 4 min
Somos el equipo de la cadena de herramientas de LLVM de Android. Una de nuestras principales prioridades es mejorar el rendimiento de Android a través de técnicas de optimización en el ecosistema de LLVM. Buscamos constantemente formas de hacer que Android sea más rápido, fluido y eficiente. Si bien gran parte de nuestro trabajo de optimización se realiza en el espacio de usuario, el kernel sigue siendo el corazón del sistema. Hoy, nos complace compartir cómo incorporamos la optimización automática dirigida por comentarios (AutoFDO) al kernel de Android para brindar mejoras de rendimiento significativas a los usuarios.
¿Qué es AutoFDO?
Durante una compilación de software estándar, el compilador toma miles de decisiones pequeñas, como si se debe intercalar una función y qué rama de un condicional es probable que se tome, según las sugerencias de código estático.Si bien estas heurísticas son útiles, no siempre predicen con precisión la ejecución del código durante el uso real del teléfono.
AutoFDO cambia esto usando patrones de ejecución reales para guiar al compilador. Estos patrones representan las rutas de ejecución de instrucciones más comunes que toma el código durante el uso real, que se capturan registrando el historial de ramificación de la CPU. Si bien estos datos se pueden recopilar de los dispositivos de la flota, para el kernel, los sintetizamos en un entorno de lab con cargas de trabajo representativas, como la ejecución de las 100 apps más populares. Usamos un generador de perfiles de muestreo para capturar estos datos, lo que nos permite identificar qué partes del código son "activas" (se usan con frecuencia) y cuáles son "inactivas". Cuando volvemos a compilar el kernel con estos perfiles, el compilador puede tomar decisiones de optimización mucho más inteligentes adaptadas a las cargas de trabajo reales de Android.
Para comprender el impacto de esta optimización, ten en cuenta estos datos clave:
- En Android, el kernel representa alrededor del 40% del tiempo de CPU.
- Ya usamos AutoFDO para optimizar los ejecutables y las bibliotecas nativos en el espacio del usuario, lo que permite mejorar en un 4% el inicio de apps en frío y reducir en un 1% el tiempo de inicio.
Mejoras de rendimiento en el mundo real
Observamos mejoras impresionantes en las métricas clave de Android gracias al uso de perfiles de entornos de lab controlados. Estos perfiles se recopilaron con el rastreo y el inicio de apps, y se midieron en dispositivos Pixel en los kernels 6.1, 6.6 y 6.12.
A continuación, se indican las mejoras más notables. Puedes encontrar detalles sobre los perfiles de AutoFDO para estas versiones de kernel en los repositorios de kernel de Android correspondientes para los kernels android16-6.12 y android15-6.6.
No se trata solo de números teóricos. Se traducen en una interfaz más ágil, un cambio de app más rápido, una mayor duración de batería y un dispositivo con mayor capacidad de respuesta para el usuario final.
Cómo funciona: La canalización
Nuestra estrategia de implementación incluye una canalización sofisticada para garantizar que los perfiles sigan siendo relevantes y que el rendimiento se mantenga estable.
Paso 1: Recopilación de perfiles
Si bien confiamos en nuestra flota de pruebas interna para generar perfiles de objetos binarios del espacio de usuario, cambiamos a un entorno de lab controlado para la imagen genérica del kernel (GKI). Desvincular la generación de perfiles del ciclo de lanzamiento del dispositivo permite realizar actualizaciones flexibles e inmediatas, independientemente de las versiones de kernel implementadas. Fundamentalmente, las pruebas confirman que estos datos basados en el laboratorio ofrecen mejoras de rendimiento comparables a las de las flotas del mundo real.
- Herramientas y entorno: Actualizamos los dispositivos de prueba con la imagen de kernel más reciente y usamos simpleperf para capturar flujos de ejecución de instrucciones. Este proceso se basa en las capacidades del hardware para registrar el historial de ramificaciones, específicamente con ARM Embedded Trace Extension (ETE) y ARM Trace Buffer Extension (TRBE) en dispositivos Pixel.
- Cargas de trabajo: Creamos una carga de trabajo representativa con las 100 apps más populares del Conjunto de pruebas de compatibilidad de apps para Android (C-Suite). Para capturar los datos más precisos, nos enfocamos en lo siguiente:
- Inicio de la app: Optimiza para las demoras más visibles para el usuario.
- Rastreo de apps impulsado por IA: Simula interacciones de usuarios contiguas y en evolución
- Supervisión de todo el sistema: Captura no solo las actividades de las apps en primer plano, sino también las cargas de trabajo críticas en segundo plano y las comunicaciones entre procesos.
- Validación: Esta carga de trabajo sintetizada muestra una similitud del 85% con los patrones de ejecución recopilados de nuestra flota interna.
- Datos segmentados: Repitiendo estas pruebas lo suficiente, capturamos patrones de ejecución de alta fidelidad que representan con precisión la interacción de los usuarios en el mundo real con las aplicaciones más populares. Además, este framework extensible nos permite integrar sin problemas cargas de trabajo y comparativas adicionales para ampliar nuestra cobertura.
Paso 2: Procesamiento de perfiles
Procesamos posteriormente los datos de seguimiento sin procesar para asegurarnos de que estén limpios, sean eficaces y estén listos para el compilador.
- Agregación: Consolidamos los datos de varias ejecuciones de pruebas y dispositivos en una sola vista del sistema.
- Conversión: Convertimos los seguimientos sin procesar en el formato de perfil de AutoFDO y filtramos los símbolos no deseados según sea necesario.
- Recorte de perfiles: Recortamos los perfiles para quitar los datos de las funciones "en frío", lo que les permite usar la optimización estándar. Esto evita las regresiones en el código que se usa con poca frecuencia y los aumentos innecesarios en el tamaño del objeto binario.
Paso 3: Prueba de perfiles
Antes de la implementación, los perfiles se someten a una verificación rigurosa para garantizar que ofrezcan mejoras de rendimiento constantes sin riesgos de estabilidad.
- Análisis de perfiles y objetos binarios: Comparamos estrictamente el contenido del perfil nuevo (incluidas las funciones activas, los recuentos de muestras y el tamaño del perfil) con las versiones anteriores. También usamos el perfil para compilar una nueva imagen de kernel, analizando los objetos binarios para garantizar que los cambios en la sección de texto sean coherentes con las expectativas.
- Verificación del rendimiento: Ejecutamos comparativas específicas en la nueva imagen del kernel. Esto confirma que mantiene las mejoras de rendimiento establecidas por las comparativas anteriores.
Actualizaciones continuas
El código "se desvía" de forma natural con el tiempo, por lo que un perfil estático perdería su eficacia con el tiempo. Para mantener el máximo rendimiento, ejecutamos la canalización de forma continua para generar actualizaciones periódicas:
- Actualización periódica: Actualizamos los perfiles en las ramas de LTS del kernel de Android antes de cada lanzamiento de GKI, lo que garantiza que cada compilación incluya los datos de perfil más recientes.
- Expansión futura: Actualmente, estamos entregando estas actualizaciones a las ramas
android16-6.12yandroid15-6.6, y ampliaremos la compatibilidad con versiones más recientes de GKI, como la próximaandroid17-6.18.
Garantiza la estabilidad
Una pregunta común sobre la optimización guiada por perfiles es si presenta riesgos de estabilidad. Debido a que AutoFDO influye principalmente en la heurística del compilador, como la inserción de funciones y el diseño del código, en lugar de alterar la lógica del código fuente, conserva la integridad funcional del kernel. Esta tecnología ya se probó a gran escala y, durante años, sirvió como una optimización estándar para las bibliotecas de la plataforma de Android, ChromeOS y la infraestructura de servidores de Google.
Para garantizar aún más un comportamiento coherente, aplicamos una estrategia "conservadora de forma predeterminada". Las funciones que no se capturan en nuestros perfiles de alta fidelidad se optimizan con métodos de compilador estándar. Esto garantiza que las partes "frías" o que se ejecutan con poca frecuencia del kernel se comporten exactamente como lo harían en una compilación estándar, lo que evita regresiones de rendimiento o comportamientos inesperados en casos extremos.
Qué trae el futuro
Actualmente, estamos implementando AutoFDO en las ramas android16-6.12 y android15-6.6. Más allá de este lanzamiento inicial, vemos varias vías prometedoras para mejorar aún más la tecnología:
- Alcance ampliado: Esperamos implementar perfiles de AutoFDO en versiones más recientes del kernel de GKI y objetivos de compilación adicionales más allá de la compatibilidad actual con
aarch64. - Optimización de módulos de GKI: Actualmente, nuestra optimización se centra en el objeto binario principal del kernel (
vmlinux). Expandir AutoFDO a los módulos de GKI podría aportar beneficios de rendimiento a una parte más grande del subsistema del kernel. - Compatibilidad con módulos de proveedores: También nos interesa admitir AutoFDO para módulos de proveedores compilados con el Kit de desarrollo de controladores (DDK). Con la compatibilidad ya disponible en nuestro sistema de compilación (Kleaf) y las herramientas de generación de perfiles (simpleperf), los proveedores pueden aplicar estas mismas técnicas de optimización a sus controladores de hardware específicos.
- Cobertura de perfiles más amplia: Existe la posibilidad de recopilar perfiles de una gama más amplia de recorridos críticos del usuario (CUJ) para optimizarlos.
Con la incorporación de AutoFDO al kernel de Android, nos aseguramos de que la base del SO esté optimizada para la forma en que usas tu dispositivo todos los días.
-
Novedades de productosLas apps que se orienten a la próxima versión de Android ya no podrán escribir directamente en los contactos con el permiso WRITE_CONTACTS.
Roxanna Aliabadi Walker • Lectura de 6 min -
Novedades de productosA medida que se acelera el desarrollo basado en agentes, la ingeniería de Android alcanza una nueva y emocionante frontera: pasar de la finalización de código asistida a agentes que ejecutan tareas de extremo a extremo bajo tu dirección. Tienes total libertad y flexibilidad para elegir los modelos y agentes que usas.
Jason Buchel • Lectura de 3 min -
Novedades de productosHoy, compartimos cómo estamos llevando nuestra visión de “más que una tienda” al siguiente nivel. Desde la pestaña Tú, que ahora es la base personal de más de 250 millones de usuarios activos por mes, hasta nuestra plataforma de juegos unificada que conecta a más de 700 millones de perfiles de gamer, Google Play llega a los usuarios dondequiera que estén.
Paul Feng • Lectura de 3 min
Recibe la información más reciente sobre el desarrollo de Android en tu bandeja de entrada todas las semanas.