AprÚs deux mois de développement, Linus Torvalds a présenté la version du noyau Linux 6.3. Parmi les changements les plus notables figurent : le nettoyage des anciennes plateformes ARM et des pilotes graphiques, la poursuite de l'intégration de la prise en charge du langage Rust, l'outil hwnoise, le support des structures arborescentes red-black dans BPF, le mode BIG TCP pour IPv4, un test de performance intégré Dhrystone, la possibilité d'interdire l'exécution dans memfd, le soutien à la création de pilotes HID en utilisant BPF, et des modifications acceptées dans Btrfs pour réduire la fragmentation des groupes de blocs.
La nouvelle version a accepté 15 637 corrections de la part de 2 055 développeurs ; la taille du patch est de 76 Mo (les modifications ont concerné 14 296 fichiers, 1 023 183 lignes de code ont été ajoutées, et 883 103 lignes supprimées). Pour comparaison, la version précédente avait proposé 16 843 corrections de 2 178 développeurs ; la taille du patch était de 62 Mo. Environ 39 % de tous les changements présentés dans le noyau 6.3 sont liés aux pilotes de périphériques, environ 15 % des modifications concernent la mise à jour du code spécifique aux architectures matérielles, 10 % sont liées à la pile réseau, 5 % aux systÚmes de fichiers et 3 % aux sous-systÚmes internes du noyau.
Les principales nouveautés du noyau 6.3 :
- Mémoire et services systÚme
- Un nettoyage significatif du code lié aux anciennes plateformes ARM non utilisées a été effectué, permettant de réduire la taille des textes sources du noyau de 150 000 lignes. Plus de 40 anciennes plateformes ARM ont été supprimées.
- Il est désormais possible de créer des pilotes pour des dispositifs d'entrée avec une interface HID (Human Interface Device), implémentés sous forme de programmes BPF.
- Le transfert de la branche Rust-for-Linux se poursuit avec des fonctionnalitĂ©s supplĂ©mentaires liĂ©es Ă l'utilisation du langage Rust comme deuxiĂšme langage pour le dĂ©veloppement de pilotes et de modules du noyau. La prise en charge de Rust n'est pas activĂ©e par dĂ©faut et n'ajoute pas Rust en tant que dĂ©pendance de construction obligatoire pour le noyau. Les fonctionnalitĂ©s proposĂ©es dans les versions prĂ©cĂ©dentes sont Ă©tendues par le soutien des types Arc (implĂ©mentation de pointeurs avec compteur de rĂ©fĂ©rences), ScopeGuard (effectue un nettoyage lors de la sortie de la portĂ©e) et ForeignOwnable (permet de dĂ©placer des pointeurs entre le code C et Rust). Le module 'borrow' du paquet âallocâ a Ă©tĂ© supprimĂ© (type 'Cow' et caractĂšre 'ToOwned'). Il est signalĂ© que l'Ă©tat de la prise en charge de Rust dans le noyau est dĂ©sormais proche de la phase d'acceptation des premiers modules Ă©crits en Rust.
- Dans User-mode Linux (exécution du noyau en tant que processus utilisateur) sur les systÚmes x86-64, le support pour le code écrit en Rust a été implémenté. Le support pour la construction de User-mode Linux à l'aide de clang avec optimisations au moment de l'édition des liens (LTO) a été ajouté.
- Un utilitaire hwnoise a été ajouté pour surveiller les retards causés par les particularités du matériel. Les écarts de temps d'exécution des opérations (jitter) sont mesurés lorsqu'on désactive le traitement des interruptions, dépassant une microseconde sur 10 minutes de calculs.
- Un module du noyau implĂ©mentant le test de performance Dhrystone a Ă©tĂ© ajoutĂ©, permettant d'Ă©valuer la performance du CPU dans des configurations sans composants en espace utilisateur (par exemple, lors de la portabilitĂ© pour des SoC nouveaux, oĂč seule l'amorçage du noyau est implĂ©mentĂ©e).
- Un paramĂštre de ligne de commande du noyau «cgroup.memory=nobpf» a Ă©tĂ© ajoutĂ©, dĂ©sactivant la prise en compte de la consommation de mĂ©moire pour les programmes BPF, ce qui peut ĂȘtre utile pour les systĂšmes avec des conteneurs isolĂ©s.
- Pour les programmes BPF, une implémentation de la structure de données arbre rouge-noir a été proposée, utilisant kfunc + kptr (bpf_rbtree_add, bpf_rbtree_remove, bpf_rbtree_first) au lieu d'ajouter un nouveau type de mapping.
- Le mécanisme de séquences redémarrables (rseq) a ajouté la possibilité de transmettre aux processus des identifiants de concurrence en mémoire (memory-map concurrency ID) identifiés par le numéro de CPU. Rseq fournit des moyens pour l'exécution atomique rapide des opérations, qui, en cas d'interruption par un autre thread, sont nettoyées et une nouvelle tentative d'exécution est effectuée.
- Le support des instructions SME 2 (Scalable Matrix Extension) a été assuré sur les processeurs ARM.
- Pour les architectures s390x et RISC-V RV64, le mĂ©canisme «BPF trampoline» a Ă©tĂ© mis en Ćuvre, permettant de minimiser les frais gĂ©nĂ©raux lors du passage des appels entre le noyau et les programmes BPF.
- Sur les systÚmes avec des processeurs basés sur l'architecture RISC-V, l'utilisation des instructions «ZBB» a été réalisée pour accélérer les opérations sur les chaßnes.
- Pour les systĂšmes basĂ©s sur l'architecture d'ensemble d'instructions LoongArch (utilisĂ©e dans les processeurs Loongson 3 5000 et implĂ©mentant un nouvel ISA RISC, semblable Ă MIPS et RISC-V), le support de la randomisation de l'espace d'adressage du noyau (KASLR), du changement de placement du noyau en mĂ©moire (relocation), des points d'arrĂȘt matĂ©riels et du mĂ©canisme kprobe a Ă©tĂ© rĂ©alisĂ©.
- Dans le mécanisme DAMOS (Data Access Monitoring-based Operation Schemes), qui permet de libérer de la mémoire en fonction de la fréquence d'accÚs à celle-ci, un support pour les filtres a été implémenté afin d'exclure certaines zones de mémoire de l'analyse dans DAMOS.
- La bibliothÚque C standard minimale Nolibc prend désormais en charge l'architecture s390 et l'ensemble d'instructions Arm Thumb1 (en plus d'un support pour ARM, AArch64, i386, x86_64, RISC-V et MIPS).
- L'optimisation d'objtool a été effectuée pour accélérer la compilation du noyau et réduire la consommation de mémoire lors de la compilation (en mode « allyesconfig », il n'y a plus de problÚmes de terminaison forcée des processus sur des systÚmes avec 32 Go de RAM).
- Le support de la compilation du noyau avec le compilateur Intel ICC a été abandonné, car il ne fonctionnait plus depuis un certain temps et personne n'a souhaité corriger ce problÚme.
- Sous-systÚme de disque, entrée/sortie et systÚmes de fichiers
- Dans tmpfs, la prise en charge du mappage des identifiants d'utilisateurs pour les systÚmes de fichiers montés a été implémentée, permettant de faire correspondre les fichiers d'un utilisateur sur une partition montée appartenant à un autre utilisateur dans le systÚme actuel.
- Dans Btrfs, pour réduire la fragmentation des groupes de blocs, une séparation des extents par taille a été mise en place lors de l'allocation des blocs, c'est-à -dire que tout groupe de blocs est maintenant limité aux petits (jusqu'à 128 Ko), moyens (jusqu'à 8 Mo) et grands extents. Le refactoring de l'implémentation de raid56 a été effectué. Le code de vérification des sommes de contrÎle a été retravaillé. Des optimisations de performance ont permis d'accélérer l'opération send jusqu'à 10 fois grùce à la mise en cache de utime pour les répertoires et à l'exécution des commandes uniquement si nécessaire. L'exécution des opérations fiemap a été triplée en sautant les vérifications de références croisées pour les données partagées (instantanés). Les opérations sur les métadonnées ont été accélérées de 10 % grùce à l'optimisation de la recherche de clés dans les structures b-arbre.
- La performance du systÚme de fichiers ext4 a été améliorée grùce à la possibilité pour plusieurs processus d'exécuter simultanément des opérations d'entrée/sortie directe sur des blocs préalloués, en utilisant des verrouillages partagés d'inode au lieu de verrouillages exclusifs.
- Des travaux ont été réalisés dans f2fs pour améliorer la lisibilité du code. Des problÚmes importants liés à l'écriture atomique et au nouveau cache d'extents ont été résolus.
- Dans le systĂšme de fichiers EROFS (Enhanced Read-Only File System), conçu pour ĂȘtre utilisĂ© dans des partitions accessibles en mode lecture seule, il est possible de lier le traitement du dĂ©ballage du contenu compressĂ© des fichiers au CPU afin de rĂ©duire les dĂ©lais d'accĂšs aux donnĂ©es.
- Le planificateur d'entrĂ©e/sortie BFQ a Ă©tĂ© mis Ă jour pour prendre en charge les dispositifs avancĂ©s Ă disques rotatifs, tels que ceux qui utilisent plusieurs tĂȘtes de lecture/Ă©criture indĂ©pendamment contrĂŽlĂ©es (Multi Actuator).
- La prise en charge de l'encryption des données à l'aide de l'algorithme AES-SHA2 a été ajoutée à l'implémentation du client et de serveurs NFS.
- Le sous-systĂšme FUSE (Filesystems In User Space) a ajoutĂ© la prise en charge d'un mĂ©canisme d'extension des requĂȘtes, permettant d'ajouter des informations supplĂ©mentaires Ă la demande. Sur la base de cette fonctionnalitĂ©, il est possible d'ajouter des identifiants de groupes Ă la requĂȘte FS, nĂ©cessaires pour gĂ©rer les droits d'accĂšs lors de la crĂ©ation d'objets dans le FS (create, mkdir, symlink, mknod).
- Virtualisation et sécurité
- Dans l'hyperviseur KVM pour systÚmes x86, la prise en charge des appels hypervisés Hyper-V a été ajoutée, et leur passage vers le gestionnaire fonctionnant dans l'environnement hÎte en espace utilisateur a été assuré. Ce changement a permis d'implémenter la prise en charge du lancement imbriqué de l'hyperviseur Hyper-V.
- Dans KVM, la restriction d'accÚs pour le systÚme invité aux événements PMU (Performance Monitor Unit) liés à la mesure des performances a été simplifiée.
- Le mĂ©canisme memfd, permettant d'identifier une zone de mĂ©moire par le descripteur de fichier transmis entre les processus, a Ă©tĂ© mis Ă jour pour permettre la crĂ©ation de zones oĂč l'exĂ©cution de code est interdite (non-executable memfd) et oĂč il est impossible de futures permissions d'exĂ©cution.
- Une nouvelle opération prctl PR_SET_MDWE a été ajoutée, bloquant les tentatives d'activation des droits d'accÚs à la mémoire qui autorisent simultanément l'écriture et l'exécution.
- Une protection contre les attaques de type Spectre a Ă©tĂ© ajoutĂ©e et activĂ©e par dĂ©faut, mise en Ćuvre sur la base du mode automatique IBRS (Enhanced Indirect Branch Restricted Speculation) proposĂ© dans les processeurs AMD Zen 4, permettant d'autoriser et d'interdire de maniĂšre adaptive l'exĂ©cution spĂ©culative des instructions lors du traitement des interruptions, des appels systĂšme et des changements de contexte. Cette protection proposĂ©e entraĂźne des frais gĂ©nĂ©raux moindres par rapport Ă la protection Retpoline.
- Une vulnérabilité permettant de contourner la protection contre les attaques Spectre v2 lors de l'utilisation de la technologie de multithreading simultané (SMT ou Hyper-Threading) a été corrigée, dû à la désactivation du mécanisme STIBP (Single Thread Indirect Branch Predictors) lors du choix du mode de protection IBRS.
- Pour les systÚmes basés sur l'architecture ARM64, un nouvel objectif de construction « virtconfig » a été ajouté, qui active uniquement le minimum de composants du noyau nécessaires au démarrage dans les systÚmes de virtualisation.
- Pour l'architecture m68k, le support du filtrage des appels systÚme via le mécanisme seccomp a été ajouté.
- Le support des dispositifs CRB TPM2 (Command Response Buffer), intégrés dans les processeurs AMD Ryzen et basés sur la technologie Microsoft Pluton, a été ajouté.
- Sous-systÚme réseau
- Une interface netlink a été ajoutée pour configurer le sous-niveau de prévention des collisions PLCA (Physical Layer Collision Avoidance), défini dans la spécification IEEE 802.3cg-2019 et utilisé dans les réseaux Ethernet 802.3cg (10Base-T1S), optimisés pour la connexion d'appareils Internet des objets et de systÚmes industriels. L'utilisation de PLCA permet d'améliorer les performances dans les réseaux Ethernet à milieu partagé.
- La prise en charge de l'API « wireless extensions » pour gĂ©rer les interfaces sans fil WiFi 7 (802.11be) a Ă©tĂ© interrompue car cette API ne couvre pas tous les rĂ©glages nĂ©cessaires. Lors de l'utilisation de l'API « wireless extensions », qui continue d'ĂȘtre pris en charge comme couche Ă©mulĂ©e, un avertissement sera dĂ©sormais affichĂ© pour la plupart des appareils rĂ©cents.
- Une documentation détaillée sur l'API netlink (pour les développeurs de noyaux et les développeurs d'applications dans l'espace utilisateur) a été préparée. Un utilitaire ynl-gen-c a été implémenté pour générer du code C à partir des spécifications YAML du protocole Netlink.
- Le support de l'option IP_LOCAL_PORT_RANGE a Ă©tĂ© ajoutĂ© aux sockets rĂ©seau pour simplifier la configuration des connexions sortantes via des traducteurs d'adresses sans utiliser de SNAT. Lors de l'utilisation d'un adresses IP sur plusieurs hĂŽtes, IP_LOCAL_PORT_RANGE permet d'utiliser une plage de ports rĂ©seau sortants diffĂ©rente sur chaque hĂŽte, tandis qu'au niveau de la passerelle, les paquets peuvent ĂȘtre redirigĂ©s en fonction des numĂ©ros de ports.
- Pour MPTCP (MultiPath TCP), une possibilitĂ© de gestion des flux mixtes utilisant les protocoles IPv4 et IPv6 a Ă©tĂ© mise en Ćuvre. MPTCP est une extension du protocole TCP qui permet d'Ă©tablir une connexion TCP avec la livraison de paquets simultanĂ©ment par plusieurs chemins via diffĂ©rentes interfaces rĂ©seau, associĂ©es Ă diffĂ©rentes adresses IP.
- Pour IPv4, la possibilitĂ© d'utiliser l'extension BIG TCP a Ă©tĂ© mise en Ćuvre, permettant d'augmenter la taille maximale d'un paquet TCP Ă 4 Go pour optimiser le fonctionnement des rĂ©seaux internes Ă haut dĂ©bit des centres de donnĂ©es. Cette augmentation de la taille du paquet avec une taille de champ d'en-tĂȘte de 16 bits est rĂ©alisĂ©e par l'implĂ©mentation de « jumbo »-paquets, dont la taille dans l'en-tĂȘte IP est fixĂ©e Ă 0, tandis que la taille rĂ©elle est transmise dans un champ 32 bits distinct dans un en-tĂȘte attachĂ© sĂ©parĂ©.
- Un nouveau paramĂštre sysctl, default_rps_mask, a Ă©tĂ© ajoutĂ©, permettant de dĂ©finir la configuration RPS (Receive Packet Steering) par dĂ©faut, chargĂ©e de rĂ©partir le traitement du trafic entrant entre les cĆurs du CPU au niveau des gestionnaires d'interruptions.
- Le support des disciplines de traitement des files d'attente pour la limitation de trafic CBQ (class-based queuing), ATM (circuits virtuels ATM), dsmark (marqueur de service différencié), tcindex (index de contrÎle de trafic) et RSVP (protocole de réservation de ressources) a été abandonné. Ces disciplines ont longtemps été laissées à l'abandon et aucune volonté de continuer leur prise en charge n'a été exprimée.
- Matériel
- Tous les pilotes graphiques basés sur DRI1 ont été supprimés : i810 (anciens graphiques intégrés Intel 8xx), mga (GPU Matrox), r128 (GPU ATI Rage 128, y compris les cartes Rage Fury, XPERT 99 et XPERT 128), savage (GPU S3 Savage), sis (GPU SiS Crusty), tdfx (3dfx Voodoo) et via (VIA IGP), qui ont été déclarés obsolÚtes en 2016 et ne sont plus supportés dans Mesa depuis 2012.
- Les pilotes de framebuffer obsolÚtes (fbdev) omap1, s3c2410, tmiofb et w100fb ont été supprimés.
- Un pilote DRM pour les unitĂ©s VPU (Versatile Processing Unit) intĂ©grĂ©es au CPU Intel Meteor Lake (14Ăšme gĂ©nĂ©ration) a Ă©tĂ© ajoutĂ©, conçu pour accĂ©lĂ©rer les opĂ©rations liĂ©es Ă la vision par ordinateur et Ă l'apprentissage automatique. Le pilote a Ă©tĂ© rĂ©alisĂ© en utilisant la sous-systĂšme « accel », visant Ă assurer le support des accĂ©lĂ©rateurs de calcul qui peuvent ĂȘtre fournis sous forme d'ASIC sĂ©parĂ©s ou de blocs IP dans SoC et GPU.
- Dans le pilote i915 (Intel), le support des cartes graphiques dédiées Intel Arc (DG2/Alchemist) a été élargi, avec une prise en charge préliminaire du GPU Meteor Lake et le support du GPU Intel Xe HP 4tile.
- Le pilote amdgpu a ajouté la prise en charge de la technologie AdaptiveSync et la possibilité d'utiliser plusieurs écrans en mode de protection des données affichées (Secure Display). La prise en charge de DCN 3.2 (Display Core Next), SR-IOV RAS, VCN RAS, SMU 13.x et DP 2.1 a été mise à jour.
- Le pilote msm (GPU Qualcomm Adreno) prend désormais en charge les plates-formes SM8350, SM8450, SM8550, SDM845 et SC8280XP.
- Le pilote Nouveau a cessé de prendre en charge les anciennes appels ioctl.
- Le pilote etnaviv a ajouté un support expérimental pour le NPU VerSilicon (VeriSilicon Neural Network Processor).
- Le pilote pata_parport a Ă©tĂ© mis en Ćuvre pour les disques IDE connectĂ©s via le port parallĂšle. Ce pilote ajoutĂ© a permis de supprimer l'ancien pilote PARIDE du noyau et de moderniser le sous-systĂšme ATA. La limitation du nouveau pilote est l'impossibilitĂ© de connecter simultanĂ©ment une imprimante et un disque via le port parallĂšle.
- Le pilote ath12k a été ajouté pour les cartes sans fil basées sur des chipsets Qualcomm avec prise en charge de Wi-Fi 7. Prise en charge des cartes sans fil basées sur des chipsets RealTek RTL8188EU ajoutée.
- La prise en charge de 46 cartes avec des processeurs basés sur l'architecture ARM64 a été ajoutée, parmi lesquelles le Samsung Galaxy Tab A (2015), le Samsung Galaxy S5, le BananaPi R3, le Debix Model A, l'EmbedFire LubanCat 1/2, le Facebook Greatlakes, l'Orange Pi R1 Plus, le Tesla FSD, ainsi que des dispositifs basés sur SoC Qualcomm MSM8953 (Snapdragon 610), SM8550 (Snapdragon 8 Gen 2), SDM450 et SDM632, la box TV Rockchips RK3128, RV1126 Vision, RK3588, RK3568, RK3566, RK3588 et RK3328, TI K3 (AM642/AM654/AM68/AM69).
SimultanĂ©ment, la Fondation du logiciel libre d'AmĂ©rique latine a formĂ© une version entiĂšrement libre du noyau 6.3 â Linux-libre 6.3-gnu, purgĂ©e des Ă©lĂ©ments de firmware et de pilotes contenant des composants non libres ou des segments de code restreints par le fabricant. Dans la version 6.3, le nettoyage des blobs a Ă©tĂ© effectuĂ© dans les nouveaux pilotes ath12k, aw88395 et peb2466, ainsi que dans les nouveaux fichiers devicetree pour les appareils qcom basĂ©s sur l'architecture AArch64. Le code de nettoyage des blobs dans les pilotes et sous-systĂšmes amdgpu, xhci-rcar, qcom-q6v5-pas, sp8870, av7110, ainsi que les pilotes pour cartes DVB avec dĂ©codeurs logiciels et dans les fichiers BPF prĂ©compilĂ©s a Ă©tĂ© mis Ă jour. Le nettoyage des pilotes mga, r128, tm6000, cpia2 et r8188eu a Ă©tĂ© arrĂȘtĂ© car ils ont Ă©tĂ© supprimĂ©s du noyau. L'Ă©limination des blobs dans le pilote i915 a Ă©tĂ© amĂ©liorĂ©e.
Source : opennet.ru
