Version du noyau Linux 5.15

Après deux mois de développement, Linus Torvalds a présenté la sortie du noyau Linux 5.15. Les changements notables incluent : nouveau pilote NTFS avec prise en charge de l'écriture, module ksmbd avec implémentation de serveur SMB, sous-système DAMON pour la surveillance de l'accès à la mémoire, primitives de verrouillage en temps réel, prise en charge de fs-verity dans Btrfs, appel système process_mrelease pour la mémoire des systèmes de réponse à la famine, module de certification à distance. dm-ima.

La nouvelle version comprend 13499 1888 correctifs provenant de 42 10895 développeurs, la taille du correctif est de 632522 Mo (les modifications ont affecté 299966 45 fichiers, 5.15 14 lignes de code ont été ajoutées, 14 6 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.

Principales nouveautés :

  • Sous-système de disque, E/S et systèmes de fichiers
    • Le noyau a adopté une nouvelle implémentation du système de fichiers NTFS, ouvert par Paragon Software. Le nouveau pilote peut fonctionner en mode écriture et prend en charge toutes les fonctionnalités de la version actuelle de NTFS 3.1, y compris les attributs de fichiers étendus, les listes d'accès (ACL), le mode de compression des données, le travail efficace avec les espaces vides dans les fichiers (sparse) et la relecture des modifications de le journal pour restaurer l'intégrité après des échecs.
    • Le système de fichiers Btrfs prend en charge le mécanisme fs-verity, qui est utilisé pour contrôler de manière transparente l'intégrité et l'authenticité des fichiers individuels à l'aide de hachages cryptographiques ou de clés associées aux fichiers, stockés dans la zone de métadonnées. Auparavant, fs-verity n'était disponible que pour les systèmes de fichiers Ext4 et F2fs.

      Btrfs ajoute également la prise en charge du mappage des ID utilisateur pour les systèmes de fichiers montés (auparavant pris en charge pour les systèmes de fichiers FAT, ext4 et XFS). Cette fonctionnalité vous permet de comparer les fichiers d'un utilisateur spécifique sur une partition étrangère montée avec ceux d'un autre utilisateur sur le système actuel.

      D'autres modifications apportées à Btrfs incluent : un ajout plus rapide de clés à l'index du répertoire pour améliorer les performances de création de fichiers ; la possibilité de faire fonctionner raid0 avec un seul appareil et raid10 avec deux (par exemple, pendant le processus de reconfiguration de la baie) ; option « rescue=ibadroots » pour ignorer une arborescence d'étendue incorrecte ; accélération de l'opération « envoi » ; réduction des conflits de verrouillage lors des opérations de renommage ; la possibilité d'utiliser des secteurs 4K sur des systèmes avec une taille de page mémoire de 64K.

    • Dans XFS, la possibilité d'utiliser des dates après 2038 dans le système de fichiers a été stabilisée. Implémentation d'un mécanisme de désactivation retardée des inodes et prise en charge de l'installation et de la suppression retardées des attributs de fichiers. Pour éliminer les problèmes, la possibilité de désactiver les quotas de disque pour les partitions déjà montées a été supprimée (vous pouvez désactiver de force les quotas, mais le calcul qui leur est associé continuera, un remontage est donc nécessaire pour les désactiver complètement).
    • Dans EXT4, des travaux ont été effectués pour augmenter les performances d'écriture des tampons delalloc et du traitement des fichiers orphelins qui continuent d'exister du fait qu'ils restent ouverts, mais ne sont pas associés à un répertoire. Le traitement des opérations de suppression a été déplacé hors du thread jbd2 kthread pour éviter de bloquer les opérations avec des métadonnées.
    • F2FS a ajouté l'option "discard_unit=block|segment|section" pour lier les opérations de suppression (marquant les blocs libérés qui ne peuvent plus être physiquement stockés) à l'alignement par rapport à un bloc, un secteur, un segment ou une section. Ajout de la prise en charge du suivi des modifications de latence d'E/S.
    • Le système de fichiers EROFS (Extendable Read-Only File System) ajoute la prise en charge directe des E/S pour les fichiers enregistrés sans compression, ainsi que la prise en charge des fichiers fiemap.
    • OverlayFS implémente la gestion correcte des indicateurs de montage « immuable », « ajout uniquement », « sync » et « noatime ».
    • NFS a amélioré la gestion des situations dans lesquelles le serveur NFS cesse de répondre aux requêtes. Ajout de la possibilité de monter à partir d'un serveur déjà utilisé, mais accessible via une adresse réseau différente.
    • Les préparatifs ont commencé pour la réécriture du sous-système FSCACHE.
    • Ajout de la prise en charge des partitions EFI avec placement non standard des tables GPT.
    • Le mécanisme fanotify implémente un nouvel indicateur, FAN_REPORT_PIDFD, qui entraîne l'inclusion de pidfd dans les métadonnées renvoyées. Pidfd aide à gérer les situations de réutilisation de PID pour identifier plus précisément les processus accédant aux fichiers surveillés (un pidfd est associé à un processus spécifique et ne change pas, tandis qu'un PID peut être associé à un autre processus après la fin du processus actuel associé à ce PID).
    • Ajout de la possibilité d'ajouter des points de montage aux groupes partagés existants à l'appel système move_mount(), ce qui résout les problèmes de sauvegarde et de restauration de l'état du processus dans CRIU lorsque plusieurs espaces de montage sont partagés dans des conteneurs isolés.
    • Ajout d'une protection contre les conditions de concurrence cachées qui pourraient potentiellement provoquer une corruption de fichier lors de l'exécution de lectures de cache lors du traitement des vides dans un fichier.
    • La prise en charge du verrouillage obligatoire (obligatoire) des fichiers, implémentée via le blocage des appels système conduisant à une modification de fichier, a été interrompue. En raison d'éventuelles conditions de concurrence, ces verrous étaient considérés comme peu fiables et étaient obsolètes il y a de nombreuses années.
    • Le sous-système LightNVM a été supprimé, ce qui permettait un accès direct au disque SSD, en contournant la couche d'émulation. LightNVM a perdu son sens après l'avènement des standards NVMe qui prévoient le zonage (ZNS, Zoned Namespace).
  • Services mémoire et système
    • Le sous-système DAMON (Data Access MONitor) a été implémenté, vous permettant de surveiller l'activité liée à l'accès aux données en RAM par rapport à un processus sélectionné s'exécutant dans l'espace utilisateur. Le sous-système vous permet d'analyser à quelles zones de mémoire le processus a accédé pendant toute son opération et quelles zones de mémoire sont restées non réclamées. DAMON présente une faible charge CPU, une faible consommation de mémoire, une haute précision et une surcharge constante et prévisible, quelle que soit la taille. Le sous-système peut être utilisé à la fois par le noyau pour optimiser la gestion de la mémoire et par les utilitaires de l'espace utilisateur pour comprendre exactement ce que fait un processus et optimiser l'utilisation de la mémoire, par exemple en libérant de la mémoire excédentaire pour le système.
    • L'appel système process_mrelease a été implémenté pour accélérer le processus de libération de la mémoire d'un processus qui termine son exécution. Dans des circonstances normales, la libération des ressources et l'arrêt du processus ne sont pas instantanés et peuvent être retardés pour diverses raisons, interférant avec les systèmes de réponse précoce de la mémoire de l'espace utilisateur tels que oomd (fourni par systemd) et lmkd (utilisé par Android). En appelant process_mrelease, ces systèmes peuvent déclencher de manière plus prévisible la récupération de mémoire à partir de processus forcés.
    • Depuis la branche du noyau PREEMPT_RT, qui développe le support du fonctionnement en temps réel, des variantes de primitives d'organisation des verrous mutex, ww_mutex, rw_semaphore, spinlock et rwlock, basées sur le sous-système RT-Mutex, ont été transférées. Des modifications ont été ajoutées à l'allocateur de dalle SLUB pour améliorer le fonctionnement en mode PREEMPT_RT et réduire l'impact sur les interruptions.
    • La prise en charge de l'attribut du planificateur de tâches SCHED_IDLE a été ajoutée au groupe de contrôle, vous permettant de fournir cet attribut à tous les processus d'un groupe inclus dans un groupe de contrôle spécifique. Ceux. ces processus ne s'exécuteront que lorsqu'aucune autre tâche n'attend d'être exécutée sur le système. Contrairement à la définition de l'attribut SCHED_IDLE sur chaque processus individuellement, lors de la liaison de SCHED_IDLE à un groupe de contrôle, le poids relatif des tâches au sein du groupe est pris en compte lors de la sélection d'une tâche à exécuter.
    • Le mécanisme de prise en compte de la consommation de mémoire dans le groupe de contrôle a été étendu avec la possibilité de suivre des structures de données supplémentaires du noyau, y compris celles créées pour les interrogations, le traitement du signal et les espaces de noms.
    • Ajout de la prise en charge de la planification asymétrique de la liaison des tâches aux cœurs de processeur sur les architectures dans lesquelles certains processeurs permettent l'exécution de tâches 32 bits et certains fonctionnent uniquement en mode 64 bits (par exemple, ARM). Le nouveau mode vous permet de prendre en compte uniquement les processeurs prenant en charge les tâches 32 bits lors de la planification de tâches 32 bits.
    • L'interface d'E/S asynchrone io_uring prend désormais en charge l'ouverture de fichiers directement dans la table d'index de fichiers fixes, sans utiliser de descripteur de fichier, ce qui permet d'accélérer considérablement certains types d'opérations, mais va à l'encontre du processus Unix traditionnel d'utilisation de descripteurs de fichiers. pour ouvrir des fichiers.

      io_uring pour le sous-système BIO (Block I/O Layer) implémente un nouveau mécanisme de recyclage (« recyclage BIO »), qui réduit la surcharge dans le processus de gestion de la mémoire interne et augmente le nombre d'opérations d'E/S traitées par seconde d'environ 10 % . io_uring ajoute également la prise en charge des appels système mkdirat(), symlinkat() et linkat().

    • Pour les programmes BPF, la possibilité de demander et de traiter des événements de minuterie a été implémentée. Un itérateur pour les sockets UNIX a été ajouté et la possibilité d'obtenir et de définir des options de socket pour setsockopt a été implémentée. Le dumper BTF prend désormais en charge les données saisies.
    • Sur les systèmes NUMA dotés de différents types de mémoire dont les performances diffèrent, lorsque l'espace libre est épuisé, les pages de mémoire expulsées sont transférées de la mémoire dynamique (DRAM) vers la mémoire permanente plus lente (mémoire persistante) au lieu de supprimer ces pages. Des tests ont montré que de telles tactiques améliorent généralement les performances de ces systèmes. NUMA offre également la possibilité d'allouer des pages de mémoire à un processus à partir d'un ensemble sélectionné de nœuds NUMA.
    • Pour l'architecture ARC, la prise en charge des tables de pages mémoire à trois et quatre niveaux a été implémentée, ce qui permettra davantage la prise en charge des processeurs ARC 64 bits.
    • Pour l'architecture s390, la possibilité d'utiliser le mécanisme KFENCE pour détecter les erreurs lors de l'utilisation de la mémoire a été implémentée et la prise en charge du détecteur de condition de concurrence critique KCSAN a été ajoutée.
    • Ajout de la prise en charge de l'indexation de la liste des messages générés via printk(), vous permettant de récupérer tous ces messages en même temps et de suivre les modifications dans l'espace utilisateur.
    • mmap() a supprimé la prise en charge de l'option VM_DENYWRITE et le code du noyau a été supprimé de l'utilisation du mode MAP_DENYWRITE, ce qui a réduit le nombre de situations conduisant au blocage des écritures dans un fichier avec l'erreur ETXTBSY.
    • Un nouveau type de contrôles, « Sondes d'événements », a été ajouté au sous-système de traçage, qui peut être attaché aux événements de traçage existants, définissant ainsi votre propre format de sortie.
    • Lors de la construction du noyau à l'aide du compilateur Clang, l'assembleur par défaut du projet LLVM est désormais utilisé.
    • Dans le cadre d'un projet visant à débarrasser le noyau du code qui conduit à l'émission d'avertissements par le compilateur, une expérience a été réalisée avec le mode « -Werror » activé par défaut, dans lequel les avertissements du compilateur sont traités comme des erreurs. En préparation de la version 5.15, Linus a commencé à accepter uniquement les modifications qui n'entraînaient pas d'avertissements lors de la construction du noyau et activaient la construction avec "-Werror", mais ont ensuite convenu qu'une telle décision était prématurée et a retardé l'activation de "-Werror" par défaut. . L'inclusion de l'indicateur « -Werror » lors de l'assemblage est contrôlée à l'aide du paramètre WERROR, qui est défini par défaut sur COMPILE_TEST, c'est-à-dire Pour l'instant, il n'est activé que pour les versions de test.
  • Virtualisation et sécurité
    • Un nouveau gestionnaire dm-ima a été ajouté à Device Mapper (DM) avec la mise en œuvre d'un mécanisme de certification à distance basé sur le sous-système IMA (Integrity Measurement Architecture), qui permet à un service externe de vérifier l'état des sous-systèmes du noyau pour garantir leur authenticité. . En pratique, dm-ima vous permet de créer des stockages à l'aide de Device Mapper liés à des systèmes cloud externes, dans lesquels la validité de la configuration cible DM lancée est vérifiée à l'aide d'IMA.
    • prctl() implémente une nouvelle option PR_SPEC_L1D_FLUSH, qui, lorsqu'elle est activée, amène le noyau à vider le contenu du cache de premier niveau (L1D) à chaque fois qu'un changement de contexte se produit. Ce mode permet, de manière sélective pour les processus les plus importants, de mettre en œuvre une protection supplémentaire contre l'utilisation d'attaques par canal secondaire effectuées pour déterminer les données déposées dans le cache à la suite de vulnérabilités causées par l'exécution spéculative d'instructions dans le CPU. Le coût de l'activation de PR_SPEC_L1D_FLUSH (non activé par défaut) constitue une pénalité de performances importante.
    • Il est possible de construire le noyau avec l'ajout de l'indicateur « -fzero-call-used-regs=used-gpr » à GCC, qui garantit que tous les registres sont réinitialisés à zéro avant de rendre le contrôle à la fonction. Cette option vous permet de vous protéger contre les fuites d'informations des fonctions et de réduire de 20 % le nombre de blocs adaptés à la création de gadgets ROP (Return-Oriented Programming) dans les exploits.
    • La possibilité de créer des noyaux pour l'architecture ARM64 sous forme de clients pour l'hyperviseur Hyper-V a été implémentée.
    • Un nouveau cadre de développement de pilotes « VDUSE » est proposé, qui permet d'implémenter des périphériques de bloc virtuels dans l'espace utilisateur et d'utiliser Virtio comme moyen de transport pour l'accès depuis les systèmes invités.
    • Ajout du pilote Virtio pour le bus I2C, permettant d'émuler des contrôleurs I2C en mode paravirtualisation à l'aide de backends séparés.
    • Ajout du pilote Virtio gpio-virtio pour permettre aux invités d'accéder aux lignes GPIO fournies par le système hôte.
    • Ajout de la possibilité de restreindre l'accès aux pages mémoire pour les pilotes de périphériques avec prise en charge DMA sur les systèmes sans MMU d'E/S (unité de gestion de mémoire).
    • L'hyperviseur KVM a la capacité d'afficher des statistiques sous forme d'histogrammes linéaires et logarithmiques.
  • Sous-système réseau
    • Le module ksmbd a été ajouté au noyau avec l'implémentation d'un serveur de fichiers utilisant le protocole SMB3. Le module complète l'implémentation du client SMB précédemment disponible dans le noyau et, contrairement au serveur SMB exécuté dans l'espace utilisateur, est plus efficace en termes de performances, de consommation de mémoire et d'intégration avec les fonctionnalités avancées du noyau. Ksmbd est présenté comme une extension Samba hautes performances prête à être intégrée qui s'intègre aux outils et bibliothèques Samba selon les besoins. Les capacités de ksmbd incluent une prise en charge améliorée de la technologie de mise en cache de fichiers distribués (baux SMB) sur les systèmes locaux, ce qui peut réduire considérablement le trafic. À l'avenir, ils prévoient d'ajouter la prise en charge du RDMA (« smbdirect ») et des extensions de protocole liées à l'augmentation de la fiabilité du cryptage et de la vérification à l'aide de signatures numériques.
    • Le client CIFS ne prend plus en charge NTLM et les algorithmes d'authentification plus faibles basés sur DES utilisés dans le protocole SMB1.
    • La prise en charge de la multidiffusion est implémentée dans la mise en œuvre de ponts réseau pour les VLAN.
    • Le pilote de liaison, utilisé pour agréger les interfaces réseau, a ajouté la prise en charge du sous-système XDP (eXpress Data Path), qui vous permet de manipuler les paquets réseau avant qu'ils ne soient traités par la pile réseau du noyau Linux.
    • La pile sans fil mac80211 prend en charge 6 GHZ STA (autorisation temporaire spéciale) en modes LPI, SP et VLP, ainsi que la possibilité de définir un TWT (Target Wake Time) individuel en mode point d'accès.
    • Ajout de la prise en charge du MCTP (Management Component Transport Protocol), utilisé pour l'interaction entre les contrôleurs de gestion et les périphériques associés (processeurs hôtes, périphériques, etc.).
    • 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 prise en charge des adresses en mode fullmesh.
    • Des gestionnaires de flux réseau encapsulés dans le protocole SRv6 (Segment Routing IPv6) ont été ajoutés à netfilter.
    • Ajout de la prise en charge de sockmap pour les sockets de streaming Unix.
  • équipement
    • Le pilote amdgpu prend en charge les APU Cyan Skillfish (équipés de GPU Navi 1x). L'APU Yellow Carp prend désormais en charge les codecs vidéo. Prise en charge améliorée du GPU Aldebaran. Ajout de nouveaux identifiants de carte basés sur GPU Navi 24 « Beige Goby » et RDNA2. Une implémentation améliorée des écrans virtuels (VKMS) est proposée. La prise en charge de la surveillance de la température des puces AMD Zen 3 a été implémentée.
    • Le pilote amdkfd (pour les GPU discrets, tels que Polaris) implémente un gestionnaire de mémoire virtuelle partagée (SVM, mémoire virtuelle partagée) basé sur le sous-système HMM (Heterogeneous memory management), qui permet l'utilisation de périphériques dotés de leurs propres unités de gestion de mémoire (MMU , unité de gestion de mémoire), qui peut accéder à la mémoire principale. En particulier, en utilisant HMM, vous pouvez organiser un espace d'adressage partagé entre le GPU et le CPU, dans lequel le GPU peut accéder à la mémoire principale du processus.
    • Le pilote i915 pour les cartes vidéo Intel étend l'utilisation du gestionnaire de mémoire vidéo TTM et inclut la possibilité de gérer la consommation d'énergie basée sur GuC (Graphics micro Controller). Les préparatifs ont commencé pour la mise en œuvre de la prise en charge de la carte graphique Intel ARC Alchemist et du GPU Intel Xe-HP.
    • Le pilote nouveau implémente le contrôle du rétroéclairage pour les panneaux eDP à l'aide de DPCD (DisplayPort Configuration Data).
    • Ajout de la prise en charge des GPU Adreno 7c Gen 3 et Adreno 680 au pilote msm.
    • Le pilote IOMMU est implémenté pour la puce Apple M1.
    • Ajout d'un pilote audio pour les systèmes basés sur les APU AMD Van Gogh.
    • Le pilote Realtek R8188EU a été ajouté à la branche intermédiaire, qui remplace l'ancienne version du pilote (rtl8188eu) pour les puces sans fil Realtek RTL8188EU 802.11 b/g/n.
    • Le pilote ocp_pt est inclus pour la carte PCIe développée par Meta (Facebook) avec la mise en œuvre d'une horloge atomique miniature et d'un récepteur GNSS, qui peuvent être utilisés pour organiser le fonctionnement de serveurs de synchronisation d'heure exacte distincts.
    • Ajout de la prise en charge des smartphones Sony Xperia 10II (Snapdragon 665), Xiaomi Redmi 2 (Snapdragon MSM8916), Samsung Galaxy S3 (Snapdragon MSM8226), Samsung Gavini/Codina/Kyle.
    • Ajout de la prise en charge des kits de développement ARM SoС et NVIDIA Jetson TX2 NX, Sancloud BBE Lite, PicoITX, DRC02, SolidRun SolidSense, SKOV i.MX6, Nitrogen8, Traverse Ten64, GW7902, Microchip SAMA7, ualcomm Snapdragon SDM636/SM8150, Renesas R-Car H3e cartes -2G/M3e-2G, Marvell CN913x, ASpeed ​​​​AST2600 (cartes serveurs Facebook Cloudripper, Elbert et Fuji), 4KOpen STiH418-b2264.
    • Ajout de la prise en charge des panneaux LCD Gopher 2b, EDT ETM0350G0DH6/ETMV570G2DHU, LOGIC Technologies LTTD800480070-L6WH-RT, Multi-Innotechnology MI1010AIT-1CP1, Innolux EJ030NA 3.0, ilitek ili9341, E Ink VB3300-KCA, Samsung ATNA33XC20 7430 , Samsung DB2401, puces larges WSXNUMX .
    • Ajout du pilote LiteETH avec prise en charge des contrôleurs Ethernet utilisés dans les SoC logiciels LiteX (pour FPGA).
    • Une option de faible latence a été ajoutée au pilote USB-Audio pour contrôler l'inclusion du fonctionnement en mode de latence minimale. Également ajouté l'option quirk_flags pour transmettre les paramètres spécifiques à l'appareil.

Dans le même temps, la Fondation latino-américaine du logiciel libre a créé une version du noyau entièrement libre 5.15 - Linux-libre 5.15-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ée par le fabricant. La nouvelle version implémente l'affichage d'un message dans le journal concernant la fin du nettoyage. Les problèmes de génération de packages à l'aide de mkspec ont été corrigés, la prise en charge des packages snap a été améliorée. Suppression de certains avertissements affichés lors du traitement du fichier d'en-tête firmware.h. Autorisé l'affichage de certains types d'avertissements (« format-extra-args », commentaires, fonctions et variables inutilisées) lors de la construction en mode « -Werror ». Ajout du nettoyage du pilote gehc-achc. Code de nettoyage de blob mis à jour dans les pilotes et sous-systèmes Adreno, Btusb, Btintel, brcmfmac, aarch64 qcom. Le nettoyage des drivers prism54 (supprimé) et rtl8188eu (remplacé par r8188eu) a été arrêté.

Source: opennet.ru

Ajouter un commentaire