Version du noyau Linux 7.2

Après deux mois de développement, Linus Torvalds a présenté la version 7.2 du noyau Linux. Parmi les changements les plus notables : le mécanisme de transmission de données USB4STREAM, des optimisations de performance pour btrfs, xfs et ext4, la poursuite de la suppression du code pour le support du processeur i486, la possibilité de créer des planificateurs imbriqués SCHED_EXT, une réduction de la consommation de mémoire dans la sous-système de swap, l'accélération des canaux anonymes, le support des extensions Intel MBEC et AMD GMET dans KVM, la suppression du protocole AppleTalk, et le support initial de HDMI 2.1 FRL dans le pilote AMDGPU.

Les principales nouveautés du noyau 7.2 (1, 2, 3) :

  • Sous-système de disque, entrée/sortie et systèmes de fichiers
    • Dans le mécanisme iomap, l'appel superflu à la fonction memset a été supprimé pour les itérations déjà terminées dans la fonction iomap_iter(), ce qui, en cas d'entrées/sorties intensives sur des supports NVMe rapides, a amélioré de 5 % le nombre d'opérations d'entrées/sorties par seconde (IOPS) dans les tests utilisant le système de fichiers ext4 et xfs.
    • Dans XFS, le support des dispositifs de stockage zonés a été déclaré stable (division en zones de groupes de blocs ou de secteurs, où seule l'ajout séquentiel de données est autorisé, nécessitant la mise à jour de l'ensemble du groupe de blocs).
    • Dans Btrfs, le support des grandes pages mémoire (large folios) est maintenant activé par défaut, permettant de réduire les overheads et d'améliorer les performances lors d'entrées/sorties séquentielles intensives. Un support expérimental pour les enormes pages (« huge folios »), d'une taille allant jusqu'à 2 Mo, a été ajouté. Un nouveau ioctl GET_CSUMS a été introduit pour obtenir des informations sur les sommes de contrôle dans l'espace utilisateur, par exemple pour l'outil mkfs et l'optimisation de la dé-duplication. La performance d'écriture séquentielle a été améliorée de 15 % et celle des entrées/sorties directes de 59 %.
    • Dans le système de fichiers ext4, la mise en œuvre du mécanisme « fast commit » a été considérablement retravaillée pour éviter les blocages concurrentiels et mutuels. L'exportation des statistiques de snapshots d'inodes a été ajoutée via /proc/fs/ext4/*/fc_info. Les performances de calcul des hachages des répertoires ont été optimisées (pour des noms de 255 caractères, l'accélération est presque de deux fois, 64 caractères 27 %, 32 caractères — 11 %).
    • Dans F2FS, le support pour le retour des erreurs fserror a été ajouté, permettant de suivre les problèmes avec le système de fichiers depuis l'espace utilisateur. Le temps passé dans le contexte de gestion des interruptions a été réduit.
    • Dans Device Mapper (DM), un nouveau gestionnaire dm-inlinecrypt a été ajouté pour organiser le chiffrement et le déchiffrement transparents des périphériques de bloc, en utilisant des dispositifs matériels dotés de la fonction de chiffrement en ligne.
    • Une documentation a été proposée pour l'ajout de nouveaux systèmes de fichiers au noyau.
    • Dans NFS, la taille de bloc par défaut a été augmentée à 4 Mo sur les systèmes disposant d'au moins 16 Go de RAM (pour modifier manuellement la taille du bloc, utilisez /proc/fs/nfsd/max_block_size). La prise en charge de la délégation de gestion de répertoire au client a été ajoutée, permettant d'effectuer des opérations sur ce répertoire pendant un certain temps sans vérifier les modifications d'état sur le serveur.
    • Le serveur SMB a ajouté la prise en charge de fichiers stockés de manière compressée, ainsi que la compression des données lors de leur transmission sur le réseau.
    • Dans la nouvelle implémentation de NTFS (ntfsplus), la prise en charge des liens symboliques Windows a été ajoutée, garantissant un traitement correct de nombreux types de corruption de métadonnées.
    • Le backend fscache pour le caching des données du FS EROFS (Enhanced Read-Only File System), qui avait été déclaré obsolète il y a deux ans, a été supprimé.
    • Dans le FS Ceph, la prise en charge de la réinitialisation manuelle des sessions clientes a été ajoutée.
    • Des optimisations ont été apportées au système de fichiers 9P, améliorant les performances dans des scénarios tels que la construction de projets.
    • Des indicateurs ont été ajoutés à l'appel système file_getattr() pour obtenir des informations sur la prise en compte de la casse dans le système de fichiers. L'indicateur FS_XFLAG_CASEFOLD indique que la vérification des noms de fichiers se fait sans tenir compte de la casse, tandis que l'indicateur FS_XFLAG_CASENONPRESERVING indique que lors de la création de nouveaux noms de fichiers, les informations de casse ne sont pas conservées. Ces indicateurs peuvent être utilisés dans les clients NFS qui fonctionnent sans tenir compte de la casse.
    • Un indicateur O_EMPTYPATH a été ajouté à l'appel système openat2(), permettant la transmission d'un chemin de fichier vide. Dans ce cas, le chemin du fichier à ouvrir est déterminé en fonction du descripteur de fichier passé.
    • Un indicateur OPENAT2_REGULAR a été ajouté à l'appel système openat2(), permettant l'ouverture uniquement de fichiers réguliers (si une tentative d'ouverture d'un fichier spécial, comme un socket, un tube ou un dispositif, est faite, l'erreur EFTYPE sera renvoyée).
  • Mémoire et services système
    • Un mécanisme USB4STREAM a été mis en œuvre pour le transfert de données entre les ordinateurs reliés par câble via des ports USB4. Un périphérique /dev/tbstreamX a été ajouté, permettant de lire et d'écrire des données en utilisant les fonctions standard read() et write(), similaire à la lecture et à l'écriture dans des fichiers. Par exemple, sur un hôte, vous pouvez envoyer des informations avec la commande « echo hello > /dev/tbstream0 », et sur l'autre, lire avec la commande « cat /dev/tbstream0 ». Le mécanisme USB4STREAM peut être combiné avec la possibilité d'établir une connexion réseau via le câble USB4 (thunderbolt_net) ou être utilisé séparément si nécessaire pour le transfert de données entre des applications ne prenant pas en charge les sockets réseau.
    • La deuxième série de modifications pour la fin du support des processeurs i486 a été activée. Plus de 13 lignes de code liées à l'émulation d'un bloc pour les calculs à virgule flottante pour les processeurs sans FPU ont été supprimées. L'assistance pour les processeurs i486 sans opérations matérielles CX8 (compare and swap de 8 octets) et TSC (compteur de cycles CPU, utilisé dans le planificateur de tâches) a été retirée, le code d'émulation correspondant ayant été supprimé.
    • Le support des processeurs AMD Geode, utilisés dans l'ordinateur OLPC XO-1, a été déclaré sans maintenance (orphaned).
    • Le support de la mise à jour de la mise en œuvre du mécanisme Intel TDX (Trusted Domain Extensions), utilisé pour le chiffrement de la mémoire vive des systèmes invités, a été ajouté. TDX est réalisé sous la forme d'un module runtime logiciel spécial, qui au moment du démarrage initial est transféré par le BIOS de la mémoire Flash à la mémoire vive. Des fonctionnalités ont été ajoutées au noyau pour gérer ce module et le remplacer par une version plus récente sur un système en cours d'exécution sans nécessiter un redémarrage.
    • Un nouveau planificateur de répartition des ressources GPU (Fair GPU scheduler) a été réalisé, utilisé pour déterminer l'ordre d'exécution des tâches sur le GPU envoyées par des processus utilisant le GPU. Au lieu d'appliquer la traditionnelle file d'attente FIDO pour les requêtes GPU, le nouveau planificateur utilise des mécanismes de répartition équitable des ressources, inspirés du planificateur de tâches CFS (Completely Fair Scheduler), qui applique un plan de lancement avec un temps de transition vers l'exécution du processus suivant. L'effet le plus notable de l'utilisation du nouveau planificateur est observé lors de l'exécution parallèle de tâches interactives utilisant intensivement le GPU. À la dernière minute avant la sortie du noyau 7.2, l'activation du Fair GPU scheduler a été annulée et l'ancien planificateur FIFO a été rétabli en raison de la nécessité de déboguer une régression entraînant une diminution des performances et une charge GPU de 100 % lors du lancement de certains jeux dans Proton.
    • Modifications dans le sous-système eBPF : Ajout de la possibilité d'attacher un programme BPF à plusieurs points de traçage (tracepoint). Aux programmes BPF attachés aux points de traçage, un accès à la mémoire des composants fonctionnant dans l'espace utilisateur a été ajouté, avec un traitement correct des accès à des pages mémoire non allouées (page fault). Un support pour les attributs typiques (log_buf, log_size, log_level et log_true_size) a été intégré à l'appel système bpf(), permettant d'unifier le passage de métadonnées dans toutes les commandes BPF, sans se limiter aux commandes BPF_PROG_LOAD, BPF_BTF_LOAD et BPF_MAP_CREATE. La limitation d'émission de plus de 5 paramètres dans la fonction BPF a été supprimée. Il est désormais possible d'accéder en toute sécurité à la mémoire partagée bpf_arena sans craindre d'accéder à des pages mémoire non allouées (page fault). Une nouvelle version de la structure BPF hash map, permettant de changer dynamiquement la taille, a été mise en œuvre.
    • L'affichage de "/proc/interrupts" avec des statistiques sur les interruptions a été optimisé, et les structures pour le stockage des compteurs d'interruptions ont été modernisées avec l'ajout de la mise en cache.
    • La génération du fichier "/proc/filesystems", utilisé dans libselinux, a été accélérée.
    • Le planificateur de tâches prend en charge l'équilibrage de la charge entre les cœurs CPU, en tenant compte des états du cache interne du processeur. Le planificateur essaie désormais de regrouper les processus utilisant des ressources communes, comme les threads d'un même processus, afin de les utiliser dans le contexte d'un même cache de niveau supérieur, ce qui améliore l'efficacité d'accès aux données en augmentant la probabilité de trouver les données nécessaires dans le cache.
    • Dans le mécanisme SCHED_EXT, qui permet d'utiliser BPF pour créer des planificateurs de CPU, la mise en œuvre de la possibilité de créer des planificateurs imbriqués (sub-scheduler) a été poursuivie, grâce à laquelle chaque cgroup peut disposer de son propre planificateur de tâches.
    • La migration des changements depuis la branche Rust-for-Linux, liés à l'utilisation du langage Rust comme deuxième langage pour le développement de pilotes et de modules de noyau, a été poursuivie (le support de Rust n'est pas activé par défaut et ne fait pas de Rust une dépendance de compilation obligatoire pour le noyau). La possibilité d'utiliser Rust dans le noyau est implémentée pour l'architecture s390. Le paquet «zerocopy» avec des primitives rapides pour travailler avec la mémoire en mode «unsafe» est inclus.
    • La version minimale de l'outil LLVM nécessaire pour compiler le noyau a été élevée à 17.0.1.
    • La bibliothèque C minimaliste nolibc, fournie avec le code source du noyau Linux et offrant une interface sur les appels système de base, a été étendue pour prendre en charge les architectures OpenRISC et PA-RISC 32 bits.
    • Des optimisations ont été apportées à la sous-système de swap, améliorant la performance et réduisant la consommation de mémoire dans le sous-système lui-même en éliminant les frais généraux liés au stockage des métadonnées statiques et en unifiant le traitement de la mémoire anonyme et partagée lors de l'utilisation de fichiers. La réduction de la consommation de mémoire est suffisamment significative, par exemple lors du montage d'une partition de swap de 1 To, la consommation de mémoire est réduite d'environ 512 Mo.
    • L'efficacité du mécanisme d'éviction de la mémoire, qui supprime ou déplace vers la partition de swap des zones de mémoire pour libérer de la mémoire en cas de pénurie dans le système, a été améliorée. Dans certains types de charges, par exemple lors des tests de MongoDB avec YCSB (Yahoo! Cloud Serving Benchmark), une augmentation de performance allant jusqu'à 30% a été observée.
    • Une commande « make sbom » a été ajoutée au système de compilation pour générer des listes SBOM (Software Bill Of Materials), reflétant les composants, bibliothèques et dépendances utilisés dans la compilation actuelle du noyau, ainsi que des informations sur leurs licences obtenues à partir des en-têtes SPDX dans les fichiers source.
    • Une optimisation a été réalisée dans l'implémentation des canaux anonymes (pipe) pour améliorer le traitement des verrouillages (les opérations de mémorisation ont été déplacées en dehors de la portée du verrouillage), ce qui a augmenté la bande passante des canaux anonymes de 21 à 48 % et réduit les délais de 17 à 33 %.
  • Virtualisation et sécurité
    • Le mécanisme de répartition de la mémoire slab (slab allocator) a été amélioré avec l'ajout de l'utilisation de jetons d'allocation de mémoire (Allocation Token), implémentés dans le compilateur Clang 22. Ces jetons permettent de marquer les opérations d'allocation de mémoire avec des identifiants uniques et d'organiser le placement distinct de différents types d'objets pour compliquer l'exploitation des vulnérabilités causées par un débordement de tampon (en séparant, il devient plus difficile d'utiliser un débordement de tampon d'un type d'objet pour altérer d'autres types d'objets).
    • Le mécanisme AF_ALG, exploité dans la vulnérabilité Copy Fail pour modifier les données dans le cache de pages, a été déclaré obsolète et est prévu pour être retiré dans l'une des futures versions. AF_ALG permet l'utilisation d'accélérateurs matériels pour les calculs cryptographiques dans l'API Crypto du noyau, mais son utilisation se limite à des situations très spécifiques. Dans le noyau 7.2, le support de l'entrée/sortie asynchrone, des anciens pilotes et du mécanisme zero-copy dans l'implémentation skcipher et aead a été supprimé. Seules les implémentations logicielles des algorithmes cryptographiques sont conservées, et le support des accélérateurs cryptographiques matériels dans l'API crypto du noyau a été retiré, car AF_ALG augmente considérablement la surface d'attaque sans offrir de gain de performance par rapport à l'implémentation de la cryptographie dans l'espace utilisateur. AF_ALG était utilisé dans l'outil Cryptsetup, mais ce support a été supprimé dans la version récente 2.8.7.
    • Le mécanisme IMA (Integrity Measurement Architecture), permettant à un service externe de vérifier l'état des sous-systèmes du noyau pour garantir leur authenticité, a été enrichi d'un support pour l'exportation des tables internes contenant les résultats de mesures vers l'espace utilisateur avec suppression des buffers du noyau afin d'économiser de la mémoire.
    • Le module Landlock, qui fournit aux programmes non privilégiés des moyens de restreindre l'accès aux objets du noyau Linux (hiérarchies de fichiers, sockets réseau, ioctl, etc.), a ajouté la prise en charge de la gestion des accès aux sockets UDP, ainsi que la possibilité de désactiver sélectivement les journaux des informations de blocage des objets pour éviter l'encombrement des journaux par des informations non pertinentes.
    • Le noyau a été débarrassé de l'utilisation de la fonction strncpy(), qui copiaisait un nombre défini d'octets de la chaîne d'entrée. L'utilisation de strncpy() engendrait des risques d'erreurs en raison du passage du caractère nul à la fin de la chaîne ou d'un remplissage excessif par des zéros. Il est recommandé d'utiliser les fonctions strscpy() et strscpy_pad() pour copier des chaînes terminées par un caractère nul, ainsi que strtomem_pad(), memcpy_and_pad() et memcpy() pour copier des chaînes de taille fixe connue. Le travail pour éliminer l'utilisation de strncpy() dans le noyau a débuté en 2020 et a nécessité l'adoption de 362 modifications par 70 développeurs.
    • Dans l'hyperviseur KVM le support des extensions Intel MBEC (Mode-Based Execution Control) et AMD GMET (Guest-Mode Execution Trap) a été ajouté, permettant de traiter séparément les droits d'exécution du code pour le noyau et l'espace utilisateur dans les systèmes invités dans les tables de traduction de la mémoire. Auparavant, les extensions de virtualisation matérielle Intel et AMD permettaient de marquer les pages mémoire comme exécutable avec un seul bit, divisant les droits pour le noyau et l'espace utilisateur au niveau de l'hyperviseur. L'utilisation de MBEC et GMET permet d'éliminer les vérifications d'autorisation du côté de l'hyperviseur et de réduire considérablement l'intensité des transmissions de contrôle de la machine virtuelle vers l'hyperviseur (VMexit).
  • Sous-système réseau
    • La mise en œuvre de l'extension TCP-AO (TCP Authentication Option, RFC 5925) a été modifiée pour utiliser la nouvelle bibliothèque cryptographique libcrypto, ce qui a permis de simplifier le code et d'améliorer l'efficacité. TCP-AO permet de vérifier les en-têtes TCP par des MAC (Message Authentication Code), en utilisant des algorithmes plus modernes HMAC-SHA-1-96 et AES-128-CMAC-96 au lieu de l'option TCP-MD5 basée sur l'ancien algorithme MD5.
    • Le nombre de sous-flux pris en charge pour les connexions Multipath TCP (MPTCP) a été augmenté de 8 à 64.
    • Le travail de réduction de l'utilisation du verrouillage global rtnl_lock dans la pile réseau du noyau a été poursuivi.
    • L'implémentation de la pile de protocoles AppleTalk a été supprimée du noyau, celle-ci ayant été utilisée dans les ordinateurs Apple depuis 1985 et remplacée par TCP/IP dans les années 1990. De plus, certains composants de technologie de transmission de données ATM, non liés à PPPoATM, ainsi que les interfaces réseau ARCnet basées sur des bus ISA et PCMCIA, les adaptateurs Bluetooth avec interface PCMCIA, les accélérateurs TLS Chelsea, le code d'intégration de TLS avec sockmap, et le support des bandes de fréquences 5/10 MHz dans la pile sans fil cfg80211/mac80211 ont été supprimés. En raison de problèmes non résolus liés aux verrous et de l'absence de maintenance, l'implémentation spécifique de l'accélération du traitement TLS basée sur TCP Offload Engine a été retirée (l'implémentation de TLS offload la plus courante a été conservée). Le code de compatibilité avec x_tables 32 bits sur les systèmes 64 bits a été désactivé et est prévu pour suppression.
    • Le pilote pppoe a été mis à jour pour ajouter le support des mécanismes GRO (Generic Receive Offload) et GSO (Generic Segmentation Offload) pour l'accélération matérielle de la reconstruction et de la segmentation des paquets. L'utilisation de GRO et GSO permet d'améliorer considérablement la bande passante pour le trafic entrant, par exemple, sur les dispositifs MediaTek MT7621, la bande passante maximale est passée de 130 Mbit/s à 630 Mbit/s dans une configuration NAT.
  • Matériel
    • Le pilote AMDGPU a introduit un support initial pour la technologie HDMI 2.1 FRL (Fixed Rate Link), permettant la transmission de vidéo non compressée en 4K/120Hz et 8K/60Hz. Précédemment, le support de HDMI 2.1 n'avait pas pu être réalisé dans les pilotes open source en raison des exigences de licence du HDMI Forum, mais maintenant AMD a réussi à coordonner une telle implémentation.
    • Dans le pilote i915, le support de la configuration de la couleur d'arrière-plan par le contrôleur d'affichage a été ajouté. Le paramètre pin_params.needs_low_address a été mis en œuvre.
    • Le travail sur le pilote drm (Direct Rendering Manager) Xe pour les GPU basés sur l'architecture Intel Xe, utilisée dans les cartes graphiques Intel de la famille Arc et dans la graphique intégrée depuis les processeurs Tiger Lake, a été poursuivi. Un support initial pour la plateforme CRI (Crescent Island) a été ajouté. Pour les plateformes dGPU Xe3p, un contrôleur système a été implémenté.
    • Le pilote Nouveau a résolu des problèmes concernant le GPU NVIDIA GA100.
    • Dans le pilote v3d, la capacité de contrôler la consommation d'énergie du GPU v3D sur les cartes Raspberry Pi a été ajoutée.
    • L'intégration des composants du pilote Nova pour les GPU NVIDIA, équipés de firmwares GSP, a été poursuivie à partir de la série NVIDIA GeForce RTX 2000 basée sur l'architecture Turing. Le pilote est écrit en Rust. La prise en charge des GPU NVIDIA GA100 et des séries Hopper et Blackwell a été ajoutée.
    • Ajout de la prise en charge des plates-formes ARM, des SoC et des appareils : Apple t8122 (M3), Motorola Edge 30, Nothing Phone 3a, Google Pixel 3a XL, Qualcomm Dragonwing IPQ9650, Huawei Hawi, ZTE zx297520v3, Renesas R-Car M3Le, ASPEED AST27xx, Cortina Gemini, NXP i.MX6/8/9, NXP LX2160A, TI K3 AM62x.

Parallèlement, la Fondation latino-américaine pour le logiciel libre a formé une version entièrement libre du noyau 7.2 — Linux-libre 7.2-gnu, débarrassée des éléments de firmwares et de pilotes contenant des composants ou des segments de code non libres, dont l'utilisation est limitée par le fabricant. Dans la version 7.2, une purification a été réalisée sur les blobs des nouveaux pilotes rt722-sdca et tac5xx2. Le code de purification dans les pilotes amdgpu, nova core, qcom iris, q6v5, iwlwifi, amdxnda, adreno, r8152 et mt792x a été mis à jour. Des ajustements des interfaces pour le chargement des firmwares ont été effectués. La purification des noms des blobs dans les fichiers dts (devicetree) pour les puces ARM a été réalisée.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster