Version du noyau Linux 5.12

Après deux mois de développement, Linus Torvalds a présenté la sortie du noyau Linux 5.12. Parmi les changements les plus notables : la prise en charge des périphériques de bloc zonés dans Btrfs, la possibilité de mapper les identifiants utilisateur pour le système de fichiers, le nettoyage des architectures ARM héritées, un mode d'écriture « hâtif » dans NFS, le mécanisme LOOKUP_CACHED pour déterminer les chemins de fichiers à partir du cache. , prise en charge des instructions atomiques dans BPF, un système de débogage KFENCE pour identifier les erreurs lors du travail avec la mémoire, un mode d'interrogation NAPI exécuté dans un thread de noyau séparé dans la pile réseau, un hyperviseur ACRN, la possibilité de modifier le modèle de préemption à la volée dans la tâche planificateur et prise en charge des optimisations LTO lors de la construction dans Clang.

La nouvelle version comprend 14170 (dans la version précédente 15480) correctifs de 1946 (1991) développeurs, la taille du correctif est de 38 Mo (les modifications ont affecté 12102 (12090) fichiers, 538599 (868025) lignes de code ont été ajoutées, 333377 (261456) les lignes ont été supprimées). Environ 43 % de toutes les modifications introduites dans la version 5.12 sont liées aux pilotes de périphériques, environ 17 % des modifications sont liées à la mise à jour du code spécifique aux architectures matérielles, 12 % sont liées à la pile réseau, 5 % sont liées aux systèmes de fichiers et 4 % sont liés aux sous-systèmes internes du noyau.

