Après deux mois de développement, Linus Torvalds a présenté la version du noyau Linux 6.12. Parmi les changements les plus notables : la possibilité d'activer le mode temps réel, sched_ext pour la création de planificateurs CPU via eBPF, l'affichage d'un code QR en cas d'états d'urgence, le mécanisme Device Memory TCP, le mécanisme de réservation des ressources SCHED_DEADLINE server, l'amélioration du planificateur de tâches EEVDF, et le module IPE pour définir des politiques d'intégrité.
La nouvelle version comprend 14607 corrections de la part de 2167 développeurs, la taille du patch étant de 37 Mo (les changements ont touché 13087 fichiers, 507913 lignes de code ont été ajoutées et 234083 lignes supprimées). Dans la version précédente, il y avait 15130 corrections provenant de 2078 développeurs, avec une taille de patch de 85 Mo (dans le noyau 6.10, le patch faisait 41 Mo). Environ 45 % des modifications présentées dans 6.12 concernent les pilotes de périphériques, environ 12 % des changements sont liés à la mise à jour du code spécifique aux architectures matérielles, 13 % concernent la pile réseau, 6 % ont trait aux systèmes de fichiers et 3 % aux sous-systèmes internes du noyau.
Les principales nouveautés du noyau 6.12 :
- Mémoire et services système
- Il est désormais possible de compiler le noyau avec l'option PREEMPT_RT sans patchs supplémentaires pour un fonctionnement en temps réel. La dernière fonctionnalité manquante dans le noyau, qui empêchait l'activation du mode PREEMPT_RT, était la prise en charge de l'affichage atomique non-bloquant via la fonction printk, qui a également été intégrée dans le noyau. Le support de PREEMPT_RT est disponible pour les architectures x86, x86_64, ARM64 et RISC-V. Jusqu'à présent, la mise en œuvre du mode PREEMPT_RT était fournie sous forme de patchs externes, à partir desquels certaines distributions, telles que RHEL, SUSE et Ubuntu, créaient des éditions Realtime distinctes de leurs produits, très demandées dans des domaines tels que les systèmes financiers, les appareils de traitement audio et vidéo, l'aviation, la médecine, la robotique, ainsi que les systèmes de télécommunications et industriels, où il est nécessaire d'assurer un temps de traitement des événements prévisible.
- Un mécanisme « sched_ext » (SCX) a été ajouté, permettant d'utiliser eBPF pour créer des planificateurs CPU, englobant pratiquement tous les aspects de la planification de l'exécution des tâches et de la répartition des ressources CPU. De tels planificateurs peuvent être chargés dynamiquement et exécutés à l'intérieur du noyau Linux. une machine virtuelle eBPF. Le mécanisme sched_ext simplifie la création de planificateurs spécifiques à certaines tâches, permettant d'expérimenter différentes techniques et stratégies de planification, ainsi que de créer rapidement des prototypes de travail et de remplacer les planificateurs à la volée dans les infrastructures opérationnelles. Par exemple, grâce à sched_ext, il est possible de créer un planificateur qui prend en compte les spécificités d'une application donnée et ajuste dynamiquement sa stratégie de planification en fonction de l'état du système et d'autres facteurs supplémentaires.
- La mise à jour inclut le reste des correctifs nécessaires au fonctionnement du mécanisme SCHED_DEADLINE server, qui résout le problème de l'allocation insuffisante des ressources CPU aux tâches ordinaires en raison de la monopolisation du CPU par des tâches à haute priorité (realtime). Pour éviter la monopolisation du CPU, le noyau utilisait précédemment le mécanisme de Realtime throttling, qui tentait de réserver 5 % pour les tâches de basse priorité, laissant 95 % du temps aux tâches realtime. Ce mécanisme laissait à désirer car les tâches ordinaires recevaient souvent moins de temps processeur. Le serveur SCHED_DEADLINE met en œuvre un mécanisme de réservation des ressources plus efficace.
- L'intégration du planificateur de tâches EEVDF (Earliest Eligible Virtual Deadline First) est terminée. Ce planificateur a remplacé le CFS (Completely Fair Scheduler), qui était fourni depuis le noyau 2.6.23. Le nouveau planificateur prend en compte, lors du choix du prochain processus à exécuter, ceux qui n'ont pas reçu suffisamment de ressources processeur ou qui ont reçu injustement trop de temps processeur. Dans le premier cas, la gestion est transférée de manière forcée au processus, tandis que dans le second, elle est retardée. L'ancien planificateur CFS utilisait une heuristique et des réglages fins pour déterminer les processus nécessitant une attention particulière, tandis que le nouveau planificateur les suit plus explicitement et ne nécessite pas de réglages fins. On s'attend à ce que l'EEVDF réduise les délais d'exécution des tâches qui posaient problème au CFS en matière de planification.
- Dans le gestionnaire d'erreurs du noyau — DRM Panic, qui utilise le sous-système DRM (Direct Rendering Manager) pour afficher un rapport visuel au style « écran bleu de la mort », une fonctionnalité a été ajoutée pour afficher le logo et un code QR avec le rapport kmsg en cas d'état d'urgence. Étant donné que le code QR peut contenir seulement 2953 octets, une option DRM_PANIC_SCREEN_QR_CODE_URL a été prévue, où le rapport kmsg est compressé à l'aide de zlib et attaché comme paramètre à l'URL, permettant de transmettre environ 7500 octets via un QR code V40. Lors de la création de paquets avec le noyau, les distributions peuvent spécifier une URL de base, ce qui permet d'organiser une redirection vers une page pour signaler un problème. Une configuration DRM_PANIC_SCREEN_QR_VERSION a été prévue pour choisir le format du code QR.
- Le support de l'extension ARM POE (Permission Overlay Extension) a été ajouté, permettant de définir des droits d'accès à des zones de mémoire. Grâce à cette extension, sur les systèmes avec des processeurs ARM64, un mécanisme de Memory Protection Keys peut être mis en œuvre, permettant de restreindre l'accès aux pages de mémoire sans modifier la table des pages de mémoire.
- Pour les architectures Loongarch, ARM64, PowerPC et s390, l'implémentation de l'appel système getrandom() a été transférée, optimisée grâce au mécanisme vDSO (virtual dynamic shared object), qui permet de déplacer le gestionnaire d'appels système de l'espace noyau à l'espace utilisateur et d'éviter les commutations de contexte. Cette optimisation permet d'accélérer jusqu'à 15 fois la génération de nombres aléatoires.
- Dans le sous-système d'E/S asynchrone io_uring, une fonctionnalité a été ajoutée pour utiliser des délais d'attente absolus, qui se déclenchent lorsqu'un certain temps est atteint sur l'horloge système (auparavant, seuls des délais relatifs pouvaient être spécifiés, indiquant la durée depuis le début de l'opération).
- Des fichiers pour générer des liaisons pour la bibliothèque libcpupower à l'aide de l'outil SWIG ont été ajoutés, permettant de créer des liaisons à partir de code C/C++ pour divers langages de programmation. Ces liaisons permettent de créer des scripts en Python et dans d'autres langages et de les utiliser pour étendre les fonctionnalités de la bibliothèque libcpupower, offrant une API pour gérer cpufreq et les pilotes depuis l'espace utilisateur.
- Dans l'outil cpuidle, la valeur de l'état de veille «residency» a été implémentée, ce qui est utilisé pour les systèmes en temps réel et prend en compte le temps minimal que le processeur doit passer en état de veille pour justifier la consommation d'énergie liée à la transition vers cet état et en sortir.
- Ajout de la possibilité d'utiliser le compilateur Clang pour compiler la bibliothèque standard C nolibc, qui fait partie des sources du noyau Linux et fournit un wrapper pour les appels système de base. Lors de la compilation de nolibc avec Clang, l'optimisation au moment de l'édition des liens (LTO) est autorisée.
- Certaines interfaces cgroup1, telles que le comptage TCP, la première version des limites souples (soft limit) et la gestion de l'épuisement de la mémoire libre, ont été déclarées obsolètes. Le support de ces fonctionnalités reste entièrement en place pour le moment, et un avertissement a été émis pour étudier le nombre d'utilisateurs qui continuent d'utiliser ces capacités.
- Ajout de la possibilité de configurer le tampon circulaire de traçage pour conserver les données accumulées après un redémarrage, ce qui évitera de perdre les informations de débogage accumulées en cas de crash du noyau. Les données sont conservées en mémoire. L'activation se fait via le paramètre de ligne de commande du noyau trace_instance. Par exemple, définir «trace_instance=boot_map@0x285400000:12M» réservera 12 Mo de mémoire à l'adresse 0x285400000 pour le tampon «boot_map», qui sera accessible via le fichier /sys/kernel/tracing/instances/boot_map.
- La migration des 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 kernel, se poursuit (le support de Rust n'est pas activé par défaut et n'entraîne pas son inclusion en tant que dépendance de construction obligatoire du noyau). Des modules ‘list’ et ‘rbtree’ ont été ajoutés pour travailler avec les listes chaînées bidirectionnelles et les arbres de recherche rouge-noir (red-black tree). Les fonctionnalités des modules ‘init’, ‘sync’, ‘types’ et ‘error’ ont été élargies. La possibilité d'utiliser du code Rust lors de la construction du noyau avec protection contre les attaques Spectre (options MITIGATION_{RETHUNK, RETPOLINE, SLS}), l'utilisation du système de débogage KASAN, les mécanismes de protection kCFI (kernel Control Flow Integrity) et Shadow Call, ainsi que lors de l'utilisation de plugins supplémentaires GCC a été fournie. Un driver pour le contrôleur Ethernet Applied Micro QT2025 PHY, écrit en Rust, a été ajouté. Un site distinct avec une documentation a été préparé — rust.docs.kernel.org.
- Une utilitaire xdrgen a été ajoutée au code source du noyau pour transformer les spécifications XDR (eXternal Data Representation) en fonctions d'encodage et de décodage XDR, écrites dans le style C adopté dans le noyau Linux.
- Le noyau a reçu un changement avec la mise en œuvre d'un mécanisme de masquage des pointeurs pour réduire le nombre d'appels lents de barrier_nospec() dans la fonction 64 bits copy_from_user(), utilisée pour copier des données du l'espace utilisateur vers le noyau. L'application du masquage accélère de 2,6 % le passage du test « per_thread_ops », qui évalue le nombre opérations pouvant être exécutées dans un seul thread.
- Un nouveau driver USB a été ajouté, permettant d'utiliser le protocole 9pfs comme transport pour l'envoi et la réception de données avec un appareil USB, lors du montage du système de fichiers 9p sur USB (par exemple, « mount -t 9p -o trans=usbg, aname=/path/to/fs /mnt/9 »). Un exemple d'application de ce nouveau driver est son utilisation au lieu de NFS pour organiser le chargement de la partition racine lors du développement de dispositifs intégrés.
- Sous-système de disque, entrée/sortie et systèmes de fichiers
- Le sous-système VFS a ajouté la possibilité de travailler avec des dispositifs de stockage dont la taille des blocs est supérieure à celle de la page mémoire dans le système. Dans les systèmes de fichiers, cette fonctionnalité est actuellement supportée uniquement par XFS.
- Le sous-système FUSE, qui permet de créer des implémentations de systèmes de fichiers fonctionnant dans l'espace utilisateur, a ajouté la prise en charge de la mappage des identifiants utilisateurs des systèmes de fichiers montés, utilisé pour faire correspondre les fichiers d'un utilisateur spécifique sur une partition montée d'un autre utilisateur dans le système actuel.
- Une nouvelle opération fcntl F_CREATED_QUERY a été mise en œuvre, permettant à l'application de déterminer si un fichier ouvert avec le drapeau O_CREAT a été créé ou s'il existait déjà auparavant.
- L'appel système name_to_handle_at() a été amélioré pour permettre l'utilisation d'identifiants uniques de 64 bits pour les points de montage afin d'éviter les conditions de concurrence lors de l'analyse de /proc/mountinfo.
- La taille de la structure «file» dans le noyau a été réduite de 232 à 184 octets, ce qui permet de diminuer la consommation de mémoire sur les systèmes travaillant activement avec les fichiers.
- Le montage de systèmes de fichiers sur des points de montage à l'intérieur de la hiérarchie /proc, par exemple, dans /proc/PID/fd, est désormais interdit, car cela posait des problèmes de sécurité potentiels.
- Dans le pseudo-système de fichiers NSFS (NameSpace FS), utilisé pour travailler avec des espaces de noms, une fonctionnalité a été ajoutée pour fournir des informations supplémentaires sur les espaces de noms des points de montage.
- Dans le système de fichiers EROFS (Extendable Read-Only File System), destiné à être utilisé sur des partitions accessibles en mode lecture seule, la prise en charge du montage de systèmes de fichiers directement à partir d'images disque sauvegardées sous forme de fichiers a été ajoutée.
- De nouvelles commandes ioctl XFS_IOC_START_COMMIT et XFS_IOC_COMMIT_RANGE ont été ajoutées dans XFS pour échanger du contenu entre deux fichiers.
- Dans NFS, le support du protocole «LOCALIO» a été ajouté, permettant de déterminer si le client et serveur NFS se trouvent sur le même hôte, afin de mettre en œuvre les optimisations appropriées.
- Des optimisations de performances ont été proposées dans le système de fichiers Btrfs, un refactoring du code a été réalisé, la zone de verrouillage des extensibles a été réduite lors des opérations de lecture, et les travaux ont continué pour passer à l'utilisation des folios de pages mémoire, avec la mise en œuvre d'un libération automatique de la mémoire pour la structure btrfs_path.
- Dans le système de fichiers Ext4, des erreurs liées à l'allocation de blocs, à la gestion des extensibles, au mécanisme de «fast commit» et à la journalisation ont été corrigées.
- Virtualisation et sécurité
- Module LSM IPE (Integrity Policy Enforcement), développé par Microsoft pour étendre le système de contrôle d'accès par mandat existant, a été ajouté. Ce module permet de définir une politique globale d'intégrité pour l'ensemble du système, indiquant quelles opérations sont autorisées et comment authentifier les composants. Par exemple, avec IPE, il est possible de spécifier quels fichiers exécutables peuvent être lancés tout en vérifiant leur conformité avec la version de référence à l'aide de hachages cryptographiques fournis par le système dm-verity.
- À l'étape de compilation du noyau, il est désormais possible d'activer séparément les méthodes de protection contre diverses vulnérabilités de la classe Spectre dans le CPU. Dans Kconfig, de nouveaux paramètres ont été proposés : MITIGATE_MDS (protection contre la vulnérabilité Microarchitectural Data Sampling), MITIGATE_TAA (protection contre la vulnérabilité TSX Asynchronous Abort), MITIGATE_MMIO_STALE_DATA (protection contre la vulnérabilité MMIO Stale Data), MITIGATE_L1TF (protection contre la vulnérabilité L1 Terminal Fault), MITIGATE_RETBLEED (protection contre la vulnérabilité Retbleed), MITIGATE_SPECTRE_V1, MITIGATE_SPECTRE_V2 (protection contre les vulnérabilités Spectre), MITIGATE_SRBDS (protection contre la vulnérabilité Special Register Buffer Data Sampling), MITIGATE_SSB (protection contre la vulnérabilité Speculative Store Bypass).
- Un paramètre de ligne de commande proc_mem.force_override et un ensemble de configurations de construction dans Kconfig (PROC_MEM_FORCE_ALWAYS, PROC_MEM_FORCE_PTRACE et PROC_MEM_FORCE_NEVER) ont été ajoutés, permettant d'interdire la modification de la mémoire via /proc/pid/mem.
- Le sous-système LSM (Linux security module) a été converti pour utiliser des appels statiques, ce qui a renforcé la sécurité et amélioré les performances.
- La possibilité d'utiliser des noyaux standard pour l'architecture ARM64 dans des environnements invités exécutés sur des systèmes Android avec hyperviseur KVM modifié (protected KVM) a été assurée.
- Dans le module LSM Landlock, qui permet de limiter l'interaction d'un groupe de processus avec l'environnement extérieur, le concept de 'scoping IPC' a été mis en œuvre pour restreindre sélectivement l'interaction avec des environnements sandbox, en utilisant des sockets Unix et des signaux. Par exemple, il est possible d'interdire les connexions à l'aide de sockets Unix de l'environnement sandbox vers des processus sans confinement, tout en autorisant les connexions avec des processus dans le même domaine de scope.
- Dans l'hyperviseur KVM, un indicateur a été ajouté dans CPUID pour les systèmes invités, signalant le support des extensions AVX10.1.
- Sous-système réseau
- Un mécanisme Device Memory TCP a été ajouté, permettant d'utiliser des sockets réseau pour envoyer directement le contenu de la mémoire des périphériques sur le réseau (mode zero-copy) et de placer directement le contenu des paquets réseau dans la zone mémoire du périphérique du côté du destinataire. Les données transmises dans les paquets sont envoyées de la carte réseau à la mémoire du périphérique ou de la mémoire du périphérique à la carte réseau directement, contournant le CPU, tandis que les en-têtes des paquets sont envoyés aux tampons classiques du noyau.
- Les fonctionnalités de nombreux pilotes Ethernet et sans fil ont été étendues. Par exemple, dans le pilote Intel iwlwifi, le support des opérations RLC/SMPS a été déplacé du côté du firmware, dans le pilote RealTek rtw89, la performance a été améliorée et le support pour les puces RTL8852BT/8852BE-VT (WiFi 6) a été ajouté, dans le pilote Ethernet microchip, le support des spécifications IEEE 802.3bw (100BASE-T1) et IEEE 802.3bp a été ajouté, et les implémentations des Ethernet virtuels Microsoft vNIC et IBM veth ont été améliorées. De nouveaux pilotes pour les puces Ethernet Realtek RTL9054, RTL9068, RTL9072, RTL9075, RTL9068, RTL9071 et Microchip LAN8650/1 10BASE-T1S MAC-PHY ont été ajoutés.
- Dans MPTCP (MultiPath TCP), l'extension du protocole TCP pour la livraison simultanée de paquets TCP sur plusieurs chemins via différentes interfaces réseau, la taille des coefficients de poids utilisés pour le routage a été augmentée de 8 à 16 bits. La détection du trafic perdu (blackhole) et la suspension pendant un certain temps des tentatives d'établissement de connexions avec des systèmes entraînant une perte de trafic ont été mises en œuvre.
- Pour IPv6, la prise en charge du drapeau « p » dans PIO (Prefix Information Option), utilisé dans les annonces RA (IPv6 Router Advertisements) pour sélectionner le modèle de déploiement des clients via DHCPv6-PD (DHCPv6 Prefix Delegation, RFC9663) au lieu d'attribuer des adresses individuelles basées sur des préfixes, utilisant SLAAC (Stateless Address Autoconfiguration), a été mise en œuvre. Dans IPv6 IOAM6, le support d'un nouveau mode d'encapsulation tunsrc, permettant d'atteindre de meilleures performances, a été ajouté.
- La performance du traitement des paquets de contrôle IPsec a été améliorée.
- La performance du vidage (flush) de grands ensembles de règles nftables a été améliorée. Dans nfnetlink_queue, le support du protocole SCTP a été amélioré.
- L'API ethtool a ajouté la prise en charge de l'association de plusieurs cartes réseau à une seule interface réseau.
- Matériel
- Dans le driver AMDGPU, le travail se poursuit sur la mise en œuvre de la prise en charge du GPU AMD RDNA4 (« GFX12 »). La possibilité de vider des files d'attente de tâches individuelles sans réinitialiser l'état complet du GPU a été ajoutée.
- Le travail sur le pilote drm (Direct Rendering Manager) Xe pour les GPU basés sur l'architecture Intel Xe, utilisés dans les cartes graphiques Intel de la famille Arc et la graphique intégrée à partir des processeurs Tiger Lake, se poursuit. La nouvelle version inclut la prise en charge des GPU basés sur les microarchitectures Battlemage et Lunar Lake. Le support des modificateurs CCS (Color Control Surface) Xe2 pour la gestion des paramètres des GPU intégrés et discrets a été introduit.
- Dans le pilote i915, il est désormais possible de sortir des informations sur la vitesse de rotation du ventilateur via l'interface HWMON ou sysfs (attribut « fan1_input »). L'argument « i915.modeset » a été déclaré obsolète ; à la place de « i915.modeset=0 », il convient d'utiliser « i915.nomodeset ».
- Le pilote DRM msm (GPU Qualcomm Adreno) a ajouté la prise en charge des GPU A615, A306 et A621.
- Dans le pilote Nouveau, une restructuration et un nettoyage des structures internes ont été effectués.
- Le pilote intel_pstate, qui gère les paramètres de consommation d'énergie (P-state) sur les systèmes avec processeurs Intel, a ajouté la prise en charge des systèmes hybrides avec des CPU asymétriques (avec des caractéristiques différentes), ainsi que la prise en charge de la gestion de l'alimentation des processeurs basés sur les microarchitectures Granite Rapids et Sierra Forest. Le pilote intel_idle a ajouté la prise en charge des CPU Xeon Granite Rapids. Le pilote intel_rapl a été mis à jour pour reconnaître les processus AMD de la famille 1Ah et les processeurs Intel ArrowLake-U.
- La mise en œuvre des modifications pour la prise en charge du SoC ARM Snapdragon X Elite, qui utilise le propre CPU 12 cœurs Qualcomm Oryon et le GPU Qualcomm Adreno, se poursuit. Cette puce vise une utilisation dans les ordinateurs portables et de bureau, surpassant dans de nombreux tests de performance les puces Apple M3 et Intel Core Ultra 155H.
- Ajout de la prise en charge des plates-formes ARM, des SoC et des appareils : Broadcom bcm2712 (Raspberry Pi 5), Renesas R9A09G057 (RZ/V2H), Qualcomm Snapdragon 414 (MSM8929), Lenovo ThinkPad T14s Gen 6, Lenovo A6000/A6010, Surface Laptop 7, Anbernic RG35XXSP, Firefly Core-PX30-JD4, Lunzn Fastrhino R68S, Aspeed Riser, AGX Orin, Rockchip Qnap-TS433, Huashan Pi, Meta Catalina, BeagleY-AI, NanoPi R2S Plus, ExynosAuto v920, SOPHGO SG2002, Qualcomm IPQ5332, LG G4 (h815), Cool Pi CM5 GenBook, Anbernic RG35XXSP, GameForce Ace, IBM P11, Kontron i.MX93 OSM-S, NanoPC-T6.
- Ajout de la prise en charge des panneaux d'affichage Anbernic RG28XX, On Tat Industrial Company KD50G21-40NT-A1, Innolux G070ACE-LH3, Melfas lmfbx101117480, Densitron DMT028VGHMCMI-1D, Microchip AC40T08A, AOU B116XTN02.3, AUO B116XAN06.1, AOU B116XAT04.1, BOE TV101WUM-LL2, BOE NV140WUM-N41, BOE NV133WUM-N63, BOE NV116WHM-A4D, BOE NE140WUM-N6G, CMN N116BCA-EA2, CMN N116BCP-EA2, CSW MNB601LS1-4, Starry er88577.
- Le système audio prend en charge les puces et codecs RME Digiface USB, AMD ACP 7.1, Mediatek MT6367, MT8365, Realtek RTL1320, C-Media CM9825. Les anciens pilotes audio pour ASoC Intel sont déclarés obsolètes, et il est recommandé d'utiliser les pilotes AVS à la place. De nombreuses améliorations ont été apportées au pilote SoundWire.
Source : opennet.ru
