Habilita el tamaño de página de 16 KB

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 de PAGE_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. Usa ignore_max_page_size: true en Android.bp y LOCAL_IGNORE_MAX_PAGE_SIZE := true en Android.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.