Publication du noyau Linux 6.14

Après deux mois de développement, Linus Torvalds a présenté la version du noyau Linux 6.14. Les changements les plus notables incluent : le pilote ntsync avec des primitives de synchronisation Windows NT, la configuration de l'équilibrage des opérations de lecture dans Btrfs RAID1, la prise en charge de reflink dans XFS en mode temps réel, la possibilité d'entrée/sortie en mémoire tampon non mise en cache, le cgroup dmem pour la limitation de la mémoire GPU, l'utilisation de io_uring dans FUSE, le délégué d'attributs dans NFS, la prise en charge de l'écriture atomique dans Device mapper, l'accélération des liens symboliques, la gestion de l'exécution de scripts, la prise en charge des puces Qualcomm Snapdragon 8 Elite, et un pilote pour le NPU AMD.

La nouvelle version comprend 12 115 corrections provenant de 1 984 développeurs, la taille du patch s'élève à 39 Mo (les changements ont affecté 10 170 fichiers, 531 586 lignes de code ont été ajoutées, et 235 999 lignes ont été supprimées). La version précédente comptait 14 172 corrections de la part de 2 086 développeurs, la taille du patch étant de 46 Mo. Environ 41 % des changements présentés dans la version 6.14 concernent les pilotes de périphériques, environ 13 % se rapportent à la mise à jour du code spécifique aux architectures matérielles, 14 % sont liés à la pile réseau, 7 % aux systèmes de fichiers, et 4 % aux sous-systèmes internes du noyau.

