Version du noyau Linux 7.2

Après deux mois de développement, Linus Torvalds a publié le noyau. Linux 7.2. Parmi les changements les plus notables : mécanisme de flux de données USB4STREAM, optimisations des performances btrfs, xfs et ext4, suppression continue du code pour la prise en charge du processeur i486, la possibilité de créer des planificateurs SCHED_EXT imbriqués, réduction de la consommation de mémoire dans le sous-système d'échange, accélération des canaux non nommés, prise en charge des extensions Intel MBEC et AMD GMET dans KVM, suppression du protocole AppleTalk, prise en charge initiale de HDMI 2.1 FRL dans le pilote AMDGPU.

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

  • Sous-système de disque, E/S et systèmes de fichiers
    • Dans le mécanisme iomap, un appel supplémentaire à la fonction memset pour les itérations déjà terminées dans la fonction iomap_iter() a été supprimé, ce qui, avec une intensité d'E/S élevée sur les disques NVMe rapides, a augmenté le nombre d'opérations d'entrée/sortie par seconde (IOPS) de 5 % dans les tests effectués avec les systèmes de fichiers ext4 et xfs.
    • XFS a été déclaré stable pour la prise en charge des périphériques de stockage zonés (divisant des groupes de blocs ou de secteurs en zones, dans lesquelles seules les additions séquentielles de données sont autorisées, mettant à jour l'ensemble du groupe de blocs).
    • Btrfs prend désormais en charge par défaut les grands folios, réduisant ainsi la surcharge et améliorant les performances lors des E/S séquentielles intensives. La prise en charge expérimentale des folios très volumineux (jusqu'à 2 Mo) a été ajoutée. Une nouvelle fonction ioctl, GET_CSUMS, permet de récupérer les informations de somme de contrôle dans l'espace utilisateur, notamment pour l'utilitaire mkfs et l'optimisation de la déduplication. Les performances d'écriture séquentielle ont été améliorées de 15 % et celles des E/S directes de 59 %.
    • Le mécanisme de validation rapide du système de fichiers Ext4 a été considérablement repensé afin d'éliminer les conflits et les blocages. L'exportation des statistiques des instantanés d'inodes a été ajoutée via /proc/fs/ext4/*/fc_info. Les performances du calcul du hachage des répertoires ont été optimisées (vitesse quasiment doublée pour les noms de 255 caractères, +27 % pour les noms de 64 caractères et +11 % pour les noms de 32 caractères).
    • F2FS prend désormais en charge le retour d'erreur fserror, permettant ainsi de surveiller les problèmes du système de fichiers depuis l'espace utilisateur. Le temps consacré à la gestion des interruptions a été réduit.
    • Un nouveau gestionnaire dm-inlinecrypt a été ajouté à Device Mapper (DM) pour le chiffrement et le déchiffrement transparents des périphériques de stockage par blocs à l'aide de périphériques matériels dotés d'une fonctionnalité de chiffrement en ligne.
    • La documentation relative à l'ajout de nouveaux systèmes de fichiers au noyau a été fournie.
    • 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 (vous pouvez modifier manuellement la taille de bloc à l'aide de `/proc/fs/nfsd/max_block_size`). La prise en charge de la délégation de répertoires a été ajoutée, permettant d'effectuer des opérations sur un répertoire donné pendant une période déterminée sans vérifier les changements d'état. serveur.
    • Le serveur SMB prend désormais en charge les fichiers stockés sous forme compressée, ainsi que la compression des données lors de leur transmission sur le réseau.
    • La nouvelle implémentation NTFS (ntfsplus) ajoute la prise en charge des liens symboliques. Windows et la gestion correcte de nombreux types de corruption de métadonnées est assurée.
    • Le système de cache fscache, utilisé pour la mise en cache des données EROFS (Enhanced Read-Only File System) et qui était obsolète depuis deux ans, a été supprimé.
    • Ceph FS prend désormais en charge la réinitialisation manuelle des sessions client.
    • Le système de fichiers 9P a été optimisé pour améliorer les performances dans des scénarios tels que la compilation de projets.
    • Des indicateurs permettant de récupérer des informations sur la sensibilité à la casse du système de fichiers ont été ajoutés à l'appel système `file_getattr()`. L'indicateur `FS_XFLAG_CASEFOLD` indique que la vérification des noms de fichiers est effectuée sans tenir compte de la casse, et l'indicateur `FS_XFLAG_CASENONPRESERVING` indique que la casse n'est pas conservée lors de la création de nouveaux noms de fichiers. Ces indicateurs peuvent être utilisés avec les clients NFS insensibles à la casse.
    • L'indicateur O_EMPTYPATH a été ajouté à l'appel système openat2(), permettant de lui transmettre un chemin de fichier vide. Dans ce cas, le chemin du fichier à ouvrir est déterminé à partir du descripteur de fichier fourni.
    • L'indicateur OPENAT2_REGULAR a été ajouté à l'appel système openat2(), qui n'autorise que l'ouverture de fichiers ordinaires (une erreur EFTYPE sera renvoyée si l'on tente d'ouvrir un fichier spécial tel qu'un socket, un tube ou un périphérique).
  • Services mémoire et système
    • Le mécanisme USB4STREAM permet la transmission de données entre ordinateurs connectés via des ports USB4. Le périphérique /dev/tbstreamX a été ajouté, permettant la lecture et l'écriture de données à l'aide des fonctions standard read() et write(), comme pour les fichiers. Par exemple, sur un ordinateur, vous pouvez envoyer des informations avec la commande « echo hello > /dev/tbstream0 » et les lire sur un autre avec la commande « cat /dev/tbstream0 ». Le mécanisme USB4STREAM peut être combiné avec la possibilité d'établir une connexion réseau via un câble USB4 (thunderbolt_net) ou utilisé seul pour transférer des données entre applications ne prenant pas en charge les sockets réseau.
    • La deuxième série de modifications visant à supprimer la prise en charge des processeurs i486 a été intégrée. Plus de 13 lignes de code relatives à l'émulation de l'unité de calcul en virgule flottante pour les processeurs dépourvus d'unité de calcul en virgule flottante (FPU) ont été supprimées. La prise en charge des processeurs i486 sans les opérations matérielles CX8 (comparaison et échange de 8 octets) et TSC (compteur de cycles CPU utilisé par le planificateur de tâches) a été supprimée, le code d'émulation correspondant ayant été retiré.
    • La prise en charge des processeurs AMD Geode utilisés dans l'ordinateur OLPC XO-1 a été déclarée orpheline.
    • Ajout de la prise en charge de la mise à jour de l'implémentation d'Intel TDX (Trusted Domain Extensions), un mécanisme utilisé pour chiffrer la RAM du système invité. TDX est implémenté comme un module d'exécution logiciel spécial transféré de la mémoire flash vers la RAM par le BIOS au démarrage. Le noyau inclut désormais des fonctionnalités permettant de gérer ce module et de le remplacer par une version plus récente sur un système en cours d'exécution, sans nécessiter de redémarrage.
    • Un nouveau planificateur d'allocation des ressources GPU (planificateur GPU équitable) a été implémenté. Il détermine l'ordre d'exécution des tâches soumises par les processus utilisant le GPU. Au lieu d'utiliser la file d'attente FIFO traditionnelle pour les requêtes GPU, ce nouveau planificateur emploie des mécanismes d'allocation équitable basés sur le planificateur de tâches CFS (Completely Fair Scheduler), qui utilise un plan de lancement avec un temps de transition pour le processus suivant. L'effet le plus notable de ce nouveau planificateur est observé lors de l'exécution parallèle de tâches interactives sollicitant fortement le GPU. Juste avant la publication du noyau 7.2, le planificateur GPU équitable a été désactivé et l'ancien planificateur FIFO rétabli afin de corriger une régression provoquant une dégradation des performances et une utilisation du GPU à 100 % lors de l'exécution de certains jeux sous Proton.
    • Modifications apportées au sous-système eBPF : Il est désormais possible d’associer un programme BPF à plusieurs points de trace. Les programmes BPF associés à des points de trace peuvent accéder à la mémoire des composants de l’espace utilisateur, avec une gestion correcte des pages mémoire non allouées (défauts de page). L’appel système bpf() prend désormais en charge les attributs standard (log_buf, log_size, log_level et log_true_size), ce qui permet un transfert unifié des métadonnées pour toutes les commandes BPF, et non plus seulement pour BPF_PROG_LOAD, BPF_BTF_LOAD et BPF_MAP_CREATE. La limitation à 5 paramètres maximum pour les fonctions BPF a été levée. Il est désormais possible d’accéder en toute sécurité à la mémoire partagée bpf_arena sans risque d’accès à des pages mémoire non allouées (défauts de page). Une nouvelle version de la structure de table de hachage BPF a été implémentée, permettant un redimensionnement dynamique.
    • La génération de la sortie « /proc/interrupts » contenant les statistiques d'interruption a été optimisée, les structures de stockage des compteurs d'interruption ont été modernisées et une mise en cache a été ajoutée.
    • La génération du fichier « /proc/filesystems » utilisé dans libselinux a été accélérée.
    • Le planificateur de tâches prend désormais en charge la répartition de charge entre les cœurs du processeur, en tenant compte de l'état du cache interne. Il tente de regrouper les processus utilisant des ressources partagées, comme les threads d'un même processus, afin qu'ils partagent le même cache de haut niveau. Ceci améliore l'efficacité d'accès aux données en augmentant la probabilité de trouver les données requises dans le cache.
    • Le mécanisme SCHED_EXT, qui permet d'utiliser BPF pour créer des planificateurs de processeur, a continué à implémenter la possibilité de créer des planificateurs imbriqués (sous-planificateurs), qui permettent à chaque cgroup d'utiliser son propre planificateur de tâches.
    • Poursuite de la migration des modifications depuis la branche Rust-for-LinuxConcernant l'utilisation de Rust comme langage secondaire pour le développement de pilotes et de modules noyau (la prise en charge de Rust n'est pas activée par défaut et ne constitue pas une dépendance obligatoire pour la compilation du noyau), la prise en charge de Rust dans le noyau a été implémentée pour l'architecture s390. Le paquet « zerocopy », qui fournit des primitives de gestion de la mémoire rapides pour le code en mode « non sécurisé », est inclus.
    • La version minimale de l'ensemble d'outils LLVM requise pour compiler le noyau a été augmentée à 17.0.1.
    • Dans la bibliothèque C minimaliste nolibc, fournie avec le code source du noyau Linux et fournit un cadre pour les appels système de base, prenant en charge les architectures OpenRISC et PA-RISC 32 bits.
    • Le sous-système d'échange a été optimisé afin d'améliorer les performances et de réduire la consommation de mémoire en son sein, notamment en éliminant la surcharge liée au stockage des métadonnées statiques et en unifiant la mémoire anonyme et partagée lors de l'utilisation de volumes. La réduction de la consommation de mémoire est significative ; par exemple, le montage d'une partition d'échange de 1 To permet de réduire la consommation de mémoire d'environ 512 Mo.
    • Les performances du mécanisme d'éviction de mémoire, qui libère de la mémoire en la déplaçant vers l'espace d'échange lorsque le système est fortement sollicité, ont été améliorées. Sous certaines charges de travail, comme lors des tests de MongoDB avec YCSB (Yahoo! Cloud Serving Benchmark), des gains de performance allant jusqu'à 30 % ont été observés.
    • La commande « make sbom » a été ajoutée au système de compilation pour générer des listes SBOM (Software Bill Of Materials) qui reflètent les composants, les bibliothèques et les dépendances utilisés dans la compilation actuelle du noyau, ainsi que leurs informations de licence obtenues à partir des en-têtes SPDX dans les fichiers de code.
    • L'implémentation des canaux non nommés a été optimisée pour la gestion des verrous (les opérations d'allocation de mémoire sont déplacées hors de la portée du verrou), ce qui a augmenté le débit des canaux non nommés de 21 à 48 % et réduit la latence de 17 à 33 %.
  • Virtualisation et sécurité
    • L'allocateur de blocs prend désormais en charge l'utilisation de jetons d'allocation, implémentés dans le compilateur Clang 22. Ces jetons permettent d'attribuer des identifiants uniques aux opérations d'allocation de mémoire et de séparer l'allocation des différents types d'objets afin de complexifier l'exploitation des vulnérabilités de dépassement de tampon (grâce à cette séparation, un dépassement de tampon dans un type d'objet ne peut pas être facilement exploité pour endommager d'autres types d'objets).
    • Le mécanisme AF_ALG, exploité dans la vulnérabilité Copy Fail pour modifier les données du cache de pages, est obsolète et sera supprimé dans une prochaine version. AF_ALG permet l'utilisation d'accélérateurs matériels pour les calculs cryptographiques dans l'API Crypto du noyau, mais son utilisation reste limitée à des cas spécifiques. Dans le noyau 7.2, la prise en charge des E/S asynchrones, des pilotes hérités et du mécanisme de copie nulle dans les implémentations skcipher et aead a été supprimée d'AF_ALG. Seules les implémentations logicielles des algorithmes cryptographiques sont conservées, et la prise en charge des accélérateurs matériels cryptographiques dans l'API Crypto du noyau a été supprimée, car AF_ALG augmente considérablement la surface d'attaque sans apporter de gain de performance par rapport aux implémentations cryptographiques en espace utilisateur. AF_ALG était utilisé dans la boîte à outils Cryptsetup, mais sa prise en charge a été supprimée dans la version 2.8.7.
    • Le mécanisme IMA (Integrity Measurement Architecture), qui permet à un service externe de vérifier l'état des sous-systèmes du noyau pour garantir leur authenticité, a été complété par la prise en charge de l'exportation des tables internes contenant les résultats de mesure vers l'espace utilisateur et de leur suppression des tampons du noyau afin d'économiser de la mémoire.
    • Dans le module Landlock, qui fournit aux programmes non privilégiés les moyens de restreindre l'utilisation des objets du noyau Linux (hiérarchies de fichiers, sockets réseau, ioctl, etc.), la prise en charge du contrôle d'accès aux sockets UDP a été ajoutée, ainsi que la possibilité de désactiver sélectivement la sortie des informations de verrouillage d'objet dans le journal afin d'éviter d'encombrer le journal avec des informations non pertinentes.
    • Le noyau Linux déconseille l'utilisation de la fonction `strncpy()`, qui copie un nombre spécifié d'octets à partir d'une chaîne de caractères. L'utilisation de `strncpy()` engendrait des risques d'erreurs dus à l'absence d'un caractère nul en fin de chaîne ou à un remplissage excessif avec des zéros. Il est recommandé d'utiliser les fonctions `strscpy()` et `strscpy_pad()` pour copier les chaînes terminées par un caractère nul, ainsi que `strtomem_pad()`, `memcpy_and_pad()` et `memcpy()` pour copier les chaînes de taille fixe connue. Le travail visant à déconseiller l'utilisation de `strncpy()` dans le noyau a débuté en 2020 et a nécessité 362 contributions de 70 développeurs.
    • Dans l'hyperviseur KVM Prise en charge ajoutée des extensions Intel MBEC (Mode-Based Execution Control) et AMD GMET (Guest-Mode Execution Trap), qui permettent une gestion séparée des droits d'exécution du noyau et de l'espace utilisateur dans les systèmes invités, au niveau des tables de traduction mémoire. Auparavant, les extensions de virtualisation matérielle Intel et AMD permettaient de marquer les pages mémoire comme exécutables avec un seul bit, la séparation des droits du noyau et de l'espace utilisateur étant assurée par logiciel au niveau de l'hyperviseur. L'utilisation de MBEC et GMET élimine les contrôles d'autorisation côté hyperviseur et réduit considérablement les transferts de contrôle, gourmands en ressources, entre le système invité et l'hyperviseur VMexit.
  • Sous-système réseau
    • L'extension TCP-AO (TCP Authentication Option, RFC 5925) a été intégrée à la nouvelle bibliothèque cryptographique libcrypto, simplifiant ainsi le code et améliorant ses performances. TCP-AO permet la vérification des en-têtes TCP à l'aide des codes MAC (Message Authentication Code), en utilisant les algorithmes plus modernes HMAC-SHA-1-96 et AES-128-CMAC-96, remplaçant ainsi l'option TCP-MD5 précédemment disponible, qui reposait sur l'algorithme MD5, désormais obsolète.
    • Le nombre de sous-flux pris en charge pour les connexions TCP multipath (MPTCP) a été augmenté de 8 à 64.
    • Les travaux se sont poursuivis afin de réduire l'utilisation du verrou global rtnl_lock dans la pile réseau du noyau.
    • Le noyau a supprimé l'implémentation de la pile de protocoles AppleTalk, utilisée dans les ordinateurs Apple depuis 1985 et remplacée dans les années 1990 par TCP/IPDe plus, les composants de la technologie de transfert de données ATM non liés à PPPoATM ont été supprimés, ainsi que les interfaces réseau ARCnet basées sur les bus ISA et PCMCIA, les adaptateurs Bluetooth avec interface PCMCIA, les accélérateurs Chelsea TLS, le code d'intégration de TLS avec sockmap et la prise en charge des bandes de fréquences 5/10 MHz dans la pile sans fil cfg80211/mac80211. En raison de problèmes bloquants non résolus et du manque de mainteneurs, une implémentation spécifique de l'accélération du traitement TLS basée sur le moteur de déchargement TCP a été supprimée (l'implémentation de déchargement TLS plus courante est conservée). Le code de compatibilité avec les tables x_tables 32 bits sur les systèmes 64 bits a été désactivé et sera supprimé.
    • Le pilote PPPoE prend désormais en charge les mécanismes GRO (Generic Receive Offload) et GSO (Generic Segmentation Offload) pour l'accélération matérielle du réassemblage et de la segmentation des paquets. L'utilisation de GRO et GSO augmente considérablement le débit du trafic entrant. Par exemple, sur les équipements MediaTek MT7621 configurés avec un traducteur d'adresses, le débit maximal est passé de 130 Mbit/s à 630 Mbit/s.
  • Équipement
    • Le pilote AMDGPU prend désormais en charge la technologie HDMI 2.1 FRL (Fixed Rate Link), permettant la transmission de vidéo non compressée en 4K/120 Hz et 8K/60 Hz. La prise en charge de HDMI 2.1 était auparavant difficile à obtenir dans les pilotes open source en raison des exigences de licence du HDMI Forum, mais AMD a désormais obtenu une implémentation similaire.
    • Le pilote i915 permet désormais de définir la couleur d'arrière-plan du contrôleur d'affichage. Le paramètre pin_params.needs_low_address a été implémenté.
    • Le développement du pilote Xe DRM (Direct Rendering Manager) pour les GPU basés sur l'architecture Intel Xe, utilisée dans les cartes graphiques et les circuits intégrés Intel Arc, à commencer par les processeurs Tiger Lake, s'est poursuivi. La prise en charge initiale de la plateforme CRI (Crescent Island) a été ajoutée. Un contrôleur système a été implémenté pour les plateformes dGPU Xe3p.
    • Le pilote Nouveau résout les problèmes liés au GPU NVIDIA GA100.
    • Le pilote v3d a été mis à jour pour inclure la possibilité de gérer la consommation d'énergie du GPU v3D sur les cartes Raspberry Pi.
    • Nous avons poursuivi l'intégration des composants du pilote Nova pour les GPU NVIDIA équipés du firmware GSP utilisé depuis la série NVIDIA GeForce RTX 2000 basée sur la microarchitecture Turing. Le pilote est écrit en Rust. La prise en charge des GPU des séries NVIDIA GA100, Hopper et Blackwell a été ajoutée.
    • Ajout de la prise en charge des cartes 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.

Dans le même temps, la Fondation latino-américaine pour le logiciel libre a créé une version du noyau entièrement libre 7.2 - LinuxLa version 7.2 de GNU (libre) a été nettoyée des éléments de firmware et de pilote contenant des composants non libres ou des sections de code à portée limitée par le fabricant. Cette version inclut un nettoyage des blobs pour les nouveaux pilotes rt722-sdca et tac5xx2. Le code de nettoyage des pilotes amdgpu, nova core, qcom iris, q6v5, iwlwifi, amdxnda, adreno, r8152 et mt792x a été mis à jour. Les interfaces de chargement du firmware ont été ajustées. Les noms des blobs dans les fichiers devicetree (dts) pour les puces ARM ont été nettoyés.

Source: opennet.ru

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