Sortie du noyau Linux 6.8

Après deux mois de développement, Linus Torvalds a présenté la version 6.8 du noyau Linux. Parmi les changements les plus notables : le pilote Xe pour les GPU Intel, un mode de protection des dispositifs de bloc avec des systèmes de fichiers montés, le mécanisme de planification des tâches Deadline server, l'optimisation automatique de la fusion des pages de mémoire identiques, le premier pilote en langage Rust, les appels système listmount et statmount, la suppression de bpfilter et SLAB, le mécanisme guest_memfd dans KVM, et le profilage d'accès aux données.

La nouvelle version comprend 15 641 corrections de la part de 2 018 développeurs, la taille du patch étant de 44 Mo (les modifications ont touché 12 212 fichiers, avec 663 864 lignes de code ajoutées et 339 094 lignes supprimées). Dans la précédente version, il y avait 18 405 corrections de 2 066 développeurs, pour une taille de patch de 72 Mo. Environ 42 % des modifications présentées dans 6.8 concernent les pilotes de périphériques, environ 15 % des modifications concernent la mise à jour du code spécifique aux architectures matérielles, 14 % sont liées à la pile réseau, 6 % aux systèmes de fichiers et 3 % aux sous-systèmes internes du noyau.

Le dépôt Git contenant le noyau 6.8 possède 9,996 millions d'objets, ce qui indique que le prochain noyau 6.9 dépassera le seuil symbolique des 10 millions d'objets git. Auparavant, le changement de numéros des branches 3.x et 4.x corrélait bien avec le nombre d'objets git dans le dépôt : le noyau 3.0 a été publié lorsque le dépôt contenait environ 2 millions d'objets, et le noyau 4.0 lorsque le dépôt comptait 4 millions d'objets. Cependant, en 2019, la publication de 5.0 a brisé cette logique, puisque lors de sa formation, le dépôt comprenait environ 6,5 millions d'objets git.