Les principales nouveautés du noyau 6.14 :

  • Sous-système de disque, entrée/sortie et systèmes de fichiers
    • Le système de fichiers Btrfs a introduit un support pour de nouvelles méthodes d'équilibrage des opérations de lecture entre les disques faisant partie d'un tableau RAID1. En plus de la répartition de la charge basée sur les identifiants de processus (pid) précédemment en vigueur, la nouvelle version propose trois nouveaux modes d'équilibrage : « rotation » (répartition uniforme de la charge sur tous les disques, activée par défaut) ; « latence » (répartition tenant compte des délais, pouvant être utile en cas de pannes ou de fonctionnement instable des disques) ; devid (gestion manuelle). Pour changer le mode d'équilibrage, une interface a été ajoutée à « /sys/fs/btrfs//read_policy ». Parmi les autres modifications dans Btrfs, on trouve l'implémentation de ioctl FS_IOC_READ_VERITY_METADATA.
    • Un mode d'entrée/sortie en mémoire tampon non mis en cache a été ajouté, dans lequel les données sont supprimées du cache de pages immédiatement après la fin des opérations de lecture ou d'écriture. Ce changement peut être utile lors de l'utilisation de dispositifs de stockage très rapides, où la mise en cache des opérations en mémoire est superflue. Pour ces dispositifs, le nouveau mode permet d'éviter une consommation excessive de mémoire par le cache de pages sans avoir recours à une API de saisie/sortie directe (Direct I/O) compliquée.
    • Dans fsnotify, le mécanisme de suivi des modifications du système de fichiers, un nouvel événement FS_PRE_ACCESS a été ajouté, généré lors de la tentative d'accès au contenu d'un fichier. L'événement est traité de manière synchrone, c'est-à-dire que le noyau envoie l'événement et attend une réponse. Si une réponse est reçue, l'opération est effectuée ; en cas d'échec, l'appel système renvoie un code d'erreur à l'espace utilisateur. Avec FS_PRE_ACCESS, un processus dans l'espace utilisateur peut organiser le remplissage d'un fichier au fur et à mesure que les données deviennent disponibles dans un stockage lent.
    • Le sous-système FUSE, qui permet de créer des implémentations de systèmes de fichiers dans l'espace utilisateur, a ajouté le support de l'échange de données entre le noyau et le gestionnaire dans l'espace utilisateur en utilisant le mécanisme d'entrée/sortie io_uring. Ce changement permet d'améliorer les performances de FUSE en réduisant les commutations de contexte entre le noyau et l'espace utilisateur.
    • Dans le système de fichiers XFS, la possibilité d'utiliser le mappage inversé (rmap, reverse-mapping) en mode de fonctionnement avec des délais prévisibles (« real-time device ») a été ajoutée. Le mappage inversé permet de déterminer quel fichier utilise un bloc donné sur le dispositif de stockage. Avec rmap, le mode realtime de XFS a mis en œuvre le support de l'opération reflink, permettant de créer des copies de fichiers en clonant les métadonnées du fichier et en créant un lien vers des données déjà existantes sans les copier réellement.
    • Dans VFS, la mise en cache de la taille des liens symboliques a été mise en œuvre, permettant d'accélérer de 1,5 % l'exécution de l'opération readlink (dans le test avec /initrd.img dans ext4). La mise en cache est activée dans les systèmes de fichiers ext4 et tmpfs.
    • Dans l'implémentation de NFSv4.2, la prise en charge de la délégation des attributs de fichiers a été ajoutée, permettant de gérer des attributs de fichiers tels que le temps de modification (mtime) du côté du client NFS, sans avoir besoin de réinitialiser les modifications sur le serveur. Dans NFS, la prise en charge du protocole « LOCALIO » a également été améliorée, permettant de déterminer si le client et le serveur NFS sont sur le même hôte, afin de tirer parti des optimisations appropriées, comme l'utilisation par le client de l'entrée/sortie directe (Direct I/O).
    • La performance des opérations de lecture dans les systèmes de fichiers NETFS, CIFS et AFS (Andrew File System) a été améliorée.
    • Dans Squashfs, un mode de chargement direct des blocs dans le cache de pages (SQUASHFS_FILE_DIRECT) a été inclus, permettant de se passer d'un cache séparé pour read_page. Ce changement a permis de réduire la taille de la mémoire consommée lors de l'utilisation de Squashfs.
    • Dans l'appel système statx(), le drapeau STATX_DIO_READ_ALIGN a été implémenté pour déterminer l'alignement requis pour les opérations de lecture depuis un fichier.
    • Dans le système de fichiers Bcachefs, le format des structures de disque a été mis à jour et stabilisé. Toute modification future du format sera considérée comme facultative et sera mise en œuvre sous la forme d'extensions optionnelles. La vitesse de vérification de l'intégrité du FS a été considérablement augmentée. De plus, dans Bcachefs, le fonctionnement en mode lecture seule a été amélioré ; des problèmes ayant entraîné des accès mémoire après libération (use after free) ont été résolus ; des problèmes liés aux pointeurs reflink dans fsck ont été résolus ; la gestion du redémarrage des transactions a été corrigée.
    • Le module md-linear, destiné à la fusion de dispositifs de blocs, a été réintroduit. Ce module avait précédemment été déclaré obsolète et supprimé du noyau 6.8, mais s'est avéré être demandé et a donc été restauré.
    • Les systèmes de fichiers F2FS et SQUASHFS sont passés à l'utilisation des folios de pages mémoire.
    • Les systèmes de fichiers OCFS2 et DLMFS ont été mis à jour pour utiliser une nouvelle API de montage de partitions.
    • Dans le pilote null_blk, un attribut « rotational » a été mis en œuvre, configurable via configfs, permettant de simuler le fonctionnement avec un dispositif basé sur des disques rotatifs pour simplifier le test des fonctionnalités du noyau.
    • Dans le système Device mapper et dans les modules dm-mirror, dm-io, dm-table, dm-linear, dm-stripe et dm-raid1, la prise en charge de l'écriture atomique a été ajoutée.
  • Mémoire et services système
    • L'intégration dans le noyau du pilote ntsync, qui met en œuvre un périphérique symbolique /dev/ntsync et un ensemble de primitives de synchronisation utilisées dans le noyau Windows NT, est terminée. La mise en œuvre de telles primitives au niveau du noyau permet d'augmenter considérablement les performances des jeux Windows exécutés avec Wine. Ce gain de performance est obtenu grâce à l'élimination des frais généraux associés à l'utilisation de RPC dans l'espace utilisateur. La création d'un pilote distinct pour le noyau Linux s'explique par la difficulté de réaliser correctement l'API de synchronisation NT sur la base des primitives existantes dans le noyau.
    • Un nouveau contrôleur cgroup DMEM a été ajouté pour le comptage séparé des zones mémoire des dispositifs, comme le GPU. DMEM permet de créer des cgroups distincts pour différentes tâches travaillant avec le GPU, afin qu'elles puissent s'exécuter sans interférer les unes avec les autres. Cette nouvelle fonctionnalité résout le problème de l'achèvement forcé des opérations avec le GPU lorsque la mémoire disponible est épuisée, grâce à la comptabilité de la mémoire réfléchie du GPU et de la mémoire utilisée par les pilotes CPU dans des cgroups séparés.
    • Des optimisations ont été apportées à l'échelle de l'opération de vidage (flush) du cache TLB (Translation Lookaside Buffer), utilisé pour accélérer la conversion des adresses virtuelles en adresses physiques. Les optimisations ajoutées consistent à retarder la mise à jour de certaines structures de données lors du changement de contexte, ce qui permet d'améliorer les performances lors de certains tests.
    • Les performances du mécanisme MGLRU (Multi-Generational LRU) ont été améliorées, ce mécanisme étant utilisé pour déterminer quelles pages de mémoire sont utilisées et lesquelles peuvent être remplacées dans l'espace d'échange.
    • La mise en œuvre des modifications de la branche Rust-for-Linux, liées à l'utilisation de Rust comme deuxième langage pour le développement de pilotes et de modules du noyau, se poursuit (le support de Rust n'est pas activé par défaut et ne rend pas le Rust obligatoire dans les dépendances de construction du noyau). Une possibilité d'utiliser dans le code du noyau le macro « derive(CoercePointee) » a été fournie, permettant d'utiliser des pointeurs intelligents avec des objets trait. Des liaisons Rust pour PCI, plates-formes, Open Firmware, périphériques symboliques et certaines fonctions d'entrée/sortie ont été ajoutées au noyau. Greg Kroah-Hartman, responsable du support de la branche stable du noyau Linux, a décrit l'état actuel comme « presque prêt pour l'écriture d'un véritable pilote en Rust ».
    • Dans les scénarios de construction, un nouveau code a été proposé pour générer des versions de symboles de débogage pour les modules chargeables, qui utilise désormais les informations des enregistrements de débogage au format DWARF, plutôt que d'analyser directement le code source. Ce changement permet d'appliquer le versionnage des symboles de débogage pour les modules écrits en Rust. L'ancienne implémentation est également conservée dans le noyau, et le choix du générateur se fait au niveau des options de construction.
    • Pour l'architecture PowerPC, le support du mode de préemption paresseuse (PREEMPT_LAZY, lazy preemption) a été mis en œuvre, qui correspond au mode de préemption totale (« full preemption ») pour les tâches en temps réel (RR/FIFO/DEADLINE), mais retarde la préemption des tâches normales (SCHED_NORMAL) jusqu'à la limite de tick.
    • Le sous-système de profilage des performances « perf » a été enrichi du support des compteurs de consommation d'énergie pour les processeurs AMD. La possibilité de fonctionner sur des systèmes comptant jusqu'à 2048 cœurs CPU a été ajoutée.
    • Il est désormais possible d'utiliser le paramètre sysctl pid_max avec des espaces de noms d'identificateurs de processus (ID namespace). Le paramètre pid_max est destiné à limiter la valeur maximale des identificateurs de processus (PID) et peut maintenant être utilisé pour restreindre le nombre maximum de processus exécutés dans l'espace de noms spécifié. Le traitement du paramètre est effectué de manière hiérarchique, c'est-à-dire que les restrictions dans les espaces de noms externes s'appliquent aux espaces de noms imbriqués.
    • Lors de l'utilisation de l'appel système execveat pour démarrer un processus, le système de fichiers /proc affichera désormais le nom du fichier exécuté au lieu du numéro de descripteur de fichier.
    • Le code source du noyau (dans le répertoire samples/vfs) a été enrichi d'un utilitaire mountinfo, démontrant l'utilisation des appels système statmount() et listmount().
    • Dans le sous-système BPF, de nouvelles fonctions bpf_local_irq_save() et bpf_local_irq_restore() ont été proposées pour désactiver temporairement les interruptions sur le CPU local. Ces fonctions peuvent être utilisées pour implémenter des structures dont le traitement n'est pas interrompu par des interruptions.
    • Dans l'appel système madvise(), l'utilisation des drapeaux MADV_DONTNEED et MADV_FREE permet de libérer les tables de pages mémoire associées à la plage d'adresses libérée, car dans certaines situations, les pages mémoire vides peuvent occuper une quantité considérable de mémoire.
    • Pour l'architecture OpenRISC, un support du mécanisme de séquences réenregistrables (rseq, restartable sequences) a été mis en œuvre, destiné à permettre une exécution atomique rapide des opérations qui, en cas d'interruption par un autre thread, sont nettoyées et tentées à nouveau.
    • réorganisation du code avec mise en œuvre des algorithmes CRC32 et CRC-T10DIF, qui ne se chevauche plus avec le sous-système crypto et est appelé directement à partir de l'interface de la bibliothèque. Ce changement a permis de simplifier le code et d'améliorer son efficacité.
    • Une interface pour transmettre des métadonnées supplémentaires sur l'intégrité a été ajoutée au système d'entrées/sorties asynchrones io_uring lors de l'exécution des opérations de lecture et d'écriture.
  • Virtualisation et sécurité
    • L'appel système execveat a été enrichi d'un drapeau AT_EXECVE_CHECK, permettant de vérifier la validité de l'exécution d'un fichier sans l'exécuter effectivement, tout en tenant compte des politiques de sécurité, des droits d'accès et des modules LSM actifs. En conjonction avec AT_EXECVE_CHECK, des drapeaux securebit SECBIT_EXEC_RESTRICT_FILE et SECBIT_EXEC_DENY_INTERACTIVE ont été proposés, pouvant être utilisés pour restreindre l'exécution de fichiers avec des scripts dans des langages interprétés. Le drapeau SECBIT_EXEC_RESTRICT_FILE exige que les chargeurs et les interprètes utilisent l'option AT_EXECVE_CHECK pour vérifier la validité de l'exécution, tandis que le drapeau SECBIT_EXEC_DENY_INTERACTIVE interdit le traitement des commandes interactives. L'idée principale de ce changement est la possibilité d'appliquer des politiques de sécurité non seulement aux fichiers exécutables traditionnels, mais également aux fichiers texte contenant des scripts pouvant être chargés via le lancement d'un interprète (c'est-à-dire que l'interdiction d'exécution peut être mise en œuvre non seulement lors de l'exécution de './script.sh', mais également lors de l'exécution sous la forme 'sh script.sh').
    • Les systèmes x86 prennent en charge les compteurs de temps sécurisés pour les systèmes invités, ce qui empêche la modification de l'horloge système de l'invité depuis l'environnement hôte. Cette fonctionnalité est réalisée sur la base du mécanisme AMD SEV (Virtualisation Cryptée Sécurisée), utilisé dans les systèmes de virtualisation pour la protection. machines virtuelles contre les interventions du hyperviseur ou de l'administrateur du système hôte.
    • Le système de contrôle d'accès mandataire SELinux a ajouté la prise en charge des règles xperm, permettant d'associer les politiques SELinux à des appels spécifiques de ioctl() ou à des messages netlink.
    • Pour la signature numérique des modules du noyau, l'algorithme SHA512 est désormais utilisé par défaut au lieu de SHA1.
    • Les pilotes pour les systèmes invités VirtualBox prennent en charge l'architecture ARM64.
    • Dans l'hyperviseur KVM Le travail se poursuit sur l'activation du mécanisme Intel TDX (Trusted Domain Extensions) pour le chiffrement de la mémoire des systèmes invités.
    • Dans virtio_blk, la prise en charge du mode de récupération des erreurs a été ajoutée.
  • Sous-système réseau
    • Dans l'implémentation du protocole RxRPC, il est désormais possible d'utiliser de grandes trames UDP pour augmenter la bande passante.
    • Pour TCP, l'algorithme RACK-TLP a été ajouté pour la détection des pertes de paquets.
    • Un nouveau paramètre sysctl tcp_tw_reuse_delay a été ajouté, qui fonctionne dans le contexte des espaces de nom réseau (network namespace) et permet de définir le délai avant que le système puisse réutiliser le numéro du port réseau après la fermeture d'une socket TCP.
    • La possibilité de choisir un fournisseur de temps précis (PTP) pour la génération des horodatages aux niveaux PHY et MAC a été ajoutée.
    • Pour IPsec, le mécanisme d'agrégation et de fragmentation des paquets IP encapsulés — IP-TFS/AGGFRAG (Sécurité du Flux de Trafic IP/Agrégation et Mode de Fragmentation pour le P payload de Sécurité Encapsulé) a été mis en œuvre.
    • Le système de sockets réseau a ajouté la prise en charge de la transmission d'informations de priorité (SO_PRIORITY) sous forme de messages de contrôle (cmsg — control messages). Pour les sockets réseau, l'option SO_RCVPRIORITY a été ajoutée, permettant dans les fonctions recvmsg() de transmettre des informations sur la priorité de la socket.
  • Matériel
    • Un driver amdxdna a été ajouté pour les accélérateurs NPU (Unité de Traitement Neural) intégrés aux CPU AMD, basés sur l'architecture XDNA, destinés à accélérer les opérations liées à l'apprentissage automatique. Les NPU basés sur l'architecture XDNA sont fournis dans les séries 7040 et 8040 des processeurs AMD Ryzen, des accélérateurs AMD Alveo V70 et du SoC AMD Versal.
    • Le pilote i915 a ajouté des identifiants de nouveaux GPU, un gestionnaire d'échec d'initialisation HDMI a été implémenté, et la fiabilité du réinitialisation des cœurs GPU sur les systèmes Haswell et plus anciens a été améliorée.
    • Le travail continue sur le pilote drm (Direct Rendering Manager) Xe pour les GPU basés sur l'architecture Intel Xe, utilisée dans les cartes graphiques Intel de la famille Arc et pour la graphique intégrée, à partir des processeurs Tiger Lake.
    • Le pilote Nouveau a ajouté la possibilité de transférer des buffers avec des logs GSP-RM via debugfs.
    • Le pilote AMDGPU a implémenté le support du mécanisme DRM panic, affichant une sorte de «blue screen of death» lors des échecs. Les préparatifs pour le support de la future série de cartes graphiques Radeon RX 9000 basées sur l'architecture RDNA4 se poursuivent. Le support de DCN 3.5, GG 9.5, IH 4.4, PSP 13.x, SMU 13.x, VCN 5.x, JPEG 5.x, GC 12.x, DC FAMS, RAS et ISP a été mis à jour.
    • Le pilote DRM msm (GPU Qualcomm Adreno) a ajouté le support de la plateforme Qualcomm SM6150 (QCS615).
    • Dans le pilote DRM panfrost, la prise en charge du SoC MediaTek MT8188 avec GPU Mali-G57 a été ajoutée.
    • Dans le pilote DRM vc4, la prise en charge du SoC Broadcom BCM2712 (Raspberry Pi 5) a été ajoutée.
    • Le pilote vfio nvgrace-gpu a ajouté le support des puces NVIDIA Grace Blackwell 200.
    • Le pilote pour les contrôleurs Intel THC (Touch Host Controller) a été inclus, utilisé pour interagir avec les écrans tactiles et les pavés tactiles sur certains ordinateurs portables. Le support des dispositifs Wacom avec une interface PCI a été ajouté. Le support des contrôleurs de jeu QH Electronics a été ajouté.
    • Le support a été ajouté pour les plates-formes ARM, SoC et dispositifs : Qualcomm Snapdragon 8 Elite (SM8750), Qualcomm Snapdragon AR2 (SAR2130P), Qualcomm IQ6/IQ8, Snapdragon 425 (MSM8917), Samsung Exynos 9810, Blaize BLZP1600, Microchip SAMA7D65, Renesas R-Car V4H ES3.0, Renesas RZ/G3E. Le support pour le SoC SpacemiT K1 basé sur l'architecture RISC-V a été ajouté.
    • Dans le sous-système audio ALSA pour MIDI 2.0, les API rawmidi et sequencer ont été étendues. Le support ASRC (Asynchronous Sample Rate Conversion) a été ajouté à l'API pour décharger les opérations de compression vers la carte son.
    • Le support pour les systèmes audio des dispositifs Allwinner suinv F1C100s, Awinc AW88083, Realtek ALC5682I-VE, TAS2781, Focusrite Scarlett 4th Gen 16i16, 18i16 et 18i20 a été ajouté. Le support des écouteurs sans fil SteelSeries Arctis 9 a été ajouté.

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