Après deux mois de développement, Linus Torvalds présenté a annoncé la sortie du noyau Linux 6.19. Parmi les changements les plus notables : le sous-système Live Update Orchestrator, la prise en charge du PCIe Link Encryption, l'appel système listns, le mode Zero-Copy Receive dans io_uring, le support de l'extension ARM MPAM, klp-build pour générer des correctifs en direct, la prise en charge de l'architecture LoongArch32, QoS pour s2idle, l'optimisation du sous-système d'audit, Intel LASS pour se protéger contre Spectre, le support des hachages SHA-3 et BLAKE2b, le mécanisme Confidential VMBus, les optimisations TX dans le sous-système réseau, le protocole CAN XL, l'API pour l'accélération matérielle de la sortie HDR.
Dans l'annonce de la nouvelle version, Linus a déclaré que la prochaine version du noyau portera le numéro 7.0, car suffisamment de versions se sont accumulées dans la branche 6.x pour changer le premier chiffre du numéro de version (la version 6.0 avait été formée juste après la 5.19). Le changement de numérotation est effectué pour des raisons esthétiques et constitue une étape formelle, éliminant l'inconfort résultant de l'accumulation d'un grand nombre de versions dans la série. Linus a plaisanté en disant que les grands chiffres l'embrouillent car il n'a pas assez de doigts aux mains et aux pieds. Cela dit, il existe formellement une raison pour un changement important du numéro de version, car à partir de la prochaine version, le support de Rust il a été décidé sera transféré des fonctionnalités expérimentales vers les fonctionnalités principales du noyau.
La nouvelle version inclut 15657 corrections de la part de 2237 développeurs, la taille du correctif est de 52 Mo (les modifications ont concerné 13682 fichiers, 794649 lignes de code ajoutées et 335498 lignes supprimées). La version précédente comptait 15035 corrections de la part de 2217 développeurs, la taille du correctif étant de 45 Mo. Environ 40 % de tous les changements présentés dans 6.19 sont liés aux pilotes, environ 13 % des changements concernent la mise à jour du code spécifique aux architectures matérielles, 12 % sont liés à la pile réseau, 5 % aux systèmes de fichiers et 3 % aux sous-systèmes internes du noyau.
Les principales nouveautés dans le noyau 6.19 (1, 2, 3):
- Sous-système de disque, entrée/sortie et systèmes de fichiers
- Dans , y compris la capacité de démarrer à partir d'une partition Btrfs. les processus de vérification FS (scrub) et de remplacement des dispositifs ne bloquent plus le passage du système en mode veille (avant de s'endormir, l'état de la vérification scrub est sauvegardé ; après le réveil, la vérification scrub reprend, et l'opération de remplacement des dispositifs recommence). Le RAID56 a été complété par la prise en charge de blocs dont la taille dépasse celle d'une page mémoire. Une préparation a été effectuée pour la prise en charge de fscrypt . Amélioration des performances lors des opérations de réservation d'espace.La performance des opérations liées à la réservation d'espace a été améliorée en ce qui concerne les verrous. Ajouté prise en charge de l'opération ioctl shutdown, qui permet de mettre le système de fichiers dans un état où une tentative de terminaison des opérations déjà en cours est effectuée, mais toutes les nouvelles opérations sont bloquées.
- Dans le système de fichiers Ext4 sont incluses. prise en charge de blocs dont la taille dépasse celle de la page mémoire (>4 Ko sur les systèmes x86). L'utilisation de grands blocs d'installer augmente les performances des opérations d'écriture mises en tampon en moyenne de 50%, mais diminue les performances des entrées/sorties directes en raison du temps accru nécessaire au calcul des sommes de contrôle. La nouvelle version comprend également ajoutées des optimisations ayant amélioré la bande passante lors de la défragmentation en ligne.
- Dans le sous-système FUSE l'amélioration du support de la lecture tamponnée lors de l'utilisation de grands folios de pages mémoire (grands folios). Grâce à iomap, il est possible de suivre les folios partiellement actuels pour charger uniquement les données manquantes dans le tampon.
- Dans VFS ajout du support pour le délégation de répertoires rappelable (recallable directory delegation), permettant de mettre en œuvre dans NFS le transfert de contrôle d'un répertoire du serveur au client, afin que le client NFS puisse suivre l'état du répertoire sur la base d'un cache local, sans avoir à consulter le serveur NFS. Si un autre client NFS effectue des modifications concernant ce répertoire, la délégation de contrôle sera révoquée pour le premier client.
- Pour NFS ajouté prise en charge de la lecture en mode entrée/sortie directe (direct I/O). De nombreuses nouvelles fonctionnalités du langage, développées dans la spécification Raku v6.e, ont été mises en œuvre. réglages /sys/kernel/debug/nfsd/io_cache_read et /sys/kernel/debug/nfsd/io_cache_write pour contrôler l'activation de la mise en cache et des opérations d'entrée/sortie directe, manipuler ces paramètres permet de réduire les frais généraux côté client NFS lors de l'exécution de grandes opérations d'entrée/sortie.
- Dans NTFS prise en charge de l'opération ioctl shutdown, est inclus options de montage acl et prealloc par défaut, ajout de la prise en charge de temps jusqu'au 1er janvier 1970.
- Pour périphériques de blocs et systèmes de fichiers incluse mise en cache séparée par défaut pour chaque CPU des objets «bio» (Bloc I/O), définissant les opérations d'entrée/sortie actives.
- Mémoire et services système
-
Dans le noyau sont incluses. sous-système Live Update Orchestrator (LUO), permettant de redémarrer et de mettre à jour complètement le noyau sans arrêter le fonctionnement et sans perdre l'état du système, des dispositifs et des processus. Le sous-système LUO est basé sur un mécanisme précédemment ajouté au noyau. KHO (Kexec HandOver) et en complément de la possibilité de démarrer un nouveau noyau à partir d'un ancien sans perte d'état du système, cela résout des problèmes tels que la sauvegarde de l'état des périphériques et de la mémoire vive, ainsi que l'assurance de la continuité des opérations liées au DMA et au traitement des interruptions. L'état est sauvegardé avant le basculement vers le nouveau noyau et est restauré après l'activation du nouveau noyau sans perturber les opérations continues avec les périphériques effectuées par le système et les applications dans l'espace utilisateur.
-
Ajouté l'appel système listns() pour afficher la liste des espaces de noms existants dans le système sans avoir besoin de parcourir /proc//ns/ pour tous les processus.
Le système d'entrée/sortie asynchrone io_uring a ajouté le support du placement d'éléments de tailles différentes dans la file d'attente de soumission (SQE, Submission Queue Entry), similaire à la façon dont la dernière version a permis le mélange de tailles de contenu dans la file d'attente des résultats (CQE, Completion Queue Event). Avant cela, tous les éléments de la file d'attente devaient avoir une seule taille, ce qui entraînait une consommation excessive de mémoire en raison de la nécessité d'utiliser la taille maximale pour tous les éléments de la file d'attente.
Dans io_uring, le support du mécanisme zcrx (Zero-Copy Receive) a également été ajouté pour recevoir des données sans copie entre le noyau et l'espace utilisateur. Le support des requêtes de disposition de la mémoire pour les files d'attente SQ (Submission Queue) et CQ (Completion Queue) a été ajouté, permettant d'obtenir des informations sur la taille du tampon circulaire, nécessaire lors de l'allocation de mémoire par l'utilisateur à l'aide des drapeaux IORING_SETUP_NO_MMAP et IORING_MEM_REGION_TYPE_USER.
Pour un traçage rapide de la pile à l'aide d'outils comme perf, le support du format SFrame avec des informations sur le déroulement de la pile d'appels (unwind) a été ajouté. SFrame est déjà supporté dans GCC et binutils, n'entraîne pas de baisse de performance et, contrairement au format DWARF, contient uniquement le minimum d'informations nécessaires pour le traçage de la pile.
-
Dans l'outil perf ajouté support pour la description unifiée des métriques et des événements au format JSON, ainsi que pour le déroulement différé (deferred unwinding) de la pile d'appels dans l'espace utilisateur.
Pour processeurs AMD un mécanisme de substitution de données dans le cache a été mis en œuvre, permettant aux dispositifs d'entrée/sortie d'insérer directement des données dans le cache L3 du CPU sans les placer préalablement en mémoire vive.
Ajout du support de MPAM (Partitionnement et surveillance des ressources du système de mémoire), les extensions de l'architecture de l'ensemble d'instructions ARMv8-A pour marquer chaque accès à la mémoire avec un identifiant de section (PARTID, Partition ID) et un identifiant de groupe de surveillance (PMG, Monitoring Group ID). En lien avec le PARTID, il est possible de limiter la consommation de ressources, telles que la bande passante mémoire ou la taille du cache, afin qu'un groupe de tâches n'occupe pas toutes les ressources. Dans le contexte de la surveillance, la combinaison du PMG et du PARTID peut être utilisée pour suivre la consommation de ressources mémoire sous certaines charges.
En cas d'achèvement anormal du processus après la réception d'un signal, un autre processus ayant le pidfd du processus terminé peut désormais déterminer le numéro du signal ayant conduit à la fin du processus.
La mise en œuvre des séquences redémarrables (restartable sequences), permettant aux applications d'organiser une exécution pseudo-atomique ininterrompue d'un groupe d'instructions (en cas d'interruption par un autre flux, une nouvelle tentative d'exécution de la séquence est faite). La nouvelle mise en œuvre offre de meilleures performances.
-
Pour programmes BPF sont implémentés les instructions BPF_JMP, BPF_X et BPF_JA pour effectuer des sauts indirects vers une position spécifique à partir de la table de sauts. Le concept de pointeurs dynamiques a été ajouté (dynptr), permettant de lire des données à partir de fichiers structurés. Ajouté la possibilité d'attacher plusieurs octets de métadonnées aux paquets réseau.
Les modules en langage Python, utilisés pour le traitement de la documentation du noyau, ont été déplacés dans le répertoire séparé tools/lib/python.
-
Une fonction a été ajoutée mempool_alloc_bulk() pour allouer en toute sécurité des éléments à partir d'un pool de mémoire pour plusieurs objets à la fois.
-
La migration des changements de la branche Rust-for-Linux, lié à l'utilisation du langage Rust comme deuxième langage pour le développement de pilotes et de modules du noyau (le support de Rust n'est pas activé par défaut, et ne rend pas Rust obligatoire dans les dépendances de construction du noyau). Dans la nouvelle version, la bibliothèque est intégrée au noyau« syn» avec un parseur de code Rust, facilitant l'écriture de macros complexes. Les capacités des bibliothèques kernel, pin-init et rbtree ont été étendues. La bibliothèque num avec le trait Integer pour manipuler les entiers a été ajoutée. Support des paramètres entiers ajouté dans la macro module!. La possibilité de spécifier des paramètres lors du chargement de modules de noyau écrits en Rust a été mise en œuvre. Des abstractions pour les sous-systèmes ont été réalisées. I2C et PWM (Modulation de largeur d'impulsion).
-
Ajouté la macro at_least (par exemple, param[at_least 7], qui indique la taille minimale autorisée du tableau passé à la fonction. Si un tableau de taille inférieure est passé à la fonction, le compilateur émettra un avertissement.
-
Comprend le est inclus le script klp-build pour générer des modules du noyau qui apportent des modifications au noyau en cours d'exécution (livepatch), à partir d'un fichier de patch. Des modifications nécessaires pour créer des live-patch ont été apportées à l'utilitaire objtool.
-
Dans Linux en mode utilisateur (exécution du noyau en tant que processus utilisateur) dispose d'un support limité pour le multiprocesseur, mais les threads au sein d'un même processus ne peuvent pas encore s'exécuter simultanément. A commencé portage de Linux en mode utilisateur sur la bibliothèque nolibc.
-
Ajouté support de l'architecture LoongArch32 (LA32R, LA32S) en plus de LoongArch64.
-
Ajouté possibilité de définir des limites QoS sur l'intensité de réveil du processeur en mode d'économie d'énergie s2idle (Suspendre à inactif), gelant l'exécution des processus en espace utilisateur, mais laissant certains gestionnaires dans le noyau actifs.
-
Ajouté support de la gestion des tables de pages mémoire pour les contrôleurs IOMMU (Unité de gestion de mémoire entrée-sortie), effectuant la traduction des adresses virtuelles visibles par le matériel en adresses physiques, avec la capacité de filtrer les opérations DMA par adresses virtuelles, ainsi que de limiter et d'isoler les opérations d'entrée-sortie.
Dans les événements de traçage des appels système, il est maintenant possible de lire des buffers depuis l'espace utilisateur et d'inclure leur contenu (par exemple, des noms de fichiers) dans le résultat du traçage.
-
**Pages de garde mémoire( (guard page), dont l'accès provoque une exception et termine le processus de manière inattendue (SIGSEGV), sont maintenant étiquetées avec une étiquette spéciale dans le fichier /proc/PID/smaps.
-
Ajouté possibilité de gérer de grandes pages mémoire (page énorme transparente) dans la mémoire privée des dispositifs zonés.
-
Dans le dispositif zram, utilisé pour le stockage compressé de la partition de swap en mémoire, réalisée prise en charge de la détection de plusieurs structures «bio» (Block I/O) en mode lot (writeback batching).
Le jeu comprend la police «Terminus 10×18», améliorant la lisibilité des informations sur la console sur des écrans de ordinateurs portables à résolution moyenne (1440×900).
-
Significativement optimisé travail sous-systèmes d'audit — une réduction des frais généraux est observée de moitié.
-
- Virtualisation et sécurité
- Ajout de la prise en charge de la fonctionnalité fournie par les processeurs Intel pour la séparation de l'espace d'adresses linéaire (LASS, séparation de l'espace d'adresses linéaire), permettant de séparer matériellement les plages d'adresses entre l'espace utilisateur et le noyau pour renforcer la sécurité. L'espace d'adresses est séparé par le bit le plus significatif de l'adresse – la moitié de l'espace d'adresses avec le bit le plus significatif activé est utilisée pour le noyau, et la partie inférieure – pour l'espace utilisateur. À un stade précoce de l'exécution des instructions (avant l'exécution spéculative), une vérification de l'autorisation d'accès de l'espace utilisateur aux adresses avec le bit le plus significatif activé et vice versa est effectuée. Une telle séparation permet de bloquer les fuites de mémoire du noyau vers l'espace utilisateur par des canaux secondaires même lors de l'exécution spéculative des instructions, ce qui permet d'appliquer LASS pour se protéger contre les attaques de type Meltdown et Spectre, sans engendrer de frais généraux importants.
- Ajout de la possibilité d'activer les extensions de sécurité renforcée du bus PCI Express – PCIe Link Encryption et PCIe Device Authentication, permettant de vérifier l'authenticité et de chiffrer le canal de communication entre le périphérique PCIe et la machine virtuelle, protégée par les mécanismes Intel TDX (Trusted Domain Extensions) et AMD SEV-SNP (Secure Nested Paging). Les technologies mises en œuvre empêchent l'interception, l'analyse et l'injection de données dans le trafic DMA en cas d'accès au système hôte ou à d'autres appareils.
- Dans la bibliothèque cryptographique intégrée ajouté prise en charge des algorithmes SHA-3 (SHA3-224, SHA3-256, SHA3-384, SHA3-512), SHAKE128, SHAKE256 et BLAKE2b.
- Pour les modules LSM (Linux Security Modules) et, en particulier pour SELinux, réalisée la capacité de suivre la création de descripteurs memfd pour appliquer des politiques de sécurité aux objets qui leur sont associés.
- Dans le module LSM IPE (Integrity Policy Enforcement), qui définit une politique générale d'intégrité pour l'ensemble du système, un support pour le drapeau AT_EXECVE_CHECK dans la fonction execveat(), incluant une vérification de l'intégrité du script avant son exécution par l'interpréteur.
- Ajout des primitives scoped_user_read_access(), scoped_user_write_access et scoped_user_rw_access() pour un accès restreint aux données dans l'espace utilisateur avec protection contre les attaques spéculatives.
- Ajouté prise en charge du mécanisme VMBus confidentiel, utilisé dans l'hyperviseur HyperV pour une interaction sécurisée entre la machine virtuelle exécutée en mode confidentiel (avec chiffrement de la mémoire et isolation des registres basés sur les technologies AMD SNP et Intel TDX) et le paravisor responsable de l'accès aux dispositifs traitant des données protégées.
- Ajouté capacité de transmettre des informations sur les processus terminés de manière anormale (pour générer un coredump) via le mécanisme pidfd. L'identifiant PIDFD est lié à un processus spécifique et ne change pas, tandis que le PID peut être réaffecté à un autre processus après la terminaison du processus actuel associé à ce PID. L'utilisation de pidfd permet de bloquer la substitution les attaques d'un processus suid terminé de manière anormale par un autre processus, provoquant un état de concurrence après le début du traitement par le noyau de l'échec, mais avant la vérification des paramètres du processus par le gestionnaire en espace utilisateur.
- Sous-système réseau
- Dans la sous-système réseau ajoutés optimisations pour améliorer l'efficacité de transmission des données (TX). Éliminer le spinlock de la fonction __dev_queue_xmit() et utiliser la structure llist sans verrouillage a permis d'augmenter la performance par 4 sous forte charge et de doubler l'intensité d'envoi de paquets tout en réduisant la charge CPU de moitié.
- Fournie la possibilité déconnexion pour des sockets réseau individuels, les limites système sur l'utilisation de la mémoire (dans ce cas, les limites de mémoire communes définies pour des conteneurs individuels seront utilisées). Pour gérer la désactivation des limites, le sysctl net.core.bypass_prot_mem et le flag SK_BPF_BYPASS_PROT_MEM dans la fonction bpf_setsockopt sont proposés.
- Ajouté prise en charge de l'extension RFC 5837, ajoutant dans les messages ICMP Time Exceeded, renvoyés lorsqu'un paquet atteint la fin de sa durée de vie (TTL), des données sur les interfaces réseau entrantes pour obtenir plus d'informations détaillées lors du traçage des routes avec l'outil traceroute.
- Ajouté prise en charge du polling actif continu (busy polling) dans un thread séparé du noyau afin d'extraire des descripteurs des files d'attente RX/TX pour les applications nécessitant des latences minimales.
- Ajout de la prise en charge du protocole CAN XL (Contrôleur Area Network eXtended Length), dans lequel la taille du champ de données a été augmentée à 2048 octets pour assurer l'intégration avec les réseaux TCP/IP, avec la possibilité de tunneling des trames Ethernet ajoutée. modulation de largeur d'impulsion, permettant de transmettre des données à des vitesses de 20 Mbit/s ou plus.
- Ajouté prise en charge de la structure sockaddr_unsized, variante de la structure sockaddr utilisant un tableau de éléments flexibles au lieu d'un tableau de taille fixe (sa_data[] au lieu de sa_data[14], qui était essentiellement utilisé pour référencer d'autres structures de plus grande taille).
- Ajout de la possibilité d'utiliser les fonctionnalités getsockname et getpeername via la sous-système io_uring.
- Ajout de sysctl net.ipv4.tcp_rcvbuf_low_rtt et net.ipv4.tcp_comp_sack_rtt_percent pour optimiser le TCP.
- Ajouté prise en charge de liaisons avec une bande passante de 1600 Gbps (1,6 T).
- Matériel
- Une API a été ajoutée à la sous-système DRM (Direct Rendering Manager) pour utiliser les capacités matérielles de conversion des couleurs, permettant de se passer de telles conversions via des shaders ou d'exécuter du code sur le CPU. Pour la sortie de contenu sur un moniteur HDR, les conversions de couleur complexes peuvent désormais être effectuées par le contrôleur d'affichage aux étapes avant et après le mélange des couches, au lieu de composer le contenu de manière logicielle dans le tampon d'affichage final. En plus de réduire les frais généraux et la consommation d'énergie lors de l'organisation de la sortie en HDR, la fonctionnalité proposée peut être utilisée pour une reproduction des couleurs correcte dans les éditeurs de vidéos ou d'images.
- Ajouté pilote ethosu pour NPU Arm Ethos U65 et U85, conçu pour l'accélération matérielle de l'exécution des modèles AI.
- Dans le pilote i915 pour GPU Lunar Lake et plus récent, prise en charge de l'amélioration matérielle de la netteté de l'image (Sharpening).
- Poursuivie travail sur le pilote drm (Direct Rendering Manager) Xe pour GPU basé sur l'architecture Intel Xe, utilisé dans les cartes graphiques Intel de la gamme Arc et les graphiques intégrés, à partir des processeurs Tiger Lake. Un support initial de l'architecture Xe3P, utilisée dans les GPU Crescent Island et la gamme de processeurs avec graphiques intégrés Nova Lake, a été ajouté.
- Le pilote AMDGPU prend en charge pleinement les cartes graphiques AMD des familles GCN 1.0 « Southern Island » et 1.1 « Sea Islands », pour lesquelles le pilote Radeon était auparavant utilisé. Le pilote AMDGPU a été mis à niveau pour égaler les capacités du pilote Radeon et est activé par défaut pour les GPU indiqués. Les cartes GCN 1.x ont été produites de 2012 à 2019 et comprennent des modèles tels que Radeon HD 77xx/78xx/79xx/87xx/88xx/89xx, Radeon R9 280, FirePro W4000-W9000, Radeon Sky 700/900, Radeon R9 265/270/370, Radeon R9 290/390, HD 7790 / 8870 et d'autres cartes graphiques des familles Radeon Rx 200 / Rx 300. En plus d'une augmentation de la performance d'environ 24 %, le passage à AMDGPU a permis d'activer le support de l'API graphique Vulkan 1.3 pour ces GPU. De plus, AMDGPU a ajouté la prise en charge des connecteurs analogiques et du Video Coding Engine 1.0, et utilise par défaut la pile DC (Display Core) pour les GPU basés sur l'architecture Bonaire (Radeon HD 7790).
- Le pilote Nouveau réalisée prend en charge l'accélérateur matériel NVJPG, présent dans le SoC Tegra210.
- Dans le pilote Panthor, ajouté le support du GPU Mali-G1 et le support initial de la puce MediaTek MT8196 sont ajoutés.
- Ajouté le support du système audio des puces Intel Nova Lake S, des ordinateurs portables HP avec HDA CS35L41, ainsi que des interfaces audio CIX IPBLOQ HD et Onkyo SE-300PCIE.
- L'intégration des composants du pilote Nova pour les GPU NVIDIA dotés de firmwares GSP, utilisés depuis la série NVIDIA GeForce RTX 2000 basée sur l'architecture Turing, se poursuit. Le pilote est écrit en Rust. Dans la nouvelle version, le travail sur le RPC a commencé et est accomplie la mise en œuvre du chargement du coprocesseur GSP (GPU System Processor).
- Ajouté prise en charge des plates-formes ARM, des SoC et des appareils : Bananapi r4 pro, LinkEase EasePi R1, Qualcomm MSM8937 (Snapdragon 430), Renesas R-Car X5H, FriendlyElec NanoPi R76S, TI AM62L, Black Sesame Technologies C1200, Aspeed AST2600, Genio 1200 EVK, grinn geniosbc-510/700, Tanix TX9 Pro, Radxa Dragon Q6A, Tinker Board 3/3S, Aquila AM69, phyBOARD-Segin-i.MX91, i.MX 95 Verdin Evaluation Kit, Toradex SMARC iMX95, VIDIA Jetson Nano 2GB, Renesas rz/g3s, Indiedroid Nova, 24 variantes de cartes Enclustra Mercury.
- Ajout du support pour les smartphones et tablettes basés sur le SoC Mediatek MT6582 (Alcatel yarisxl), Nvidia Tegra124 (Xiaomi Mi Pad) et Qualcomm MSM8939 (ASUS ZenFone 2). Ajout du support pour les ordinateurs portables basés sur le SoC Qualcomm sdm850, tels que le Huawei MateBook E 2019.
- Ajout du support pour les SoC et les cartes basées sur l'architecture RISC-V : OrangePi R2S, OrangePi RV, Anlogic dr1v90, Tenstorrent Blackhole.
Simultanément, la Fondation latino-américaine pour le logiciel libre a formé une variante noyau complètement libre 6.19 — Linux-libre 6.19-gnu, débarrassé des éléments des firmwares et des pilotes contenant des composants non libres ou des sections de code dont l'utilisation est limitée par le fabricant. Dans la version 6.19, le code pour charger les firmwares binaires a été supprimé du sous-système audio SDCA. Le code de nettoyage des blobs a été mis à jour dans les pilotes Intel XE, Nova-Core, Qualcomm Iris, Venus et Q6V5, TI PRUeth, Intel iwlwifi, Marvell mwifiex, FourSemi fs210x, Realtek rt1320 et les codecs audio TI tas2783. Un nettoyage des noms de blobs dans les fichiers dts (device tree) pour les puces ARM a été réalisé. Le nettoyage du pilote STM C8SECTPFE DVB, retiré du noyau, a été interrompu.
Source : linux.org.ru
