Ativar tamanho de página de 16 KB

O Android 15 (AOSP experimental) e versões mais recentes oferecem suporte à criação Android com um tamanho de página de 16 KB. Essa opção usa memória adicional, mas melhora o desempenho do sistema.

Páginas de 16 KB são compatíveis apenas com destinos arm64 com kernels de 16 KB. No entanto, também há a opção de simule um espaço do usuário de 16 KB no x86_64 para o Cuttlefish.

Para ativar páginas de 16 KB, defina as seguintes opções de build em um dispositivo:

  • PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true remove o PAGE_SIZE definir, e faz com que os componentes determinem o tamanho da página no tempo de execução.
  • PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384 que garante arquivos ELF da plataforma são criados com alinhamento de 16 KB. Esse tamanho maior do que o necessário é compatibilidade futura. Com alinhamento de ELF de 16 KB, o kernel dá suporte a tamanhos de página de 4 KB/16 KB.

Verificar flags de build

Depois de selecionar o destino lunch, verifique se as flags de build estão configuradas. corretamente no ambiente:

$ 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

Se os dois comandos anteriores retornarem 16384 e true, respectivamente, seu build que as sinalizações estejam configuradas corretamente.

Criar bibliotecas compartilhadas com alinhamento ELF de 16 KB

Para criar bibliotecas compartilhadas que fazem parte do projeto android, você só precisa definir essas flags de build no destino:

  • PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
  • PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384

Para criar bibliotecas compartilhadas que não fazem parte do projeto android, você precisa passar esta sinalização de vinculador:

-Wl,-z,max-page-size=16384

Verificar binários e pré-criados para alinhamento de ELF de 16 KB

A melhor maneira de verificar o alinhamento e o comportamento do ambiente de execução é testar e executar em um Kernel compilado de 16 KB. No entanto, para identificar alguns problemas antes:

  • A partir do Android W (AOSP experimental), você pode definir PRODUCT_CHECK_PREBUILT_MAX_PAGE_SIZE := true no tempo de build. Usar ignore_max_page_size: true em Android.bp e LOCAL_IGNORE_MAX_PAGE_SIZE := true em Android.mk para ignorar temporariamente para resolvê-los com rapidez. Essas configurações verificam todos os modelos pré-criados e permitem que você detecte quando um deles é atualizado, mas não tem um alinhamento de 16 KB.

  • É possível executar atest elf_alignment_test, que verifica o alinhamento dos arquivos ELF no dispositivo em que são iniciados Android 15 (AOSP experimental) e versões mais recentes.