Attiva dimensione pagina 16 kB

Android 15 (AOSP sperimentale) e versioni successive supportano la creazione di Android con una dimensione pagina di 16 kB. Questa opzione utilizza memoria aggiuntiva ma migliora le prestazioni del sistema.

Le pagine da 16 kB sono supportate solo su destinazioni arm64 con kernel da 16 kB. Tuttavia, esiste anche un'opzione per simulare uno spazio utente di 16 kB su x86_64 per Seppia.

Per attivare le pagine da 16 kB, imposta le seguenti opzioni di build su un dispositivo:

  • PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true rimuove la definizione di PAGE_SIZE e consente ai componenti di determinare le dimensioni della pagina in fase di runtime.
  • PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384, che assicura che i file ELF della piattaforma vengano creati con un allineamento di 16 kB. Queste dimensioni superano il necessario per una compatibilità futura. Con un allineamento ELF a 16 kB, il kernel può supportare dimensioni di pagina da 4 a 16 kB.

Verifica i flag di build

Dopo aver selezionato la destinazione lunch, verifica che i flag di build siano configurati correttamente nell'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 i due comandi precedenti restituiscono rispettivamente 16384 e true, i flag di build sono configurati correttamente.

Crea librerie condivise con allineamento ELF di 16 kB

Per creare librerie condivise che fanno parte del progetto Android, devi solo impostare questi flag di build nella destinazione:

  • PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
  • PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384

Per creare librerie condivise che non fanno parte del progetto Android, devi passare questo flag linker:

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

Verifica i file binari e predefiniti per l'allineamento ELF a 16 kB

Il modo migliore per verificare l'allineamento e il comportamento di runtime è testare ed eseguire un kernel compilato da 16 kB. Tuttavia, al fine di individuare alcuni problemi prima:

  • A partire da Android W (AOSP sperimentale), puoi impostare PRODUCT_CHECK_PREBUILT_MAX_PAGE_SIZE := true in fase di creazione. Usa ignore_max_page_size: true in Android.bp e LOCAL_IGNORE_MAX_PAGE_SIZE := true in Android.mk per ignorarli temporaneamente. Queste impostazioni verificano tutti i predefiniti e ti consentono di rilevare quando ne viene aggiornata una, che però non è allineata a 16 kB.

  • Puoi eseguire atest elf_alignment_test, che verifica l'allineamento dei file ELF sul dispositivo sui dispositivi con Android 15 (sperimentale AOSP) e versioni successive.