Attiva dimensione pagina 16 kB

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

Le pagine da 16 kB sono supportate solo su destinazioni arm64 con kernel da 16 kB. Tuttavia, esiste anche la possibilità di simulano 16 kB di spazio utente 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 PAGE_SIZE e consente ai componenti di determinare le dimensioni della pagina in fase di runtime.
  • PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384 che garantisce i file ELF della piattaforma con un allineamento di 16 kB. Questa dimensione più grande del necessario è per la compatibilità futura. Con un allineamento ELF a 16 kB, il kernel può supportare Dimensioni delle pagine: 4 kB/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, la build siano impostati correttamente.

Crea librerie condivise con allineamento ELF di 16 kB

Per creare librerie condivise che fanno parte del Android project, 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 di Android project, devi passare questo flag del 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 deployment 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. Utilizza le funzionalità di ignore_max_page_size: true a Android.bp e LOCAL_IGNORE_MAX_PAGE_SIZE := true in Android.mk per ignorare temporaneamente che li rappresentano. Queste impostazioni verificano tutti i predefiniti e ti consentono di rilevare quando viene aggiornato, ma non è allineato a 16 kB.

  • Puoi eseguire atest elf_alignment_test, che verifica l'allineamento di file ELF sul dispositivo per i dispositivi che vengono avviati con Android 15 (AOSP sperimentale) e versioni successive.