Les principales nouveautés du noyau 6.8 :

  • Sous-système de disque, entrée/sortie et systèmes de fichiers
    • Ajout d'un mode de blocage de l'écriture directe sur les dispositifs de bloc portant des systèmes de fichiers montés (une fois ce mode activé, l'utilisateur root ne pourra pas apporter de modifications au système de fichiers en manipulant au niveau du dispositif de bloc). Par défaut, le mode est désactivé et nécessite l'indication du paramètre BLK_DEV_WRITE_MOUNTED lors de la compilation. Pour les partitions avec Btrfs, le blocage ne fonctionne pas encore, car les modifications nécessaires n'ont pas encore été acceptées dans le code Btrfs.
    • Ajout des appels système listmount() et statmount(), permettant d'obtenir depuis l'espace utilisateur des informations détaillées sur les systèmes de fichiers montés.
    • Dans le système de fichiers XFS, le développement de la possibilité d'utiliser l'utilitaire fsck pour détecter et corriger les problèmes en mode en ligne, sans démonter le système de fichiers, a été poursuivi.
    • Dans Ext4, pour les blocs de taille inférieure à celle d'une page mémoire, l'appel dioread_nolock a été mis en œuvre, permettant d'augmenter les performances en éliminant les verrous superflus. Certaines fonctions ont été adaptées pour utiliser des folios de pages mémoire.
    • Dans Btrfs, le support de l'option de montage «nospace_cache» a été ajouté pour désactiver le cache des blocs libres. Certaines fonctions ont été adaptées pour utiliser des folios de pages mémoire.
    • Dans le système de fichiers EROFS (Extendable Read-Only File System), destiné à être utilisé sur des partitions accessibles en mode lecture seule, le support de la compression des sous-pages a été ajouté et le fonctionnement en cas de manque de mémoire a été amélioré.
    • Dans le système de fichiers F2FS, le support des dispositifs de stockage zonés a été amélioré (séparation en zones de groupes de blocs ou secteurs, où seules des écritures séquentielles sont autorisées avec mise à jour de l'intégralité du groupe de blocs).
    • Pour le FS SMB, il a été possible de créer des fichiers de dispositifs en blocs et en symboles.
    • Dans Bcachefs, un support partiel pour la vérification et la récupération de l'intégrité des systèmes de fichiers montés a été ajouté.
    • Dans le sous-système device-mapper, le support des gestionnaires MD_LINEAR, MD_MULTIPATH et MD_FAULTY a été éliminé, déclarés obsolètes en 2021.
  • Mémoire et services système
    • Dans le sous-système Zswap, une fonctionnalité activée en cas de manque de mémoire a été ajoutée pour forcer le déchargement dans une partition de swap réelle des pages mémoire « froides », qui n'ont pas été accédées et qui resteront probablement inutilisées. Zswap effectue la mise en cache des pages à évacuer dans la partition de swap, les stockant en mémoire vive sous forme compressée autant que possible sans les décharger dans la partition de swap réelle non compressée sur le disque. Les modifications apportées en cas de pénurie de mémoire permettent de réduire la taille du pool Zswap stocké en RAM et de libérer de la mémoire pour le système.
    • Dans Zswap, un nouveau mode a été proposé, désactivant complètement l'écriture différée (writeback) dans la partition de swap réelle si la tentative d'écriture échoue, et ne décharge pas les pages déjà présentes dans le pool Zswap vers la partition de swap.
    • Un mécanisme SCHED_DEADLINE server a été ajouté au planificateur de tâches, résolvant le problème du manque de ressources CPU pour les tâches ordinaires en raison de la monopolisation du CPU par des tâches haute priorité (en temps réel). Pour prévenir cette monopolisation du CPU, un mécanisme de Realtime throttling était auparavant utilisé, tentant de réserver 5 % pour les tâches de basse priorité, laissant 95 % du temps aux tâches en temps réel. Ce mécanisme se révélait peu efficace, car les tâches ordinaires ne recevaient souvent pas le temps processeur qui leur était dû. Le SCHED_DEADLINE server implémente un mécanisme de réservation de ressources plus efficace.
    • Un mécanisme d'ajustement automatique de l'agressivité de la consommation de mémoire basé sur des quotas a été ajouté au sous-système DAMON (Data Access MONitor), permettant de suivre l'accès d'un processus aux données en mémoire vive (par exemple, il est possible de savoir quelles zones de mémoire un processus a accédées et quelles zones sont restées inutilisées).
    • Le support des pages de grande taille multi-dimensionnelles (mTHP — multi-size Transparent Huge Pages) a été ajouté, permettant d'allouer de la mémoire en blocs plus grands que la page de base, mais plus petits que les pages THP traditionnelles.
    • Le support des folios de page (page folios, pages de mémoire fusionnées) pour la mémoire anonyme (non associée à un système de fichiers, par exemple, allouée via malloc) a été ajouté. Ce changement vise à améliorer les performances en allouant de plus gros morceaux de mémoire lors de l'accès à des pages de mémoire non allouées (page faults). Par exemple, l'utilisation de gros folios a permis de réduire de 5 % le temps de recompilation du noyau (avec une réduction du temps passé au niveau du noyau de 40 %).
    • Le paramètre TRANSPARENT_HUGEPAGE_NEVER a été ajouté au fichier de configuration du noyau, offrant la possibilité de désactiver l'utilisation des grandes pages de mémoire (Transparent Huge Pages).
    • L'appel système userfaultfd(), permettant de créer des gestionnaires pour les accès aux pages de mémoire non allouées (page faults) dans l'espace utilisateur, a été enrichi de l'opération UFFDIO_MOVE, permettant de déplacer des pages de mémoire dans l'espace d'adresses virtuelles lors de la compression de tas (heap compaction) sans effectuer d'opération d'allocation de page mémoire. Dans les tests réalisés, l'application de UFFDIO_MOVE a permis de réduire le temps de compression de 40 % par rapport à l'utilisation de l'opération UFFDIO_COPY.
    • Ajout du mécanisme « KSM advisor », permettant d'optimiser automatiquement les paramètres du sous-système de fusion des pages de mémoire identiques (KSM — Kernel Samepage Merging).
    • Poursuite du transfert 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 du noyau (la prise en charge de Rust n'est pas activée par défaut et n'oblige pas à inclure Rust parmi les dépendances de construction essentielles du noyau). La nouvelle version inclut des modifications qui ajoutent un wrapper Rust au-dessus du niveau d'abstraction phylib et utilise ce wrapper dans le pilote ax88796b_rust, offrant un support pour l'interface PHY du contrôleur Ethernet Asix AX88772A (100MBit). Fonctionnellement, le pilote Rust est totalement équivalent à l'ancien pilote ax88796b écrit en C et peut être utilisé avec les cartes réseau X-Surf 100, équipées de la puce AX88796B. Pour l'architecture LoongArch, la possibilité d'écrire des modules en Rust a été offerte. Le passage à la version Rust 1.74.1 a été réalisé.
    • Ajout du mécanisme BPF token, permettant de déléguer sélectivement le traitement de certaines capacités BPF, telles que le chargement d'un programme BPF ou la création d'une BPF map, à des processus non privilégiés dans l'espace utilisateur, dont l'authenticité est confirmée par un token spécial.
    • Fonctionnalité du vérificateur BPF des programmes étendue.
    • Ajout dans l'outil perf du support du profilage des données, permettant de suivre les lectures et écritures dans des structures de données, par exemple, afin d'identifier les champs les plus fréquemment modifiés dans les structures. Sur les systèmes avec des processeurs prenant en charge la collecte d'informations sur les opérations mémoire (Intel, AMD, ARM), la commande « perf mem record » doit être utilisée pour accumuler des statistiques, et pour afficher un rapport sur les accès aux structures de données — « perf annotate —data-type ».
    • Optimisation des performances du traitement des appels système sur l'architecture s390 (IBM Z), ce qui a entraîné, lors des tests, une acceleration d'entrée dans l'appel système d'environ 11%.
    • Possibilité de modifier la taille des buffers de traçage, appliqués pour la mise en mémoire tampon des informations sur les événements de traçage, transmises à l'espace utilisateur.
    • Le mécanisme de répartition de la mémoire SLAB, déclaré obsolète, a été supprimé, et à la place, le noyau n'utilise désormais que SLUB. Les raisons évoquées incluent des problèmes de maintenance, des défauts dans le code et la redondance des fonctionnalités avec l'allocation plus avancée de SLUB.
    • Lors de la compilation du noyau, le drapeau « -Wmissing-prototypes » est activé, générant des avertissements pour les appels de fonctions globales qui n'ont pas de définition de prototype.
    • Pour l'architecture RISC-V, sur les systèmes prenant en charge l'extension SUSP, le SBI implémente un support de mise en veille avec sauvegarde de l'état en RAM. Il est désormais possible d'utiliser l'appel système riscv_hwprobe() pour obtenir des informations sur les extensions prises en charge de l'architecture du jeu d'instructions RISC-V.
  • Virtualisation et sécurité
    • De nouveaux appels système lsm_list_modules(), lsm_get_self_attr() et lsm_set_self_attr() ont été ajoutés pour afficher la liste des modules LSM (Linux Security Modules) chargés et pour obtenir/définir les attributs du module LSM. Une nouvelle structure lsm_ctx a été introduite pour la communication dans le contexte de LSM entre l'espace utilisateur et le noyau.
    • Le sous-système AppArmor a été mis à jour pour utiliser l'algorithme SHA-256 pour la vérification des règles, remplaçant les hachages SHA-1.
    • L'implémentation de la fonction strlcpy() a été supprimée du noyau, après avoir été intégrée à la bibliothèque C Glibc 3.38 cet été. Strlcpy est une alternative à la fonction strncpy(), offrant une protection contre les débordements de tampon et garantissant un octet nul de terminaison de chaîne.
    • Dans l'hyperviseur KVM Le support du sous-système guest_memfd (mémoire dédié aux invités) a été ajouté, fournissant des fonctions de gestion de la mémoire permettant de réaliser des capacités et des optimisations impossibles avec le sous-système de gestion de mémoire standard. Par exemple, guest_memfd permet d'allouer et de refléter dans le système invité une zone de mémoire inaccessible à l'environnement hôte, ce qui peut être utilisé pour les calculs confidentiels.
    • Pour les systèmes invités fonctionnant sous le hyperviseur KVM, le support du mode LAM (Linear Address Masking) introduit dans les processeurs Intel a été activé, permettant d'utiliser une partie des bits des pointeurs 64 bits (des bits 57 à 62) pour stocker des métadonnées non liées à l'adressage.
    • Le hyperviseur KVM pour les systèmes basés sur l'architecture ARM64 a ajouté la prise en charge des adresses physiques de 52 bits (LPA2). Pour les systèmes basés sur l'architecture x86, une option de construction sans émulation des hyperappels Hyper-V a été fournie, permettant de réduire la taille du noyau.
    • Un pilote iaa (IAA Compression Accelerator) a été ajouté pour accélérer les opérations de compression et de décompression des données par la méthode DEFLATE, en utilisant les capacités des accélérateurs cryptographiques Intel Analytics Accelerator (IAA).
    • Côté environnement d'hébergement, le mécanisme Intel TDX (Trusted Domain Extensions) a été implémenté, permettant de créer des environnements invités sécurisés utilisant le chiffrement de la mémoire avec le hyperviseur KVM. machines virtuelles.
    • Un identifiant SID « init » a été ajouté à SELinux, permettant de distinguer les processus de démarrage initial exécutés avant l'application des politiques SELinux. L'interface /sys/fs/selinux pour la gestion de SELinux a été améliorée.
  • Sous-système réseau
    • Une réorganisation à bas niveau des structures de données réseau de base a été réalisée pour améliorer l'efficacité du cache. Auparavant, les champs dans les structures de la pile réseau socks, netdev, netns et mibs étaient disposés selon leur ajout, ce qui limitait l'utilisation du cache processeur. La révision du placement des variables dans les structures a conduit à une augmentation significative de la vitesse du TCP, grâce à une minimisation de l'utilisation des lignes de cache lors de la transmission des données et à une optimisation de l'accès aux variables. Dans les cas de traitement de nombreuses connexions TCP parallèles, l'accélération peut atteindre jusqu'à 40%.
    • Le sous-système bpfilter, qui utilisait BPF pour le filtrage des paquets, a été supprimé. Bpfilter a été introduit avec la version 4.18, mais n'a jamais atteint un niveau de maturité pour une utilisation généralisée. Au cours des dernières années, le code bpfilter dans le noyau n'a pas été développé, tandis que le développement a continué par Facebook dans un référentiel séparé.
  • Matériel
    • Le nouveau pilote DRM (Direct Rendering Manager) Xe pour GPU basé sur l'architecture Intel Xe est inclus, utilisé dans les cartes graphiques Intel de la famille Arc et dans les graphiques intégrés, à partir des processeurs Tiger Lake. Le pilote Xe se positionne comme la base pour assurer le fonctionnement des nouvelles puces, indépendante du code de support des anciennes plateformes. Ce pilote est construit avec une nouvelle architecture, dans laquelle les composants existants du sous-système DRM sont plus largement utilisés, ainsi que des composants typiques du pilote i915, non liés à des GPU spécifiques, comme le code pour l'interaction avec les écrans, le modèle de mémoire et l'implémentation de execbuf. Dans Mesa, le fonctionnement de OpenGL et Vulkan au-dessus du pilote Xe est réalisé au niveau des modifications apportées aux pilotes Mesa existants Iris et ANV.
    • Le pilote i915 continue de travailler sur le support des puces Intel LunarLake (Xe 2). Le support des puces Intel Meteor Lake a été amélioré.
    • Le pilote Nouveau a implémenté la configuration par défaut des fonctions de firmware GSP pour travailler avec les GPU NVIDIA basés sur les microarchitectures Turing et Ampere, où les opérations d'initialisation et de gestion du GPU sont effectuées par un microcontrôleur GSP (GPU System Processor) séparé. Lorsque l'option est activée, le pilote fonctionnera via l'appel au firmware, plutôt que par la programmation directe des opérations d'interaction matérielle.
    • Le pilote AMDGPU a ajouté le support ACPI WBRF et VPE DPM, modifié le traitement de la vitesse des canaux PCIe, utilisé des numéros de séquence 64 bits pour la synchronisation des files d'attente, ajouté des mécanismes de gestion des couleurs spécifiques à AMD et résolu un problème de transition vers le mode veille.
    • Une implémentation initiale du pilote pour le GPU Broadcom VideoCore 7.1, utilisé dans les cartes Raspberry Pi 5, a été ajoutée.
    • Un pilote pour les GPU de la série PowerVR 6 basé sur la microarchitecture Rogue d'Imagination Technologies a été ajouté.
    • Le support des contrôleurs Thunderbolt/USB4, intégrés dans les puces basées sur la microarchitecture Intel Lunar Lake, a été ajouté.
    • Des pilotes pour les caméras utilisées dans les SoC Starfive, GalaxyCore GC2145/GC0308, Chips&Media Wave et THine THP7312 ont été ajoutés.
    • Le support des contrôleurs de jeu NSO (Nintendo Switch Online) — des variantes des anciens contrôleurs SNES (Super Nintendo), Genesis et N64 (Nintendo 64), adaptées pour la Nintendo Switch — a été ajouté. Un pilote pour les manettes Adafruit Seesaw a également été ajouté. Le pilote xpad a été mis à jour pour inclure le support des contrôleurs Lenovo Legion Go.
    • Le driver dts a été mis à jour pour prendre en charge les appareils de jeu Powkiddy RK2023, Powkiddy X55 et Anbernic RG351V.
    • Le support des systèmes audio utilisés dans les puces NXP i.MX8m MICFIL, Qualcomm SM8250, AMD ACP5x, Intel Arrow Lake, SM8550, SM8650 et X1E80100 a été ajouté.
    • AMD a apporté des modifications concernant le support de la prochaine série de processeurs basée sur la nouvelle microarchitecture Zen 5.
    • Ajout du support des SoC ARM64 : Qualcomm SM8650 (Snapdragon 8 Gen 3), Qualcomm X1E80100 (Snapdragon X Elite), Samsung Exynos Auto v920, Google GS101 (Tensor G1), MediaTek MT8188 et Unisoc UMS9620 (Tanggula 7).
    • Ajout du support des plates-formes et appareils ARM : Huashan Pi, Microsoft Lumia, HTC One Mini 2, Motorola MotoG 4G, Huawei Honor 5X/GR5, Anbernic RG351V, Powkiddy RK2023, Powkiddy X55, ComXpress basé sur Marvell CN913x, Chromebook Lenovo, ainsi que les modèles Asus et Acer basés sur Mediatek MT8183, Toradex Verdin AM62, et les cartes Allwinner H616/H618.
    • Le support des processeurs ARM11 ARMv6K SMP a été interrompu.

Parallèlement, la Fondation du logiciel libre d'Amérique latine a développé une version entièrement libre du noyau 6.8 — Linux-libre 6.8-gnu, débarrassée des éléments de firmwares et de pilotes contenant des composants non libres ou des sections de code dont l'utilisation est limitée par le fabricant. La version 6.8 a mis à jour le code de nettoyage des blobs dans divers pilotes et sous-systèmes. Le nettoyage des pilotes Intel qat_420xx, Imagination PowerVR, Intel Xe, Chips&Media Wave5, Intel VSC, Aquantia PHY et Realtek rtw8922a a été effectué. En raison de la suppression du noyau, le nettoyage des pilotes atmel, hermes, orinoco_usb, libertas_cs et zd1201 a cessé. Le nettoyage des noms des blobs dans les fichiers dts (devicetree) pour les architectures ARM et Aarch64 a été réalisé. Des problèmes avec le nettoyage du pilote i915 ont été résolus.

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