Version du noyau Linux 5.19

Après deux mois de développement, Linus Torvalds a présenté la sortie du noyau Linux 5.19. Parmi les changements les plus notables : le support de l'architecture du processeur LoongArch, l'intégration des patchs "BIG TCP", le mode à la demande dans fscache, la suppression de code pour supporter le format a.out, la possibilité d'utiliser ZSTD pour la compression du firmware, une interface pour gestion de l'expulsion de la mémoire de l'espace utilisateur, augmentation de la fiabilité et des performances du générateur de nombres pseudo-aléatoires, prise en charge d'Intel IFS (In-Field Scan), AMD SEV-SNP (Secure Nested Paging), Intel TDX (Trusted Domain Extensions) et ARM Extensions PME (Scalable Matrix Extension).

Dans l'annonce, Linus a déclaré que la prochaine version du noyau porterait très probablement le numéro 6.0, puisque la branche 5.x a accumulé suffisamment de versions pour changer le premier numéro du numéro de version. Le changement de numérotation est effectué pour des raisons esthétiques et constitue une démarche formelle qui soulage l'inconfort dû à l'accumulation d'un grand nombre de numéros dans la série.

Linus a également mentionné qu'il a utilisé un ordinateur portable Apple basé sur l'architecture ARM64 (Apple Silicon) avec un environnement Linux basé sur la distribution Asahi Linux pour créer la version. Ce n'est pas la station de travail principale de Linus, mais il a utilisé la plate-forme pour tester son adéquation au travail sur le noyau et pour s'assurer qu'il pouvait produire des versions du noyau tout en voyageant avec un ordinateur portable léger à portée de main. Auparavant, il y a de nombreuses années, Linus avait de l'expérience dans l'utilisation d'équipements Apple pour le développement - il utilisait autrefois un PC basé sur le processeur ppc970 et un ordinateur portable Macbook Air.

La nouvelle version comprend 16401 2190 correctifs de 16206 2127 développeurs (dans la dernière version, il y avait 90 13847 correctifs de 1149456 349177 développeurs), la taille du correctif est de 39 Mo (les modifications ont affecté 5.19 21 fichiers, 11 4 3 lignes de code ont été ajoutées, XNUMX XNUMX lignes ont été supprimées). Environ XNUMX % 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 % sont liées aux systèmes de fichiers et XNUMX % sont liés aux sous-systèmes internes du noyau.

