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

Android 15 (experimental de AOSP) y las versiones posteriores admiten la compilación. 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 Simula un espacio de 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 el PAGE_SIZE. definen y hace que los componentes determinen el tamaño de la página en el tiempo de ejecución.
  • PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384, que garantiza que los archivos ELF de la plataforma se crean con una alineación de 16 KB. Este tamaño más grande de lo necesario es 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, tu compilación estén configuradas correctamente.

Cómo compilar bibliotecas compartidas con alineación ELF de 16 KB

Para compilar bibliotecas compartidas que son 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 de 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 en 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 en 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 ignorarlas temporalmente de ellos. Estos parámetros de configuración verifican todas las compilaciones previas y te permiten detectar se actualiza, pero no está alineado con 16 KB.

  • Puedes ejecutar atest elf_alignment_test, que verifica la alineación de archivos ELF integrados en los dispositivos que se lanzan con Android 15 (experimental de AOSP) y versiones posteriores