Après deux mois de développement, Linus Torvalds a annoncé la sortie du noyau . Parmi les changements les plus notables, on trouve : une nouvelle implémentation du système de fichiers exFAT, un module bareudp pour créer des tunnels UDP, une protection basée sur l'authentification des pointeurs pour ARM64, la possibilité d'attacher des programmes BPF aux gestionnaires LSM, une nouvelle implémentation de Curve25519, un détecteur « split-lock », la compatibilité BPF avec PREEMPT_RT, la suppression de la limite de 80 caractères pour les lignes de code, la prise en compte des températures CPU dans le planificateur de tâches, la possibilité d'utiliser clone() pour créer des processus dans un autre cgroup, une protection contre l'écriture en mémoire via userfaultfd.
La nouvelle version comprend 15033 corrections de la part de 1961 développeurs,
la taille du patch est de 39 Mo (les modifications ont touché 11590 fichiers, 570560 lignes de code ont été ajoutées,
297401 lignes ont été supprimées). Environ 41 % de tous les changements présentés dans la version 5.7
sont liés aux pilotes de périphériques, environ 16 % des changements concernent
la mise à jour du code spécifique aux architectures matérielles, 13 %
se rapportent à la pile réseau, 4 % aux systèmes de fichiers et 4 % aux internes.
du noyau.
:
- Sous-système de disque, entrée/sortie et systèmes de fichiers
- Une nouvelle implémentation du pilote exFAT a été ajoutée, sur la base de code actuelle « sdfat » (2.x), développée par Samsung pour ses smartphones Android. Le pilote précédemment ajouté au noyau était basé sur un code obsolète de Samsung (version 1.2.9) et était en retard par rapport à la nouvelle version d'environ 10 % en termes de performances. Rappelons que l'ajout du support exFAT au noyau a été rendu possible après que Microsoft a rendu les spécifications publiques et a permis l'utilisation gratuite des brevets exFAT dans Linux.
- Dans Btrfs, une nouvelle commande ioctl() — BTRFS_IOC_SNAP_DESTROY_V2 — a été mise en œuvre pour permettre la suppression d'une sous-partie par son identifiant. Un support complet du clonage des extents en ligne a été assuré. Le nombre de points d'annulation des opérations de redistribution a été élargi, ce qui a permis de réduire les temps d'attente lors de l'exécution de la commande ‘balance cancel’. La détermination des liens inverses sur les extents a été accélérée (par exemple, le temps d'exécution du scénario de test a été réduit d'une heure à quelques minutes). La possibilité d'attacher à chaque inode un arbre d'extents de fichier a été ajoutée. Le schéma de verrouillage utilisé lors de l'écriture dans des sous-parties et lors de l'exclusion NOCOW a été retravaillé. L'efficacité de l'exécution de fsync pour les plages a été améliorée.
- Dans XFS, la vérification des métadonnées et l'exécution de fsck pour les partitions actives ont été améliorées. Une bibliothèque pour la reconstruction des structures btree a été proposée, qui sera utilisée à l'avenir pour la révision de xfs_repair et l'implémentation de la possibilité de restauration sans démontage de la partition.
- Dans CIFS, un support expérimental pour le placement des partitions d'échange dans des stockages SMB3 a été ajouté. Des extensions POSIX dans readdir définies dans la spécification SMB3.1.1 ont été mises en œuvre. La performance d'écriture pour des pages de 64 Ko a été améliorée en activant le mode cache=strict et en utilisant les versions de protocole 2.1+.
- Le système de fichiers EXT4 a été migré de bmap et iopoll vers l'utilisation de iomap.
- Dans F2FS, un support optionnel pour la compression des données utilisant l'algorithme zstd a été implémenté. Par défaut, l'algorithme LZ4 est utilisé pour la compression. La commande « chattr -c commit » a été ajoutée. L'affichage de l'heure de montage a été assuré. Ajout de l'ioctl F2FS_IOC_GET_COMPRESS_BLOCKS pour obtenir des informations sur le nombre de blocs compressés. Des données sur la compression ont été ajoutées, affichées via statx.
- Dans le système de fichiers Ceph, il est désormais possible d'exécuter localement des opérations de création et de suppression (unlink) de fichiers sans attendre de réponse du serveur (fonctionnement en mode asynchrone). Ce changement permet d'augmenter considérablement la performance lors de l'utilisation de l'outil rsync.
- Dans OVERLAYFS, il est désormais possible d'utiliser virtiofs comme système de fichiers de niveau supérieur.
- le code de parcours des chemins dans VFS, le code d'analyse des liens symboliques a été refait et le parcours des points de montage a été unifié.
- Dans la sous-système scsi, aux utilisateurs non privilégiés autorisée l'exécution de commandes ZBC.
- Dans dm_writecache la possibilité de nettoyage progressif du cache en fonction du paramètre max_age, qui définit la durée de vie maximale d'un bloc.
- Dans dm_integrity, le support de l'opération « discard » a été ajouté.
- Dans null_blk, un support pour la simulation d'erreurs afin de simuler des défaillances lors des tests a été ajouté.
- la possibilité d'envoyer des notifications udev sur le changement de taille d'un périphérique bloc a été ajoutée.
- Sous-système réseau
- Dans Netfilter, des optimisations ont été intégrées, qui accélèrent considérablement le traitement de grandes listes d'appariements (nftables set), où une vérification des combinaisons de sous-réseaux, de ports réseau, de protocoles et d'adresses MAC est requise.
Optimisations Dans le module nft_set_pipapo (PIle PAcket POlicies), qui résout la tâche d'adéquation du contenu des paquets avec des plages d'états de champs appliquées dans les règles de filtrage, telles que les plages d'IP et de ports réseau (nft_set_rbtree et nft_set_hash manipulent l'adéquation des intervalles et le reflet direct des valeurs). La version pipapo vectorisée grâce aux instructions AVX2 de 256 bits sur un système avec un processeur AMD Epyc 7402 a montré un gain de performance de 420 % lors du traitement de 30 000 enregistrements, incluant des paires port-protocole. Le gain lors de l'adéquation d'une paire de sous-réseau et de numéro de port en analysant 1 000 enregistrements était de 87 % pour IPv4 et de 128 % pour IPv6. - Le module bareudp, permettant d'encapsuler divers protocoles L3 dans un tunnel UDP, tels que MPLS, IP et NSH.
- L'intégration des composants MPTCP (MultiPath TCP) a été poursuivie, une extension du protocole TCP pour organiser le fonctionnement d'une connexion TCP avec la livraison de paquets simultanément par plusieurs chemins à travers différentes interfaces réseau, attachées à différentes adresses IP.
- Prise en charge des mécanismes d'accélération matérielle de l'encapsulation des trames Ethernet dans 802.11 (Wi-Fi).
- Lors du déplacement d'un appareil d'un espace de noms réseau à un autre, les droits d'accès et le propriétaire des fichiers correspondants dans sysfs ont été ajustés.
- Il est désormais possible d'utiliser le drapeau SO_BINDTODEVICE même pour les utilisateurs qui n'ont pas les droits root.
- La troisième partie des correctifs a été acceptée, traduisant les outils ethtool de ioctl() vers l'utilisation de l'interface netlink. La nouvelle interface facilite l'ajout d'extensions, améliore le traitement des erreurs, permet l'envoi de notifications lors des changements d'état, simplifie l'interaction entre le noyau et l'espace utilisateur et réduit le nombre de listes nommées synchronisées.
- Ajout de la possibilité d'utiliser des accélérateurs matériels spéciaux pour effectuer des opérations de suivi de connexions.
- Dans netfilter un crochet pour connecter des classificateurs de paquets sortants (egress), complétant ainsi le crochet précédemment présent pour les paquets entrants (ingress).
- Dans Netfilter, des optimisations ont été intégrées, qui accélèrent considérablement le traitement de grandes listes d'appariements (nftables set), où une vérification des combinaisons de sous-réseaux, de ports réseau, de protocoles et d'adresses MAC est requise.
- Virtualisation et sécurité
- Ajout d'une réalisation matérielle de l'authentification des pointeurs (), qui utilise des instructions CPU ARM64 spécialisées pour protéger contre les attaques utilisant des techniques de programmation orientée retour (ROP), où l'attaquant n'essaie pas de placer son code en mémoire, mais utilise des morceaux d'instructions machine déjà présents dans les bibliothèques chargées, se terminant par une instruction de retour de contrôle. La protection consiste à utiliser des signatures numériques pour vérifier les adresses de retour au niveau du noyau. La signature est conservée dans les bits supérieurs non utilisés du pointeur lui-même. Contrairement aux implémentations logicielles, la création et la vérification des signatures numériques sont effectuées à l'aide d'instructions CPU spéciales.
- la possibilité de protéger une zone mémoire contre l'écriture à l'aide de l'appel système userfaultfd(), conçu pour gérer les fautes de page (accès à des pages mémoire non allouées) dans l'espace utilisateur. L'idée est d'utiliser userfaultfd() pour surveiller les violations d'accès aux pages marquées comme protégées contre l'écriture et d'appeler un gestionnaire qui peut réagir à de telles tentatives d'écriture (par exemple, pour gérer les changements lors de la création de snapshots live des processus en cours d'exécution, figeant l'état lors d'un vidage de mémoire sur disque, réalisant de la mémoire partagée, surveillant les changements en mémoire). La fonctionnalité à l'utilisation de mprotect() en conjonction avec le gestionnaire de signaux SIGSEGV, mais fonctionne de manière nettement plus rapide.
- Dans SELinux, le paramètre « checkreqprot » a été déclaré obsolète, permettant de désactiver la vérification de la protection mémoire lors du traitement des règles (cela permettait l'utilisation de zones mémoire exécutables, indépendamment des prescriptions établies dans les règles). Les liens symboliques kernfs sont autorisés à hériter du contexte des répertoires parents.
- Comprend le modèle , permettant de rattacher des programmes BPF à n'importe quel hook LSM dans le noyau. Ce changement permet de créer des modules LSM (Linux Security Module) sous forme de programmes BPF pour répondre aux tâches d'audit et de contrôle d'accès mandaté.
- optimisation des performances de /dev/random grâce au transfert par lots des valeurs CRNG au lieu d'appels distincts des instructions RNG. Le fonctionnement de getrandom et /dev/random a été amélioré sur les systèmes ARM64, offrant des instructions RNG.
- L'implémentation de la courbe elliptique Curve25519 par une variante de la bibliothèque , pour laquelle preuve mathématique de la vérification formelle de la fiabilité.
- mécanisme d'information sur les pages de mémoire libres. Grâce à ce mécanisme, les systèmes invités peuvent transmettre au système hôte des informations sur les pages qui ne sont plus utilisées, et le système hôte peut récupérer ces pages.
- dans vfio/pci prise en charge de SR-IOV (Single-Root I/O Virtualization).
- Mémoire et services système
- De 80 à 100 caractères limite de longueur maximale de ligne dans les textes sources. Les développeurs sont toujours encouragés à se limiter à 80 caractères par ligne, mais cela n'est plus une limite stricte. De plus, dépasser la limite de taille de ligne entraînera désormais l'affichage d'un avertissement lors de la compilation uniquement si l'outil checkpatch est exécuté avec l'option « —strict ». Ce changement permettra de ne pas distraire les développeurs de avec des espaces et de se sentir plus à l'aise lors de l'alignement du code, ainsi que une fragmentation excessive des lignes, à la compréhension du code et à la recherche.
- prise en charge du mode de démarrage mixte EFI, permettant de démarrer un noyau 64 bits à partir d'un firmware 32 bits, exécuté sur un CPU 64 bits, sans recourir à un chargeur de démarrage spécialisé.
- système de détection et de débogage des verrouillages partagés (««), qui se produisent lors de l'accès à des données non alignées en mémoire en raison du fait qu'en exécutant une instruction atomique, les données traversent deux lignes cache du CPU. De tels verrouillages entraînent une chute significative des performances (1000 cycles plus lents qu'une opération atomique avec des données se trouvant dans une seule ligne cache). Selon le paramètre de démarrage « split_lock_detect », le noyau peut détecter à la volée de tels verrouillages et afficher des avertissements ou envoyer un signal SIGBUS à l'application ayant provoqué le verrouillage.
- Dans le planificateur de tâches, un suivi des capteurs de température a été mis en place () et un suivi de la surchauffe lors de la planification des tâches a été mis en œuvre. En utilisant les statistiques fournies, le gestionnaire de température (thermal governor) peut ajuster la fréquence maximale du CPU en cas de surchauffe, et le planificateur de tâches prend désormais en compte la réduction de la puissance de calcul due à cette réduction de fréquence lors de la planification du lancement des tâches (auparavant, le planificateur réagissait au changement de fréquence avec un certain retard, prenant des décisions pendant un certain temps sur la base d'hypothèses surévaluées concernant les ressources de calcul disponibles).
- Dans le planificateur de tâches, sont impliqués de suivi de la charge, permettant une évaluation correcte de la charge, indépendamment de la fréquence actuelle de fonctionnement du CPU. Ce changement permet de prévoir plus précisément le comportement des tâches dans des conditions de variation dynamique de la tension et de la fréquence du CPU. Par exemple, une tâche qui consommait 1/3 des ressources CPU à une fréquence de 1000 MHz consommera 2/3 des ressources avec une réduction de fréquence à 500 MHz, ce qui précédemment créait une fausse supposition quant à un fonctionnement à pleine puissance (c'est-à-dire que les tâches pour le planificateur semblaient plus volumineuses uniquement en raison de la réduction de fréquence, ce qui entraînait des décisions incorrectes dans le gestionnaire cpufreq schedutil).
- Le pilote Intel P-state, responsable de la sélection des modes de performance, a été modifié pour utiliser .
- Il a été rendu possible d'utiliser le sous-système BPF en faisant fonctionner le noyau en mode temps réel (PREEMPT_RT). Auparavant, l'activation de PREEMPT_RT exigeait la désactivation de BPF.
- Un nouveau type de programmes BPF a été ajouté — BPF_MODIFY_RETURN, qui peuvent être attachés à une fonction dans le noyau et modifier la valeur retournée par cette fonction.
- Ajouté l'utilisation de l'appel système clone3() pour créer un processus dans un cgroup différent de celui du parent, permettant au processus parent d'appliquer des restrictions et d'activer le comptage immédiatement après la création d'un nouveau processus ou thread. Par exemple, un gestionnaire de services peut directement allouer de nouveaux services dans des cgroup séparés, et les nouveaux processus placés dans des cgroup « gelés » seront immédiatement arrêtés.
- dans Kbuild prend en charge la variable d'environnement « LLVM=1 » pour passer aux outils Clang/LLVM lors de la compilation du noyau. Les exigences pour la version de binutils (2.23) ont été élevées.
- Une section /sys/kernel/debug/kunit/ avec les résultats des tests kunit a été ajoutée à debugfs.
- Un paramètre de chargement du noyau pm_debug_messages a été ajouté (analogique à /sys/power/pm_debug_messages), incluant la sortie d'informations de débogage sur le fonctionnement du système de gestion de l'alimentation (utile pour le débogage des problèmes liés aux modes veille et attente).
- Dans l'interface d'entrée/sortie asynchrone ajout de la prise en charge et .
- Le profilage cgroup a été amélioré grâce à l'outil perf. Auparavant, perf ne pouvait profiler les tâches que dans un cgroup spécifique et ne pouvait pas déterminer à quel cgroup appartenait l'échantillon actuel. Maintenant, perf obtient des informations sur le cgroup pour chaque échantillon, permettant de profiler plusieurs cgroups et d'appliquer un tri par
cgroup dans les rapports. - Dans cgroupfs, le pseudo-système de fichiers pour gérer les cgroups, un support pour les attributs étendus (xattrs) a été ajouté, permettant par exemple de laisser des informations supplémentaires pour les gestionnaires dans l'espace utilisateur.
- Dans le contrôleur de mémoire cgroup la prise en charge de la protection récursive de la valeur «memory.low», régulant la quantité minimale de mémoire vive fournie aux membres du groupe. Lors du montage de l'arborescence cgroup avec l'option «memory_recursiveprot», la valeur «memory.low» fixée pour les nœuds inférieurs sera automatiquement distribuée à tous les nœuds enfants.
- framework Uacce (Unified/User-space-access-intended Accelerator Framework) pour le partage des adresses virtuelles (SVA, Shared Virtual Addressing) entre le CPU et les périphériques, permettant aux accélérateurs matériels d'accéder aux structures de données dans le CPU principal.
- Architectures matérielles
- Pour l'architecture ARM, la possibilité de retirer de la mémoire à chaud a été mise en œuvre.
- Pour l'architecture RISC-V, la prise en charge du branchement et du retrait à chaud du CPU (CPU hotplug) a été ajoutée. Pour les RISC-V 32 bits, une implémentation eBPF JIT a été réalisée.
- La possibilité d'utiliser des systèmes ARM 32 bits pour exécuter des environnements invités KVM a été supprimée.
- La mise en œuvre 'fictive' de NUMA pour l'architecture s390 a été supprimée, car aucun scénario d'utilisation n'a été trouvé permettant d'améliorer les performances.
- Pour ARM64, un support de l'extension AMU (Activity Monitors Unit), défini dans ARMv8.4 et fournissant des compteurs de performance, a été ajouté pour le calcul des coefficients de correction de fréquence dans le planificateur de tâches.
- Matériel
- prise en charge des appareils vDPA utilisant un canal de communication conforme aux spécifications virtio. Les appareils vDPA peuvent être du matériel physiquement connecté ou des dispositifs virtuels émulés par logiciel.
- Dans le sous-système GPIO une nouvelle commande ioctl() pour surveiller les modifications, permettant de notifier le processus d'un changement d'état d'une quelconque ligne GPIO. Par exemple, l'utilisation de la nouvelle commande l'outil gpio-watch.
- Dans le pilote DRM i915 pour les cartes graphiques Intel par défaut prise en charge des puces Tigerlake (« Gen12 ») et ajout d'un support initial pour le contrôle des éclairages OLED. Amélioration de la prise en charge des puces Ice Lake, Elkhart Lake, Baytrail et Haswell.
- Dans le pilote amdgpu la possibilité de charger des firmwares dans la puce USBC pour les ASIC. Amélioration de la prise en charge des puces AMD Ryzen 4000 « Renoir ». Ajout du support pour le contrôle des panneaux OLED. Affichage de l'état du firmware dans debugfs.
- Dans le pilote DRM vmwgfx pour les systèmes de virtualisation VMware, ajout de la possibilité d'utiliser OpenGL 4 dans les systèmes invités (précédemment, seul OpenGL 3.3 était pris en charge).
- Ajout d'un nouveau pilote DRM tidss pour le système d'affichage de la plate-forme TI Keystone.
- Ajout de pilotes pour des panneaux LCD : Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101II01D-CT, Frida FRD350H54004.
- Dans le système de gestion de l'alimentation prise en charge de la plate-forme Intel Jasper Lake (JSL) basée sur Atom.
- Ajout de la prise en charge de l'ordinateur portable Pinebook Pro basé sur Rockchip RK3399, de la tablette Pine64 PineTab et du smartphone basé sur Allwinner A64.
- Ajout de la prise en charge de nouveaux codecs audio et puces :
Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc. - Ajout de la prise en charge des cartes ARM et des plateformes Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron « sl28 », 11 variantes de la carte i.MX6 TechNexion Pico, trois nouvelles variantes Toradex Colibri, Samsung S7710 Galaxy Xcover 2 basé sur ST-Ericsson u8500, DH Electronics DHCOM SoM et PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.
Source : opennet.ru
