Avec cette version, le support matériel est étendu grâce à des pilotes mis à jour. Parmi les appareils pris en charge figurent les tablettes Vexia EDU ATLA 10 et Surface Pro 9 5G, le chipset GPU Adreno A663, Allwinner H616, AMD ACP 6.3, Qualcomm SM8750, les puces audio RealTek RT721, les écrans tactiles NT36672A, les contrôleurs AMD I3C et le périphérique réseau NVIDIA Mellanox « MLX5 ». En outre, cette mise à jour introduit un nouveau pilote virtual-cpufreq pour les noyaux invités, ce qui améliore les performances des charges de travail et des machines virtuelles.
Poursuivant l'intégration progressive du langage de programmation Rust, le noyau 6.13 inclut des fonctionnalités telles que le support des événements de trace en Rust, ainsi qu'un nouvel allocateur de mémoire. Ces ajouts facilitent le développement de modules du noyau en Rust, offrant des garanties de sécurité mémoire accrues et une meilleure gestion de la concurrence.
Modèle de préemption paresseuse
Le noyau 6.13 introduit le support de la préemption paresseuse, visant à simplifier la logique de préemption du noyau et à optimiser les performances du planificateur de tâches. Cette approche permet de différer certaines requêtes de préemption jusqu'à des moments plus opportuns, améliorant ainsi l'efficacité globale du système. CONFIG_PREEMPT_LAZY=y est disponible pour les architectures x86, RISC-V et LoongArch.
Pour ceux qui sont intéressé par le fonctionnement de la préemption dans le noyau et sur la façon dont la préemption paresseuse bouleverse les choses (pour le meilleur), Jonathan Corbet a publié un excellent billet explicatif sur le sujet. En voici un extrait :
Les noyaux actuels disposent de quatre modes différents qui régissent le moment où une tâche peut être préemptée en faveur d'une autre. PREEMPT_NONE, le mode le plus simple, n'autorise la préemption que lorsque la tâche en cours a épuisé sa tranche de temps. PREEMPT_VOLUNTARY ajoute un grand nombre de points dans le noyau où la préemption peut se produire si nécessaire. PREEMPT_FULL permet la préemption à presque n'importe quel moment, sauf aux endroits du noyau qui l'empêchent, comme lorsqu'un spinlock est détenu. Enfin, PREEMPT_RT donne la priorité à la préemption sur la plupart des autres éléments, rendant même préemptible la majeure partie du code contenant un spinlock.
Un niveau de préemption plus élevé permet au système de répondre plus rapidement aux événements ; qu'il s'agisse du mouvement d'une souris ou d'un signal de « fusion imminente » provenant d'un réacteur nucléaire, une réponse plus rapide a tendance à être plus gratifiante. Mais un niveau de préemption plus élevé peut nuire au débit global du système ; les charges de travail comportant un grand nombre de tâches à long terme et à forte intensité de CPU ont tendance à bénéficier d'un minimum de perturbations. Une préemption plus fréquente peut également entraîner une contention plus importante des verrous. C'est pourquoi il existe différents modes ; le mode de préemption optimal varie en fonction de la charge de travail.
Un niveau de préemption plus élevé permet au système de répondre plus rapidement aux événements ; qu'il s'agisse du mouvement d'une souris ou d'un signal de « fusion imminente » provenant d'un réacteur nucléaire, une réponse plus rapide a tendance à être plus gratifiante. Mais un niveau de préemption plus élevé peut nuire au débit global du système ; les charges de travail comportant un grand nombre de tâches à long terme et à forte intensité de CPU ont tendance à bénéficier d'un minimum de perturbations. Une préemption plus fréquente peut également entraîner une contention plus importante des verrous. C'est pourquoi il existe différents modes ; le mode de préemption optimal varie en fonction de la charge de travail.
Améliorations des systèmes de fichiers
Plusieurs systèmes de fichiers bénéficient d'améliorations notables dans cette version :
- F2FS : Introduction de la fonctionnalité d'aliasing de périphériques, permettant de créer des partitions tout en récupérant l'espace en supprimant les fichiers aliasés dans le répertoire racine.
- XFS : Support initial des opérations d'écriture atomique, renforçant la fiabilité des transactions d'écriture.
- EXT4 : Nombreuses corrections de bugs et améliorations mineures, contribuant à une stabilité accrue du système de fichiers.
Christian Brauner de Microsoft explique (sic) : « une écriture atomique est une écriture émise avec une protection d'écriture déchirée. Cela signifie qu'en cas de panne de courant ou de défaillance matérielle, toutes les données de l'écriture, ou aucune, seront stockées, jamais un mélange d'anciennes et de nouvelles données ».
Du point de vue du système de fichiers, le système de fichiers F2FS a reçu une fonction d'alias de périphérique qui permet de découper des partitions mais de récupérer l'espace en supprimant les fichiers alias dans le répertoire racine, tandis que le système de fichiers XFS a reçu une prise en charge de base pour les opérations d'écriture atomique. En revanche, le système de fichiers FUSE a bénéficié de conversions de pages en folio et d'une prise en charge de la configuration de la taille maximale des requêtes FUSE à l'aide d'un sysctl.
De plus, le système de fichiers EXT4 a reçu un grand nombre de corrections de bogues et de nettoyages divers, le système Btrfs prend désormais en charge la compression transparente à l'aide de l'algorithme LZ4. Les utilisateurs de ces systèmes de fichiers bénéficient ainsi d'un gain d'espace significatif et d'une amélioration des performances d'entrée/sortie, tandis que le système de fichiers exFAT a bénéficié d'une amélioration des performances en réduisant la traversée de la chaîne FAT..
Support matériel amélioré
Le noyau 6.13 étend la compatibilité matérielle avec l'ajout et la mise à jour de pilotes pour divers dispositifs :
- Processeurs : Support des processeurs Intel ArrowLake-H et Intel Panther Lake, ainsi que des processeurs AMD EPYC 9005 utilisant désormais le pilote amd-pstate par défaut pour une meilleure efficacité énergétique.
- Graphiques : Améliorations du pilote V3D pour les Raspberry Pi, offrant un support des superpages matérielles et des performances graphiques accrues.
- Périphériques : Prise en charge de nouveaux périphériques tels que les tablettes Vexia EDU ATLA 10 et Surface Pro 9 5G, le chipset GPU Adreno A663, les écrans tactiles NT36672A, et les contrôleurs AMD I3C.
Le noyau Linux 6.13 fait du pilote amd-pstate cpufreq le pilote par défaut sur certains processeurs AMD Epyc récents, ajoute la prise en charge des seuils thermiques qui peuvent être ajoutés et supprimés de l'espace utilisateur via netlink ainsi qu'une mise à jour de la bibliothèque correspondante, et met en œuvre une nouvelle fonctionnalité dans le périphérique de caractère uAPI pour notifier l'espace utilisateur des changements déclenchés par les utilisateurs dans le noyau.
En outre, elle ajoute la prise en charge PMU pour les processeurs Intel ArrowLake-H et Intel Panther Lake, la prise en charge de la spécification MIPI DisCo 2.0 dans le sous-système SoundWire, un nouveau mode pass-through pour les accélérateurs liés à l'audio, et la prise en charge des superpages matérielles dans le pilote V3D utilisé pour les ordinateurs Raspberry Pi.
Comme prévu, le noyau Linux 6.13 apporte une meilleure prise en charge du matériel avec de nouveaux pilotes et des mises à jour pour divers périphériques, notamment les tablettes Vexia EDU ATLA 10 et Surface Pro 9 5G, les chipsets GPU Adreno A663, Allwinner H616, AMD ACP 6.3, Qualcomm SM8750 et les puces audio RealTek RT721, les écrans tactiles NT36672A, les contrôleurs AMD I3C, les périphériques réseau NVIDIA Mellanox « MLX5 », et bien d'autres encore. Il y a également un nouveau pilote virtual-cpufreq pour les noyaux invités afin d'améliorer les performances et la puissance des charges de travail pour les machines virtuelles.
Enfin, Linux 6.13 apporte des capacités de calcul en temps réel à l'architecture LoongArch, ainsi que la prise en charge du masquage des pointeurs dans l'espace utilisateur, la prise en charge de l'analyse des performances des accès mal alignés vectoriels et la prise en charge de qspinlock sur les systèmes avec Zacas et Zabha pour l'architecture RISC-V, et la prise en charge des événements de traçage dans Rust, ainsi qu'un nouvel allocateur de mémoire.
Autres améliorations
Le redimensionnement dynamique des anneaux de mémoire partagée dans le sous-système io_uring est intégré, grâce à la commande IORING_REGISTER_RING_RESIZE. Il s'agit d'une véritable aubaine, car il est possible de commencer avec des anneaux plus petits (c'est-à-dire qui utilisent moins de mémoire), puis d'augmenter la taille au fur et à mesure que les demandes d'E/S s'accroissent.
Par ailleurs, une nouvelle opération ioctl() PIDFD_GET_INFO permet de récupérer des informations sur un processus représenté par un pidfd, et de produire des noyaux plus performants grâce à l'optimisation AutoFDO (Automatic Feedback-Directed Optimization) et à l'optimisation Propeller.
Le noyau Linux 6.13 voit la limite de simultanéité maximale de la file d'attente passer de 512 à 2048. Cette augmentation de 4 fois peut contribuer à améliorer la stabilité en réduisant les ralentissements causés par les limites de la file d'attente et, éventuellement, à améliorer les performances des charges de travail lourdes de la file d'attente.
Bien que les utilisateurs réguliers d'ordinateurs de bureau ne puissent pas en bénéficier (directement), il s'agit d'un changement important qui sera fortement ressenti sur les installations de serveurs et dans les opérations informatiques à grande échelle.
Ces changements dans le noyau de Linux 6.13 nous rappellent que Linux reste fluide et adaptable, que ses mainteneurs ne sont pas précieux et ne s'attachent pas à certaines approches. La valeur technique l'emporte toujours, même pour les propositions de changements importants.
Outre les mises à jour les plus importantes, le noyau Linux 6.13 apporte plusieurs améliorations mineures. Il s'agit notamment d'une meilleure prise en charge du débogage USB4, de la compatibilité avec les anciens iPads et iPhones, de la prise en charge du noyau en temps réel pour les processeurs LoongArch et de la prise en charge des cartes mémoire Secure Digital Ultra Capacity. Le nouveau noyau offre également des améliorations en matière de réseau. Par exemple, la prise en charge de la norme WiFi 7 (802.11be) a été ajoutée, ce qui permet des connexions sans fil plus rapides et plus fiables.
Sources : annonce Linus Torvalds, La longue route vers la préemption paresseuse, note de version, Christian Brauner
Et vous ?
Quelle est la fonctionnalité introduite par le noyau 6.13 que vous trouvez la plus prometteuse, et pourquoi ?
Pensez-vous que l'intégration croissante de Rust dans le noyau Linux pourrait remplacer C à terme ? Quels sont les avantages ou les risques liés à cette transition ?
La préemption paresseuse pourrait-elle réellement avoir un impact mesurable sur les performances pour les utilisateurs finaux ?