Après deux mois de développement, Linus Torvalds a publié le noyau Linux 6.15. Parmi les changements les plus notables, on trouve : le mécanisme d'audit dans Landlock, le mode d'épinglage du mappage de mémoire, le sous-système fwctl, le pilote Nova pour les GPU NVIDIA, l'implémentation du système hôte pour l'hyperviseur Hyper-V, la prise en charge des périphériques de stockage zonés dans XFS, l'optimisation du sous-système réseau, la vérification de nettoyage dans Bcachefs, la possibilité de contrôler les opérations via io_uring.
La nouvelle version comprend 15945 correctifs de 2154 développeurs, la taille du patch est de 59 Mo (les modifications ont affecté 13596 fichiers, 739608 lignes de code ont été ajoutées, 312168 lignes ont été supprimées). La dernière version contenait 12115 correctifs de 1984 développeurs, la taille du patch était de 39 Mo. Environ 41 % de tous les changements introduits dans la version 6.15 sont liés aux pilotes de périphériques, environ 16 % des changements sont liés à la mise à jour du code spécifique aux architectures matérielles, 13 % sont liés à la pile réseau, 5 % sont liés aux systèmes de fichiers et 4 % sont liés aux sous-systèmes internes du noyau.
Innovations clés dans le noyau 6.15 :
- Sous-système de disque, E/S et systèmes de fichiers
- Le mécanisme fanotify a été mis à jour pour inclure la possibilité de suivre les événements de montage et de démontage.
- XFS ajoute la prise en charge des périphériques de stockage zonés (divisant des groupes de blocs ou de secteurs en zones, dans lesquelles seuls les ajouts séquentiels de données sont autorisés, l'ensemble du groupe de blocs étant mis à jour). Ajout de l'indicateur rwf_dontcache pour désactiver la mise en cache d'écriture. La possibilité d’écrire atomiquement plusieurs blocs de données à la fois a été implémentée.
- Btrfs a la capacité de spécifier des niveaux de compression zstd négatifs (de -15 à -1, par exemple, « compress=zstd:-5 ») lors du montage, ce qui offre une vitesse plus élevée au prix d'une efficacité de compression réduite. Mise en cache améliorée du chemin de fichier (dans le test effectué, l'exécution de l'opération « envoyer » a été accélérée de 30 %). Ajout de la prise en charge des blocs de 2 Ko.
- EXT4 a amélioré les performances lors de la relecture d'un journal avec un très grand nombre d'enregistrements rappelés (une charge typique des partitions exécutant Lustre FS). Une recherche linéaire des entrées dentry (représentation interne des éléments du répertoire) a été implémentée, 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é ajusté. Résistance accrue lors du traitement des FS endommagés.
- F2FS implémente ioctl pour obtenir des informations sur la priorité de l'opération d'E/S pour un fichier donné. Des travaux ont été réalisés pour passer à l'utilisation de folios de pages.
- Bcachefs dispose d'un mode « scrub », qui vérifie l'exactitude de la lecture de toutes les données et métadonnées du FS. Si des erreurs sont détectées, la procédure de récupération est lancée. Bcachefs ajoute également la prise en charge du travail avec des systèmes de fichiers dont la taille de bloc est supérieure à la taille de la page mémoire. Le format des structures de disque Bcachefs a été stabilisé (d'autres modifications de format seront implémentées sous la forme de modules complémentaires facultatifs).
- EROFS ajoute la prise en charge de l'adressage par blocs 48 bits.
- Le sous-système FUSE implémente sysctl default_request_timeout et max_request_timeout pour définir des délais d'exécution des requêtes, ce qui permet de surveiller les composants FUSE exécutés dans l'espace utilisateur pour détecter les blocages. La taille maximale des noms de fichiers dans FUSE a été augmentée à 1024 caractères.
- L'appel système statmount() a été mis à jour pour fournir des informations sur le mappage des ID utilisateur des systèmes de fichiers montés, qui est utilisé pour faire correspondre les fichiers d'un utilisateur spécifique sur une partition étrangère montée avec un autre utilisateur sur le système actuel.
- Implémentation de la possibilité de créer un point de montage avec un mappage d'ID utilisateur différent de celui de la partition montée d'origine.
- L'API de gestion de montage a été modifiée pour faciliter la création de hiérarchies de systèmes de fichiers complexes sans exposer les parties des systèmes de fichiers qui doivent rester masquées.
- La prise en charge des périphériques de protection par clé de chiffrement matériel a été ajoutée au sous-système pour fonctionner avec des périphériques de bloc.
- Le système de fichiers SMB implémente l'option is_network_name_deleted et le mode smb_server_kerberos5 est activé par défaut.
- Pour OverlayFS, une option de montage « override_creds » a été ajoutée, qui, lorsqu'elle est spécifiée, entraînera l'utilisation des informations d'identification de l'utilisateur appelant, plutôt que de celui qui a effectué le montage, pour accéder aux niveaux inférieurs du stockage. Le changement permet par exemple à OverlayFS d'exiger un utilisateur avec des privilèges CAP_SYS_ADMIN lors du montage, mais d'utiliser le système de fichiers avec des informations d'identification sans ce privilège.
- Les opérations de suppression de fichiers sont accélérées dans exFAT. Au lieu d'envoyer des demandes « d'abandon » individuellement pour chaque cluster libéré d'un fichier supprimé, le pilote regroupe désormais les demandes. Lors du test, le temps de suppression d’un fichier de 80 Go a été réduit de 286 secondes à 1.6 seconde.
- Tous les pseudo-FS, ainsi que les FS EXT2, ont été commutés pour utiliser la nouvelle API de montage de partition.
- Code supprimé pour prendre en charge les systèmes de fichiers SYSV (SystemV/386, Xenix et Coherent), qui sont marqués comme orphelins en 2023.
- Services mémoire et système
- La version minimale de GCC requise pour construire le noyau a été augmentée à 8.1 et celle de Clang à 15.0.0.
- Ajout du sous-système fwctl (Firmware Control), qui fournit une API pour la gestion sécurisée du firmware et l'exécution des gestionnaires côté firmware à partir de l'espace utilisateur. Les pilotes pour les périphériques CXL (Compute Express Link), les adaptateurs Ethernet Mellanox ConnectX (mlx5) et les 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 pour permettre l'utilisation d'identifiants associés à des processus spécifiques et, contrairement à pid, ne sont pas réaffectés. Fournit la possibilité de récupérer des données sur l'état de fin d'un processus identifié par pidfd après que le processus parent a reçu la confirmation que le processus enfant a récolté et que ses ressources ont été libérées. L'indicateur PIDFD_SELF a été ajouté aux appels système, permettant à un processus de se référencer lui-même.
- Pour l'architecture RISC-V, un support est fourni pour les extensions BFloat16, Zaamo (opérations de mémoire atomique), Zalrsc (Load-Reserved/Store-conditional) et ZBKB (opérations bit à bit pour la cryptographie).
- Lors du traçage, il est désormais possible de sauvegarder les arguments des fonctions appelées et de les afficher dans les journaux de traçage.
- Le système d'E/S asynchrone io_uring a été mis à jour pour prendre en charge la lecture des informations sur les événements epoll. L'utilisation de io_uring pour gérer les événements epoll réduit le nombre de changements de contexte et permet de gérer plusieurs événements epoll à la fois.
- Le sous-système eBPF a amélioré la vérification des programmes avec des boucles. Ajout de nouvelles instructions « timed_may_goto », « load-acquire » et « store-release ». La possibilité de modifier les attributs de fichiers étendus à partir des programmes BPF a été fournie. Ajout de la fonction try_alloc_pages(), conçue pour allouer de la mémoire lorsqu'il existe une forte probabilité d'échec de l'opération (lors de l'exécution de programmes BPF dans des contextes limités).
Une nouvelle primitive de verrouillage a été implémentée - rqspinlock (Resilient Queued Spin Lock), qui détecte les situations conduisant à des verrouillages mutuels pendant l'exécution. La nouvelle primitive permet de charger des programmes BPF pour lesquels le vérificateur n'a pas garanti un fonctionnement correct avec des verrous.
- La fiabilité de l'allocation de grandes pages mémoire (huge-page) a été considérablement améliorée.
- Calcul de la somme de contrôle CRC64 considérablement accéléré sur les systèmes x86. Entre autres choses, de nouvelles instructions vectorielles de l'ensemble AVX-512 sont utilisées pour l'accélération. Dans certaines situations, la productivité a été multipliée par 100.
- Nous avons continué à migrer les modifications de la branche Rust-for-Linux liées à l'utilisation du langage Rust comme deuxième langage pour le développement de pilotes et de modules de noyau (le support de Rust n'est pas actif par défaut et n'entraîne pas l'inclusion de Rust dans la liste des dépendances de build obligatoires pour le noyau). La possibilité d'utiliser la macro « #[kunit_tests()] » dans le code principal pour exécuter des tests unitaires a été introduite. Prise en charge ajoutée pour l'architecture ARMv7. Implémentation des modules dma et hrtimer avec des liaisons Rust pour DMA (ajouté par Linus, contournant le mainteneur, qui a ensuite quitté son poste) et des minuteries de haute précision. Les modules 'list', 'str', 'sync', 'error' et 'alloc' ont été étendus. Ajout de la prise en charge de la nouvelle syntaxe « &raw » (raw_ref_op).
- Le sous-système perf a implémenté la capacité de profiler les latences à l'aide des informations du planificateur de tâches.
- Ajout du paramètre de ligne de commande du noyau « traceoff_after_boot » pour désactiver le traçage après le démarrage du noyau et le démarrage du processus d'initialisation. Ce paramètre peut être utilisé pour diagnostiquer les problèmes liés au démarrage en garantissant que les données de trace accumulées pendant le démarrage ne sont pas écrasées.
- Abandon de la prise en charge des systèmes x32 86 bits avec plus de 8 processeurs et 4 Go de RAM. De tels équipements n'ont pas été produits depuis longtemps et les systèmes nécessitant de telles ressources ont été transférés vers des processeurs 64 bits.
- L'implémentation du minuteur POSIX a été modifiée pour permettre à la boîte à outils Checkpoint/Restore in Userspace (CRIU) d'enregistrer et de restaurer les identifiants du minuteur.
- Virtualisation et sécurité
- Ajout de la possibilité d'utiliser Linux comme environnement racine (partition racine Dom0.) pour Hyper-V (hyperviseur Microsoft). L'environnement hôte gère l'hyperviseur, organise le lancement des systèmes invités, alloue les ressources et assure l'interaction. machines virtuelles L'hyperviseur Hyper-V sous Linux est géré via le périphérique /dev/mshv.
- Un mécanisme d'audit a été ajouté au 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.). L'audit vous permet d'évaluer en détail les raisons du blocage d'accès effectué lors de l'utilisation de Landlock, et offre également la possibilité de comprendre quand et quelle opération a été bloquée, pourquoi le blocage a été effectué et quelle règle a été déclenchée.
- Ajout de la possibilité d'implémenter des gestionnaires dans les modules LSM (Linux Security Modules) qui contrôlent les appels au système d'entrée/sortie asynchrone io_uring et permettent de bloquer l'utilisation de io_uring pour contourner les restrictions d'accès aux appels système. Un gestionnaire similaire est implémenté dans le module SELinux LSM.
- SELinux offre la possibilité d'appliquer des politiques à tout type de données chargées par le noyau, y compris les images de micrologiciel, les politiques de sécurité et les certificats.
- Mode de scellement ajouté pour certaines opérations de mappage de mémoire effectuées par le noyau dans l'espace d'adressage du processus. L'épinglage rend le mappage en lecture seule et empêche sa modification si une vulnérabilité est exploitée. L'action s'applique au mappage vDSO, vsyscall, vvar, sigpage et uprobes. Ce mode est désactivé par défaut car il peut interférer avec le fonctionnement de certaines applications. Ajout du paramètre de build CONFIG_MSEAL_SYSTEM_MAPPINGS à activer.
- Sous-système réseau
- Les travaux se sont poursuivis pour supprimer le verrou RTNL global (rtnl_lock) de la pile réseau et le convertir en verrous liés à des espaces de noms réseau individuels.
- Ajout de la capacité initiale de recevoir des paquets réseau via io_uring avec le contenu copié directement dans la mémoire du programme dans l'espace utilisateur sans mise en mémoire tampon intermédiaire (zéro copie). Lors des tests effectués, le changement a permis de gérer le traitement du trafic sur un canal de 200 gigabits en utilisant un seul cœur de processeur.
- L'option sysctl tcp_rto_max_ms et l'option de socket TCP TCP_RTO_MAX_MS ont été implémentées, grâce auxquelles vous pouvez définir le temps maximum entre les tentatives de retransmission de paquets.
- BPF a été mis à jour pour inclure une série de rappels permettant de récupérer des informations de synchronisation à partir de divers endroits de la pile réseau, qui peuvent être utilisées pour diagnostiquer les problèmes de latence du réseau.
- Optimisations des performances du réseau ajoutées :
- L'optimisation GRO (Generic Receive Offload), qui combine plusieurs petits paquets en un seul grand, est désormais activée lors du basculement du traitement des paquets vers un autre processeur (pour l'équilibrage de charge) lors de l'utilisation du sous-système XDP (eXpress Data Path), qui permet de traiter les paquets au niveau du pilote réseau avant qu'ils ne soient transmis à la pile réseau. Le gain de performances pour le traitement des flux TCP grâce à l’utilisation de l’optimisation peut être jusqu’à deux fois supérieur.
- En cas de forte charge, les performances de la fonction connect() ont été doublées grâce au remplacement du verrouillage par attente active par le mécanisme de synchronisation RCU (Read-Copy-Update) lors de la recherche d'enregistrements contenant des informations sur les côtés de la connexion (source et cible). Adresses IP et les ports). De plus, une optimisation du hachage a été effectuée, ce qui a permis d'obtenir un gain de performance supplémentaire de 229 %.
- La mise en œuvre de MPTCP (Multipath TCP), une extension du protocole TCP permettant d'organiser la livraison de paquets simultanément le long de plusieurs routes via différentes interfaces réseau liées à différentes adresses IP, a été accélérée. Le MPTCP en mode flux unique est accéléré de 29 %.
- Dans netfilter, lorsqu'un socket est présent, l'exécution des opérations de recherche d'itinéraire dans la FIB (Forwarding Information Base) a été arrêtée. Grâce à cette optimisation, les performances ont augmenté de 20%.
- Les performances UDP dans des conditions d'inondation ont été augmentées de 10 % en éliminant les opérations inutiles avec la structure sk_tsflags lors de la réception de paquets.
- Pilote ajouté avec implémentation du protocole MCTP sur USB.
- Équipement
- Le noyau inclut l'implémentation initiale du pilote Nova pour les GPU NVIDIA équipés du firmware GSP utilisé à partir de la série NVIDIA GeForce RTX 2000 basée sur la microarchitecture Turing. Le pilote est écrit en Rust. Dans la première étape, seul le framework nova-core a été ajouté, qui comporte environ 400 lignes de code et implémente un niveau de base d'abstractions sur les API du firmware GSP. À l'étape suivante, le noyau prévoit d'inclure le pilote DRM nova-drm (Direct Rendering Manager) pour l'interaction avec le GPU depuis l'espace utilisateur, ainsi que le pilote VFIO avec le gestionnaire vGPU, qui permet l'utilisation de GPU virtuels NVIDIA dans les systèmes de virtualisation.
- Les travaux se poursuivent sur le pilote Xe drm (Direct Rendering Manager) pour les GPU basés sur l'architecture Intel Xe, qui est utilisé dans les cartes graphiques de la famille Intel Arc et les graphiques intégrés, à commencer par les processeurs Tiger Lake. Ajout de la prise en charge de SVM (Shared Virtual Memory), un composant du framework DRM qui gère la mémoire partagée entre le CPU et le GPU.
- De nouveaux identifiants GPU ont été ajoutés au pilote i915.
- Le pilote Nouveau dispose d'un RPC GSP retravaillé et de l'interface drm_slave_encoder intégrée.
- Le pilote AMDGPU implémente la prise en charge de l'architecture DCN36 (Display Core Next). Ajout de la possibilité de définir vos propres courbes de luminosité utilisées pour corriger la luminosité de l'écran.
- Le pilote Adreno a été mis à jour pour prendre en charge le GPU Qualcomm Adreno 623.
- Ajout de la prise en charge des panneaux tactiles Apple Touch Bar.
- Ajout de la prise en charge de la deuxième version de l'extension eUSB2 (eUSB2V2 — Embedded USB2 Version 2.0), qui permet de réduire la tension d'alimentation (jusqu'à 1.2 volts) et d'augmenter les performances de l'USB 2.0. La vitesse de transfert de données de l'eUSB2V2 peut atteindre 4.8 Gbps, soit 10 fois plus rapide que les 480 Mbps habituels de l'USB 2.0. eUSB2V2 permettra aux fabricants d'ordinateurs portables d'intégrer des webcams à plus haute résolution dans leurs appareils tout en utilisant le bus USB2 intégré pour les connecter.
- Prise en charge ajoutée pour les adaptateurs Ethernet Intel Killer E5000 (RTL8126).
- Prise en charge ajoutée pour les panneaux d'affichage Visionox RM692E5, Rockchip w552793dba-v10, kingdisplay-kd110n11-51ie et starry-2082109qfh040022-50e.
- Pilote ajouté pour les ordinateurs portables Samsung Galaxy Book.
- Prise en charge ajoutée pour les systèmes audio Presonus Studio 1824c et Jabra Evolve 65. Prise en charge ajoutée pour les modules AMD ACP 7.x, AWINC WM88166, Everest ES8388, Intel AVS PEAKVOL et GAIN DSP. Prise en charge sonore améliorée sur les ordinateurs portables ASUS, HP et Lenovo.
- Prise en charge ajoutée pour les cartes ARM, SoC et 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.
Dans le même temps, la Fondation latino-américaine pour le logiciel libre a créé une version du noyau 6.15 entièrement libre - Linux-libre 6.15-gnu, débarrassée des éléments de firmware et des pilotes contenant des composants non libres ou des sections de code dont le champ d'application est limité par le fabricant. La version 6.15 neutralise le chargement de blob dans les pilotes audio nova, Qualcomm iris v4l2, Airoha NPU, Tehuti Networks TN40xx 10G ethernet, Realtek 8814A wifi, Apple Silicon SoC touchscreen, Renesas UFS et aw88166. J'ai arrêté de nettoyer le pilote Ethernet Spider 1 Go, qui a été supprimé du noyau. Suppression des références aux binaires tivoïsés. Implémentation du blocage du chargement de blob à partir du code Rust.
Source: opennet.ru
