- La página es la unidad mínima con la que el sistema operativo administra la memoria
- La mayoría de los CPU admiten un tamaño de página de 4 KB, y el sistema operativo Android y las aplicaciones están optimizados para un tamaño de página de 4 KB
- Los CPU ARM admiten un tamaño de página de 16 KB, y cuando Android usa este tamaño, el rendimiento mejora entre 5 y 10% y el uso de memoria aumenta alrededor de 9%
- Para mejorar el rendimiento general del sistema operativo y permitir que los fabricantes de dispositivos elijan este equilibrio, Android 15 puede ejecutarse con tamaños de página de 4 KB o 16 KB
- Los primeros sistemas Android compatibles con tamaño de página de 16 KB estarán disponibles como opción para desarrolladores en algunos dispositivos
Detalles técnicos sobre el tamaño de página de 16 KB
- La mayoría de los CPU tienen hardware dedicado llamado unidad de administración de memoria (MMU) que traduce las direcciones que usa un programa a ubicaciones físicas en la memoria
- Esta traducción se realiza en unidades del tamaño de página
- Cada vez que un programa necesita más memoria, el sistema operativo debe intervenir para llenar entradas de la "tabla de páginas" y asignar ese bloque de memoria al proceso
- Si el tamaño de página es 4 veces mayor, el trabajo de registro se reduce 4 veces.
- Por lo tanto, el sistema puede dedicar más tiempo a hacer que el video se vea bien, que los juegos funcionen bien y que las apps se ejecuten con fluidez, y menos tiempo al papeleo de bajo nivel del sistema operativo
- El tamaño de página no es una Application Binary Interface (ABI)
- Es decir, si una aplicación se modifica para que sea independiente del tamaño de página, el mismo binario de la aplicación puede ejecutarse tanto en dispositivos de 4 KB como de 16 KB
- En Android 15, Android fue refactorizado desde cero para poder ejecutarse con distintos tamaños de página y volverse independiente del tamaño de página
Cambios principales en el SO
- Dispositivos basados en Android 15:
- La macro
PAGE_SIZE en tiempo de compilación se reemplaza por getpagesize(2) en tiempo de ejecución
- Todos los binarios del SO se alinean a 16 KB (las aplicaciones/bibliotecas de terceros podrían no estar alineadas a 16 KB)
- Todos los binarios del SO se construyen con un segmento cargable separado para que se puedan leer todas las regiones de memoria mapeadas en el proceso, y algunas aplicaciones dependen de ello
- Varios componentes del SO se reescribieron para no asumir un tamaño de página fijo y optimizarse para tamaños de página más grandes
Sistema de archivos
- Para operaciones de buen rendimiento, el tamaño de bloque del sistema de archivos debe coincidir con el tamaño de página. Los sistemas de archivos EROFS y F2FS, y la capa de almacenamiento UFS, son compatibles con 16 KB
- En sistemas de 4 KB, el tamaño de los ejecutables ELF aumenta por el relleno adicional agregado para la alineación a 16 KB, pero varias optimizaciones evitan este costo
- El sistema de archivos disperso de solo lectura evita que las páginas de 0 generadas para el relleno adicional de alineación a 16 KB se escriban en disco
- Los sistemas de archivos de lectura/escritura manejan las páginas de 0 caso por caso
Administración de memoria
- La page cache de Linux fue modificada para no hacer lectura anticipada de este espacio de relleno extra, ahorrando cargas de memoria innecesarias
- Esta página es un relleno vacío y el programa nunca la leerá. Es solo espacio entre las partes utilizables del programa con fines de alineación
Kernel de Linux
- Como el kernel de Linux está profundamente ligado a un tamaño de página específico, al compilar el kernel se debe elegir el tamaño de página a usar, mientras que el resto del sistema operativo permanece igual
Aplicaciones Android
- Cualquier aplicación con código nativo o dependencias debe recompilarse para ser compatible con dispositivos con tamaño de página de 16 KB
- Como la mayor parte del código nativo dentro de las aplicaciones Android y los SDK fue construido pensando en un tamaño de página de 4 KB, debe realinearse a 16 KB para que los binarios sean compatibles tanto con dispositivos de 4 KB como de 16 KB
- En la mayoría de las aplicaciones y SDK, este es un proceso de 2 pasos:
- Volver a compilar el código nativo con alineación de 16 KB
- Probar y corregir en dispositivos/emuladores de 16 KB si existen suposiciones codificadas de forma rígida sobre el tamaño de página
Desarrollo para dispositivos de 16 KB
- Los dispositivos Android que se producen actualmente no admiten tamaño de página de 16 KB
- Para resolver esto, se está trabajando con socios para permitir opciones de desarrollador en dispositivos existentes
- Está previsto ofrecer compatibilidad con tamaño de página de 16 KB como opción para desarrolladores
- En Android Studio se puede usar un objetivo de emulador de 16 KB
Opción para desarrolladores de 16 KB
- En Android 15 se implementó una opción para desarrolladores que permite alternar entre tamaños de página de 16 KB y 4 KB
- Disponible en Pixel 8 y Pixel 8 Pro, y se espera soporte en más dispositivos
- Para usar la opción para desarrolladores, hay que restablecer el dispositivo y desbloquear el bootloader
16 KB en escritorio x86_64
- Es posible emular un tamaño de página de 16 KB en el emulador x86_64
- El emulador de páginas de 16 KB puede descargarse y ejecutarse desde el SDK Manager de Android Studio
Futuro
- Android 15 y AOSP admiten páginas de 16 KB, y pueden implementarse mediante la opción para desarrolladores
- Se espera que los desarrolladores de aplicaciones y SDK aprovechen esta opción para preparar dispositivos Android más rápidos y eficientes
Opinión de GN⁺
- La transición al tamaño de página de 16 KB es un cambio importante para mejorar el rendimiento y la eficiencia de los dispositivos Android
- Usar un tamaño de página mayor puede reducir la sobrecarga de administración de memoria y mejorar el rendimiento general del sistema
- Sin embargo, este cambio también puede provocar problemas de compatibilidad, especialmente en apps y SDK que dependen de código nativo, por lo que los desarrolladores deben actualizar su software pensando en páginas de 16 KB
- Google está proporcionando a los desarrolladores herramientas para probar y prepararse para esta transición mediante la opción para desarrolladores de 16 KB y el soporte del emulador
- Las páginas de 16 KB actualmente solo se aplican a dispositivos Android basados en ARM, pero en el futuro podrían ampliarse a otras plataformas de hardware
- Además de adaptar apps y SDK al tamaño de página de 16 KB, los desarrolladores también deben considerar el impacto que un tamaño de página mayor tiene en el uso de memoria y realizar optimizaciones si es necesario
- La transición a páginas de 16 KB es un esfuerzo importante que requiere colaboración en todo el ecosistema Android, pero al final ofrecerá mejor rendimiento y eficiencia a los usuarios
2 comentarios
Opiniones de Hacker News
Debian empezó recientemente a trabajar en compilar el kernel ARM64 con tamaño de página de 16 KiB
El primer sistema Android con soporte para 16 KB estará disponible en algunos dispositivos como opción para desarrolladores
Hay curiosidad sobre cuándo una aplicación no es independiente del tamaño de página
Usar 16 KB como valor predeterminado sin soportar simultáneamente procesos de 4 KB y 16 KB sería problemático
iOS ha usado páginas de 16 KB desde la transición a 64 bits
RHEL intentó en el pasado usar páginas de 64 KB en AARCH64, pero al final revirtió el cambio por muchos bugs
Hay curiosidad sobre cuánto ayudó Asahi al trabajo de kernel y ecosistema para habilitar páginas de 16 KB
iOS usa páginas de 16K desde hace mucho tiempo
Hay curiosidad sobre si aumentar el tamaño de página afecta negativamente el rendimiento de I/O o la vida útil del flash
Se midieron mejoras de rendimiento
Una mejora de rendimiento de 5-10% parece una cifra grande
hugepage, pienso que operar con 16K no debería ser un problema importante. Los problemas que surjan fuera del kernel, en funciones de Android o en las apps, tendrán que ser gestionados por Google.