O Android 15 (AOSP experimental) e versões mais recentes oferecem suporte à criação de páginas de 16 KB no Android. Essa opção usa mais memória, 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á uma opção para
simular um espaço do usuário de 16 KB em 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 a definiçãoPAGE_SIZE
e faz com que os componentes determinem o tamanho da página no momento da execução.PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384
, que garante que os arquivos ELF da plataforma sejam criados com alinhamento de 16 KB. Esse tamanho maior do que o necessário serve para compatibilidade futura. Com o alinhamento de ELF de 16 KB, o kernel é compatível com tamanhos de página de 4 KB/16 KB.
Verificar flags de build
Depois de selecionar o destino lunch
, verifique se as sinalizações 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, as sinalizações de
build estão 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 estas 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, é necessário transmitir esta flag do 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. Useignore_max_page_size: true
emAndroid.bp
eLOCAL_IGNORE_MAX_PAGE_SIZE := true
emAndroid.mk
para ignorá-las temporariamente. Essas configurações verificam todos os modelos pré-criados e permitem detectar quando um foi atualizado, mas não está alinhado a 16 KB.Você pode executar
atest elf_alignment_test
, que verifica o alinhamento de arquivos ELF no dispositivo em dispositivos lançados com o Android 15 (AOSP experimental) e versões mais recentes.