Après deux mois de développement Linus Torvalds представил version du noyau Linux 6.19Parmi les changements les plus notables : sous-système Live Update Orchestrator, prise en charge du chiffrement des liens PCIe, appel système listens, mode de réception sans copie dans io_uring, prise en charge de l’extension ARM MPAM, klp-build pour la génération de correctifs en direct, prise en charge de l’architecture LoongArch32, QoS pour s2idle, optimisations du sous-système d’audit, Intel LASS pour la protection contre Spectre, prise en charge des hachages SHA-3 et BLAKE2b, mécanisme VMBus confidentiel, optimisations TX dans le sous-système réseau, protocole CAN XL, API pour l’accélération matérielle de la sortie HDR.
Dans l'annonce de la nouvelle version, Linus a précisé que la prochaine version du noyau serait numérotée 7.0, la branche 6.x ayant accumulé suffisamment de versions pour justifier un changement du premier chiffre du numéro de version (la version 6.0 succédant à la 5.19). Ce changement de numérotation est motivé par des raisons esthétiques et constitue une mesure officielle visant à simplifier la lecture, compte tenu du nombre important de versions dans la série. Linus a plaisanté en disant qu'il était lui-même perdu face à ces grands nombres qui nécessitaient l'utilisation de tous ses doigts. Plus sérieusement, ce changement significatif du numéro de version se justifie pleinement, car à partir de… le prochain Prise en charge des versions pour Rust décidé Passer des fonctionnalités expérimentales aux fonctionnalités de base du noyau.
La nouvelle version intègre 15 657 correctifs apportés par 2 237 développeurs, pour une taille de patch de 52 Mo (les modifications affectent 13 682 fichiers, ajoutant 794 649 lignes de code et en supprimant 335 498). La version précédente comprenait 15 035 correctifs apportés par 2 217 développeurs, pour une taille de patch de 45 Mo. Environ 40 % des modifications de la version 6.19 concernent les pilotes de périphériques, environ 13 % les mises à jour de code spécifiques aux architectures matérielles, 12 % la pile réseau, 5 % les systèmes de fichiers et 3 % les sous-systèmes internes du noyau.
Principales nouveautés du noyau 6.19 (1, 2, 3):
- Sous-système de disque, E/S et systèmes de fichiers
- В Btrfs Processus de vérification FS (nettoyage) et remplacement des périphériques plus ils ne bloquent pas Le système passe en mode veille (l'état de la vérification est enregistré avant la mise en veille ; après la sortie de veille, la vérification reprend et l'opération de remplacement du périphérique redémarre). L'implémentation RAID56 a été mise à jour pour prendre en charge les blocs plus grands que la taille des pages mémoire. Les préparatifs nécessaires à cette prise en charge ont été effectués. fscryptAmélioration des performances de la gestion des verrous lors des opérations liées à la réservation d'espace. Ajouté par prise en charge de l'opération ioctl shutdown, qui permet de mettre le système de fichiers dans un état dans lequel une tentative est faite pour terminer l'exécution des opérations déjà en cours, mais toutes les nouvelles opérations sont bloquées.
- Dans le système de fichiers Ext4 inclus Prise en charge des blocs plus grands que la taille d'une page mémoire (> 4 Ko sur les systèmes x86). Utilisation de grands blocs il permet Améliore les performances des opérations d'écriture tamponnées de 50 % en moyenne, mais réduit celles des E/S directes en raison de l'augmentation du temps de calcul de la somme de contrôle. La nouvelle version ajoutée optimisations ayant permis d'accroître le débit lors de la défragmentation en ligne.
- Dans le sous-système FUSE Amélioration de la prise en charge de la lecture tamponnée lors de l'utilisation de grands volumes de données. folios de pages de mémoire (Grands folios). iomap est maintenant utilisé pour suivre les folios partiellement actifs afin de télécharger uniquement les données qui ne se trouvent pas dans le tampon.
- В VFS Ajout de la prise en charge de la délégation d'annuaire révocable, qui vous permet d'implémenter NFS Le contrôle du répertoire est transféré du serveur au client, permettant ainsi à ce dernier de surveiller indépendamment l'état du répertoire grâce à son cache local, sans avoir à contacter le serveur NFS. Si un autre client NFS modifie ce répertoire, la délégation de contrôle sera révoquée pour le premier client.
- Pour NFS ajoutée Prise en charge de la lecture en mode E/S directe. Mis en œuvre Les paramètres /sys/kernel/debug/nfsd/io_cache_read et /sys/kernel/debug/nfsd/io_cache_write permettent de contrôler l'inclusion de la mise en cache et des opérations d'E/S directes ; la manipulation de ces paramètres peut réduire la surcharge côté client NFS lors de l'exécution d'opérations d'E/S importantes.
- В NTFS La prise en charge de l'opération ioctl d'arrêt a été implémentée. inclus Options de montage par défaut acl et prealloc, ajout de la prise en charge des horodatages antérieurs au 1er janvier 1970.
- Pour périphériques de stockage par blocs et système de fichiers inclus par défaut, mise en cache séparée des objets par processeur «bio» (E/S par bloc), définissant les opérations d'entrée/sortie actives.
- Services mémoire et système
-
Au cœur inclus sous-système Orchestrateur de mise à jour en direct LUO permet un redémarrage complet et une mise à jour du noyau sans interruption de fonctionnement ni perte d'état du système, des périphériques et des processus. Le sous-système LUO repose sur un mécanisme précédemment intégré au noyau. ENTREPÔT La fonctionnalité Kexec HandOver, outre le lancement d'un nouveau noyau depuis l'ancien sans perte d'état du système, résout des problèmes tels que la préservation de l'état des périphériques et de la RAM, ainsi que la continuité des opérations liées à l'accès direct à la mémoire (DMA) et à la gestion des interruptions. L'état est préservé avant le passage au nouveau noyau et restauré après son activation sans perturber le fonctionnement continu des périphériques assuré par le système et les applications utilisateur.
-
Добавлен L'appel système listns() est utilisé pour lister les espaces de noms existants dans le système sans avoir à parcourir /proc/. /ns/ pour tous les processus.
Le système d'E/S asynchrones io_uring prend désormais en charge le placement d'éléments de tailles différentes dans l'entrée de la file d'attente de soumission (SQE), à l'instar de la version précédente qui permettait de mélanger les tailles des éléments de la file d'attente de résultats (CQE). Auparavant, tous les éléments de la file d'attente devaient avoir la même taille, ce qui entraînait une consommation excessive de mémoire, car il était nécessaire d'utiliser la taille maximale pour tous les éléments.
io_uring prend désormais en charge le mécanisme zcrx (Zero-Copy Receive) pour la réception de données sans copie entre le noyau et l'espace utilisateur. La prise en charge des requêtes de disposition mémoire pour les files d'attente SQ (Submission Queue) et CQ (Completion Queue) a été ajoutée, permettant d'obtenir les informations de taille du tampon circulaire nécessaires à l'allocation de mémoire définie par l'utilisateur à l'aide des indicateurs IORING_SETUP_NO_MMAP et IORING_MEM_REGION_TYPE_USER.
Pour permettre un traçage rapide de la pile d'appels à l'aide d'outils tels que perf, la prise en charge du format SFrame avec informations de déroulement de la pile a été ajoutée. Déjà pris en charge par GCC et binutils, le format SFrame n'affecte pas les performances et, contrairement au format DWARF, ne contient que les informations minimales nécessaires au traçage de la pile.
-
Dans l'utilitaire de performance ajoutée Prise en charge des descriptions unifiées des métriques et des événements au format JSON, ainsi que du déroulement différé de la pile d'appels dans l'espace utilisateur.
Pour Processeurs AMD Un mécanisme de substitution de données a été mis en œuvre qui permet aux périphériques d'entrée/sortie de substituer directement des données dans le cache L3 du processeur sans les placer au préalable dans la RAM.
Prise en charge supplémentaire MPAM (Partitionnement et surveillance des ressources du système de mémoire)Les extensions de l'architecture du jeu d'instructions ARMv8-A permettent d'associer à chaque accès mémoire un identifiant de partition (PARTID) et un identifiant de groupe de surveillance (PMG). Grâce aux PARTID, la consommation de ressources, telles que la bande passante mémoire ou la taille du cache, peut être limitée afin d'éviter qu'un seul groupe de tâches n'accapare toutes les ressources. Dans le cadre de la surveillance, la combinaison des PMG et des PARTID permet de suivre la consommation des ressources mémoire sous des charges de travail spécifiques.
Si un processus s'arrête anormalement après avoir reçu un signal, un autre processus qui possède le pidfd du processus arrêté peut désormais déterminer le numéro du signal qui a provoqué l'arrêt du processus.
Implémentation remaniée des séquences redémarrables (séquences redémarrables), Cette nouvelle implémentation permet aux applications d'organiser l'exécution pseudo-atomique et non interruptible d'un groupe d'instructions (en cas d'interruption par un autre thread, la séquence est relancée). Elle offre des performances améliorées.
-
Pour Programmes BPF mis en œuvre Les instructions BPF_JMP, BPF_X et BPF_JA permettent d'effectuer des sauts indirects vers une position spécifique à partir de la table de sauts. Le concept de pointeurs dynamiques a été ajouté (dynptr), vous permettant de lire des données à partir de fichiers structurés. Ajouté par la possibilité d'associer plusieurs octets de métadonnées aux paquets réseau.
Modules PythonLes fichiers utilisés pour le traitement de la documentation du noyau ont été déplacés vers un répertoire distinct tools/lib/python.
-
Fonction ajoutée mempool_alloc_bulk() allouer en toute sécurité des éléments de la mémoire allouée à plusieurs objets simultanément.
-
A continué transférer les modifications d'une succursale Rouille pourLinux, lié à l'utilisation Langage Rust comme second langage pour le développement de pilotes et de modules du noyau (la prise en charge de Rust n'est pas activée par défaut et n'entraîne pas l'inclusion de Rust dans la liste des dépendances de compilation obligatoires du noyau). Dans la nouvelle version, le noyau est inclus dans intégré bibliothèque "syn« Grâce à un analyseur syntaxique Rust, l'écriture de macros complexes est simplifiée. Les fonctionnalités des bibliothèques kernel, pin-init et rbtree ont été étendues. La bibliothèque num, avec le trait Integer pour la manipulation d'entiers, a été ajoutée. La macro module! prend désormais en charge les paramètres entiers. Il est possible de spécifier des paramètres lors du chargement de modules du noyau écrits en Rust. Des abstractions pour les sous-systèmes ont été implémentées. » I2C и PWM (Modulation de largeur d'impulsion).
-
Добавлен La macro `at_least` (par exemple, `param[at_least 7]`) indique la taille minimale autorisée d'un tableau passé à une fonction. Si un tableau contenant moins d'éléments est passé à la fonction, le compilateur émet un avertissement.
-
la composition allumé Le script klp-build permet de générer des modules noyau qui modifient le noyau en cours d'exécution (livepatch) à partir d'un fichier de correctif. L'utilitaire objtool a été mis à jour pour prendre en charge la génération de correctifs à chaud.
-
В User-mode Linux (L'exécution du noyau en tant que processus utilisateur) a ajouté une prise en charge limitée du multiprocessus, mais les threads au sein du même processus ne peuvent pas encore s'exécuter simultanément. A commencé портирование User-mode Linux на библиотеку nolibc.
-
Ajouté par support d'architecture LoongArch32 (LA32R, LA32S) en plus de LoongArch64.
-
Ajouté par la possibilité de définir des limites QoS sur la fréquence de réveil du processeur en mode d'économie d'énergie s2idle (Suspend-To-Idle), qui fige l'exécution des processus dans l'espace utilisateur mais laisse certains gestionnaires actifs dans le noyau.
-
Ajouté par prise en charge de la gestion des tables de pages mémoire pour les contrôleurs IOMMU (Unité de gestion de la mémoire d'entrée/sortie), qui traduisent les adresses virtuelles vues par un périphérique matériel en adresses physiques, avec la possibilité de filtrer les opérations DMA par adresses virtuelles, et de limiter et d'isoler les opérations d'E/S.
Les événements de trace des appels système prennent désormais en charge la lecture des tampons depuis l'espace utilisateur et l'inclusion de leur contenu (par exemple, les noms de fichiers) dans la sortie de trace.
-
**Pages de mémoire de Watchdog(( (page de garde), dont l'accès provoque une exception et l'arrêt anormal du processus (SIGSEGV), sont désormais sont marqués marque spéciale dans le fichier /proc/PID/smaps.
-
Ajouté par capacité à gérer grandes pages de mémoire (page transparente géante) dans la mémoire privée des appareils zonés.
-
Dans l'appareil zram, utilisé pour le stockage compressé de la partition d'échange en mémoire, mis en œuvre prise en charge du vidage de plusieurs structures « bio » (E/S par bloc) en mode batch (traitement par lots en écriture différée).
La police de caractères est incluse. Terminus 10×18, ce qui améliore la lisibilité des informations de la console sur les écrans d'ordinateurs portables de résolution moyenne (1440×900).
-
Beaucoup optimisé travailler sous-systèmes d'audit — On constate une réduction de moitié des frais généraux.
-
- Virtualisation et sécurité
- Ajout de la prise en charge de la fonctionnalité fournie par les processeurs Intel pour divisions La séparation linéaire de l'espace d'adressage (LASS) permet une séparation matérielle des plages d'adresses de l'espace utilisateur et de l'espace noyau, renforçant ainsi la sécurité. L'espace d'adressage est divisé selon le bit de poids fort de l'adresse : la moitié de l'espace d'adressage dont le bit de poids fort est activé est utilisée par le noyau, tandis que l'autre moitié est utilisée par l'espace utilisateur. Au début de l'exécution d'une instruction (avant l'exécution spéculative), une vérification est effectuée pour s'assurer que les accès depuis l'espace utilisateur vers les adresses dont le bit de poids fort est activé sont autorisés, et inversement. Cette séparation empêche les fuites de mémoire du noyau vers l'espace utilisateur par canal auxiliaire, même pendant l'exécution spéculative, rendant ainsi la LASS adaptée à la protection contre les attaques Meltdown et Spectre sans engendrer de surcharge significative.
- Ajout de la possibilité d'activer étendu Les améliorations de sécurité du bus PCI Express (chiffrement des liens PCIe et authentification des périphériques PCIe) permettent l'authentification et le chiffrement du canal de communication entre un périphérique PCIe et une machine virtuelle protégée par Intel TDX (Trusted Domain Extensions) et AMD SEV-SNP (Secure Nested Paging). Ces technologies empêchent l'interception, l'analyse et l'insertion de données dans le trafic DMA lors de l'accès au système hôte ou à d'autres périphériques.
- Dans la bibliothèque cryptographique intégrée ajoutée prise en charge des algorithmes SHA-3 (SHA3-224, SHA3-256, SHA3-384, SHA3-512) SHAKE128, SHAKE256 et BLAKE2b.
- Pour les modules LSM (Linux Modules de sécurité) et, en particulier, pour SELinux, mis en œuvre la possibilité de suivre la création de descripteurs memfd afin d'appliquer des politiques de sécurité aux objets qui leur sont associés.
- Dans le module LSM IPE (Application de la politique d'intégrité), qui définit la politique d'intégrité générale pour l'ensemble du système, la prise en charge de l'indicateur a été ajoutée AT_EXECVE_CHECK en fonction exécuter(), ce qui inclut la 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 limité aux données de l'espace utilisateur. protection attaques spéculatives.
- Ajouté par mécanisme de soutien VMBus confidentiel, utilisé dans l'hyperviseur HyperV pour une communication inviolable entre un système invité fonctionnant en mode confidentiel (avec chiffrement de la mémoire et isolation des registres basés sur les technologies AMD SNP et Intel TDX) et un paraviseur responsable de l'accès aux périphériques qui traitent des données confidentielles.
- Ajouté par La possibilité de transmettre des informations sur un processus ayant planté (pour générer un fichier coredump) via le mécanisme pidfd. Un identifiant PIDFD est associé à un processus spécifique et reste inchangé, tandis qu'un PID peut être attribué à un autre processus après la fin du processus actuel associé à ce PID. L'utilisation de pidfd permet de bloquer l'exécution de attaques en remplaçant un processus suid ayant planté par un autre processus, ce qui provoque une condition de concurrence au moment où le noyau commence à traiter le plantage, mais avant que le gestionnaire d'espace utilisateur ne vérifie les paramètres du processus.
- Sous-système réseau
- Au sous-système réseau introduit Optimisations pour améliorer l'efficacité du transfert de données (TX). Suppression du verrouillage par attente active (spinlock) de la fonction __dev_queue_xmit() et utilisation de la structure llist sans verrouillage. autorisé Augmentez les performances par quatre en cas de forte charge et doublez le débit d'envoi de paquets tout en réduisant de moitié la charge du processeur.
- Fourni par occasion déconnexions Pour chaque socket réseau, les limites de mémoire système seront désactivées (dans ce cas, les limites de mémoire globales définies pour chaque conteneur seront utilisées). Pour désactiver ces limites, utilisez la commande système `net.core.bypass_prot_mem` et l'option `SK_BPF_BYPASS_PROT_MEM` dans la fonction `bpf_setsockopt`.
- Ajouté par prise en charge des extensions RFC 5837, qui ajoute des informations sur les interfaces réseau entrantes aux messages ICMP Time Exceeded renvoyés lorsque la durée de vie (TTL) d'un paquet expire, afin d'obtenir des informations plus détaillées lors du traçage des routes avec l'utilitaire traceroute.
- Ajouté par Prise en charge de l'interrogation active continue dans un thread noyau séparé pour extraire les descripteurs des files d'attente RX/TX pour les applications nécessitant une latence minimale.
- Prise en charge du protocole ajouté PEUT XL (Controller Area Network eXtended Length), в котором размер поля с данными увеличен до 2048 байт для обеспечения интеграции с сетями TCP/IP, реализована возможность туннелирования Ethernet-кадров и добавлена поддержка modulation de largeur d'impulsionce qui a permis de transmettre des données à des vitesses de 20 Mbps et plus.
- Ajouté par structure de soutien sockaddr_unsized, une variante de la structure sockaddr qui utilise un tableau avec éléments flexibles au lieu d'un tableau de taille fixe (sa_data[] au lieu de sa_data[14], qui était essentiellement utilisé pour faire référence à d'autres structures plus grandes).
- Ajout de la possibilité d'utiliser les fonctionnalités getsockname et getpeername via le sous-système io_uring.
- Ajout de sysctl net.ipv4.tcp_rcvbuf_low_rtt и net.ipv4.tcp_comp_sack_rtt_percent optimiser le protocole TCP.
- Ajouté par prise en charge des liaisons avec un débit de 1600 Gbit/s (1.6 T).
- Équipement
- Une API a été ajoutée au sous-système DRM (Direct Rendering Manager) afin d'exploiter les capacités matérielles de transformation des couleurs, éliminant ainsi le besoin de shaders ou d'exécution de code sur le processeur. Pour la sortie de contenu HDR, les transformations de couleurs complexes peuvent désormais être effectuées par le contrôleur d'affichage avant et après le mélange, au lieu d'une composition logicielle du contenu dans la mémoire tampon d'affichage finale. Outre la réduction de la charge et de la consommation d'énergie lors de l'organisation de la sortie HDR, cette fonctionnalité permet d'assurer un rendu des couleurs précis dans les logiciels de montage vidéo ou d'édition d'images.
- Добавлен Pilote ethosu pour les NPU Arm Ethos U65 et U85, conçu pour l'accélération matérielle des modèles d'IA.
- Le pilote i915 pour les GPU Lunar Lake et plus récents ajoute la prise en charge de l'amélioration de la netteté assistée par matériel.
- A continué 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 Intel Arc et les processeurs intégrés, à commencer par les processeurs Tiger Lake. Une prise en charge initiale de l'architecture Xe3P, utilisée dans les GPU Crescent Island et la famille de processeurs Nova Lake avec graphiques intégrés, a été ajoutée.
- Le pilote AMDGPU prend désormais pleinement en charge les cartes graphiques AMD GCN 1.0 « Southern Island » et 1.1 « Sea Islands », qui dépendaient auparavant du pilote Radeon. Le pilote AMDGPU est désormais équivalent au pilote Radeon et est activé par défaut pour ces GPU. Les cartes GCN 1.x ont été commercialisées entre 2012 et 2019 et comprennent des modèles tels que les 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. augmenter Avec un gain de performance moyen de 24 %, la transition vers AMDGPU a permis la prise en charge de l'API graphique Vulkan 1.3 pour ces GPU. AMDGPU a également ajouté la prise en charge des connecteurs analogiques et du moteur de codage vidéo 1.0, et a activé par défaut la pile Display Core (DC) pour les GPU basés sur la microarchitecture Bonaire (Radeon HD 7790).
- Dans le nouveau conducteur mis en œuvre prise en charge de l'accélérateur matériel NVJPG présent dans le SoC Tegra210.
- Dans le conducteur Panthor ajoutée Prise en charge du GPU Mali-G1 et prise en charge initiale de la puce MediaTek MT8196.
- Ajouté par Prise en charge du sous-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 équipés du firmware GSP, utilisé depuis la série NVIDIA GeForce RTX 2000 basée sur la microarchitecture Turing, se poursuit. Le pilote est écrit en Rust. Les travaux sur RPC et complété implémentation du chargement du coprocesseur GSP (GPU System Processor).
- Ajouté par Prise en charge des cartes, SoC et périphériques ARM : 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 options de carte Enclustra Mercury.
- Ajout de la prise en charge des smartphones et tablettes équipés des SoC Mediatek MT6582 (Alcatel YarisXL), Nvidia Tegra124 (Xiaomi Mi Pad) et Qualcomm MSM8939 (ASUS ZenFone 2). Ajout de la prise en charge des ordinateurs portables équipés du SoC Qualcomm SDM850, tels que le Huawei MateBook E 2019.
- Ajout de la prise en charge des SoC et des cartes basées sur l'architecture RISC-V : OrangePi R2S, OrangePi RV, Anlogic dr1v90, Tenstorrent Blackhole.
Parallèlement, la Fondation latino-américaine du logiciel libre formé вариант noyau entièrement gratuit 6.19 - Linux-libre 6.19-gnuLe firmware et les pilotes contenant des composants propriétaires ou des sections de code à portée restreinte par le fabricant ont été nettoyés. Dans la version 6.19, le code de chargement du firmware binaire a été supprimé du sous-système audio SDCA. Le code de nettoyage des blobs a été mis à jour dans les pilotes des codecs audio Intel XE, Nova-Core, Qualcomm Iris, Venus et Q6V5, TI PRUeth, Intel iwlwifi, Marvell mwifiex, FourSemi fs210x, Realtek rt1320 et TI tas2783. Les noms des blobs dans les fichiers DTS (arbre de périphériques) des puces ARM ont été nettoyés. Le nettoyage du pilote DVB STM C8SECTPFE, retiré du noyau, a été abandonné.
Source: linux.org.ru
