Version du noyau Linux 6.1

Après deux mois de développement, Linus Torvalds a présenté la sortie du noyau Linux 6.1. Parmi les changements les plus notables : prise en charge du développement de pilotes et modules en langage Rust, modernisation du mécanisme de détermination des pages mémoire utilisées, un gestionnaire de mémoire spécial pour les programmes BPF, un système de diagnostic des problèmes de mémoire KMSAN, le KCFI (Kernelk Control -Flow Integrity), mécanisme de protection, introduction de l'arborescence de structure Maple.

La nouvelle version comprend 15115 2139 correctifs provenant de 51 2 développeurs, la taille du correctif est de 6.0 Mo, soit environ 5.19 fois plus petite que la taille des correctifs des noyaux 13165 et 716247. Les modifications ont affecté 304560 45 fichiers, 6.1 14 lignes de code ont été ajoutées et 14 3 lignes ont été supprimées. Environ 3 % de toutes les modifications introduites dans la version XNUMX sont liées aux pilotes de périphériques, environ XNUMX % des modifications sont liées à la mise à jour du code spécifique aux architectures matérielles, XNUMX % sont liées à la pile réseau, XNUMX % aux systèmes de fichiers et XNUMX % sont liés aux sous-systèmes internes du noyau.

Innovations clés dans le noyau 6.1 :

  • Services mémoire et système
    • Ajout de la possibilité d'utiliser Rust comme deuxième langage pour développer des pilotes et des modules du noyau. La principale raison de la prise en charge de Rust est de faciliter l'écriture de pilotes de périphériques sûrs et de haute qualité en réduisant le risque de commettre des erreurs lors de l'utilisation de la mémoire. La prise en charge de Rust est désactivée par défaut et n'entraîne pas l'inclusion de Rust en tant que dépendance requise pour la construction du noyau. Le noyau a jusqu'à présent adopté une version minimale et allégée des correctifs, qui a été réduite de 40 à 13 9 lignes de code et ne fournit que le minimum nécessaire, suffisant pour construire un simple module de noyau écrit en langage Rust. À l'avenir, il est prévu d'augmenter progressivement les fonctionnalités existantes, en transférant d'autres modifications de la branche Rust-for-Linux. En parallèle, des projets sont en cours de développement pour utiliser l'infrastructure proposée pour développer des pilotes pour les disques NVMe, le protocole réseau 1p et le GPU Apple MXNUMX dans le langage Rust.
    • Pour les systèmes basés sur les architectures AArch64, RISC-V et LoongArch avec EFI, la possibilité de charger directement des images de noyau compressées a été implémentée. Ajout de gestionnaires pour charger, exécuter et décharger les images du noyau, appelés directement depuis EFI zboot. Des gestionnaires pour l'installation et la suppression de protocoles de la base de données de protocoles EFI ont également été ajoutés. Auparavant, le déballage était effectué par un chargeur de démarrage séparé, mais cela peut désormais être effectué par un gestionnaire dans le noyau lui-même - l'image du noyau est formée en tant qu'application EFI.
    • La composition comprend une partie des correctifs avec la mise en œuvre d'un modèle de gestion de mémoire à plusieurs niveaux, qui vous permet de séparer les banques de mémoire avec des caractéristiques de performances différentes. Par exemple, les pages les plus utilisées peuvent être stockées dans la mémoire la plus rapide, tandis que les pages les plus rarement utilisées peuvent être stockées dans une mémoire relativement lente. Le noyau 6.1 introduit un mécanisme permettant de déterminer où se trouvent les pages très utilisées dans la mémoire lente afin qu'elles puissent être promues en mémoire rapide, et introduit également un concept général de niveaux de mémoire et de leurs performances relatives.
    • Il inclut le mécanisme MGLRU (Multi-Generational LRU), qui remplace l'ancienne implémentation LRU (Least Récemment Utilisée) basée sur deux files d'attente avec une structure à plusieurs étapes qui détermine mieux quelles pages de mémoire sont réellement utilisées et lesquelles peuvent être poussées vers la partition d'échange.
    • Ajout de la prise en charge de la structure de données « arbre d'érable » proposée par les ingénieurs d'Oracle, qui se positionne comme un remplacement plus efficace de la structure « arbre rouge-noir ». Maple Tree est une variante de B-tree qui prend en charge l'indexation de plage et est conçue pour utiliser efficacement le cache des processeurs modernes. Certains sous-systèmes de gestion de la mémoire ont déjà été transférés vers Maple Tree, ce qui a eu un effet positif sur leurs performances. À l'avenir, l'érable pourra être utilisé pour implémenter le verrouillage de plage.
    • La possibilité de créer des programmes BPF « destructeurs » spécialement conçus pour déclencher un arrêt d'urgence via l'appel crash_kexec() a été ajoutée au sous-système BPF. De tels programmes BPF peuvent être nécessaires à des fins de débogage pour lancer la création d'un vidage sur incident à un moment donné. Pour accéder aux opérations destructrices lors du chargement d'un programme BPF, vous devez spécifier l'indicateur BPF_F_DESTRUCTIVE, activer sysctl kernel.destructive_bpf_enabled et disposer des droits CAP_SYS_BOOT.
    • Pour les programmes BPF, il est possible d'énumérer les éléments du groupe de contrôle, ainsi que les ressources (fichiers, vma, processus, etc.) d'un thread ou d'une tâche spécifique. Un nouveau type de carte a été implémenté pour créer des tampons en anneau utilisateur.
    • Ajout d'un appel spécial pour l'allocation de mémoire dans les programmes BPF (allocateur de mémoire), qui fournit une allocation de mémoire plus sûre dans le contexte BPF que le kmalloc() standard.
    • La première partie des modifications a été intégrée, offrant la possibilité de créer des pilotes pour les périphériques d'entrée avec une interface HID (Human Interface Device), implémentés sous la forme de programmes BPF.
    • Le noyau a complètement supprimé le code pour prendre en charge le format de fichier exécutable a.out, qui était obsolète dans la version 5.1 et désactivé pour les architectures majeures depuis les versions 5.18 et 5.19. Le format a.out est depuis longtemps obsolète sur les systèmes Linux et la génération de fichiers a.out n'est pas prise en charge par les outils modernes dans les configurations Linux par défaut. Le chargeur de fichiers a.out peut être entièrement implémenté dans l'espace utilisateur.
    • Pour les systèmes basés sur l'architecture de jeu d'instructions LoongArch utilisée dans les processeurs Loongson 3 5000 et implémentant le nouveau RISC ISA, similaire à MIPS et RISC-V, la prise en charge des événements de mesure de performances (événements de performance), kexec, kdump et la compilation BPF JIT est implémentée. .
    • L'interface d'E/S asynchrone io_uring offre un nouveau mode, IORING_SETUP_DEFER_TASKRUN, qui permet de différer temporairement le travail lié au tampon en anneau jusqu'à ce qu'une demande d'application soit effectuée, ce qui peut être utilisé pour le travail par lots et éviter les problèmes de latence dus à la préemption. mauvais moment.
    • Les processus dans l'espace utilisateur ont la possibilité d'initier la conversion d'une plage de pages de mémoire normales en un ensemble de grandes pages de mémoire (Transparent Huge-Pages).
    • Ajout de l'implémentation du périphérique /dev/userfaultfd, qui permet d'accéder à la fonctionnalité de l'appel système userfaultfd() en utilisant les droits d'accès dans le FS. La fonctionnalité userfaultfd vous permet de créer des gestionnaires pour accéder aux pages de mémoire non allouées (défauts de page) dans l'espace utilisateur.
    • Les exigences pour la version de l'utilitaire GNU Make ont été augmentées - au moins la version 3.82 est désormais requise pour construire le noyau.
  • Sous-système de disque, E/S et systèmes de fichiers
    • Des optimisations significatives des performances ont été apportées au système de fichiers Btrfs ; entre autres choses, les performances de l'appel ioctl FIEMAP ont été augmentées de plusieurs ordres de grandeur. Ajout de la prise en charge des écritures asynchrones en mémoire tampon pour les applications utilisant io_uring. Ajout de la prise en charge des fichiers protégés avec fs-verity à l'opération « envoyer ».
    • Le système de fichiers ext4 a ajouté des optimisations de performances liées à la maintenance du journal et au fonctionnement en lecture seule.
    • Le système de fichiers EROFS (Enhanced Read-Only File System), conçu pour être utilisé sur des partitions accessibles en lecture seule, implémente la possibilité de partager des données dupliquées dans différents systèmes de fichiers.
    • L'appel système statx() a été ajouté pour afficher des informations indiquant si les E/S directes peuvent être appliquées à un fichier.
    • La prise en charge de la création de fichiers temporaires avec l'indicateur O_TMPFILE a été ajoutée au sous-système FUSE (Filesystems in User Space).
  • Virtualisation et sécurité
    • L'implémentation du mécanisme de protection CFI (Control Flow Integrity) a été remplacée, en ajoutant des contrôles avant chaque appel indirect d'une fonction pour détecter certaines formes de comportement indéfini qui pourraient potentiellement conduire à une violation de l'ordre d'exécution normal (flux de contrôle) comme un résultat de l'utilisation d'exploits qui modifient les pointeurs vers des fonctions stockées en mémoire. L'implémentation standard de CFI du projet LLVM a été remplacée par une option également basée sur l'utilisation de Clang, mais spécialement adaptée pour protéger les sous-systèmes de bas niveau et les noyaux du système d'exploitation. Dans LLVM, une nouvelle implémentation sera proposée dans la version Clang 16 et sera activée avec l'option "-fsanitize=kcfi". La principale différence avec la nouvelle implémentation est qu'elle n'est pas liée aux optimisations de temps de liaison (LTO) et n'entraîne pas le remplacement des pointeurs de fonction par des liens dans la table de saut.
    • Pour les modules LSM (Linux Security Module), il est possible de créer des gestionnaires qui interceptent les opérations pour créer des espaces de noms.
    • Des outils sont fournis pour vérifier les signatures numériques PKCS#7 dans les programmes BPF.
    • La possibilité d'ouvrir en mode non bloquant (O_NONBLOCK), qui avait été supprimée par inadvertance dans le noyau 5.6, a été renvoyée dans /dev/random.
    • Sur les systèmes à architecture x86, un avertissement a été ajouté en cas de mappage de pages mémoire par des sous-systèmes du noyau qui permettent simultanément l'exécution et l'écriture. À l'avenir, la possibilité d'interdire complètement un tel mappage mémoire est envisagée.
    • Ajout du mécanisme de débogage KMSAN (Kernel Memory Sanitizer) pour détecter l'utilisation de la mémoire non initialisée dans le noyau, ainsi que les fuites de mémoire non initialisées entre l'espace utilisateur et les appareils.
    • Des améliorations ont été apportées au générateur de nombres pseudo-aléatoires CRNG crypto-sécurisé utilisé dans l'appel getrandom. Les modifications ont été préparées par Jason A. Donenfeld, auteur de VPN WireGuard, et visent à améliorer la sécurité de l'extraction d'entiers pseudo-aléatoires.
  • Sous-système réseau
    • La pile TCP offre la possibilité (désactivée par défaut) d'utiliser des tables de hachage de socket séparément pour chaque espace de noms, ce qui améliore les performances sur les systèmes comportant un grand nombre d'espaces de noms.
    • Code supprimé pour prendre en charge l'ancien protocole DECnet. Les stubs d'API de l'espace utilisateur sont laissés en place pour permettre la compilation des applications qui utilisent DECnet, mais ces applications ne pourront pas se connecter au réseau.
    • Le protocole netlink est documenté.
  • équipement
    • Le pilote amdgpu a ajouté la prise en charge du transfert DSC (Display Stream Compression) pour une compression de données sans perte lors de l'échange d'informations avec des écrans prenant en charge de très hautes résolutions. Les travaux se poursuivent pour assurer la prise en charge des plates-formes AMD RDNA3 (RX 7000) et CDNA (Instinct). Ajout de la prise en charge des composants IP DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x et GMC 11.x. Le pilote amdkfd (pour les GPU AMD discrets tels que Polaris) prend en charge GFX 11.0.3.
    • Le pilote i915 (Intel) inclut la prise en charge du GPU Meteor Lake. Meteor Lake et les GPU plus récents prennent en charge l'interface DP 2.0 (DisplayPort). Ajout d'identifiants pour les cartes vidéo basés sur la microarchitecture Alder Lake S.
    • Ajout de la prise en charge des sous-systèmes audio implémentés dans les processeurs Apple Silicon, Intel SkyLake et Intel KabyLake. Le pilote audio CS35L41 HDA prend en charge le mode veille. Ajout de la prise en charge ASoC (ALSA System on Chip) pour les puces audio intégrées Apple Silicon, AMD Rembrant DSP, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake et Kaby Lake, Mediatek MT8186, NXP i.MX8ULP DSP, Qualcomm SC8280XP, SM8250, SM8450 et Texas Instruments SRC4392
    • Ajout de la prise en charge des panneaux LCD Samsung LTL101AL01, B120XAN01.0, R140NWF5 RH, Densitron DMT028VGHMCMI-1A TFT, AUO B133UAN02.1, IVO M133NW4J-R3, Innolux N120ACA-EA1, AUO B116XAK01.6, BOE NT116WH M-N21, INX N 116BCA- EA2, INX N116BCN-EA1, technologie multi-inno MI0800FT-9.
    • Ajout de la prise en charge des contrôleurs AHCI SATA utilisés dans le SoC Baikal-T1.
    • Ajout de la prise en charge des puces Bluetooth MediaTek MT7921, Intel Magnetor (CNVi, Integrated Connectivity), Realtek RTL8852C, RTW8852AE et RTL8761BUV (Edimax BT-8500).
    • Le pilote ath11k pour les modules sans fil Qualcomm a ajouté la prise en charge du balayage spectral dans la gamme 160 MHz, implémenté un NAPI multithread et une prise en charge améliorée des puces Wi-Fi Qualcomm WCN6750.
    • Ajout de pilotes pour le clavier PinePhone, les pavés tactiles InterTouch (ThinkPad P1 G3), le contrôleur adaptatif X-Box, le contrôleur de vol PhoenixRC, le contrôleur de voiture VRC-2, le contrôleur DualSense Edge, le panneau de commande IBM, les télécommandes XBOX One Elite, les tablettes XP-PEN Deco Pro S et Intuos Pro petit (PTH-460).
    • Ajout d'un pilote pour les accélérateurs cryptographiques Aspeed HACE (Hash and Crypto Engine).
    • Ajout de la prise en charge des contrôleurs Thunderbolt/USB4 Intel Meteor Lake intégrés.
    • Ajout de la prise en charge des smartphones Sony Xperia 1 IV, Samsung Galaxy E5, E7 et Grand Max, Pine64 Pinephone Pro.
    • Ajout de la prise en charge des SoC et des cartes ARM : AMD DaytonaX, Mediatek MT8186, Rockchips RK3399 et RK3566, TI AM62A, NXP i.MX8DXL, Renesas R-Car H3Ne-1.7G, Qualcomm IPQ8064-v2.0, IPQ8062, IPQ8065, Kontron SL/ BL i.MX8MM OSM-S, MT8195 (Acer Tomato), Radxa ROCK 4C+, NanoPi R4S Enterprise Edition, JetHome JetHub D1p. Pilotes mis à jour pour SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom et NXP.

Dans le même temps, la Fondation latino-américaine du logiciel libre a créé une version du noyau entièrement libre 6.1 - Linux-libre 6.1-gnu, débarrassée des éléments de firmware et des pilotes contenant des composants ou des sections de code non libres, dont la portée est limité par le fabricant. La nouvelle version nettoie le nouveau pilote rtw8852b et les fichiers DTS pour divers SoC Qualcomm et MediaTek avec des processeurs basés sur l'architecture AArch64. Code de nettoyage de blob mis à jour dans les pilotes et sous-systèmes amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. Le nettoyage des pilotes obsolètes des cartes TV tm6000, cpia2 v4l, sp8870, av7110 a été corrigé.

Source: opennet.ru

Ajouter un commentaire