Après deux mois de développement, Linus Torvalds a présenté la version du noyau Linux 6.0. Le changement significatif du numéro de version a été effectué pour des raisons esthétiques et constitue une étape formelle, éliminant l'inconfort dû à l'accumulation d'un grand nombre de versions dans la série (Linus a plaisanté en disant que la raison du changement de numéro de branche était plutôt qu'il lui manquait des doigts pour compter les numéros de version). Parmi les changements les plus notables : prise en charge de l'écriture asynchrone en tampon dans XFS, pilote de bloc ublk, optimisation du planificateur de tâches, mécanisme de vérification de la corrections du noyau, prise en charge du chiffre de bloc ARIA.
Les principales nouveautés du noyau 6.0 :
- Sous-système de disque, entrée/sortie et systèmes de fichiers
- La prise en charge de l'écriture asynchrone en tampon a été ajoutée au système de fichiers XFS à l'aide du mécanisme io_uring. Les tests de performance réalisés à l'aide de l'outil fio (1 flux, taille de bloc 4 Ko, 600 secondes, écriture séquentielle) montrent une augmentation du nombre d'opérations d'entrée/sortie par seconde (IOPS) passant de 77 k à 209 k, une vitesse de transmission de données passant de 314 Mo/s à 854 Mo/s, et une réduction des latences de 9600 ns à 120 ns (80 fois).
- Dans le système de fichiers Btrfs, la deuxième version du protocole pour la commande « send » a été mise en œuvre, ajoutant la prise en charge de métadonnées supplémentaires, l'envoi de données par blocs plus grands (plus de 64 K) et la transmission de zones en format compressé. La performance des opérations de lecture directe a été considérablement augmentée (jusqu'à 3 fois) grâce à la possibilité de lire simultanément jusqu'à 256 secteurs. Les conflits de verrouillage ont été réduits et la vérification des métadonnées a été accélérée grâce à la réduction des métadonnées réservées pour les éléments en attente.
- De nouvelles opérations ioctl EXT4_IOC_GETFSUUID et EXT4_IC_SETFSUUID ont été ajoutées au système de fichiers ext4 pour extraire ou définir l'identifiant UUID stocké dans le superbloc.
- Un mode de faible consommation de mémoire a été proposé dans le système de fichiers F2FS, optimisant le fonctionnement sur des appareils avec une faible quantité de RAM et permettant de réduire la consommation de mémoire au prix d'une diminution des performances.
- La prise en charge de l'authentification des disques NVMe a été ajoutée.
- Dans le serveur NFSv4 a mis en place une limite sur le nombre de clients actifs, fixée à 1024 clients admissibles pour chaque gigaoctet de RAM dans le système.
- Dans la mise en œuvre du client CIFS, les performances en mode de transmission multi-canaux ont été améliorées.
- Un nouveau flag FAN_MARK_IGNORE a été ajouté au sous-système de suivi des événements dans le système de fichiers fanotify pour ignorer des événements spécifiques.
- Dans le système de fichiers Overlayfs, lors du montage sur un système de fichiers avec mapping des identifiants utilisateur, un support correct des listes de contrôle d'accès compatibles POSIX a été assuré.
- Un driver de bloc ublk a été ajouté, déplaçant la logique spécifique vers un processus en arrière-plan dans l'espace utilisateur et utilisant le sous-système io_uring.
- Mémoire et services système
- De nouvelles capacités ont été ajoutées au sous-système DAMON (Data Access MONitor), permettant non seulement de suivre l'accès des processus à la mémoire vive depuis l'espace utilisateur, mais aussi d'influencer la gestion de la mémoire. En particulier, un nouveau module « LRU_SORT » a été proposé, permettant de regrouper à nouveau les listes LRU (Least Recently Used) pour donner la priorité à certaines pages de mémoire.
- La possibilité de créer de nouvelles régions de mémoire a été mise en œuvre en utilisant les capacités du bus CXL (Compute Express Link), utilisé pour organiser une communication à haute vitesse entre le CPU et les dispositifs de mémoire. CXL permet de connecter de nouvelles régions de mémoire fournies par des dispositifs de mémoire externes et de les utiliser comme des ressources supplémentaires dans l'espace d'adresses physique pour étendre la mémoire vive système (DDR) ou la mémoire persistante (PMEM).
- Des problèmes de performance des systèmes sur processeurs AMD Zen ont été résolus, causés par un code ajouté il y a 20 ans pour contourner un problème matériel dans certains chipsets (une instruction WAIT supplémentaire ralentissait le processeur pour que le chipset ait le temps de passer en état de repos). Ce changement entraînait une baisse de performance lors de charges où les états de repos (idle) et d'activité (busy) se succédaient souvent. Par exemple, après la désactivation du contournement, les moyennes des tests tbench sont passées de 32191 MB/s à 33805 MB/s.
- Le planificateur de tâches a été débarrassé du code heuristique qui permettait la migration des processus vers les CPU les moins chargés en tenant compte des économies d'énergie prévues. Les développeurs ont conclu que l'heuristique n'apportait pas de bénéfice significatif et qu'il était plus simple de transférer les processus sans évaluations supplémentaires chaque fois qu'un tel transfert pouvait potentiellement réduire la consommation d'énergie (par exemple, lorsque le CPU cible est à un niveau de consommation d'énergie plus bas). La désactivation de l'heuristique a entraîné une réduction de la consommation d'énergie lors de tâches intensives; par exemple, dans un test de décodage vidéo, la consommation d'énergie a diminué de 5,6 %.
- Une optimisation de la répartition des tâches entre les cœurs de CPU sur les grands systèmes a été réalisée, permettant d'améliorer les performances sous certaines charges de travail.
- Une nouvelle option IORING_RECV_MULTISHOT a été introduite dans l'interface d'entrée/sortie asynchrone io_uring, permettant d'utiliser le mode « multi-shot » avec l'appel système recv() pour exécuter plusieurs opérations de lecture à partir d'un socket réseau en une seule fois. io_uring prend également en charge le transfert de données réseau sans mise en mémoire tampon intermédiaire (zero-copy).
- La possibilité de mettre des programmes BPF, attachés à uprobe, en état de sommeil a été implémentée. Un nouvel itérateur ksym a également été ajouté à BPF pour travailler avec les tables de symboles du noyau.
- L'interface obsolète « efivars » dans sysfs, destinée à l'accès aux variables de démarrage UEFI (l'accès aux données EFI utilise désormais systématiquement le système de fichiers virtuel efivarfs), a été supprimée.
- De nouveaux rapports pour analyser les conflits de verrous et le temps que le processeur consacre à l'exécution des composants du noyau ont été implémentés dans l'outil perf.
- La configuration CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3, qui permettait de compiler le noyau en mode d'optimisation « -O3 », a été supprimée. Il est noté que des expériences avec des modes d'optimisation peuvent être menées par le passage de drapeaux lors de la compilation (« make KCFLAGS=-O3 »), et pour ajouter la configuration dans Kconfig, il est nécessaire d'assurer un profilage des performances répétable montrant que le déploiement des boucles en mode « -O3 » apporte un gain par rapport au niveau d'optimisation « -O2 ».
- Ajouté l'interface debugfs pour obtenir des informations sur le fonctionnement des « memory shrinkers » (gestionnaires appelés en cas de manque de mémoire, qui compressent les structures de données du noyau pour réduire leur consommation de mémoire).
- Pour les architectures OpenRISC et LoongArch, un support du bus PCI a été implémenté.
- Pour l'architecture RISC-V, une extension « Zicbom » a été mise en place pour gérer les dispositifs avec DMA, non-cohérents avec le cache.
- Virtualisation et sécurité
- Un mécanisme de vérification RV (Vérification à l'exécution) a été ajouté pour contrôler l'exactitude des opérations dans des systèmes hautement fiables garantissant l'absence de pannes. La vérification est effectuée en temps réel par l'attachement de gestionnaires à des points de traçage, comparant le flux d'exécution réel avec un modèle déterministe de référence prédéfini, définissant le comportement attendu du système. La vérification avec le modèle en temps réel est positionnée comme une méthode de confirmation plus légère et plus facile à mettre en œuvre dans la pratique pour s'assurer de la bonne exécution dans des systèmes critiques, complétant ainsi les méthodes classiques de confirmation de fiabilité. Parmi les avantages du RV, on note la possibilité de garantir une vérification stricte sans avoir à implémenter l'intégralité du système dans un langage de modélisation, ainsi qu'une réponse flexible face à des événements imprévus.
- Des composants du noyau ont été intégrés pour gérer les enclaves basées sur la technologie Intel SGX2 (Software Guard eXtensions), permettant aux applications d'exécuter du code dans des zones mémoire chiffrées et isolées, l'accès du reste du système étant limité. La technologie Intel SGX2 est supportée par les puces Intel Ice Lake et Gemini Lake, et se différencie de l'Intel SGX1 par des instructions supplémentaires pour la gestion dynamique de la mémoire des enclaves.
- Pour l'architecture x86, il est maintenant possible de transmettre des semences au générateur de nombres pseudo-aléatoires via les paramètres du chargeur de démarrage.
- Dans le module LSM SafeSetID, la gestion des modifications effectuées via l'appel setgroups() a été ajoutée. SafeSetID permet aux services système de gérer les utilisateurs de manière sécurisée sans élévation des privilèges (CAP_SETUID) et sans obtenir les droits de l'utilisateur root.
- Ajout du support pour le chiffrement par blocs ARIA.
- Dans le module de gestion de la sécurité basé sur BPF, il est désormais possible d'attacher des gestionnaires à des processus individuels et à des groupes de processus (cgroup).
- Un mécanisme de watchdog a été ajouté pour détecter les blocages des systèmes invités en surveillant l'activité des vCPU.
- Sous-système réseau
- Des gestionnaires ont été ajoutés au sous-système BPF pour la génération et la vérification des SYN cookies. Un ensemble de fonctions (kfunc) a également été ajouté pour accéder et modifier l'état des connexions.
- Le stack sans fil a ajouté la prise en charge du mécanisme MLO (Multi-Link Operation), défini dans la spécification WiFi 7, permettant aux appareils de recevoir et d'envoyer des données simultanément en utilisant différentes bandes de fréquences et canaux, par exemple, pour établir plusieurs liaisons simultanément entre un point d'accès et un appareil client.
- Les performances de l'implémentation du protocole TLS intégrée au noyau ont été améliorées.
- Un paramètre de ligne de commande du noyau « hostname= » a été ajouté, permettant de définir le nom d'hôte à un stade précoce du démarrage, avant que les composants de l'espace utilisateur ne soient lancés.
- Matériel
- Le pilote i915 (Intel) fournit un support pour les cartes graphiques discrètes Intel Arc (DG2/Alchemist) A750 et A770. Une première implémentation du support pour le GPU Intel Ponte Vecchio (Xe-HPC) et Meteor Lake a été proposée. Le travail de support pour la plateforme Intel Raptor Lake a été poursuivi.
- Le pilote amdgpu a poursuivi le travail de soutien des plateformes AMD RDNA3 (RX 7000) et CDNA (Instinct).
- Le code de support des moteurs d'affichage des GPU NVIDIA nv50 a été refactorisé dans le pilote Nouveau.
- Un nouveau pilote DRM logicvc pour les écrans LogiCVC a été ajouté.
- Le pilote v3d (pour GPU Broadcom Video Core) a ajouté la prise en charge des cartes Raspberry Pi 4.
- Le pilote msm a ajouté la prise en charge du GPU Qualcomm Adreno 619.
- Le pilote Panfrost a ajouté la prise en charge du GPU ARM Mali Valhall.
- Un support initial pour les processeurs Qualcomm Snapdragon 8cx Gen3, utilisés dans les ordinateurs portables Lenovo ThinkPad X13s, a été ajouté.
- Des pilotes audio pour les plateformes AMD Raphael (Ryzen 7000), AMD Jadeite, Intel Meteor Lake et Mediatek MT8186 ont été ajoutés.
- Le support pour les accélérateurs de systèmes d'apprentissage automatique Intel Habana Gaudi 2 a été ajouté.
- Le support pour les SoC ARM Allwinner H616, NXP i.MX93, Sunplus SP7021, Nuvoton NPCM8XX, Marvell Prestera 98DX2530, Google Chameleon v3 a été ajouté.
Simultanément, la Fondation latino-américaine pour les logiciels libres a formé une version entièrement libre du noyau 6.0 — Linux-libre 6.0-gnu, épurée des éléments de firmwares et de pilotes contenant des composants ou des sections de code non libres, dont l'utilisation est limitée par le fabricant. Dans cette nouvelle version, l'utilisation des blobs a été désactivée dans le pilote CS35L41 HD-audio et le pilote UCSI pour les microcontrôleurs STM32G0. Les fichiers dts pour les puces Qualcomm et MediaTek ont été nettoyés. La désactivation des blobs dans le pilote MediaTek MT76 a été retravaillée. Le code de nettoyage des blobs a été mis à jour dans les pilotes et sous-systèmes AMDGPU, Adreno, Tegra VIC, Netronome NFP et Habanalabs Gaudi2. Le nettoyage du pilote VXGE, retiré du noyau, a été arrêté.
Source : opennet.ru
