- La page est l’unité minimale utilisée par le système d’exploitation pour gérer la mémoire
- La plupart des CPU prennent en charge une taille de page de 4 KB, et Android OS ainsi que les applications sont optimisés pour cette taille de page de 4 KB
- Les CPU ARM prennent en charge une taille de page de 16 KB, et lorsque Android utilise cette taille, les performances s’améliorent de 5 à 10 % tandis que l’utilisation mémoire augmente d’environ 9 %
- Afin d’améliorer les performances globales du système d’exploitation et de permettre aux fabricants d’appareils de choisir ce compromis, Android 15 peut fonctionner avec une taille de page de 4 KB ou de 16 KB
- Les premiers systèmes Android prenant en charge une taille de page de 16 KB seront proposés comme option développeur sur certains appareils
Détails techniques sur la taille de page de 16 KB
- La plupart des CPU disposent d’un matériel dédié appelé Memory Management Unit (MMU) qui convertit les adresses utilisées par les programmes en emplacements physiques en mémoire
- Cette conversion s’effectue selon l’unité de la taille de page
- Chaque fois qu’un programme a besoin de plus de mémoire, le système d’exploitation doit intervenir pour remplir une entrée de « table des pages » et attribuer ce bloc mémoire au processus
- Si la taille de page est 4 fois plus grande, le travail de gestion est réduit d’un facteur 4.
- Le système peut donc consacrer davantage de temps à l’affichage fluide des vidéos, au bon fonctionnement des jeux et à l’exécution fluide des applications, et moins de temps aux tâches administratives de bas niveau du système d’exploitation
- La taille de page n’est pas une Application Binary Interface (ABI)
- Autrement dit, si l’application est modifiée pour être indépendante de la taille de page, le même binaire applicatif peut fonctionner sur des appareils 4 KB comme 16 KB
- Dans Android 15, Android a été refactorisé depuis la base afin de pouvoir fonctionner avec différentes tailles de page et d’être indépendant de cette contrainte
Principales modifications de l’OS
- Appareils basés sur Android 15 :
- La macro
PAGE_SIZE à la compilation est remplacée par getpagesize(2) à l’exécution
- Tous les binaires de l’OS sont alignés sur 16 KB (les applications/bibliothèques tierces peuvent ne pas être alignées sur 16 KB)
- Tous les binaires de l’OS sont construits avec un segment chargeable distinct afin de pouvoir lire toutes les zones mémoire mappées dans le processus, ce dont certaines applications dépendent
- Plusieurs composants de l’OS ont été réécrits pour ne pas supposer une taille de page donnée et pour être optimisés pour des tailles de page plus grandes
Système de fichiers
- Pour de bonnes performances, la taille des blocs du système de fichiers doit correspondre à la taille de page. Les systèmes de fichiers EROFS et F2FS, ainsi que la couche de stockage UFS, sont compatibles 16 KB
- Sur les systèmes 4 KB, la taille des exécutables ELF augmente à cause du padding ajouté pour l’alignement 16 KB, mais plusieurs optimisations permettent d’éviter ce coût
- Le système de fichiers sparse en lecture seule empêche que les pages de zéros générées pour le padding additionnel requis par l’alignement 16 KB soient écrites sur disque
- Les systèmes de fichiers en lecture/écriture traitent les pages de zéros au cas par cas
Gestion de la mémoire
- Le page cache Linux a été modifié pour ne pas précharger ces espaces de padding supplémentaires, ce qui évite des chargements mémoire inutiles
- Ces pages correspondent à du padding vide, que le programme ne lit jamais. C’est simplement un espace situé entre les parties utilisables du programme à des fins d’alignement
Noyau Linux
- Le noyau Linux est étroitement lié à une taille de page spécifique ; il faut donc choisir la taille de page à utiliser lors de la compilation du noyau, tandis que le reste du système d’exploitation reste identique
Applications Android
- Toute application comportant du code natif ou des dépendances doit être recompilée pour être compatible avec les appareils à taille de page de 16 KB
- Comme la plupart des applications Android et du code natif dans les SDK ont été construits en supposant une taille de page de 4 KB, il faut les réaligner sur 16 KB pour que les binaires soient compatibles à la fois avec les appareils 4 KB et 16 KB
- Pour la plupart des applications et des SDK, il s’agit d’un processus en 2 étapes :
- Recompiler le code natif avec un alignement 16 KB
- Tester sur appareil/émulateur 16 KB et corriger les éventuelles hypothèses codées en dur sur la taille de page
Développer pour des appareils 16 KB
- Les appareils Android actuellement commercialisés ne prennent pas en charge une taille de page de 16 KB
- Pour résoudre ce problème, des actions sont en cours avec des partenaires afin d’activer des options développeur sur des appareils existants
- Une prise en charge de la taille de page de 16 KB sera proposée via une option développeur
- Une cible d’émulateur 16 KB est disponible dans Android Studio
Option développeur 16 KB
- Dans Android 15, une option développeur permet de basculer entre les tailles de page de 16 KB et de 4 KB
- Disponible sur Pixel 8 et Pixel 8 Pro, avec une prise en charge prévue sur d’autres appareils
- Pour utiliser l’option développeur, il faut réinitialiser l’appareil et déverrouiller le bootloader
16 KB sur un desktop x86_64
- Il est possible d’émuler une taille de page de 16 KB dans l’émulateur x86_64
- Il est possible de télécharger et d’exécuter l’émulateur de pages 16 KB depuis le SDK Manager d’Android Studio
Avenir
- Android 15 et AOSP prennent en charge les pages de 16 KB, avec une implémentation possible via l’option développeur
- Il est attendu que les développeurs d’applications et de SDK utilisent cette option pour préparer des appareils Android plus performants et plus efficaces
Avis de GN⁺
- Le passage à une taille de page de 16 KB constitue une évolution importante pour améliorer les performances et l’efficacité des appareils Android
- L’utilisation d’une taille de page plus grande peut réduire la surcharge liée à la gestion mémoire et améliorer les performances globales du système
- Cependant, ce changement peut aussi entraîner des problèmes de compatibilité, en particulier pour les applications et SDK qui dépendent du code natif ; les développeurs doivent donc mettre à jour leurs logiciels en tenant compte de la taille de page de 16 KB
- Google fournit aux développeurs des outils pour tester et préparer cette transition grâce à l’option développeur 16 KB et à la prise en charge dans l’émulateur
- Les pages de 16 KB ne s’appliquent actuellement qu’aux appareils Android basés sur ARM, mais elles pourraient à l’avenir être étendues à d’autres plateformes matérielles
- En plus d’adapter leurs applications et SDK à la taille de page de 16 KB, les développeurs doivent également prendre en compte l’impact d’une taille de page plus grande sur l’utilisation mémoire et effectuer des optimisations si nécessaire
- La transition vers les pages de 16 KB est un effort important qui nécessite une collaboration à l’échelle de l’écosystème Android, mais elle finira par offrir de meilleures performances et une meilleure efficacité aux utilisateurs
2 commentaires
Commentaires sur Hacker News
Un travail a récemment commencé dans le noyau Debian pour compiler le noyau ARM64 avec une taille de page de 16 KiB
Les premiers systèmes Android avec prise en charge du 16 KB devraient être proposés sur certains appareils via les options développeur
Je me demande dans quels cas une application n’est pas indépendante de la taille de page
Utiliser 16 KB par défaut sans prendre en charge simultanément les processus 4 KB et 16 KB pose problème
iOS utilise des pages de 16 KB depuis la transition vers le 64 bits
Par le passé, RHEL a essayé des pages de 64 KB sur AARCH64, mais a finalement fait marche arrière à cause de nombreux bugs
Je me demande dans quelle mesure Asahi a aidé sur le travail du noyau et de l’écosystème pour activer les pages de 16 KB
iOS utilise des pages de 16K depuis longtemps
Je me demande si l’augmentation de la taille des pages a un impact négatif sur les performances d’E/S ou sur la durée de vie du flash
Des gains de performance ont été mesurés
Une amélioration de performance de 5 à 10 % semble énorme
hugepage, je pense qu’un fonctionnement en 16k ne poserait pas de problème particulier. Quant aux problèmes pouvant survenir en dehors du noyau, dans les fonctionnalités d’Android ou dans les applications, ce sera à Google de les gérer.