Android 15 (experimental de AOSP) y las versiones posteriores admiten la compilación de Android con un tamaño de página de 16 KB. Esta opción usa memoria adicional, pero mejora el rendimiento del sistema.
Las páginas de 16 KB solo son compatibles con objetivos arm64
con kernels de 16 KB.
Sin embargo, también hay una opción para simular el espacio del usuario de 16 KB en x86_64
para Cuttlefish.
Para habilitar páginas de 16 KB, configura las siguientes opciones de compilación en un dispositivo:
PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
quita la definición dePAGE_SIZE
, y hace que los componentes determinen el tamaño de la página durante el tiempo de ejecución.PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384
, que garantiza que los archivos ELF de la plataforma se compilen con una alineación de 16 KB Este tamaño más grande de lo necesario sirve para la compatibilidad en el futuro. Con la alineación ELF de 16 KB, el kernel puede admitir tamaños de página de 4 KB o 16 KB.
Verifica las marcas de compilación
Después de seleccionar el destino lunch
, verifica que las marcas de compilación estén configuradas de forma correcta en el entorno:
$ source build/envsetup.sh
$ lunch target
$ get_build_var TARGET_MAX_PAGE_SIZE_SUPPORTED
16384
$ get_build_var TARGET_NO_BIONIC_PAGE_SIZE_MACRO
true
Si los dos comandos anteriores muestran 16384
y true
respectivamente, tus marcas de compilación están configuradas de forma correcta.
Cómo compilar bibliotecas compartidas con alineación ELF de 16 KB
Para compilar bibliotecas compartidas que forman parte del proyecto de Android, solo debes configurar estas marcas de compilación en tu destino:
PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384
Para compilar bibliotecas compartidas que no forman parte del proyecto de Android, debes pasar esta marca del vinculador:
-Wl,-z,max-page-size=16384
Verifica objetos binarios y precompilados para una alineación ELF de 16 KB
La mejor manera de verificar la alineación y el comportamiento del tiempo de ejecución es probar y ejecutar un kernel compilado de 16 KB. Sin embargo, para detectar algunos problemas antes, haz lo siguiente:
A partir de Android W (experimental de AOSP), puedes configurar
PRODUCT_CHECK_PREBUILT_MAX_PAGE_SIZE := true
durante el tiempo de compilación. Usaignore_max_page_size: true
enAndroid.bp
yLOCAL_IGNORE_MAX_PAGE_SIZE := true
enAndroid.mk
para ignorarlos temporalmente. Esta configuración verifica todas las compilaciones previas y te permite detectar cuándo se actualiza una, pero no está alineada con 16 KB.Puedes ejecutar
atest elf_alignment_test
, que verifica la alineación de los archivos ELF integrados en el dispositivo en dispositivos que se lanzan con Android 15 (experimental de AOSP) y versiones posteriores.