Version du noyau Linux 6.3

Après deux mois de développement, Linus Torvalds a publié le noyau Linux 6.3. Parmi les changements les plus notables : nettoyage des plates-formes ARM et des pilotes graphiques obsolètes, poursuite de l'intégration du support du langage Rust, utilitaire hwnoise, support des arborescences rouge-noir dans BPF, mode BIG TCP pour IPv4, benchmark Dhrystone intégré, possibilité de désactiver exécution dans memfd, prise en charge de la création de pilotes HID à l'aide de BPF, des modifications ont été apportées à Btrfs pour réduire la fragmentation des groupes de blocs.

La nouvelle version a accepté 15637 correctifs de 2055 développeurs ; taille du patch - 76 Mo (les modifications ont affecté 14296 fichiers, 1023183 lignes de code ajoutées, 883103 lignes supprimées). A titre de comparaison, dans la version précédente, 16843 correctifs étaient proposés par 2178 développeurs ; taille du patch - 62 Mo. Environ 39 % de tous les changements introduits dans le noyau 6.3 sont liés aux pilotes de périphériques, environ 15 % des changements sont liés à la mise à jour du code spécifique aux architectures matérielles, 10 % sont liés à la pile réseau, 5 % aux systèmes de fichiers et 3 % aux sous-systèmes internes du noyau.