Principales nouveautés :

  • Sous-système de disque, E/S et systèmes de fichiers
    • La possibilité de mapper les ID utilisateur pour les systèmes de fichiers montés a été implémentée (vous pouvez mapper les fichiers d'un utilisateur sur une partition étrangère montée avec un autre utilisateur sur le système actuel). Le mappage est pris en charge pour les systèmes de fichiers FAT, ext4 et XFS. La fonctionnalité proposée facilite le partage de fichiers entre différents utilisateurs et sur différents ordinateurs, y compris le mappage qui sera utilisé dans le mécanisme de répertoire personnel portable hébergé par systemd, permettant aux utilisateurs de déplacer leurs répertoires personnels vers un support externe et de les utiliser sur différents ordinateurs, en mappant ID utilisateur auxquels ne correspondent pas. Une autre application utile consiste à organiser la fourniture d'un accès partagé aux fichiers à partir d'un hôte externe, sans réellement modifier les données sur les propriétaires des fichiers dans le système de fichiers.
    • Les correctifs LOOKUP_CACHED ont été adoptés dans le noyau, permettant aux opérations de déterminer un chemin de fichier depuis l'espace utilisateur sans blocage, uniquement sur la base des données disponibles dans le cache. Le mode LOOKUP_CACHED est activé dans l'appel openat2() en passant l'indicateur RESOLVE_CACHED, dans lequel les données sont servies uniquement à partir du cache, et si la détermination du chemin nécessite un accès au lecteur, l'erreur EAGAIN est renvoyée.
    • Le système de fichiers Btrfs a ajouté la prise en charge initiale des périphériques de blocs zonés (périphériques sur disques magnétiques durs ou SSD NVMe, dont l'espace de stockage est divisé en zones qui constituent des groupes de blocs ou de secteurs, auxquels seul l'ajout séquentiel de données est autorisé, mise à jour de l'ensemble du groupe de blocs). En mode lecture seule, la prise en charge des blocs contenant des métadonnées et des données inférieures à une page (sous-page) est implémentée.
    • Dans le système de fichiers F2FS, la possibilité de sélectionner l'algorithme et le niveau de compression a été ajoutée. Ajout de la prise en charge de la compression de haut niveau pour l'algorithme LZ4. Implémentation de l'option de montage checkpoint_merge.
    • Une nouvelle commande ioctl FS_IOC_READ_VERITY_METADATA a été implémentée pour lire les métadonnées des fichiers protégés par fs-verity.
    • Le client NFS implémente un mode d'écriture « impatient » (writes=eager), lorsqu'il est activé, les opérations d'écriture dans un fichier sont immédiatement transférées au serveur, en contournant le cache des pages. Ce mode permet de réduire la consommation de mémoire, permet de recevoir instantanément des informations sur la fin de l'espace libre dans le système de fichiers et, dans certaines situations, permet d'obtenir des performances accrues.
    • De nouvelles options de montage ont été ajoutées à CIFS (SMB) : acregmax pour contrôler la mise en cache des fichiers et acdirmax pour contrôler la mise en cache des métadonnées du répertoire.
    • Dans XFS, le mode de vérification des quotas multithread a été activé, l'exécution de fsync a été accélérée et le code growfs a été préparé pour implémenter la fonction de réduction de la taille du système de fichiers.
  • Services mémoire et système
    • Le sous-système DTMP (Dynamic Thermal Power Management) a été ajouté, vous permettant de réguler dynamiquement la consommation électrique de différents appareils en fonction des limites générales de température définies.
    • La possibilité de construire le noyau à l'aide du compilateur Clang avec l'inclusion d'optimisations au stade de la liaison (LTO, Link Time Optimization) a été implémentée. Les optimisations LTO diffèrent en prenant en compte l'état de tous les fichiers impliqués dans le processus de construction, tandis que les modes d'optimisation traditionnels optimisent chaque fichier séparément et ne prennent pas en compte les conditions d'appel des fonctions définies dans d'autres fichiers. Par exemple, avec LTO, le déploiement en ligne est possible pour les fonctions d'autres fichiers, le code inutilisé n'est pas inclus dans le fichier exécutable, la vérification de type et l'optimisation générale sont effectuées au niveau du projet dans son ensemble. La prise en charge de LTO est actuellement limitée aux architectures x86 et ARM64.
    • Il est possible de sélectionner des modes de préemption (PREEMPT) dans le planificateur de tâches au stade du démarrage (preempt=none/voluntary/full) ou pendant l'exécution de debugfs (/debug/sched_debug), si le paramètre PREEMPT_DYNAMIC a été spécifié lors de la construction du noyau. Auparavant, le mode d'extrusion ne pouvait être défini qu'au niveau des paramètres d'assemblage. Le changement permet aux distributions de livrer des noyaux avec le mode PREEMPT activé, ce qui fournit une latence minimale pour les ordinateurs de bureau au prix d'une légère pénalité de débit, et si nécessaire de revenir à PREEMPT_VOLUNTARY (un mode intermédiaire pour les ordinateurs de bureau) ou PREEMPT_NONE (fournit un débit maximum pour les serveurs). .
    • La prise en charge des opérations atomiques BPF_ADD, BPF_AND, BPF_OR, BPF_XOR, BPF_XCHG et BPF_CMPXCHG a été ajoutée au sous-système BPF.
    • Les programmes BPF ont la possibilité d'accéder aux données sur la pile à l'aide de pointeurs avec des décalages variables. Par exemple, si auparavant vous ne pouviez utiliser qu'un index d'élément constant pour accéder à un tableau sur la pile, vous pouvez désormais en utiliser un index changeant. Le contrôle d'accès uniquement dans les limites existantes est effectué par le vérificateur BPF. Cette fonctionnalité n'est disponible que pour les programmes privilégiés en raison de préoccupations concernant l'exploitation des vulnérabilités d'exécution de code spéculatif.
    • Ajout de la possibilité d'attacher des programmes BPF à des points de trace nus qui ne sont pas associés à des événements de trace visibles dans l'espace utilisateur (la préservation ABI n'est pas garantie pour de tels points de trace).
    • La prise en charge du bus CXL 2.0 (Compute Express Link) a été implémentée, qui est utilisée pour organiser une interaction à grande vitesse entre le processeur et les périphériques de mémoire (vous permet d'utiliser des périphériques de mémoire externes dans le cadre de la RAM ou de la mémoire permanente, comme si cette mémoire étaient connectés via un contrôleur de mémoire standard dans le CPU).
    • Ajout du pilote nvmem pour récupérer les données des zones de mémoire réservées au micrologiciel qui ne sont pas directement accessibles à Linux (par exemple, la mémoire EEPROM qui n'est physiquement accessible qu'au micrologiciel ou les données qui ne sont accessibles qu'au début de la phase de démarrage).
    • La prise en charge du système de profilage « oprofile », qui n'était pas largement utilisé, a été supprimée et a été remplacée par le mécanisme de perf plus moderne.
    • L'interface d'E/S asynchrone io_uring fournit une intégration avec les groupes de contrôle qui contrôlent l'utilisation de la mémoire.
    • L'architecture RISC-V prend en charge les systèmes NUMA, ainsi que les mécanismes kprobes et uprobes.
    • Ajout de la possibilité d'utiliser l'appel système kcmp() quelle que soit la fonctionnalité des instantanés d'état du processus (point de contrôle/restauration).
    • Les macros EXPORT_UNUSED_SYMBOL() et EXPORT_SYMBOL_GPL_FUTURE(), qui n'ont pas été utilisées en pratique depuis de nombreuses années, ont été supprimées.
  • Virtualisation et sécurité
    • Ajout du mécanisme de protection KFence (Kernel Electric Fence), qui détecte les erreurs lors du travail avec la mémoire, telles que les dépassements de tampon et l'accès après la libération de la mémoire. Contrairement au mécanisme de débogage KASAN, le sous-système KFence se caractérise par une vitesse de fonctionnement élevée et une faible surcharge, ce qui vous permet de détecter les erreurs de mémoire qui apparaissent uniquement sur les systèmes en fonctionnement ou lors d'un fonctionnement à long terme.
    • Ajout de la prise en charge de l'hyperviseur ACRN, écrit dans un souci de préparation aux tâches en temps réel et d'adéquation à une utilisation dans des systèmes critiques. ACRN fournit une surcharge minimale, garantit une faible latence et une réactivité adéquate lors de l’interaction avec l’équipement. Prend en charge la virtualisation des ressources CPU, des E/S, du sous-système réseau, des opérations graphiques et sonores. ACRN peut être utilisé pour exécuter plusieurs machines virtuelles isolées dans des unités de commande électroniques, des tableaux de bord, des systèmes d'information automobiles, des appareils IoT grand public et d'autres technologies embarquées. ACRN prend en charge deux types de systèmes invités : les machines virtuelles de service privilégiées, qui sont utilisées pour gérer les ressources système (CPU, mémoire, E/S, etc.), et les machines virtuelles utilisateur personnalisées, qui peuvent exécuter les distributions Linux, Android et Windows.
    • Dans le sous-système IMA (Integrity Measurement Architecture), qui maintient une base de données de hachage pour vérifier l'intégrité des fichiers et des métadonnées associées, il devient désormais possible de vérifier l'intégrité des données du noyau lui-même, par exemple pour suivre les modifications des règles SELinux. .
    • La possibilité d'intercepter les hyperappels Xen et de les transmettre à l'émulateur exécuté dans l'espace utilisateur a été ajoutée à l'hyperviseur KVM.
    • Ajout de la possibilité d'utiliser Linux comme environnement racine pour l'hyperviseur Hyper-V. L'environnement racine a un accès direct au matériel et est utilisé pour exécuter des systèmes invités (analogue à Dom0 dans Xen). Jusqu'à présent, Hyper-V (Microsoft Hypervisor) prenait en charge Linux uniquement dans les environnements invités, mais l'hyperviseur lui-même était contrôlé à partir d'un environnement Windows.
    • Ajout de la prise en charge du chiffrement en ligne pour les cartes eMMC, vous permettant d'utiliser des mécanismes de chiffrement intégrés au contrôleur de lecteur qui chiffrent et déchiffrent les E/S de manière transparente.
    • La prise en charge des hachages RIPE-MD 128/256/320 et Tiger 128/160/192, qui ne sont pas utilisés dans le noyau, ainsi que du chiffrement de flux Salsa20, qui a été remplacé par l'algorithme ChaCha20, a été supprimé du sous-système cryptographique. L'algorithme blake2 a été mis à jour pour implémenter blake2s.
  • Sous-système réseau
    • Ajout de la possibilité de déplacer le gestionnaire d'interrogation NAPI pour les périphériques réseau vers un thread de noyau distinct, ce qui permet d'améliorer les performances pour certains types de charge de travail. Auparavant, l'interrogation était effectuée dans le contexte de softirq et n'était pas couverte par le planificateur de tâches, ce qui rendait difficile la réalisation d'optimisations fines pour obtenir des performances maximales. L'exécution dans un thread de noyau distinct permet au gestionnaire d'interrogation d'être observé depuis l'espace utilisateur, attaché aux cœurs de processeur individuels et pris en compte lors de la planification du changement de tâche. Pour activer le nouveau mode dans sysfs, le paramètre /sys/class/net//threaded est proposé.
    • Intégration au cœur de MPTCP (MultiPath TCP), une extension du protocole TCP permettant d'organiser le fonctionnement d'une connexion TCP avec acheminement de paquets simultanément sur plusieurs routes via différentes interfaces réseau associées à différentes adresses IP. La nouvelle version ajoute la possibilité d'attribuer une priorité à certains threads, ce qui permet, par exemple, d'organiser le travail des threads de sauvegarde qui ne s'activent qu'en cas de problèmes avec le thread principal.
    • IGMPv3 ajoute la prise en charge du mécanisme EHT (Explicit Host Tracking).
    • Le moteur de filtrage de paquets de Netfilter offre la possibilité de posséder certaines tables pour obtenir un contrôle exclusif (par exemple, un processus de pare-feu en arrière-plan peut s'approprier certaines tables, empêchant quiconque d'interférer avec elles).
  • équipement
    • Nous avons nettoyé les plateformes ARM obsolètes et non entretenues. Le code des plateformes efm32, picoxcell, prima2, tango, u300, zx et c6x, ainsi que leurs pilotes associés, a été supprimé.
    • Le pilote amdgpu offre la possibilité d'overclocker (OverDrive) des cartes basées sur le GPU Sienna Cichlid (Navi 22, Radeon RX 6xxx). Ajout de la prise en charge du format de pixel FP16 pour DCE (moteur de contrôleur d'affichage) de la 8e à la 11e génération. Pour le GPU Navy Flounder (Navi 21) et l'APU Van Gogh, la possibilité de réinitialiser le GPU a été implémentée.
    • Le pilote i915 pour les cartes graphiques Intel implémente le paramètre i915.mitigations pour désactiver les mécanismes d'isolation et de protection en faveur de performances améliorées. Pour les puces à partir de Tiger Lake, la prise en charge du mécanisme VRR (Variable Rate Refresh) est incluse, qui vous permet de modifier de manière adaptative le taux de rafraîchissement du moniteur pour garantir la fluidité et l'absence de lacunes pendant les jeux. La prise en charge de la technologie Intel Clear Color est incluse pour une précision des couleurs améliorée. Ajout de la prise en charge de DP-HDMI 2.1. La possibilité de contrôler le rétroéclairage des panneaux eDP a été implémentée. Pour les GPU Gen9 avec prise en charge LSPCON (Level Shifter and Protocol Converter), la prise en charge HDR est activée.
    • Le nouveau pilote ajoute la prise en charge initiale des GPU NVIDIA basés sur l'architecture GA100 (Ampère).
    • Le pilote msm ajoute la prise en charge des GPU Adreno 508, 509 et 512 utilisés dans les puces SDM (Snapdragon) 630, 636 et 660.
    • Ajout de la prise en charge des cartes son Sound BlasterX AE-5 Plus, Lexicon I-ONIX FW810 et Pioneer DJM-750. Ajout de la prise en charge du sous-système audio Intel Alder Lake PCH-P. La prise en charge de la simulation logicielle de la connexion et de la déconnexion d'un connecteur audio a été implémentée pour les gestionnaires de débogage dans l'espace utilisateur.
    • Ajout de la prise en charge des consoles de jeux Nintendo 64 fabriquées de 1996 à 2003 (les tentatives passées de portage de Linux sur la Nintendo 64 n'ont pas abouti et ont été classées comme Vaporware). La motivation pour créer un nouveau portage pour une plateforme obsolète, qui n'est pas sortie depuis près de vingt ans, est la volonté de stimuler le développement d'émulateurs et de simplifier le portage des jeux.
    • Ajout d'un pilote pour la manette de jeu Sony PlayStation 5 DualSense.
    • Ajout de la prise en charge des cartes, appareils et plates-formes ARM : PineTab, Snapdragon 888 / SM8350, Snapdragon MTP, Two Beacon EmbeddedWorks, Intel eASIC N5X, Netgear R8000P, Plymovent M2M, Beacon i.MX8M Nano, NanoPi M4B.
    • Ajout de la prise en charge des smartphones Purism Librem5 Evergreen, Xperia Z3+/Z4/Z5, ASUS Zenfone 2 Laser, BQ Aquaris X5, OnePlus6, OnePlus6T, Samsung GT-I9070.
    • Ajout du pilote bcm-vk pour les cartes accélératrices Broadcom VK (par exemple, les cartes Valkyrie et Viper PCIe), qui peut être utilisé pour décharger les opérations de traitement audio, vidéo et d'image, ainsi que les opérations liées au cryptage, vers un périphérique distinct.
    • Ajout de la prise en charge de la plate-forme Lenovo IdeaPad avec la possibilité de contrôler la charge constante et le rétroéclairage du clavier. La prise en charge du profil ACPI de la plate-forme ThinkPad est également fournie avec la possibilité de contrôler les modes de consommation d'énergie. Ajout d'un pilote pour le sous-système HID Lenovo ThinkPad X1 Tablet Gen 2.
    • Ajout du pilote ov5647 avec prise en charge du module caméra pour Raspberry Pi.
    • Ajout de la prise en charge des cartes RISC-V SoC FU740 et HiFive Unleashed. Un nouveau pilote pour la puce Kendryte K210 a également été ajouté.

Source: opennet.ru

Ajouter un commentaire