Publicado por Steven Moreland, ingeniero de software del personal, Sandeep Patil, ingeniero de software principal
Una página es la granularidad con la que un sistema operativo gestiona la memoria. La mayoría de las CPU actuales admiten un tamaño de página de 4 KB, por lo que históricamente el sistema operativo y las aplicaciones de Android se han creado y optimizado para funcionar con un tamaño de página de 4 KB. Las CPU ARM admiten el tamaño de página más grande de 16 KB. Cuando Android utiliza este tamaño de página más grande, observamos un Aumento del rendimiento general del 5 al 10 % utilizando aproximadamente un 9% de memoria adicional.
Para mejorar el rendimiento general del sistema operativo y brindar a los fabricantes de dispositivos la capacidad de hacer concesiones, Android 15 puede ejecutarse en tamaños de página de 4 KB o 16 KB.
El primer sistema Android con capacidad de 16 KB estará disponible en dispositivos seleccionados como una opción para desarrolladores. De esta manera, puede utilizar la opción de desarrollador para probar y corregir (si es necesario) sus aplicaciones para prepararlas para dispositivos Android con un tamaño de página de 16 KB en un futuro próximo.
Detalles
En la mayoría de las CPU, el hardware dedicado llamado unidades de administración de memoria (MMU) traduce las direcciones de lo que usa un programa a una ubicación física en la memoria. Esta traducción se realiza en función del tamaño de la página. Siempre que un programa necesita más memoria, el sistema operativo debe intervenir y completar una entrada de “tabla de páginas”, asignando esa porción de memoria a un proceso. Cuando el tamaño de la página es 4 veces mayor, hay 4 veces menos contabilidad. Por lo tanto, el sistema puede dedicar más tiempo a asegurarse de que sus videos se vean bien, los juegos se reproduzcan bien y las aplicaciones se ejecuten sin problemas, y menos tiempo a compilar documentos del sistema operativo de bajo nivel.
A diferencia del modo de 32 bits/64 bits, el tamaño de una página no es una interfaz binaria de aplicación (ABI). En otras palabras, Una vez que una aplicación se ha configurado para que sea independiente del tamaño de la página, el mismo binario de la aplicación se puede ejecutar en dispositivos de 4 KB y 16 KB.
En Android 15, rediseñamos Android desde cero para admitir la ejecución en diferentes tamaños de página, lo que lo hace independiente del tamaño de página.
Cambios importantes en el sistema operativo
En dispositivos nuevos basados en Android 15:
- Todos los archivos binarios del sistema operativo están alineados a 16 KB (-Wl,-z,max-page-size=16384). Es posible que las aplicaciones/bibliotecas de terceros no estén alineadas con 16 KB.
- Todos los archivos binarios del sistema operativo se crean con segmentos cargables separados (-Wl, -z, segmentos-cargables separados) para garantizar que todas las regiones de memoria asignadas en un proceso sean legibles, de las que dependen algunas aplicaciones.
Muchos de los otros componentes de nuestro sistema operativo se han reescrito para evitar tamaños de página y optimizarlos para tamaños de página más grandes cuando estén disponibles.
Sistemas de archivos
Para un funcionamiento eficiente, el tamaño del bloque del sistema de archivos debe coincidir con el tamaño de la página. Los sistemas de archivos EROFS y F2FS se han hecho compatibles con 16 KB, al igual que el nivel de almacenamiento UFS.
En sistemas de 4 KB, el tamaño del archivo ejecutable ELF aumenta debido al relleno adicional agregado para la alineación a 16 KB (opción -Wl,-z,max-page-size=16384), pero varias optimizaciones nos ayudan a evitar este costo.
- Los sistemas de archivos dispersos de solo lectura garantizan que no se escriban en el disco ninguna página creada para un relleno adicional para la alineación de 16 KB. Por ejemplo, EROFS sabe que un cierto rango de un archivo se rellena con ceros y no necesitará realizar ninguna IO si se accede a esta parte del archivo.
- Los sistemas de archivos de lectura y escritura manejan cero páginas caso por caso. Por ejemplo, en Android 15, para archivos instalados como parte de aplicaciones Administrador de paquetes Recuperamos este espacio.
Gestión de la memoria
- linux caché de página se ha modificado para no leer previamente estos espacios de relleno adicionales, ahorrando así una carga de memoria innecesaria.
- Estas páginas son espacios en blanco y los programas nunca las leen. Es el espacio entre las partes utilizables del programa, únicamente con fines de alineación.
El kernel de Linux
El kernel de Linux está estrictamente ligado a un tamaño de página específico, por lo que tenemos que elegir qué tamaño de página usar cuando compilamos el kernel, mientras que el resto del sistema operativo sigue siendo el mismo.
aplicaciones de Android
Todas las aplicaciones con código nativo o dependencias deben recompilarse para garantizar la compatibilidad con dispositivos con tamaños de página de 16 KB.
Dado que la mayor parte del código nativo dentro de las aplicaciones y SDK de Android se creó teniendo en cuenta el tamaño de página de 4 KB, es necesario realinearlos a 16 KB para que los archivos binarios sean compatibles con ambos dispositivos de 4 KB, que son 16 KB. Para la mayoría de las aplicaciones y SDK, este es un proceso de dos pasos:
- Reconstruya código nativo con alineación de 16 KB.
- Pruebe y corrija en un dispositivo/emulador de 16 KB en caso de que haya suposiciones codificadas sobre el tamaño de la página.
por favor vea nuestra documentación para desarrolladores para más información.
NOTA: Si es desarrollador de SDK o herramientas, debe agregar compatibilidad con 16 KB lo antes posible, para que las aplicaciones puedan ejecutarse en 16 KB usando su SDK o herramientas.
Desarrollo para dispositivos de 16KB
No hay ningún dispositivo Android de producción disponible hoy o planificado para la versión Android 15 que admita un tamaño de página de 16 KB. Para abordar este problema, estamos tomando medidas para trabajar con nuestros socios para que una opción de desarrollador esté disponible en los dispositivos existentes. Esta opción de desarrollador está destinada al desarrollo y prueba de aplicaciones. También pondremos a disposición de los desarrolladores un destino de emulador de 16 KB en Android Studio.
Opción de desarrollador de 16 KB en su dispositivo
En Android 15, implementamos una opción de desarrollador que permite a los usuarios cambiar entre un tamaño de página de 16 KB y 4 KB en el dispositivo para probar su aplicación con cualquier tamaño de página. Esta opción está disponible en Pixel 8 y Pixel 8 Pro a partir de Android 15 QPR1 Beta, y estamos trabajando estrechamente con socios de SoC y OEM para habilitar la opción en más dispositivos pronto.
Cuando se compila para páginas de 16 KB, el mismo binario funcionará con dispositivos de 4 KB y 16 KB; sin embargo, el kernel de Linux debe estar separado. Para solucionar esto, hemos agregado una forma de incluir un kernel adicional al que puede cambiar como opción de desarrollador. Comprimido incrementalmente, con una copia para cada tamaño de página y ocupa aproximadamente entre 12 y 16 MB de espacio en disco.
Para usar la opción de desarrollador de 16 KB, deberá borrar su dispositivo una vez y tener un gestor de arranque desbloqueado. Después de actualizar, los desarrolladores podrán cambiar del modo de 4 KB al modo de 16 KB habilitando la opción de desarrollador mediante un reinicio.
Si es fabricante de dispositivos o desarrollador de SoC, consulte nuestras instrucciones sobre cómo habilitarlo y usarlo.
16 KB en escritorio x86_64
Si bien las páginas de 16 KB son una característica exclusiva de ARM, reconocemos que muchos desarrolladores usan emuladores en hardware x86_64. Para llenar este vacío para los desarrolladores, hemos agregado soporte para emular el tamaño de página de 16 KB para aplicaciones en emuladores x86_64. En este modo, el kernel funciona en modo de 4 KB, pero todas las direcciones expuestas a las aplicaciones están alineadas en 16 KB y los argumentos para llamadas a funciones como mmap(…MAP_FIXED…) se verifican como alineados en 16 KB.
Para empezar, puedes Descargue y ejecute el emulador de páginas de 16 KB dentro del administrador del SDK de Android StudioDe esta manera, incluso si no tiene acceso al hardware ARM, puede garantizar que sus aplicaciones funcionarán con un tamaño de página de 16 KB.
Futuro
En esta publicación, discutimos los detalles técnicos de cómo estamos reestructurando la memoria en Android para lograr dispositivos más rápidos y con mejor rendimiento. Android 15 y AOSP funcionan con páginas de 16 KB y los dispositivos ahora pueden implementar páginas de 16 KB como opción de desarrollo. Esto requirió cambios ascendentes en el sistema operativo, en nuestras herramientas de desarrollo y en todo el ecosistema de Android.
Esperamos que los desarrolladores de aplicaciones y SDK aprovechen estas opciones y se preparen para dispositivos Android más eficientes y con mejor rendimiento en el futuro cercano.