Notes de version du kernel

Cette page récapitule les principales fonctionnalités de chaque version du kernel et fournit des liens vers des informations supplémentaires.

Nouvelles fonctionnalités du kernel 6.12

Cette section décrit les nouvelles fonctionnalités du kernel 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 kernel 6.12 inclut un nouveau système d'attribution d'allocation de mémoire appelé profilage d'allocation de mémoire (CONFIG_MEM_ALLOC_PROFILING dans la configuration). Avec le profilage d'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é pendant la phase d'ingénierie, mais disponible dans l'image GKI standard.

  • Peut être activé à l'aide du paramètre de démarrage sysctl.vm.mem_profiling.

  • Fonctionne à la fois pour les modules dans le noyau et les modules chargés.

io_uring plus rapide avec la lecture sans copie et multishot

Dans le kernel 6.12, les modules statsd et logd utilisent la copie zéro de sendfile, ce qui améliore leurs performances.

De plus, cette version du kernel implémente la lecture multishot, 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 fonctionnalités et de la prise en charge du filtre de paquets Berkeley (BPF)

Dans le kernel 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 faisant partie d'AOSP.

Exécution du proxy

L'exécution par proxy permet à l'ordonnanceur 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 kernel 6.6

Cette section décrit les nouvelles fonctionnalités du kernel 6.6.

Compatibilité avec Rust

Plusieurs projets du kernel 6.6 utilisent Rust.

Verrous par zone de mémoire virtuelle (VMA)

Le kernel 6.6 utilise des verrous par zone de mémoire virtuelle pour résoudre les problèmes de conflit avec mmap_sem (anciennement mmap_lock). Par conséquent, les temps de lancement des applications qui utilisent un grand nombre de threads peuvent être réduits de 20%.

Le planificateur EEVDF (Earliest Eligible Virtual Deadline First) remplace CFS

L'EEVDF remplace le planificateur complètement équitable (CFS) pour mieux équilibrer l'accès au processeur entre les tâches courtes et longues.

Réduction de la consommation d'énergie des rappels de mise à jour de la copie de lecture (RCU)

L'option RCU_LAZY utilise une méthode de traitement par lot de 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 offre plus d'espace libre pour les tâches actives.

Nouvelles fonctionnalités du kernel 6.1

Cette section explique les nouvelles fonctionnalités du kernel 6.1.

Sécurité plus rapide avec 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 les coûts d'exécution et n'entraîne aucun coût de compilation. La réduction des coûts d'exécution permet d'activer KCFI dans plus d'endroits que CFI, en particulier les points de trace et les hooks du fournisseur.

En plus de KCFI, le kernel 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 la KCFI, consultez la section Intégrité du flux de contrôle du kernel.

MGLRU (Multi-Generational LRU)

MGLRU a été ajouté au kernel 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 le besoin d'arrêter les applications lorsque le système est confronté à une pénurie 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 compatible avec RCU, qui peut, dans certains cas, remplacer l'arbre rouge-noir (rbtree). Lorsqu'il est utilisé, l'érable compatible avec les RCU améliore les performances en raison de son empreinte plus faible et de son absence de verrouillage.

Pour en savoir plus sur la MGLRU, consultez la section Multi-Gen LRU.

Planification

La maintenance et la mise à jour du planificateur sont un aspect clé du travail visant à améliorer le noyau. Les mises à jour du noyau dans la version 6.1 incluent les suivantes:

  • Ajout d'une planification tenant compte du cluster, 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 réveil
  • Déplacement des délais de grâce accélérés de la RCU vers un kthread en temps réel. Cette mise à jour a considérablement réduit les valeurs aberrantes de latence liées à la RCU.

Graphiques

Le kernel 6.1 contient de nouvelles méthodes pour dma-buf pour l'exportation et l'importation de fichiers de synchronisation, conformément aux besoins de l'API Vulcan Video.

La nouvelle méthode futex_waitv() simplifie le portage de jeux à partir d'autres plates-formes en attendant plusieurs futexes simultanément.

Outils de débogage

Utilisez KCSAN (Kernel Concurrency SANitizer) dans les builds de débogage pour identifier les conflits dans le code du kernel.

De plus, utilisez le Kernel Memory SANitizer (KMSAN) pour rechercher les valeurs non initialisées dans le noyau.

Améliorations de la compatibilité avec ARM64

Le noyau 6.1 apporte plusieurs améliorations pour l'architecture ARM64, y compris les suivantes:

  • Prise en charge des extensions de minuteur ARMv8.6
  • Compatibilité avec l'algorithme d'authentification des pointeurs QARMA3
  • Prise en charge initiale de l'extension matricielle évolutive (SME, Scalable Matrix Extension) ARMv9
  • Améliorations apportées au correctif de fonctionnalités alternatives, ce qui réduit la taille de l'image du noyau