Cette page récapitule les principales fonctionnalités de chaque version du noyau et fournit des liens vers des informations supplémentaires.
Nouvelles fonctionnalités du noyau 6.12
Cette section décrit les nouvelles fonctionnalités du noyau 6.12.
Profilage de l'allocation de mémoire
Pour comprendre l'utilisation de la mémoire, il est essentiel de savoir où les allocations sont effectuées.
Le noyau 6.12 inclut un nouveau système d'attribution de l'allocation de mémoire appelé profilage de l'allocation de mémoire (CONFIG_MEM_ALLOC_PROFILING
dans la configuration).
Avec le profilage de l'allocation de mémoire, chaque allocation est attribuée à une ligne source unique afin que les problèmes d'allocation puissent être identifiés rapidement.
De plus, le profilage de l'allocation de mémoire :
Utilisé lors de la phase d'ingénierie, mais disponible dans l'image GKI standard.
Vous pouvez l'activer à l'aide du paramètre de démarrage
sysctl.vm.mem_profiling
.Fonctionne à la fois pour les modules chargés et ceux intégrés au noyau.
io_uring plus rapide avec la lecture sans copie et multisérie
Dans le noyau 6.12, les modules statsd
et logd
utilisent sendfile zero-copy, ce qui améliore leurs performances.
De plus, cette version du noyau implémente la lecture multisaisie, où une seule opération de lecture peut récupérer plusieurs éléments de données simultanément, ce qui améliore les performances.
Amélioration des capacités et de la compatibilité du filtre de paquets Berkeley (BPF)
Dans le noyau 6.12, la chaîne d'outils BPF a été déplacée pour prendre en charge CO-RE et plusieurs fonctionnalités modernes. De plus, un nouveau chargeur BPF permet d'utiliser le BPF moderne pour les programmes qui font partie d'AOSP.
Exécution du proxy
L'exécution du proxy permet au planificateur d'emprunter des cycles de processeur à des processus de priorité élevée pour récupérer les verrous détenus par des processus de priorité inférieure. Cette fonctionnalité atténue les problèmes d'inversion de priorité.
Nouvelles fonctionnalités du noyau 6.6
Cette section décrit les nouvelles fonctionnalités du noyau 6.6.
Compatibilité avec Rust
Plusieurs projets du noyau 6.6 utilisent Rust.
Verrous par zone de mémoire virtuelle (VMA)
Le noyau 6.6 utilise des verrous par zone de mémoire virtuelle pour résoudre les problèmes de contention avec mmap_sem
(anciennement mmap_lock
). Par conséquent, les applications qui utilisent un grand nombre de threads peuvent voir leur temps de lancement réduit jusqu'à 20 %.
Le planificateur EEVDF (Earliest Eligible Virtual Deadline First) remplace CFS
L'EEVDF remplace le Completely Fair Scheduler (CFS) pour mieux équilibrer l'accès au processeur entre les tâches de courte et de longue durée.
Réduction de la consommation d'énergie grâce aux rappels RCU (Read Copy Update)
L'option RCU_LAZY
utilise une méthode de traitement par lot des rappels RCU basée sur un minuteur pour économiser de l'énergie. Pour un système peu chargé ou inactif, cette option peut réduire la consommation d'énergie de 5 à 10 %.
Meilleure compression de la mémoire ZRAM
Le nouveau paramètre de compilation CONFIG_ZRAM_MULTI_COMP
permet à ZRAM de recompresser les pages avec l'un des trois algorithmes alternatifs. Cette recompression réduit encore la mémoire compressée, ce qui libère de l'espace pour les tâches actives.
Nouvelles fonctionnalités du noyau 6.1
Cette section décrit les nouvelles fonctionnalités du noyau 6.1.
Sécurité renforcée grâce à l'intégrité du flux de contrôle du noyau (KCFI)
KCFI remplace l'intégrité du flux de contrôle (CFI), ce qui réduit le coût d'exécution et n'entraîne aucun coût de compilation. Le coût d'exécution réduit permet d'activer KCFI dans plus d'endroits que CFI, notamment les points de trace et les hooks de fournisseur.
En plus de KCFI, le noyau 6.1 introduit plusieurs fonctionnalités de sécurité, telles que la vérification stricte des limites memcpy
et les mesures d'atténuation des attaques par spéculation en ligne droite.
Pour en savoir plus sur KCFI, consultez Intégrité du flux de contrôle du noyau.
LRU multigénérationnel (MGLRU)
MGLRU a été ajouté au noyau 6.1 pour améliorer la gestion de la mémoire en identifiant mieux les pages réellement utilisées. Cette amélioration réduit la nécessité d'arrêter les applications lorsque le système manque de mémoire. Cette mise à jour améliore également l'expérience utilisateur, car la réactivité globale de l'appareil est meilleure.
L'implémentation de MGLRU inclut également la prise en charge d'un nouvel arbre d'érable RCU-safe, qui peut, dans certains cas, être utilisé pour remplacer l'arbre rouge-noir (rbtree). Lorsqu'il est utilisé, l'arbre Maple RCU-safe améliore les performances grâce à son empreinte plus faible et à son absence de verrouillage.
Pour en savoir plus sur MGLRU, consultez LRU multigénération.
Planification
La maintenance et la mise à jour du planificateur sont des aspects clés de l'amélioration du noyau. Voici quelques-unes des mises à jour du noyau dans la version 6.1 :
- Ajout de la planification compatible avec les clusters, qui améliore les performances en migrant vers des cœurs qui partagent le cache L2.
- Suppression de l'heuristique de marge énergétique inutile. En limitant certaines migrations, cette mise à jour améliore l'utilisation de l'énergie jusqu'à 5 %.
- Amélioration de l'équilibrage de charge pour réduire la latence de sortie de veille.
- Les périodes de grâce accélérées RCU ont été déplacées vers un kthread en temps réel. Cette mise à jour a permis de réduire considérablement les valeurs aberrantes de latence liées aux UCR.
Graphiques
Le noyau 6.1 contient de nouvelles méthodes pour dma-buf permettant d'exporter et d'importer des fichiers de synchronisation, ce qui correspond aux besoins de l'API Vulcan Video.
La nouvelle méthode futex_waitv()
simplifie le portage de jeux depuis d'autres plates-formes en attendant plusieurs futex simultanément.
Outils de débogage
Utilisez Kernel Concurrency SANitizer (KCSAN) dans les versions de débogage pour identifier les conditions de concurrence dans le code du noyau.
Utilisez également le Kernel Memory SANitizer (KMSAN) pour trouver les valeurs non initialisées dans le noyau.
Améliorations de la compatibilité avec ARM64
Le noyau 6.1 apporte plusieurs améliorations à l'architecture ARM64, y compris :
- Compatibilité avec les extensions de minuteur ARMv8.6
- Compatibilité avec l'algorithme d'authentification de pointeur QARMA3
- Prise en charge initiale de l'extension matricielle évolutive (SME) ARMv9
- Améliorations apportées à la fonctionnalité de correction des alternatives, ce qui réduit la taille de l'image du noyau