Après deux mois de développement, Linus Torvalds a présenté la version 7.1 du noyau Linux. Parmi les changements les plus notables : un nouveau pilote ntfsplus, la première étape de l’abandon du support des CPU i486, la suppression des anciens adaptateurs Ethernet, la suppression des protocoles ISDN et AX.25, l'activation par défaut du mécanisme Intel FRED, le support des gestionnaires BPF dans io_uring, l'optimisation de la sous-système de pagination, le support des sous-planificateurs dans sched_ext, l'entrée/sortie en mode zero-copy dans le pilote ublk, l'opération ioctl « shutdown » dans Btrfs, le changement dynamique de mode de performance dans le pilote amd-pstate, et le support de xattr pour les sockets Unix.
La nouvelle version inclut 17275 corrections de la part de 2589 développeurs.
La taille du patch est de 57 Mo (les modifications ont touché 13528 fichiers, ajouté 751785 lignes de code et supprimé 405916 lignes). La dernière version comportait 15624 corrections de 2477 développeurs, la taille du patch étant de 56 Mo. Environ 41 % de toutes les modifications présentées dans la version 7.1 concernent des pilotes de périphériques, environ 12 % concernent la mise à jour de code spécifique aux architectures matérielles, 14 % concernent la pile réseau, 5 % concernent les systèmes de fichiers et 3 % concernent les sous-systèmes internes du noyau.
Les principales innovations dans le noyau 7.1 (1, 2, 3) :
- Sous-système de disque, entrée/sortie et systèmes de fichiers
- Une nouvelle implémentation du système de fichiers NTFS a été adoptée - ntfsplus, basée sur le code de l’ancien pilote classique ntfs retiré du noyau. L’ancien pilote a été retravaillé, étendu pour permettre l’écriture de données et adapté pour prendre en charge les fonctionnalités modernes, telles que l’utilisation de folios de pages mémoire au lieu de la structure buffer_head. Le nouveau pilote a mis en œuvre l'allocation différée de blocs, permettant d'atteindre de hautes performances pour les opérations d'écriture et de réduire la fragmentation. Pour les opérations d'écriture/lecture en mode tampon, les entrées/sorties directes, le mappage d'extents et les opérations d'écriture/lecture de pages, la bibliothèque iomap a été utilisée. Dans les tests iozone, le pilote ntfsplus s'est révélé 3 à 5 % plus rapide que ntfs3 lors des écritures en mode mono-thread et de 35 à 110 % plus rapide lors de l'utilisation de 4 threads. La vitesse de lecture de ntfsplus et ntfs3 est à peu près équivalente. Le pilote ntfs3 reste dans le noyau, où des corrections et de légères améliorations ont été apportées.
- Ajout du support pour la génération et la vérification des données de contrôle d'intégrité T10 au niveau du système de fichiers plutôt qu'au niveau du périphérique block, permettant d'améliorer les performances des opérations de lecture.
- Dans le pilote de périphériques block ublk, permettant de déplacer la logique spécifique du côté du processus dans l'espace utilisateur, le support des entrées/sorties via la mémoire partagée sans copie de données entre les buffers (mode zero-copy) a été ajouté.
- Pour les périphériques block auto-chiffrants SED-OPAL, des ioctl ont été ajoutés pour contrôler le mode Single User, et la commande STACK_RESET a été mise en œuvre.
- Dans Btrfs, le support de l'opération ioctl 'shutdown' a été déclaré stable, permettant de mettre le système de fichiers dans un état où une tentative de finalisation des opérations déjà en cours est effectuée, mais toutes les nouvelles opérations sont bloquées.
- Dans exfat, la possibilité de réserver des zones vides via l'appel fallocate() a été mise en œuvre.
- Dans le système de fichiers CIFS, le support de la création de fichiers temporaires avec le flag O_TMPFILE a été ajouté.
- Dans l'appel système fsmount(), l'option FSMOUNT_NAMESPACE a été ajoutée, créant un nouvel espace de noms pour les points de montage du système de fichiers monté. Les appels systèmes clone3() et unshare() ont été ajoutés avec des flags pour renvoyer le nouvel espace de noms des points de montage, contenant uniquement un faux système de fichiers vide basé sur nullfs, le pilote fs-dax avec une interface de système de fichiers pour les périphériques DAX (Direct Access).
- Dans le serveur NFS, une protection contre les attaques de devinette de descripteurs de fichiers a été ajoutée, mise en œuvre via la certification des descripteurs par une signature cryptographique. La protection est activée via l'option de montage sign_fh.
- Ajout d'un pilote symbolique fs-dax, fournissant une interface pour interagir avec les périphériques DAX (Direct Access), supportant le fonctionnement en contournant le cache de pages. Cette interface est nécessaire pour l'intégration dans le noyau du système de fichiers famfs, qui est placé en mémoire.
- Dans le système de fichiers Ceph, la collecte de métriques d'input/output liée aux sous-partitions a été mise en œuvre.
- Mémoire et services système
- La première série de changements a été adoptée pour mettre fin au support des processeurs i486. Les options pour la compilation du noyau avec support pour les processeurs 486DX, 486SX et AMD ELAN (CONFIG_M486, CONFIG_M486SX et CONFIG_MELAN) ont été supprimées de Kconfig, et les options de compilation pour les systèmes i486 (-march=i486) ont été exclues de Makefile. Le code pour le support effectif des processeurs i486 reste dans le noyau, mais la compilation pour de tels systèmes nécessitera maintenant l'application de patches aux fichiers de construction. Les raisons de la suppression du support des processeurs i486 sont liées au désir d'alléger le noyau des codes complexes qui émulait certaines opérations matérielles, comme CX8 (comparaison et échange de 8 octets) et TSC (compteur de cycles CPU utilisé dans le planificateur de tâches).
- Dans le driver amd-pstate, utilisé pour gérer la consommation d'énergie sur les systèmes avec processeurs AMD, un changement dynamique des paramètres de performance et une adaptation du comportement de gestion de l'énergie en fonction de l'alimentation secteur ou de la batterie ont été implémentés. Lors de la connexion secteur, le mode "performance" est désormais activé, tandis qu'en fonctionnement sur batterie, c'est le mode "balance_performance" qui est actif.
- Le mécanisme Intel FRED (Flexible Return and Event Delivery) est activé par défaut, permettant d'améliorer l'efficacité et la fiabilité de la livraison des informations sur les événements de bas niveau. L'augmentation des performances et la réduction des latences sont assurées par le retour des événements via l'instruction processeur IRET au lieu de transmettre les événements via la table IDT (Interrupt Descriptor Table). La fiabilité est accrue grâce à un traitement distinct de la réception des événements dans le contexte du noyau et dans le contexte utilisateur, la protection contre l'exécution imbriquée de NMI et la sauvegarde dans le cadre élargi de la pile de tous les registres CPU liés à l'exception.
- Le sous-système perf a été doté du support des blocs de surveillance de performance de la mémoire (PMU - Performance Monitoring Unit), utilisés dans les SoC NVIDIA Tegra410.
- L'exécution des opérations futex a été accélérée sur les systèmes ARM, grâce à l'utilisation des instructions Arm 9.6 LSUI, permettant au noyau d'accéder à la mémoire de l'espace utilisateur sans désactiver préalablement le mode de protection PAN (Privileged Access Never).
- Sur les systèmes équipés de processeurs ARM, le support de l'extension de l'architecture MPAM (Memory System Resource Partitioning and Monitoring) a été amélioré, et la possibilité de l'utiliser dans l'espace utilisateur pour la gestion des ressources via le mécanisme resctrl a été ajoutée. MPAM permet de marquer chaque accès à la mémoire avec un identifiant de partition (PARTID, Partition ID) et un identifiant de groupe de surveillance (PMG, Monitoring Group ID). En lien avec le PARTID, il est possible de limiter la consommation de ressources, telles que la bande passante mémoire ou la taille du cache, afin qu'un groupe de tâches ne monopolise pas toutes les ressources. Dans le cadre du suivi, la combinaison PMG et PARTID peut être utilisée pour surveiller la consommation des ressources mémoire sous certaines charges de travail.
- La possibilité d'utiliser le mode temps réel (PREEMPT_RT) sur les processeurs ARM 32 bits a été ajoutée. Auparavant, le support de PREEMPT_RT était limité aux architectures x86 et x86-64, ARM64, RISC-V et LoongArch.
- De nouveaux drapeaux ont été ajoutés à l'appel système clone3() : CLONE_NNP — interdiction d'obtenir de nouveaux privilèges dans le processus créé ; CLONE_AUTOREAP — terminaison automatique du processus au lieu de le transformer en processus zombie jusqu'à ce que la fonction wait() soit appelée par le processus parent ;
CLONE_PIDFD_AUTOKILL — terminaison du processus enfant si le descripteur pidfd qui lui est associé est fermé (par exemple, lors de la terminaison du processus parent). - Pour chaque module du noyau, un fichier import_ns a été ajouté dans le répertoire /sys/module, contenant la liste des espaces de noms de symboles importés.
- Dans le système d'E/S asynchrone io_uring, le support de l'utilisation de la sous-système BPF pour créer des gestionnaires a été ajouté. Par exemple, il est possible de remplacer la boucle principale de dispatching par un programme BPF.
- Dans la sous-système BPF, l'analyse de l'utilisation de la pile a été modernisée, ce qui a considérablement accéléré la vérification par le vérificateur de nombreux programmes BPF.
- Dans le but d'optimiser les performances, la sous-système hrtimer (high resolution timer) a été réécrite. Le planificateur de tâches peut désormais utiliser des minuteries haute résolution sans perte de performance, au lieu de minuteries moins précises.
- La transition des modifications de la branche Rust-for-Linux, concernant l'utilisation du langage Rust comme deuxième langue pour le développement de pilotes et de modules du noyau, a été poursuivie (le support de Rust n'est pas activé par défaut et n'entraîne pas l'inclusion de Rust parmi les dépendances de construction obligatoires du noyau). Jusqu'à la version 1.85 (fournie dans Debian 13), les exigences de version de Rust nécessaires pour compiler les composants du noyau ont été relevées. Une option Kconfig expérimentale CONFIG_RUST_INLINE_HELPERS a été ajoutée pour intégrer des wrappers C dans le code Rust lors de la compilation (l'optimisation a accéléré le fonctionnement du pilote de bloc null de 2 %). Le macro ‘const_assert!’ a été ajouté. Les fonctionnalités des modules ‘sizes’, ‘clk’, ‘ptr’, ‘sync’, ‘error’ ont été élargies.
- Dans le mécanisme SCHED_EXT, qui permet d'utiliser BPF pour créer des planificateurs CPU, une fonction initiale pour la création de planificateurs imbriqués (sub-scheduler) a été ajoutée, permettant à chaque cgroup d'utiliser son propre planificateur de tâches.
- L'optimisation du sous-système de swap a été poursuivie. L'ancienne structure swap_map a été remplacée par le mécanisme « Swap Table ». Ce changement a permis d'améliorer les performances et de réduire la consommation de mémoire dans le sous-système de swap.
- Dans le sous-système DAMON (Data Access MONitor), qui permet de suivre l'accès des processus aux données en mémoire vive (par exemple, il est possible de savoir quelles zones de mémoire un processus a accédées et quelles zones sont restées inutilisées), un support pour divers algorithmes d'auto-optimisation des quotas a été ajouté.
- Dans le sous-système de traçage, le concept de tampons circulaires externes a été mis en œuvre, permettant d'obtenir des données de traçage de machines virtuelles. Cette possibilité est activée dans les hyperviseurs KVM et nVHE pour transférer des données de traçage du système invité vers le côté hôte.
- Dans le sous-système RV (Runtime Verification), destiné à vérifier le bon fonctionnement des systèmes hautement fiables, des composants de surveillance « stall » ont été ajoutés pour suivre les tâches dont l'exécution a été temporairement suspendue ou bloquée, et « deadline » pour analyser le comportement du planificateur de tâches.
- Virtualisation et sécurité
- Par défaut, le drapeau PROC_MEM_FORCE_PTRACE est activé, permettant de contourner les droits d'accès à la mémoire d'un processus via le fichier /proc/PID/mem uniquement pour les processus utilisant l'appel système ptrace() pour le débogage.
- Un nouveau jeu de hooks a été ajouté pour les modules LSM (Linux Security Module), facilitant la mise en œuvre des politiques pour les systèmes de fichiers superposés, tels que overlayfs. Un hook a également été ajouté à LSM pour gérer l'accès aux sockets Unix, utilisé dans le module LSM Landlock pour attribuer des politiques d'accès aux sockets Unix.
- La bibliothèque cryptographique intégrée lib/crypto, offrant des fonctions plus simples et plus rapides que celles de l'API cryptographique traditionnelle, a ajouté la prise en charge des algorithmes AES-CMAC, AES-XCBC-MAC, AES-CBC-MAC, GHASH et SM3. La documentation concernant lib/crypto a été ajoutée.
- Le mode pKVM (Protected KVM) a été implémenté pour une isolation stricte de la mémoire anonyme en utilisant les extensions de virtualisation pour l'architecture AArch64. Dans ce mode, les pages de mémoire de l'invité sont exclues de la table d'adresses virtuelles du système hôte.
- Le hyperviseur KVM a ajouté la prise en charge de la cinquième version du contrôleur virtuel d'interruptions ARM (VGICv5 - ARM Virtual Generic Interrupt Controller v5).
- Sous-système réseau
- Pour les sockets Unix créés par la fonction socket(), la prise en charge des attributs de fichiers étendus (xattr) « user.* » a été mise en œuvre. Parmi les applications, on note l'attribution d'étiquettes via des attributs étendus aux sockets Unix utilisés pour IPC Varlink, afin de les distinguer pour l'inspection et le débogage du fonctionnement de l'IPC à l'aide de programmes BPF. Dans systemd-journald, les attributs étendus sont destinés à être utilisés pour déterminer le format du journal en lien avec le socket /dev/log.
- La prise en charge du protocole UDP-Lite (RFC 3828), permettant la livraison de paquets avec des sommes de contrôle incorrectes en espérant que, par exemple, les données audio et vidéo partiellement corrompues puissent être récupérées au niveau du codec, a été supprimée. Le protocole a été retiré car personne ne l'utilise.
- La possibilité de compiler la pile IPv6 sous forme de module du noyau, qui n'était pas pratiquement utilisée (IPv6 est soit intégré au noyau, soit complètement désactivé), mais compliquait la maintenance car lors de la compilation d'IPv6 en tant que module du noyau (CONFIG_IPV6=m), de nombreux sous-systèmes devaient ajouter des gestionnaires inutiles pour le cas où le module IPv6 serait déchargé, a été supprimée.
- Matériel
- Un nouveau moteur d'affichage (DC) pour les APU AMD de la série HD 7000 (Sea Islands, GCN 1.1) a été intégré dans le pilote AMDGPU.
- Le pilote Nouveau a ajouté un support initial pour le GPU NVIDIA GA100 reposant sur l'architecture micro-Ampere.
- Le travail sur le pilote DRM (Direct Rendering Manager) Xe pour les GPU basés sur l'architecture Intel Xe a été poursuivi, utilisé dans les cartes graphiques Intel de la famille Arc et l'IGPU à partir des processeurs Tiger Lake. La prise en charge du sous-système graphique des processeurs Intel Nova Lake-P a été ajoutée. Des objets tampons purgeables (Purgeable Buffer Objects) ont été réalisés.
- L'intégration des composants du pilote Nova pour les GPU NVIDIA équipés de firmwares GSP, utilisés à partir de la série NVIDIA GeForce RTX 2000 basée sur l'architecture Turing, a été poursuivie. Le pilote est écrit en Rust. Un support initial pour les GPU basés sur l'architecture Turing a été ajouté.
- Le pilote DRM corebootdrm pour la sortie graphique via le framebuffer des firmwares basés sur CoreBoot a été ajouté.
- La prise en charge des dispositifs audio ASoC AMD RPL DMIC, Cirrus Logic CS42L43, CS47L47, NVIDIA CPCAP et WM8962 a été ajoutée. Amélioration de la prise en charge des périphériques audio USB : Huawei Headset, Focusrite Novation, MV-Silicon, Studio 1824, Arturia AF16Rig, Hotone Audio, Feaulle Rainbow,
PreSonus AudioBox, Moondrop Ju Jiu, Scarlett 18i20. - Le pilote yogafan pour le suivi de la vitesse de rotation des ventilateurs sur les ordinateurs portables Lenovo Yoga, Legion et IdeaPad a été ajouté.
- La prise en charge de plates-formes ARM, SoC et dispositifs : Qualcomm Glymur, Qualcomm Mahua, Qualcomm Eliza, Qualcomm IPQ5210, Qualcomm apq8084 et ipq806x, Axis ARTPEC-9, ARM Zena, ARM corstone-1000-a320, Microchip LAN9691, Microchip PIC64GX, Rockchip RV1103B, Renesas RZ/G3L, NXP S32N79 a été ajoutée.
- Le support des contrôleurs AHCI SATA et PCIe utilisés dans le SoC Baikal-T1, ainsi que les pilotes pour le minuteur, la mémoire, physmap, le bus, hwmon, dwc et bt1-rom a été supprimé. La raison de la suppression est l'absence de support et l'intégration inachevée des composants de la plateforme Baikal, dont la production en RF a été interrompue en novembre 2025.
- Douze pilotes pour des dispositifs Ethernet avec interfaces ISA et PCMCIA produits avant 2002, pour lesquels aucun utilisateur n'a été trouvé, ont été supprimés du noyau. La sous-système ISDN, les implémentations des protocoles AX.25, CAIF et Bluetooth CMTP (Common ISDN Application Programming Interface Message Transport Protocol), les pilotes yellowfin (Yellowfin Gigabit-NIC), hamachi (Hamachi GNIC-II), hamradio (Amateur Radio), inport et logibm (busmouse) ont également été exclus.
La raison de la suppression a été l'absence de personnes en charge sur fond de l'augmentation des erreurs détectées grâce à syzbot et aux outils d'IA, que personne ne se charge de corriger, et toute la charge d'élimination des problèmes graves repose sur ceux qui supportent les principaux sous-systèmes réseau du noyau. Plus de 140 000 lignes de code ont été supprimées.
Source : opennet.ru
