Publication du noyau Linux 6.15.

Après deux mois de développement, Linus Torvalds a présenté la version du noyau Linux 6.15. Parmi les changements les plus notables figurent : un mécanisme d'audit dans Landlock, un mode de fixation du mapping mémoire, le sous-système fwctl, le pilote Nova pour les GPU NVIDIA, la mise en œuvre d'un système hôte pour l'hyperviseur Hyper-V, le support des dispositifs de stockage zonés dans XFS, une optimisation du sous-système réseau, une vérification scrub dans Bcachefs, et la possibilité de contrôler des opérations via io_uring.

La nouvelle version comprend 15 945 corrections de 2 154 développeurs, la taille du patch étant de 59 Mo (les modifications ont touché 13 596 fichiers, avec 739 608 lignes de code ajoutées et 312 168 lignes supprimées). Dans la version précédente, il y avait 12 115 corrections de 1 984 développeurs, pour une taille de patch de 39 Mo. Environ 41 % des modifications apportées dans la 6.15 concernent les pilotes de périphériques, environ 16 % sont liées à la mise à jour du code spécifique aux architectures matérielles, 13 % concernent la pile réseau, 5 % les systèmes de fichiers et 4 % les sous-systèmes internes du noyau.

Les principales nouveautés du noyau 6.15 :

  • Sous-système de disque, entrée/sortie et systèmes de fichiers
    • Le mécanisme fanotify a été enrichi de la possibilité de suivre les événements de montage et de démontage.
    • Dans XFS, le support des dispositifs de stockage zonés a été ajouté (fracassant en zones de groupes de blocs ou secteurs, autorisant uniquement l'ajout de données par séquence avec une mise à jour de l'ensemble du groupe de blocs). Un drapeau rwf_dontcache a été ajouté pour désactiver la mise en cache lors de l'écriture. Il est désormais possible d'effectuer une écriture atomique de plusieurs blocs de données.
    • Dans Btrfs, la possibilité de spécifier lors du montage des niveaux de compression zstd négatifs (de -15 à -1, par exemple, «compress=zstd:-5») a été implémentée, offrant une vitesse d'exécution plus élevée au prix d'une efficacité de compression réduite. Le cache des chemins de fichiers a été amélioré (dans un test mené, l'exécution de l'opération «send» a été accélérée de 30 %). Le support pour des blocs de 2 Ko a été ajouté.
    • Dans EXT4, la performance lors de la reproduction d'un journal contenant un très grand nombre d'enregistrements annulés a été améliorée (une charge associée aux partitions sous le FS Lustre). Une recherche linéaire des enregistrements «dentry» (représentation interne des éléments de répertoire) a été mise en œuvre, résolvant les problèmes d'accès à certains fichiers en mode insensible à la casse. Le fonctionnement de l'option de montage «errors=remount-ro» a été stabilisé. La robustesse lors du traitement des systèmes de fichiers corrompus a été accrue.
    • F2FS dispose d'un ioctl pour obtenir des informations sur la priorité des opérations d'entrée/sortie pour un fichier donné. Le passage à l'utilisation des folios de pages mémoire a été effectué.
    • Bcachefs a ajouté un mode « scrub », qui vérifie l'intégrité de la lecture de toutes les données et métadonnées du système de fichiers. En cas d'erreur, une procédure de récupération est lancée. Bcachefs prend également en charge les systèmes de fichiers ayant une taille de bloc supérieure à la taille de page mémoire. Le format des structures de disque de Bcachefs a été stabilisé (les modifications futures du format seront mises en œuvre sous forme d'extensions optionnelles).
    • EROFS a ajouté la prise en charge de l'adressage des blocs sur 48 bits.
    • Dans le sous-système FUSE, les paramètres sysctl default_request_timeout et max_request_timeout ont été implémentés pour définir les délais d'attente pour l'exécution des requêtes, ce qui permet de surveiller les blocages des composants FUSE fonctionnant dans l'espace utilisateur. La taille maximale des noms de fichiers dans FUSE a été augmentée à 1024 caractères.
    • L'appel système statmount() a été enrichi de la possibilité d'obtenir des informations sur le mappage des identifiants d'utilisateurs des systèmes de fichiers montés, utilisé pour associer des fichiers d'un utilisateur sur une partition montée d'un autre utilisateur dans le système actuel.
    • Il est maintenant possible de créer un point de montage avec un mappage d'identifiants d'utilisateur différent de celui de la partition montée d'origine.
    • Des modifications ont été apportées à l'API de gestion du montage, simplifiant la construction de hiérarchies complexes de systèmes de fichiers sans révéler les parties individuelles des systèmes de fichiers devant rester cachées.
    • Le sous-système de gestion des dispositifs de bloc a ajouté le support des dispositifs matériels de protection des clés de chiffrement.
    • Dans le système de fichiers SMB, l'option is_network_name_deleted a été mise en œuvre et le mode smb_server_kerberos5 est activé par défaut.
    • Pour le FS OverlayFS, une option de montage « override_creds » a été ajoutée, permettant d'utiliser les identifiants de l'utilisateur appelant pour accéder aux niveaux inférieurs du stockage, plutôt que ceux de l'utilisateur effectuant le montage. Cette modification, par exemple, permet de demander à ce qu'un utilisateur ait les privilèges CAP_SYS_ADMIN lors du montage d'OverlayFS, tout en utilisant le système de fichiers avec des identifiants n'ayant pas ce privilège.
    • Dans exFAT, les opérations de suppression de fichiers ont été accélérées. Au lieu d'envoyer des requêtes « discard » individuellement pour chaque cluster libéré du fichier supprimé, le pilote regroupe désormais les requêtes. Dans le test effectué, le temps de suppression d'un fichier de 80 Go a été réduit de 286 secondes à 1,6 seconde.
    • Tous les pseudo-systèmes de fichiers, ainsi que le système de fichiers EXT2, ont été mis à jour pour utiliser la nouvelle API de montage des partitions.
    • Le code de support des systèmes de fichiers SYSV (SystemV/386, Xenix et Coherent) a été supprimé, car il est marqué comme non pris en charge depuis 2023.
  • Mémoire et services système
    • La version minimale de GCC requise pour compiler le noyau a été portée à 8.1 et celle de Clang à 15.0.0.
    • Le sous-système fwctl (Firmware Control) a été ajouté, fournissant une API pour gérer en toute sécurité les firmwares et exécuter des gestionnaires côté firmware depuis l'espace utilisateur. Des pilotes pour des dispositifs CXL (Compute Express Link), des adaptateurs Ethernet Mellanox ConnectX (mlx5) et des cartes de service AMD/Pensando ont été préparés sur la base de fwctl.
    • Les capacités du mécanisme pidfd ont été étendues, permettant d'utiliser des identifiants liés à des processus spécifiques et non réassignables comme les pid. Il a été possible d’extraire des données sur l'état de terminaison d'un processus, identifié via pidfd après que le processus parent ait reçu la confirmation de la terminaison du processus enfant (reaped) et que ses ressources aient été libérées. Un drapeau PIDFD_SELF a été ajouté aux appels système, permettant au processus de se référer à lui-même.
    • Pour l'architecture RISC-V, le support des extensions BFloat16, Zaamo (opérations atomiques en mémoire), Zalrsc (Load-Reserved/Store-conditional) et ZBKB (opérations bit à bit pour la cryptographie) a été implémenté.
    • Lors du traçage, la possibilité de sauvegarder les arguments des fonctions appelées et de les afficher dans les journaux de traçage a été assurée.
    • Le système d'entrée/sortie asynchrone io_uring a été amélioré pour prendre en charge la lecture des informations d'événements epoll. L'utilisation d'io_uring pour traiter les événements epoll permet de réduire le nombre de commutations de contexte et d'avoir la possibilité de traiter plusieurs événements epoll en une seule fois.
    • Le sous-système eBPF a amélioré la vérification des programmes contenant des boucles. De nouvelles instructions « timed_may_goto », « load-acquire » et « store-release » ont été ajoutées. Il est désormais possible de modifier les attributs étendus des fichiers à partir des programmes BPF. Une fonction try_alloc_pages() a été ajoutée, destinée à allouer de la mémoire lors d'une forte probabilité d'échec de l'opération (lors du lancement de programmes BPF dans des contextes restreints).

      Un nouveau primitive de verrouillage a été implémenté : rqspinlock (Resilient Queued Spin Lock), détectant les situations de blocage pendant l'exécution. Ce nouveau primitive permet de charger des programmes BPF pour lesquels le vérificateur ne garantit pas la validité de l'utilisation des verrous.

    • La fiabilité de l'allocation de grandes pages mémoire (huge-page) a été considérablement augmentée.
    • Le calcul des sommes de contrôle CRC64 sur les systèmes x86 a été considérablement accéléré. Entre autres, de nouvelles instructions vectorielles du jeu AVX-512 ont été utilisées pour augmenter la vitesse. Dans certaines situations, la performance a augmenté jusqu'à 100 fois.
    • Le transfert des changements de 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 noyau, se poursuit (le support de Rust n'est pas activé par défaut et ne rend pas Rust obligatoire dans les dépendances de compilation du noyau). La possibilité d'utiliser le macro « #[kunit_tests()] » pour exécuter des tests unitaire dans le code du noyau a été ajoutée. Le support de l'architecture ARMv7 a été implémenté. Les modules dma et hrtimer avec des wrappers Rust pour DMA (ajoutés par Linus en contournant le mainteneur qui a ensuite quitté son poste) et les minuteries haute précision ont été réalisés. Les modules ‘list’, ‘str’, ‘sync’, ‘error’ et ‘alloc’ ont été étendus. Le support d'une nouvelle syntaxe ‘&raw’ (raw_ref_op) a été ajouté.
    • Dans le sous-système perf, la possibilité de profiler les latences a été introduite, en utilisant les informations du planificateur de tâches.
    • Un paramètre de ligne de commande du noyau « traceoff_after_boot » a été ajouté, désactivant le traçage après que le noyau a démarré et que le processus init a été lancé. Ce paramètre peut être utilisé lors du diagnostic de problèmes liés au démarrage, garantissant que les données de traçage accumulées pendant le démarrage ne seront pas écrasées.
    • La prise en charge des systèmes x86 32 bits disposant de plus de 8 CPU et de 4 Go de RAM a été abandonnée. Un tel matériel n'est plus produit depuis longtemps et les systèmes nécessitant ces ressources ont été transférés vers des CPU 64 bits.
    • Des modifications ont été apportées à l'implémentation des minuteries POSIX, permettant à l'outil CRIU (Checkpoint/Restore in Userspace) de sauvegarder et de restaurer les identifiants des minuteries.
  • Virtualisation et sécurité
    • Il est désormais possible d'utiliser Linux comme environnement racine (Dom0, partition racine) pour l'hyperviseur Hyper-V (Microsoft Hypervisor). L'environnement hôte est responsable de la gestion de l'hyperviseur, de l'organisation du démarrage des systèmes invités, de l'allocation des ressources et de la prise en charge machines virtuelles de l'interaction avec le matériel. La gestion de l'hyperviseur Hyper-V sous Linux se fait via le périphérique /dev/mshv.
    • Le module Landlock, qui offre aux programmes non privilégiés des moyens de restreindre l'utilisation des objets du noyau Linux (hiérarchies de fichiers, sockets réseau, ioctl, etc.), a été doté d'un mécanisme d'audit. L'audit permet d'évaluer en détail les raisons des blocages d'accès qui surviennent lors de l'utilisation de Landlock, et fournit également des informations sur le moment où une opération a été bloquée, pourquoi le blocage a eu lieu et quelle règle a été appliquée.
    • Il est désormais possible d'implémenter dans les modules LSM (Linux Security Modules) des gestionnaires qui contrôlent les accès au système de saisie asynchrone io_uring et qui permettent de bloquer l'utilisation de io_uring pour contourner les restrictions d'accès aux appels système. Un tel gestionnaire a été implémenté dans le module LSM SELinux.
    • SELinux permet désormais d'appliquer des politiques à tous les types de données chargées par le noyau, y compris les images de firmware, les politiques de sécurité et les certificats.
    • Un mode de conservation (seal) pour certaines opérations de mappage mémoire réalisées par le noyau dans l'espace d'adressage du processus a été ajouté. La conservation place le mappage en mode lecture seule et empêche toute modification en cas d'exploitation d'une vulnérabilité. Cela s'applique aux mappages vDSO, vsyscall, vvar, sigpage et uprobes. Ce mode est désactivé par défaut car il peut perturber le fonctionnement de certaines applications. Une option de configuration CONFIG_MSEAL_SYSTEM_MAPPINGS a été ajoutée pour l'activer.
  • Sous-système réseau
    • Les efforts se poursuivent pour éliminer le verrouillage global RTNL (rtnl_lock) de la pile réseau et le transformer en verrouillages liés à des espaces de noms réseau individuels.
    • Ajout de la possibilité initiale de recevoir des paquets réseau via io_uring avec copie du contenu directement en mémoire du programme dans l'espace utilisateur sans mise en tampon intermédiaire (zero-copy). Les tests ont montré que ce changement permet de gérer le trafic à travers un canal de 200 gigabits en utilisant un seul cœur CPU.
    • Implémentation de sysctl tcp_rto_max_ms et de l'option TCP des sockets TCP_RTO_MAX_MS, qui permettent de définir le temps maximum entre les tentatives de retransmission des paquets.
    • Une série d'appels de rappel a été ajoutée dans BPF pour obtenir des informations sur le timing de différents endroits de la pile réseau, ce qui peut être utilisé pour diagnostiquer des problèmes de latences réseau.
    • Ajouts d'optimisations de performance pour les opérations réseau :
      • L'optimisation GRO (Generic Receive Offload), qui combine plusieurs petits paquets en un grand, est désormais activée lors du transfert de traitement de paquets vers un autre CPU (pour l'équilibrage de charge) en utilisant le sous-système XDP (eXpress Data Path), permettant de traiter les paquets au niveau du pilote réseau avant leur passage dans la pile réseau. Le gain de performance pour le traitement des flux TCP grâce à cette optimisation peut atteindre le double.
      • En période de forte charge, la performance de la fonction connect() a été améliorée de deux fois grâce au remplacement du verrouillage spin par le mécanisme de synchronisation RCU (Read-Copy-Update) lors de la recherche des enregistrements d'informations sur les côtés de la connexion (sources et cibles) adresses IP et ports). De plus, une optimisation du hachage a permis d'améliorer encore la performance de 229%.
      • La réalisation de MPTCP (Multipath TCP), une extension du protocole TCP pour assurer la livraison de paquets simultanément par plusieurs chemins via différentes interfaces réseau liées à différentes adresses IP, a été accélérée. MPTCP en mode à un flux a été accéléré de 29%.
      • Dans netfilter, lorsque le socket est présent, l'exécution des opérations de recherche de routes dans la FIB (Forwarding Information Base) a été interrompue. Grâce à cette optimisation, la performance a augmenté de 20%.
      • La performance de l'UDP en cas d'inondation (flood) a été augmentée de 10% en éliminant les opérations inutiles sur la structure sk_tsflags lors de la réception des paquets.
    • Ajout d'un pilote avec implémentation du protocole MCTP-over-USB.
  • Matériel
    • Le noyau a intégré la première version du pilote Nova pour les GPU NVIDIA équipés de firmwares GSP, utilisés depuis la série NVIDIA GeForce RTX 2000 basée sur l'architecture Turing. Le pilote est écrit en Rust. Dans un premier temps, seul le squelette nova-core a été ajouté, qui compte environ 400 lignes de code et met en œuvre un niveau d'abstraction de base au-dessus des interfaces logicielles des firmwares GSP. Dans la prochaine étape, le noyau prévoit d'inclure le pilote DRM nova-drm (Direct Rendering Manager) pour interagir avec le GPU depuis l'espace utilisateur, ainsi qu'un pilote VFIO avec gestionnaire vGPU, permettant d'utiliser des GPU NVIDIA virtuels dans des systèmes de virtualisation.
    • Le travail sur le pilote drm (Direct Rendering Manager) Xe pour les GPU basés sur l'architecture Intel Xe, qui est utilisée dans les cartes graphiques Intel de la famille Arc et dans les graphiques intégrés à partir des processeurs Tiger Lake, se poursuit. Le support de la SVM (Shared Virtual Memory), un composant du framework DRM, gérant la mémoire partagée utilisée entre le CPU et le GPU, a été ajouté.
    • Des identifiants pour de nouveaux GPU ont été ajoutés au pilote i915.
    • Dans le pilote Nouveau, le GSP RPC a été retravaillé et l'interface drm_slave_encoder a été intégrée.
    • Le pilote AMDGPU a implémenté le support de l'architecture DCN36 (Display Core Next). Il a ajouté la possibilité de définir ses propres courbes de luminosité utilisées pour la correction de la luminosité de l'écran.
    • Le pilote adreno a ajouté le support du GPU Qualcomm Adreno 623.
    • Le support des panneaux tactiles Apple Touch Bar a été ajouté.
    • Le support de la deuxième version de l'extension eUSB2 (eUSB2V2 — Embedded USB2 Version 2.0), permettant de réduire la tension d'alimentation (jusqu'à 1.2 volts) et d'améliorer les performances de l'USB 2.0, a été ajouté. La vitesse de transfert de données dans l'eUSB2V2 peut atteindre 4.8 Gbit/s, soit 10 fois plus rapide que les 480 Mbit/s habituels pour l'USB 2.0. L'eUSB2V2 permettra aux fabricants d'ordinateurs portables d'équiper leurs appareils de webcams de haute résolution tout en continuant à utiliser le bus Embedded USB2 pour leur connexion.
    • Le support des adaptateurs Ethernet Intel Killer E5000 (RTL8126) a été ajouté.
    • Le support des panneaux d'affichage Visionox RM692E5, Rockchip w552793dba-v10, kingdisplay-kd110n11-51ie et starry-2082109qfh040022-50e a été ajouté.
    • Un pilote pour les ordinateurs portables Samsung Galaxy Book a été ajouté.
    • Le support des systèmes audio Presonus Studio 1824c, Jabra Evolve 65 a été ajouté. Le support pour les modules DSP AMD ACP 7.x, AWINC WM88166, Everest ES8388, Intel AVS PEAKVOL et GAIN a également été ajouté. Le support audio sur les ordinateurs portables ASUS, HP et Lenovo a été amélioré.
    • Ajout de la prise en charge des plates-formes ARM, des SoC et des appareils : Arm Morello, AMD (Xilinx) Versal NET, Google Pixel Pro 6, NetCube Kumquat, MYIR Remi Pi, Huawei Matebook E Go, Milk-V Jupiter ST STM32MP2, Mediatek MT8370, Apple T2, Skov (i.MX8MP), EVK (i.MX95), Rockchip RK35xx, Allwinner A523, 11 cartes Toradex basées sur i.MX6.

En parallèle, la Fondation latino-américaine pour le logiciel libre a mis au point une version entièrement libre du noyau 6.15 — Linux-libre 6.15-gnu, dépouillé des éléments de firmware et de pilotes contenant des composants non libres ou des sections de code dont l'utilisation est limitée par le fabricant. Dans la version 6.15, le chargement des blobs dans les pilotes nova, Qualcomm iris v4l2, Airoha NPU, Tehuti Networks TN40xx ethernet 10G, Realtek 8814A wifi, écran tactile Apple Silicon SoC, Renesas UFS et aw88166 audio a été neutralisé. Le nettoyage du pilote Spider ethernet 1Gb, qui avait été supprimé du noyau, a été arrêté. Les liens vers des fichiers binaires tivoisés ont été supprimés. Le chargement de blobs à partir de code en langage Rust a été bloqué.

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