Innovations clés dans le noyau 6.3 :

  • Services mémoire et système
    • Un nettoyage important du code lié aux cartes ARM anciennes et inutilisées a été effectué, ce qui a réduit la taille des sources du noyau de 150 40 lignes. Suppression de plus de XNUMX anciennes plates-formes ARM.
    • Implémentation de la possibilité de créer des pilotes pour les périphériques d'entrée avec l'interface HID (Human Interface Device) implémentée sous la forme de programmes BPF.
    • Poursuite du portage depuis la branche Rust-for-Linux de fonctionnalités supplémentaires liées à l'utilisation de Rust comme deuxième langage pour le développement de pilotes et de modules de noyau. La prise en charge de Rust n'est pas activée par défaut et n'entraîne pas l'inclusion de Rust en tant que dépendance de construction du noyau obligatoire. La fonctionnalité offerte dans les versions précédentes a été étendue avec la prise en charge des types Arc (une implémentation de pointeurs avec un nombre de références), ScopeGuard (le nettoyage est effectué lorsqu'il sort de la portée) et ForeignOwnable (fournit un mouvement de pointeur entre le code C et Rust) . Suppression du module 'emprunter' du package 'alloc' (type 'Cow' et trait 'ToOwned'). Il est à noter que l'état du support de Rust dans le noyau est déjà proche de commencer à accepter les premiers modules écrits en Rust dans le noyau.
    • Linux en mode utilisateur (exécutant le noyau en tant que processus utilisateur) sur les systèmes x86-64 prend en charge le code écrit en Rust. Ajout de la prise en charge de la construction de Linux en mode utilisateur à l'aide de clang avec les optimisations de temps de liaison activées (LTO).
    • Ajout de l'utilitaire hwnoise pour suivre les retards causés par le comportement du matériel. Les écarts dans le temps d'exécution des opérations (jitter) sont déterminés lorsque le traitement des interruptions est désactivé, dépassant une microseconde en 10 minutes de calculs.
    • Un module de noyau a été ajouté avec une implémentation de référence Dhrystone qui peut être utilisée pour évaluer les performances du processeur dans des configurations sans composants d'espace utilisateur (par exemple, au stade du portage pour les nouveaux SoC qui implémentent uniquement le chargement du noyau).
    • Ajout de l'option de ligne de commande du noyau "cgroup.memory=nobpf" pour désactiver 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 arborescente rouge-noir est proposée, qui utilise kfunc + kptr (bpf_rbtree_add, bpf_rbtree_remove, bpf_rbtree_first) au lieu d'ajouter un nouveau type de mappage.
    • Dans le mécanisme des séquences redémarrables (rseq, séquences redémarrables), la possibilité de passer des identifiants d'exécution parallèle (memory-map concurrency ID) identifiés avec le numéro de CPU a été ajoutée aux processus. Rseq fournit un moyen d'exécuter rapidement de manière atomique des opérations qui, si elles sont interrompues par un autre thread, sont nettoyées et réessayées.
    • Les processeurs ARM prennent en charge les instructions SME 2 (Scalable Matrix Extension).
    • Pour les architectures s390x et RISC-V RV64, la prise en charge du mécanisme "BPF trampoline" est implémentée, ce qui permet de minimiser la surcharge lors du transfert d'appels entre le noyau et les programmes BPF.
    • Sur les systèmes dotés de processeurs basés sur l'architecture RISC-V, l'utilisation d'instructions "ZBB" a été implémentée pour accélérer les opérations sur les chaînes.
    • Pour les systèmes basés sur l'architecture du jeu d'instructions LoongArch (utilisé dans les processeurs Loongson 3 5000 et implémentant un nouveau RISC ISA similaire à MIPS et RISC-V), prise en charge de la randomisation de l'espace d'adressage du noyau (KASLR), relocalisation du noyau en mémoire (relocation ), les points matériels stop et le mécanisme kprobe.
    • Le mécanisme DAMOS (Data Access Monitoring-based Operation Schemes), qui vous permet de libérer de la mémoire en fonction de la fréquence d'accès à la mémoire, prend en charge des filtres pour exclure certaines zones de la mémoire du traitement dans DAMOS.
    • La bibliothèque C standard minimale Nolibc implémente la prise en charge de l'architecture s390 et du jeu d'instructions Arm Thumb1 (en plus de la prise en charge d'ARM, AArch64, i386, x86_64, RISC-V et MIPS).
    • Objtool a été optimisé pour accélérer les constructions du noyau et réduire la consommation maximale de mémoire pendant les constructions (lors de la construction du noyau en mode "allyesconfig", il n'y a aucun problème avec l'arrêt forcé des processus sur les systèmes avec 32 Go de RAM).
    • La prise en charge de l'assemblage du noyau par le compilateur Intel ICC a été interrompue, ce qui est en panne depuis longtemps et personne n'a exprimé le souhait de le réparer.
  • Sous-système de disque, E/S et systèmes de fichiers
    • tmpfs prend en charge le mappage d'ID utilisateur de système de fichiers monté, qui est utilisé pour mapper les fichiers d'un utilisateur spécifique sur une partition étrangère montée vers un autre utilisateur sur le système actuel.
    • Dans Btrfs, pour réduire la fragmentation des groupes de blocs, les étendues sont divisées par taille lors de l'allocation des blocs, c'est-à-dire tout groupe de blocs est désormais limité aux extensions petites (jusqu'à 128 Ko), moyennes (jusqu'à 8 Mo) et grandes. L'implémentation raid56 a été refactorisée. Code repensé pour vérifier les sommes de contrôle. Des optimisations de performances ont été apportées pour accélérer l'opération d'envoi jusqu'à 10 fois en mettant en cache utime pour les répertoires et en exécutant les commandes uniquement lorsque cela est nécessaire. Opérations fiemap 10 fois plus rapides en sautant les vérifications de backlink pour les données partagées (instantanés). Les opérations avec les métadonnées sont accélérées de XNUMX% en optimisant la recherche de clés dans les structures b-tree.
    • Amélioration des performances d'ext4 FS en permettant à plusieurs processus d'effectuer simultanément des opérations d'E/S directes sur des blocs pré-alloués à l'aide de verrous inode partagés au lieu de verrous exclusifs.
    • Dans f2fs, un travail a été fait pour améliorer la lisibilité du code. Correction de problèmes importants liés à l'écriture atomique et au nouveau cache d'extension.
    • L'EROFS (Enhanced Read-Only File System), conçu pour être utilisé sur des partitions en lecture seule, implémente la possibilité de lier les opérations de décompression de fichiers compressés au CPU pour réduire les délais d'accès aux données.
    • Le planificateur d'E / S BFQ a ajouté la prise en charge des lecteurs de disque rotatifs avancés, tels que ceux qui utilisent plusieurs lecteurs contrôlés séparément (Multi Actuator).
    • La prise en charge du chiffrement des données à l'aide de l'algorithme AES-SHA2 a été ajoutée à l'implémentation du client et du serveur NFS.
    • Le sous-système FUSE (Filesystems In User Space) a ajouté la prise en charge du mécanisme d'extension de requête, ce qui vous permet de mettre des informations supplémentaires dans la requête. Sur la base de cette fonctionnalité, l'ajout d'identifiants de groupe à la requête FS est mis en œuvre, qui sont nécessaires pour prendre en compte les droits d'accès lors de la création d'objets dans le FS (create, mkdir, symlink, mknod).
  • Virtualisation et sécurité
    • L'hyperviseur KVM pour les systèmes x86 ajoute la prise en charge des hyperappels Hyper-V étendus et leur fournit un transfert vers un gestionnaire s'exécutant dans un environnement hôte d'espace utilisateur. La modification a permis de mettre en œuvre la prise en charge du lancement imbriqué de l'hyperviseur Hyper-V.
    • KVM facilite la restriction de l'accès du système invité aux événements PMU (Performance Monitor Unit) liés à la mesure des performances.
    • Le mécanisme memfd, qui permet d'identifier une zone mémoire grâce à un descripteur de fichier passé entre processus, a été ajouté la possibilité de créer des zones dans lesquelles l'exécution de code est interdite (memfd non exécutable) et il est impossible de définir des droits d'exécution dans le avenir.
    • Une nouvelle opération PR_SET_MDWE prctl a été ajoutée pour bloquer les tentatives d'inclure des droits d'accès à la mémoire qui permettent à la fois l'écriture et l'exécution en même temps.
    • Une protection contre les attaques de la classe Spectre a été ajoutée et activée par défaut, basée sur le mode automatique IBRS (Enhanced Indirect Branch Restricted Speculation) proposé dans les processeurs AMD Zen 4, qui vous permet d'activer et de désactiver de manière adaptative l'exécution spéculative des instructions pendant le traitement des interruptions , les appels système et les changements de contexte. La protection proposée entraîne des frais généraux inférieurs par rapport à la protection Retpoline.
    • Corrige une vulnérabilité qui pourrait contourner la protection contre les attaques Spectre v2 lors de l'utilisation de la technologie multithreading simultanée (SMT ou Hyper-Threading) et causée par la désactivation du mécanisme STIBP (Single Thread Indirect Branch Predictors) lors de la sélection du mode de protection IBRS.
    • Pour les systèmes basés sur ARM64, une nouvelle cible de construction "virtconfig" a été ajoutée, qui, lorsqu'elle est sélectionnée, active uniquement l'ensemble minimum de composants du noyau requis pour démarrer dans les systèmes de virtualisation.
    • Ajout de la prise en charge du filtrage des appels système à l'aide du mécanisme seccomp pour l'architecture m68k.
    • Ajout de la prise en charge des périphériques CRB TPM2 (Command Response Buffer) intégrés aux processeurs AMD Ryzen basés sur la technologie Microsoft Pluton.
  • Sous-système réseau
    • Une interface netlink a été ajoutée pour configurer la sous-couche PLCA (Physical Layer Collision Avoidance), définie dans la spécification IEEE 802.3cg-2019 et utilisée dans les réseaux Ethernet 802.3cg (10Base-T1S) optimisés pour connecter des appareils IoT et des systèmes industriels. L'utilisation de PLCA améliore les performances sur les réseaux Ethernet à médias partagés.
    • La prise en charge de l'API "extensions sans fil" pour la gestion des interfaces sans fil WiFi 7 (802.11be) a été interrompue, car cette API ne couvre pas tous les paramètres nécessaires. Lorsque vous tentez d'utiliser l'API "extensions sans fil", qui continue d'être prise en charge en tant que couche émulée, un avertissement s'affiche désormais pour la plupart des appareils actuels.
    • Une documentation détaillée sur l'API netlink a été préparée (pour les développeurs du noyau et pour les développeurs d'applications en espace utilisateur). L'utilitaire ynl-gen-c a été implémenté pour générer du code C basé sur les spécifications YAML du protocole Netlink.
    • La prise en charge de l'option IP_LOCAL_PORT_RANGE a été ajoutée aux sockets réseau pour simplifier la configuration des connexions sortantes via des traducteurs d'adresses sans utiliser SNAT. Lorsque vous utilisez la même adresse IP sur plusieurs hôtes, IP_LOCAL_PORT_RANGE permet à chaque hôte d'utiliser sa propre plage de ports réseau sortants et sur la passerelle de transférer des paquets en fonction des numéros de port.
    • Pour MPTCP (MultiPath TCP), la capacité de gérer des flux mixtes qui utilisent les protocoles IPv4 et IPv6 est implémentée. MPTCP est une extension du protocole TCP pour organiser le fonctionnement d'une connexion TCP avec la livraison de paquets simultanément sur plusieurs routes à travers différentes interfaces réseau liées à différentes adresses IP.
    • Pour IPv4, la possibilité d'utiliser l'extension BIG TCP est implémentée, ce qui permet d'augmenter la taille maximale des paquets TCP jusqu'à 4 Go pour optimiser le fonctionnement des réseaux internes à haut débit des centres de données. Cette augmentation de la taille des paquets avec un champ d'en-tête de 16 bits est obtenue en implémentant des paquets "jumbo" dont la taille d'en-tête IP est définie sur 0 et la taille réelle transmise dans un champ de 32 bits séparé dans un en-tête attaché séparé.
    • Un nouveau paramètre sysctl default_rps_mask a été ajouté, à travers lequel vous pouvez définir la configuration RPS (Receive Packet Steering) par défaut, qui est responsable de la distribution du traitement du trafic entrant sur les cœurs du processeur au niveau du gestionnaire d'interruptions.
    • Prise en charge interrompue des disciplines de mise en file d'attente pour restreindre le trafic CBQ (mise en file d'attente basée sur les classes), ATM (circuits virtuels ATM), dsmark (marqueur de service différencié), tcindex (indice de contrôle du trafic) et RSVP (protocole de réservation de ressources). Ces disciplines ont été abandonnées pendant longtemps et personne n'a voulu continuer à les soutenir.
  • équipement
    • Suppression de tous les pilotes graphiques basés sur DRI1 : i810 (anciennes cartes graphiques intégrées Intel 8xx), mga (Matrox GPU), r128 (ATI Rage 128 GPU, y compris les cartes Rage Fury, XPERT 99 et XPERT 128), savage (S3 Savage GPU), sis ( Crusty SiS GPU), tdfx (3dfx Voodoo) et via (VIA IGP), qui ont été obsolètes en 2016 et ne sont plus pris en charge dans Mesa depuis 2012.
    • Suppression des pilotes obsolètes de framebuffer (fbdev) omap1, s3c2410, tmiofb et w100fb.
    • Un pilote DRM a été ajouté pour le VPU (Versatile Processing Unit) intégré aux processeurs Intel Meteor Lake (14e génération), conçu pour accélérer les opérations de vision par ordinateur et d'apprentissage automatique. Le pilote est implémenté à l'aide du sous-système "accel", destiné à fournir un support pour les accélérateurs de calcul, qui peuvent être fournis à la fois sous la forme d'ASIC séparés et sous forme de blocs IP à l'intérieur du SoC et du GPU.
    • Le pilote i915 (Intel) étend la prise en charge des cartes graphiques discrètes Intel Arc (DG2/Alchemist), introduit la prise en charge préliminaire des GPU Meteor Lake et inclut la prise en charge des GPU Intel Xe HP 4tile.
    • Le pilote amdgpu ajoute la prise en charge de la technologie AdaptiveSync et la possibilité d'utiliser Secure Display avec plusieurs écrans. Mise à jour de la prise en charge de DCN 3.2 (Display Core Next), SR-IOV RAS, VCN RAS, SMU 13.x et DP 2.1.
    • Ajout de la prise en charge des plates-formes SM8350, SM8450 SM8550, SDM845 et SC8280XP au pilote msm (GPU Qualcomm Adreno).
    • Le pilote Nouveau a abandonné la prise en charge des anciens appels ioctl.
    • La prise en charge expérimentale de NPU VerSilicon (processeur de réseau neuronal VeriSilicon) a été ajoutée au pilote etnaviv.
    • Le pilote pata_parport pour les lecteurs IDE connectés via un port parallèle a été implémenté. Le pilote ajouté a permis de supprimer l'ancien pilote PARIDE du noyau et de mettre à niveau le sous-système ATA. Une limitation du nouveau pilote est l'impossibilité de connecter simultanément une imprimante et un disque via un port parallèle.
    • Ajout du pilote ath12k pour les cartes sans fil basées sur les puces Qualcomm avec prise en charge du Wi-Fi 7. Ajout de la prise en charge des cartes sans fil basées sur les puces RealTek RTL8188EU.
    • Ajout de la prise en charge de 46 cartes basées sur l'architecture ARM64, y compris Samsung Galaxy Tab A (2015), Samsung Galaxy S5, BananaPi R3, Debix Model A, EmbedFire LubanCat 1/2, Facebook Greatlakes, Orange Pi R1 Plus, Tesla FSD, ainsi que des appareils basé sur SoC Qualcomm MSM8953 (Snapdragon 610), SM8550 (Snapdragon 8 Gen 2), SDM450 et SDM632, boîtier TV Rockchips RK3128, RV1126 Vision, RK3588, RK3568, RK3566, RK3588 et RK3328, TI K3 (AM642/AM 654/ AM68 / AM69).

Dans le même temps, la Fondation latino-américaine du logiciel libre a formé une variante du noyau entièrement libre 6.3 - Linux-libre 6.3-gnu, débarrassé des éléments de micrologiciel et de pilote contenant des composants ou des sections de code non libres, dont la portée est limitée par le fabricant. Dans la version 6.3, les blobs ont été nettoyés dans les nouveaux pilotes ath12k, aw88395 et peb2466, ainsi que dans les nouveaux fichiers devicetree pour les périphériques qcom basés sur AArch64. Mise à jour du code de nettoyage de blob dans les pilotes et sous-systèmes amdgpu, xhci-rcar, qcom-q6v5-pas, sp8870, av7110, ainsi que dans les pilotes pour les cartes DVB avec décodage logiciel et dans les fichiers BPF précompilés. Arrêt de la purge des pilotes mga, r128, tm6000, cpia2 et r8188eu car ils ont été supprimés du noyau. Amélioration du nettoyage des blob du pilote i915.

Source: opennet.ru

Ajouter un commentaire