Activer une taille de page de 16 Ko

Android 15 (AOSP expérimentale) ou version ultérieure est compatible avec la création d'Android avec une taille de page de 16 Ko. Cette option utilise de la mémoire supplémentaire, mais améliore les performances du système.

Les pages de 16 Ko ne sont compatibles qu'avec les cibles arm64 avec des noyaux de 16 Ko. Cependant, il existe également une option permettant de simuler un espace utilisateur de 16 Ko sur x86_64 pour Settlefish.

Pour activer les pages de 16 Ko, définissez les options de compilation suivantes sur un appareil:

  • PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true supprime la définition de PAGE_SIZE et oblige les composants à déterminer la taille de la page au moment de l'exécution.
  • PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384, qui garantit un alignement de 16 Ko dans les fichiers ELF de la plate-forme. Cette taille plus importante que nécessaire est destinée à une compatibilité future. Avec un alignement ELF de 16 Ko, le noyau peut accepter des tailles de page de 4 Ko/16 Ko.

Vérifier les options de compilation

Après avoir sélectionné la cible lunch, vérifiez que les options de compilation sont correctement configurées dans l'environnement:

$ 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 les deux commandes précédentes renvoient respectivement 16384 et true, vos options de compilation sont correctement configurées.

Créer des bibliothèques partagées avec un alignement ELF de 16 Ko

Pour créer des bibliothèques partagées dans le projet Android, il vous suffit de définir ces indicateurs de compilation dans votre cible:

  • PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
  • PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384

Pour créer des bibliothèques partagées qui ne font pas partie d'un projet Android, vous devez transmettre cet indicateur d'association:

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

Vérifier les binaires et les éléments prédéfinis pour l'alignement ELF de 16 Ko

Le meilleur moyen de vérifier l'alignement et le comportement lors de l'exécution consiste à effectuer un test et à l'exécuter sur un noyau compilé de 16 Ko. Toutefois, pour détecter certains problèmes plus tôt:

  • À partir d'Android W (version expérimentale AOSP), vous pouvez définir PRODUCT_CHECK_PREBUILT_MAX_PAGE_SIZE := true au moment de la compilation. Utilisez ignore_max_page_size: true dans Android.bp et LOCAL_IGNORE_MAX_PAGE_SIZE := true dans Android.mk pour les ignorer temporairement. Ces paramètres vérifient tous les éléments prédéfinis et vous permettent de détecter si l'un d'entre eux est mis à jour, mais n'est pas aligné en 16 Ko.

  • Vous pouvez exécuter atest elf_alignment_test qui vérifie l'alignement des fichiers ELF sur l'appareil sur les appareils équipés d'Android 15 (version expérimentale AOSP) ou version ultérieure.