Innovations clés dans le noyau 5.19 :

  • Sous-système de disque, E/S et systèmes de fichiers
    • Le système de fichiers EROFS (Enhanced Read-Only File System), destiné à être utilisé sur des partitions en lecture seule, a été converti pour utiliser le sous-système fscache, qui assure la mise en cache des données. Ce changement a considérablement amélioré les performances des systèmes dans lesquels un grand nombre de conteneurs sont lancés à partir d'une image basée sur EROFS.
    • Un mode de lecture à la demande a été ajouté au sous-système fscache, qui est utilisé pour optimiser EROFS. Le nouveau mode permet d'organiser la mise en cache de lecture à partir des images FS situées dans le système local. Contrairement au mode de fonctionnement initialement disponible, axé sur la mise en cache dans le système de fichiers local des données transférées via les systèmes de fichiers réseau, le mode « à la demande » délègue les fonctions de récupération des données et de leur écriture dans le cache à un processus en arrière-plan exécuté dans l’espace utilisateur.
    • XFS offre la possibilité de stocker des milliards d'attributs étendus dans un i-node. Le nombre maximum d'extensions pour un fichier a été augmenté de 4 milliards à 247. Un mode a été implémenté pour mettre à jour atomiquement plusieurs attributs de fichier étendus à la fois.
    • Le système de fichiers Btrfs a optimisé le travail avec les verrous, ce qui a permis une augmentation d'environ 7 % des performances lors de l'écriture directe en mode nowait. Les performances des opérations en mode NOCOW (sans copie sur écriture) sont augmentées d'environ 3 %. La charge sur le cache des pages lors de l'exécution de la commande « envoyer » a été réduite. La taille minimale des sous-pages a été réduite de 64 Ko à 4 Ko (des sous-pages plus petites que les pages du noyau peuvent être utilisées). Une transition a été effectuée de l'utilisation d'un arbre de base vers l'algorithme XArrays.
    • Un mode a été ajouté au serveur NFS pour étendre la préservation de l'état de verrouillage défini par un client qui a cessé de répondre aux requêtes. Le nouveau mode vous permet de retarder l'effacement du verrou jusqu'à un jour, à moins qu'un autre client ne demande un verrou concurrent. En mode normal, le blocage est levé 90 secondes après que le client cesse de répondre.
    • Le sous-système de suivi des événements de fanotify FS implémente l'indicateur FAN_MARK_EVICTABLE, avec lequel vous pouvez désactiver l'épinglage des i-nœuds cibles dans le cache, par exemple, pour ignorer les sous-branches sans épingler leurs parties dans le cache.
    • Le pilote du système de fichiers FAT32 a ajouté la prise en charge de l'obtention d'informations sur l'heure de création du fichier via l'appel système statx avec l'implémentation d'une version plus efficace et fonctionnelle de stat(), qui renvoie des informations étendues sur le fichier.
    • Des optimisations significatives ont été apportées au pilote exFAT pour permettre l'effacement simultané d'un groupe de secteurs lorsque le mode « dirsync » est actif, au lieu d'un effacement séquentiel secteur par secteur. En réduisant le nombre de demandes de blocage après optimisation, les performances de création d'un grand nombre de répertoires sur la carte SD ont augmenté de plus de 73 à 85 %, en fonction de la taille du cluster.
    • Le noyau inclut la première mise à jour corrective du pilote ntfs3. Depuis que ntfs3 a été inclus dans le noyau 5.15 en octobre dernier, le pilote n'a pas été mis à jour et la communication avec les développeurs a été perdue, mais les développeurs ont maintenant repris la publication des modifications. Les correctifs proposés ont éliminé les erreurs entraînant des fuites de mémoire et des plantages, résolu les problèmes d'exécution de xfstests, nettoyé le code inutilisé et corrigé les fautes de frappe.
    • Pour OverlayFS, la possibilité de mapper les ID utilisateur des systèmes de fichiers montés a été implémentée, ce qui est utilisé pour faire correspondre les fichiers d'un utilisateur spécifique sur une partition étrangère montée avec un autre utilisateur sur le système actuel.
  • Services mémoire et système
    • Ajout de la prise en charge initiale de l'architecture du jeu d'instructions LoongArch utilisée dans les processeurs Loongson 3 5000, qui implémente le nouveau RISC ISA, similaire à MIPS et RISC-V. L'architecture LoongArch est disponible en trois versions : 32 bits simplifiés (LA32R), 32 bits standard (LA32S) et 64 bits (LA64).
    • Code supprimé pour prendre en charge le format de fichier exécutable a.out, obsolète dans la version 5.1. 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.
    • La prise en charge des options de démarrage spécifiques à x86 a été interrompue : nosp, nosmap, nosmep, noexec et noclflush).
    • La prise en charge de l'architecture obsolète du processeur h8300 (Renesas H8/300), longtemps restée sans prise en charge, a été interrompue.
    • Capacités étendues liées à la réponse à la détection de verrous fractionnés (« verrous fractionnés ») qui se produisent lors de l'accès à des données non alignées en mémoire en raison du fait que lors de l'exécution d'une instruction atomique, les données traversent deux lignes de cache du processeur. De tels blocages entraînent une baisse significative des performances. Si auparavant, par défaut, le noyau émettait un avertissement avec des informations sur le processus qui a provoqué le blocage, désormais le processus problématique sera encore plus ralenti pour préserver les performances du reste du système.
    • Ajout de la prise en charge du mécanisme IFS (In-Field Scan) implémenté dans les processeurs Intel, qui vous permet d'exécuter des tests de diagnostic CPU de bas niveau permettant d'identifier les problèmes qui ne sont pas détectés par les outils standard sur la base de codes de correction d'erreur (ECC) ou de bits de parité. . Les tests effectués se présentent sous la forme d'un firmware téléchargeable, conçu de manière similaire aux mises à jour du microcode. Les résultats des tests sont disponibles via sysfs.
    • Ajout de la possibilité d'intégrer un fichier bootconfig dans le noyau, ce qui permet, en plus des options de ligne de commande, de déterminer les paramètres du noyau via un fichier de paramètres. L'intégration s'effectue à l'aide de l'option d'assemblage 'CONFIG_BOOT_CONFIG_EMBED_FILE=»/PATH/TO/BOOTCONFIG/FILE»'. Auparavant, bootconfig était déterminé en l'attachant à l'image initrd. L'intégration dans le noyau permet d'utiliser bootconfig dans des configurations sans initrd.
    • La possibilité de télécharger un firmware compressé à l'aide de l'algorithme Zstandard a été implémentée. Un ensemble de fichiers de contrôle /sys/class/firmware/* a été ajouté à sysfs, vous permettant de lancer le chargement du firmware depuis l'espace utilisateur.
    • L'interface d'E/S asynchrone io_uring propose un nouvel indicateur, IORING_RECVSEND_POLL_FIRST, qui, une fois défini, enverra d'abord une opération réseau à traiter à l'aide d'une interrogation, ce qui peut économiser des ressources dans les situations où le traitement de l'opération avec un certain retard est acceptable. io_uring a également ajouté la prise en charge de l'appel système socket(), proposé de nouveaux indicateurs pour simplifier la gestion des descripteurs de fichiers, ajouté un mode « multi-shot » pour accepter plusieurs connexions à la fois dans l'appel accept() et ajouté des opérations de transfert de NVMe. commandes directement sur l'appareil.
    • L'architecture Xtensa prend en charge l'outil de débogage KCSAN (Kernel Concurrency Sanitizer), conçu pour détecter dynamiquement les conditions de concurrence au sein du noyau. Ajout également de la prise en charge du mode veille et des coprocesseurs.
    • Pour l'architecture m68k (Motorola 68000), une machine virtuelle (simulateur de plateforme) basée sur l'émulateur Android Goldfish a été implémentée.
    • Pour l'architecture AArch64, la prise en charge des extensions Armv9-A SME (Scalable Matrix Extension) a été implémentée.
    • Le sous-système eBPF permet de stocker des pointeurs typés dans des structures cartographiques et ajoute également la prise en charge des pointeurs dynamiques.
    • Un nouveau mécanisme proactif de récupération de mémoire est proposé, prenant en charge le contrôle de l'espace utilisateur à l'aide du fichier memory.reclaim. L'écriture d'un nombre dans le fichier spécifié tentera d'expulser le nombre d'octets correspondant de l'ensemble associé au groupe de contrôle.
    • Amélioration de la précision de l'utilisation de la mémoire lors de la compression des données dans la partition d'échange à l'aide du mécanisme zswap.
    • Pour l'architecture RISC-V, la prise en charge de l'exécution d'exécutables 32 bits sur des systèmes 64 bits est fournie, un mode est ajouté pour lier des attributs restrictifs aux pages mémoire (par exemple, pour désactiver la mise en cache) et la fonction kexec_file_load() est implémentée. .
    • La mise en œuvre de la prise en charge des systèmes Armv32T et Armv4 5 bits est adaptée pour être utilisée dans les versions de noyau multiplateforme universelles adaptées à différents systèmes ARM.
  • Virtualisation et sécurité
    • Le sous-système EFI implémente la possibilité de transférer de manière confidentielle des informations secrètes vers les systèmes invités sans les divulguer au système hôte. Les données sont fournies via le répertoire security/coco dans securityfs.
    • Le mode de protection par verrouillage, qui restreint l'accès de l'utilisateur root au noyau et bloque les chemins de contournement du démarrage sécurisé UEFI, a éliminé une faille qui permettait de contourner la protection en manipulant le débogueur du noyau.
    • Sont inclus des correctifs visant à améliorer la fiabilité et les performances du générateur de nombres pseudo-aléatoires.
    • Lors de la construction à l'aide de Clang 15, la prise en charge du mécanisme de randomisation des structures du noyau est implémentée.
    • Le mécanisme Landlock, qui permet de limiter l'interaction d'un groupe de processus avec l'environnement externe, prend en charge des règles qui permettent de contrôler l'exécution des opérations de renommage de fichiers.
    • Le sous-système IMA (Integrity Measurement Architecture), conçu pour vérifier l'intégrité des composants du système d'exploitation à l'aide de signatures numériques et de hachages, a été basculé vers l'utilisation du module fs-verity pour la vérification des fichiers.
    • La logique des actions lors de la désactivation de l'accès non privilégié au sous-système eBPF a été modifiée - auparavant toutes les commandes associées à l'appel système bpf() étaient désactivées, et à partir de la version 5.19, l'accès aux commandes qui ne conduisent pas à la création d'objets est laissé . Ce comportement nécessite un processus privilégié pour charger un programme BPF, mais des processus non privilégiés peuvent alors interagir avec le programme.
    • Ajout de la prise en charge de l'extension AMD SEV-SNP (Secure Nested Paging), qui permet un travail sécurisé avec des tables de pages de mémoire imbriquées et protège contre les attaques « undeSErVed » et « SEVerity » sur les processeurs AMD EPYC, qui permettent de contourner l'AMD SEV (Secure Encrypted Virtualization). ) mécanisme de protection.
    • Ajout de la prise en charge du mécanisme Intel TDX (Trusted Domain Extensions), qui vous permet de bloquer les tentatives tierces d'accès à la mémoire cryptée des machines virtuelles.
    • Le pilote virtio-blk, utilisé pour émuler les périphériques en bloc, a ajouté la prise en charge des E/S utilisant l'interrogation, ce qui, selon les tests, a réduit la latence d'environ 10 %.
  • Sous-système réseau
    • Le package comprend une série de correctifs BIG TCP qui vous permettent d'augmenter la taille maximale d'un paquet TCP à 4 Go pour optimiser le fonctionnement des réseaux internes à haut débit des centres de données. Une augmentation similaire de la taille des paquets avec une taille de champ d'en-tête de 16 bits est obtenue grâce à la mise en œuvre de paquets « jumbo », dont la taille dans l'en-tête IP est définie sur 0, et la taille réelle est transmise dans un format séparé de 32 bits. champ dans un en-tête joint séparé. Lors des tests de performances, la définition de la taille des paquets à 185 Ko a augmenté le débit de 50 % et réduit considérablement la latence du transfert de données.
    • Les travaux se sont poursuivis sur l'intégration d'outils dans la pile réseau pour suivre les raisons de l'abandon de paquets (codes de raison). Le code de raison est envoyé lorsque la mémoire associée au paquet est libérée et permet des situations telles que la suppression du paquet en raison d'erreurs d'en-tête, la détection d'usurpation d'identité rp_filter, une somme de contrôle invalide, une mémoire insuffisante, des règles IPSec XFRM déclenchées, un numéro de séquence TCP non valide, etc.
    • Ajout de la prise en charge du repli des connexions MPTCP (MultiPath TCP) pour utiliser TCP standard, dans les situations où certaines fonctionnalités MPTCP ne peuvent pas être utilisées. MPTCP est une extension du protocole TCP permettant d'organiser le fonctionnement d'une connexion TCP avec la livraison de paquets simultanément sur plusieurs routes via différentes interfaces réseau associées à différentes adresses IP. Ajout d'une API pour contrôler les flux MPTCP depuis l'espace utilisateur.
  • équipement
    • Ajout de plus de 420 400 lignes de code liées au pilote amdgpu, dont environ 22.5 21 lignes sont des fichiers d'en-tête générés automatiquement pour les données de registre ASIC dans le pilote GPU AMD, et 4 21 lignes supplémentaires fournissent la mise en œuvre initiale de la prise en charge du SoC13 AMD. La taille totale des pilotes pour les GPU AMD dépassait 3 millions de lignes de code. En plus du SoC7000, le pilote AMD inclut la prise en charge de SMU XNUMX.x (System Management Unit), une prise en charge mise à jour de l'USB-C et du GPUVM, et est prêt à prendre en charge les prochaines générations de RDNAXNUMX (RX XNUMX) et CDNA (AMD Instinct). plates-formes.
    • Le pilote i915 (Intel) possède des capacités étendues liées à la gestion de l'alimentation. Ajout d'identifiants pour les GPU Intel DG2 (Arc Alchemist) utilisés sur les ordinateurs portables, prise en charge initiale de la plate-forme Intel Raptor Lake-P (RPL-P), ajout d'informations sur les cartes graphiques Arctic Sound-M), implémentation de l'ABI pour les moteurs de calcul, ajout pour Prise en charge des cartes DG2 pour le format Tile4 ; pour les systèmes basés sur la microarchitecture Haswell, la prise en charge DisplayPort HDR est implémentée.
    • Le pilote Nouveau utilise désormais le gestionnaire drm_gem_plane_helper_prepare_fb ; une allocation de mémoire statique a été appliquée à certaines structures et variables. Quant à l'utilisation de modules de noyau open source par NVIDIA dans Nouveau, le travail jusqu'à présent se résume à identifier et éliminer les erreurs. À l'avenir, le micrologiciel publié devrait être utilisé pour améliorer les performances des pilotes.
    • Ajout d'un pilote pour le contrôleur NVMe utilisé dans les ordinateurs Apple basé sur la puce M1.

Dans le même temps, la Fondation latino-américaine du logiciel libre a créé une version du noyau entièrement libre 5.19 - Linux-libre 5.19-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 les pilotes pour pureLiFi X/XL/XC et TI AMx3 Wkup-M3 IPC. Code de nettoyage de blob mis à jour dans Silicon Labs WFX, AMD amdgpu, Qualcomm WCNSS Peripheral Image Loader, Realtek Bluetooth, Mellanox Spectrum, Marvell WiFi-Ex, Intel AVS, IFS, pilotes et sous-systèmes pu3-imgu. Le traitement des fichiers Devicetree Qualcomm AArch64 a été implémenté. Ajout de la prise en charge du nouveau schéma de dénomination des composants Sound Open Firmware. Arrêt du nettoyage du pilote ATM Ambassador, qui a été supprimé du noyau. La gestion du nettoyage des objets blob dans HDCP et Mellanox Core a été déplacée vers des balises kconfig distinctes.

Source: opennet.ru

Ajouter un commentaire