Après deux mois de développement, Linus Torvalds a annoncé la sortie du noyau . Parmi les changements les plus notables : la restriction de l'importation de symboles à partir de modules propriétaires vers des modules GPL, l'accélération des opérations de commutation de contexte grâce à l'instruction processeur FSGSBASE, la prise en charge de la compression de l'image du noyau avec Zstd, la refonte de l'attribution des priorités des threads dans le noyau, le support du protocole PRP (Parallel Redundancy Protocol), une planification tenant compte de la bande passante dans le planificateur deadline, le préconditionnement des pages mémoire, le drapeau capability CAP_CHECKPOINT_RESTOR, l'appel système close_range(), l'amélioration des performances de dm-crypt, la suppression du code pour les systèmes invités 32 bits Xen PV, un nouveau mécanisme de gestion de la mémoire slab, l'option « rescue » dans Btrfs, et la prise en charge du chiffrement en ligne dans ext4 et F2FS.
La nouvelle version comprend 16074 corrections de 2011 développeurs,
la taille du patch est de 62 Mo (les modifications ont touché 14548 fichiers, ajoutant 782155 lignes de code et supprimant 314792 lignes). Environ 45 % de tout ce qui est présenté dans 5.9
sont liés aux pilotes de périphériques, environ 15 % des changements concernent
la mise à jour du code spécifique aux architectures matérielles, 13 %
est lié à la pile réseau, 3 % aux systèmes de fichiers et 3 % à l'interne.
du noyau.
:
- Mémoire et services système
- de la protection contre l'utilisation de couches GPL pour lier des pilotes propriétaires à des composants du noyau, qui sont exportés uniquement pour des modules sous licence GPL. Le drapeau TAINT_PROPRIETARY_MODULE est désormais hérité dans tous les modules qui importent des symboles de modules avec ce drapeau. Si un module GPL tente d'importer des symboles d'un module non-GPL, alors ce module GPL héritera de l'étiquette TAINT_PROPRIETARY_MODULE et ne pourra pas accéder aux composants du noyau disponibles uniquement pour des modules sous licence GPL, même si le module avait précédemment importé des symboles de la catégorie « gplonly ». Le blocage inversé (exportation uniquement de EXPORT_SYMBOL_GPL dans les modules ayant importé EXPORT_SYMBOL_GPL), qui pourrait perturber le fonctionnement des pilotes propriétaires, n'est pas mis en œuvre (seul le drapeau du module propriétaire est hérité, mais pas le lien GPL).
- prise en charge du mécanisme kcompactd pour en arrière-plan, permettant d'augmenter le nombre de grandes pages de mémoire disponibles pour le noyau. Selon une estimation préliminaire, l'emballage en arrière-plan à coût minimal permet de réduire les latences lors de l'allocation de grandes pages de mémoire (huge-page) de 70 à 80 fois par rapport au mécanisme d'emballage utilisé précédemment, qui se déclenche au besoin (on-demand). Pour définir les limites de la fragmentation externe, que va gérer kcompactd, un sysctl vm.compaction_proactiveness a été ajouté.
- prise en charge de la compression de l'image du noyau à l'aide de l'algorithme (zstd) a été ajouté.
- Un support de l'instruction du processeur a été implémenté pour les systèmes x86. , permettant de lire et de modifier le contenu des registres FS/GS depuis l'espace utilisateur. Dans le noyau, FSGSBASE est utilisé pour accélérer les opérations de changement de contexte en évitant les opérations d'écriture MSR superflues pour GSBASE, tandis que dans l'espace utilisateur, cela permet d'éviter d'effectuer des appels système superflus pour modifier FS/GS.
- le paramètre « allow_writes », permettant d'interdire les modifications des registres MSR du processeur depuis l'espace utilisateur et de limiter l'accès au contenu de ces registres aux opérations de lecture, car modifier les MSR peut entraîner des problèmes. Par défaut, l'écriture n'est pas encore interdite, et la modification des MSR est reflétée dans le journal, mais à l'avenir, il est prévu de passer par défaut à un mode de lecture seule.
- Dans l'interface d'entrée/sortie asynchrone ajout du support complet des opérations asynchrones de lecture tamponnée, ne nécessitant pas l'utilisation des threads du noyau. Un support pour l'écriture est attendu dans la prochaine version.
- Dans le planificateur d'entrée/sortie deadline, la planification prenant en compte la bande passante, prendre des décisions correctes sur des systèmes asymétriques, tels que les systèmes ARM basés sur les architectures et big.LITTLE, combinant sur une même puce des cœurs CPU puissants et moins performants mais écoénergétiques. En particulier, le nouveau mode permet d'éviter les désaccords lors de la planification, lorsque le cœur CPU lent n'a pas les ressources nécessaires pour exécuter une tâche dans les délais.
- Le modèle de consommation d'énergie dans le noyau (Energy Model framework) couvre désormais non seulement le comportement de consommation d'énergie du CPU, mais aussi celui des périphériques.
- L'appel système close_range() a été implémenté, permettant à un processus de fermer un large éventail de descripteurs de fichiers ouverts en une seule opération.
- De la réalisation de la console texte et du pilote fbcon , permettant un défilement programmatique du texte vers l'arrière (CONFIG_VGACON_SOFT_SCROLLBACK) de plus que la capacité de la mémoire vidéo du mode texte VGA.
- un algorithme d'attribution des priorités pour les threads au sein du noyau. La nouvelle variante assure une meilleure cohérence à travers tous les sous-systèmes du noyau lors de l'attribution des priorités aux tâches en temps réel.
- Ajout de sysctl pour contrôler les paramètres de forçage de la fréquence du CPU pour les tâches en temps réel (par exemple, on peut changer à la volée le comportement lors de l'exécution des tâches en temps réel pour économiser de l'énergie après passage à l'alimentation par batterie ou sur des systèmes mobiles).
- Préparation pour la mise en œuvre du support de la technologie Transparent Huge Pages dans le cache de pages.
- Dans le mécanisme fanotify, de nouveaux drapeaux FAN_REPORT_NAME et FAN_REPORT_DIR_FID ont été implémentés pour transmettre des informations sur le nom parent et l'identifiant unique FID lors de la survenance d'événements de création, de suppression ou de déplacement d'éléments de répertoire et d'objets non liés aux répertoires.
- Pour les cgroups un nouveau contrôleur de répartition de la mémoire slab, qui se distingue par le transfert du suivi du slab du niveau des pages de mémoire au niveau des objets du noyau, ce qui permet de partager des pages slab entre différents cgroups, plutôt que de allouer des caches slab distincts pour chaque cgroup. L'approche proposée permet d'augmenter l'efficacité de l'utilisation du slab, de réduire de 30 à 45 % la taille de la mémoire utilisée pour le slab, de diminuer considérablement la consommation globale de mémoire par le noyau et de réduire la fragmentation de la mémoire.
- Dans le sous-système audio et , conformément aux recommandations pour l'utilisation d'une terminologie inclusive dans le noyau Linux, un nettoyage des termes non politiquement corrects a été effectué. Le code a été purgé de l'utilisation des mots « esclave », « maître », « liste noire » et « liste blanche ».
- Virtualisation et sécurité
- Lors de la compilation du noyau avec le compilateur Clang la possibilité de configuration (CONFIG_INIT_STACK_ALL_ZERO) pour l'initialisation automatique à zéro de toutes les variables stockées sur la pile (en spécifiant « -ftrivial-auto-var-init=zero » lors de la compilation).
- Dans le sous-système seccomp, lors de l'utilisation du mode de contrôle des processus en espace utilisateur, remplacements dans le processus suivi des descripteurs de fichiers pour une émulation complète des appels système conduisant à la création de descripteurs de fichiers. Cette fonctionnalité est nécessaire dans les systèmes de conteneurs isolés et dans la mise en œuvre du sandbox pour Chrome.
- Pour les architectures xtensa et csky, prise en charge de la restriction des appels système via le sous-système seccomp. Pour xtensa, un support supplémentaire a également été mis en œuvre pour le mécanisme d'audit.
- nouveau drapeau de capacité CAP_CHECKPOINT_RESTORE, permettant d'accorder l'accès aux fonctionnalités liées à la mise en pause et à la restauration de l'état des processus sans transfert de privilèges supplémentaires.
- Dans GCC 11, toutes les fonctionnalités nécessaires pour
l'outil de débogage KCSAN (Kernel Concurrency Sanitizer), destiné à la détection dynamique des states de concurrence au sein du noyau. Ainsi, KCSAN peut désormais être utilisé avec des noyaux compilés avec GCC. - Pour les CPU AMD Zen et les modèles plus récents, prise en charge de la technologie P2PDMA, qui permet d'utiliser DMA pour le transfert direct de données entre la mémoire de deux appareils connectés au bus PCI.
- Dans dm-crypt, un mode a été ajouté pour réduire les délais en effectuant le traitement cryptographique des données sans utiliser de files d'attente de travail. Ce mode est également nécessaire pour un fonctionnement correct avec (appareils avec des zones qui doivent être écrites séquentiellement en mettant à jour l'ensemble du groupe de blocs). Des efforts ont été faits pour améliorer le débit et réduire les délais dans dm-crypt.
- Le code de support pour les systèmes invités 32 bits fonctionnant en mode paravirtualisation sous l'hyperviseur Xen a été supprimé. Les utilisateurs de ces systèmes devraient migrer vers des noyaux 64 bits dans les environnements invités ou utiliser des modes de virtualisation complète (HVM) ou combinée (PVH) au lieu de la paravirtualisation (PV).
- Sous-système de disque, entrée/sortie et systèmes de fichiers
- Dans le système de fichiers Btrfs option de montage «rescue», unifiant l'accès à toutes les autres options de récupération. La prise en charge des options «alloc_start» et «subvolrootid» a été supprimée, et l'option «inode_cache» a été déclarée obsolète. Une optimisation des performances a été réalisée, rendant l'exécution des opérations fsync() particulièrement rapide. possibilité d'utiliser des types alternatifs de sommes de contrôle, autres que CRC32c.
- La possibilité d'utiliser le chiffrement en ligne (Inline Encryption) dans les systèmes de fichiers ext4 et F2FS, pour lequel une option de montage « inlinecrypt » est prévue. Le mode de chiffrement en ligne permet d'utiliser les mécanismes de chiffrement intégrés dans le contrôleur de stockage, qui effectuent le chiffrement et le déchiffrement transparents des entrées/sorties.
- Dans XFS vidage des inode (flush) en mode totalement asynchrone, ne bloquant pas les processus lors de l'exécution de l'opération de nettoyage de la mémoire. Un problème ancien avec les quotas, qui empêchait le suivi correct des avertissements concernant le dépassement de la limite douce et des restrictions sur le nombre d'inodes, a été résolu. L'implémentation du support DAX a été unifiée pour ext4 et xfs.
- Dans Ext4 préchargement des cartes de bits de distribution des blocs. Associée à une restriction de scan des groupes non initialisés, cette optimisation a permis de réduire le temps de montage des très grandes partitions.
- Dans F2FS ioctl F2FS_IOC_SEC_TRIM_FILE, permettant d'utiliser des commandes TRIM/discard pour remettre à zéro physiquement les données spécifiées dans un fichier, par exemple, pour supprimer des clés d'accès sans laisser de données résiduelles sur le support.
Dans F2FS également un nouveau mode de collecte des déchets GC_URGENT_LOW, fonctionnant de manière plus agressive grâce à l'exclusion de certaines vérifications de l'état de repos (idle) avant le démarrage du collecteur de déchets. - Dans bcache, la taille bucket_size pour les extents a été augmentée de 16 à 32 bits dans le cadre de la préparation de la possibilité de son application pour le cache des dispositifs zonés.
- Dans la sous-système SCSI, la possibilité d'utiliser le chiffrement en ligne basé sur les moyens matériels de chiffrement intégrés, fournis par les contrôleurs UFS ().
- Un nouveau paramètre de ligne de commande du noyau « debugfs », permettant de gérer la disponibilité du pseudo-système de fichiers homonyme.
- Dans le client NFSv4.2, le support des attributs de fichiers étendus (xattr) a été assuré.
- Dans dm-dust une interface pour afficher en une seule fois la liste de tous les blocs défectueux détectés sur le disque (« dmsetup message dust1 0 listbadblocks »).
- Pour md/raid5, un paramètre /sys/block/md1/md/stripe_size a été ajouté pour configurer la taille des blocs STRIPE.
- Pour les dispositifs de stockage NVMe le support des commandes pour la zonation du stockage (ZNS, NVM Express Zoned Namespace), permettant de diviser l'espace de stockage en zones constituant des groupes de blocs, pour un meilleur contrôle de l'emplacement des données sur le stockage.
- Sous-système réseau
- Dans Netfilter possibilité de rejet de paquets avant la vérification du routage (l'expression REJECT peut désormais être utilisée non seulement dans les chaînes INPUT, FORWARD et OUTPUT, mais aussi au stade PREROUTING pour icmp et tcp).
- Dans nftables possibilité d'auditer les événements liés aux modifications de configuration.
- Dans nftables via l'API netlink prise en charge des chaînes anonymes, dont le nom est assigné dynamiquement par le noyau. Lors de la suppression d'une règle associée à une chaîne anonyme, la chaîne elle-même est automatiquement supprimée.
- Dans BPF, prise en charge des itérateurs pour parcourir, filtrer et modifier les éléments de tableaux associatifs (map) sans copier les données dans l'espace utilisateur. Les itérateurs peuvent être utilisés pour les sockets TCP et UDP, permettant aux programmes BPF de parcourir les listes de sockets ouverts et d'en extraire les informations nécessaires.
- Un nouveau type de programmes BPF, BPF_PROG_TYPE_SK_LOOKUP, a été ajouté, qui s'exécute lorsque le noyau recherche un socket d'écoute approprié pour une connexion entrante. Grâce à ce type de programme BPF, il est possible de créer des gestionnaires prenant des décisions sur le socket auquel associer la connexion, sans être limité par l'appel système bind(). Par exemple, il est possible d'associer un socket à une plage d'adresses ou de ports. De plus, la fonction bpf_setsockopt() a été étendue avec le support du flag SO_KEEPALIVE et la possibilité d'établir des gestionnaires BPF_CGROUP_INET_SOCK_RELEASE, appelés lors de la libération d'un socket.
- Prise en charge du protocole (Parallel Redundancy Protocol), permettant une commutation transparente pour les applications sur Ethernet vers un canal de secours en cas de panne de n'importe quel composant du réseau.
- Dans la pile mac80211 prise en charge d'une négociation de canal en quatre étapes WPA/WPA2-PSK en mode point d'accès.
- Ajout de la possibilité de changer le planificateur qdisc (discipline de mise en file) pour utiliser par défaut l'algorithme de gestion des files d'attente de réseau FQ-PIE (Flow Queue PIE), visant à réduire l'impact négatif du tamponnement intermédiaire des paquets sur le matériel réseau en bordure (bufferbloat) dans les réseaux de modems câblés.
- De nouvelles fonctionnalités ont été ajoutées à MPTCP (MultiPath TCP), une extension du protocole TCP qui permet d'organiser des connexions TCP avec la livraison de paquets simultanément sur plusieurs parcours via différentes interfaces réseau liées à différentes adresses IP. Le support des cookies SYN, de DATA_FIN, de l'auto-configuration des buffers, du diagnostic des sockets et de l'utilisation des drapeaux REUSEADDR, REUSEPORT et V6ONLY dans setsockopt a été ajouté.
- Pour les tables de routage virtuelles VRF (Virtual Routing and Forwarding), permettant d'organiser le fonctionnement de plusieurs domaines de routage sur un seul système, un mode « strict » a été mis en œuvre. Dans ce mode, la table virtuelle ne peut être associée qu'à une table de routage qui n'est pas utilisée dans d'autres tables virtuelles.
- Dans le pilote sans fil ath11k le support de la fréquence 6GHz et .
- Matériel
- Le code pour le support de l'architecture UniCore, développée au centre microprocesseur de l'Université de Pékin et intégrée dans le noyau Linux en 2011, a été supprimé. Cette architecture est sans maintenance depuis 2014 et n'a pas de support dans GCC.
- Le support de l'architecture RISC-V a été mis en œuvre (interface debugfs pour analyser la couverture du code du noyau), kmemleak (système de détection des fuites de mémoire), protection de la pile, étiquettes de saut et opérations sans tick (multitâche indépendant des signaux du timer).
- Pour l'architecture PowerPC, le support des files d'attente pour spinlock a été mis en œuvre, ce qui a considérablement amélioré les performances en cas de conflits de verrouillage.
- Pour les architectures ARM et ARM64, le mécanisme de régulation de la fréquence du processeur (cpufreq governor) est activé par défaut, qui utilise directement les informations du planificateur de tâches pour décider de modifier la fréquence et peut immédiatement contacter les pilotes cpufreq pour ajuster instantanément la fréquence, adaptant ainsi les paramètres de fonctionnement du CPU à la charge actuelle.
- Dans le pilote DRM i915 pour les cartes graphiques Intel, le support des puces basées sur l'architecture micro et le support initial des cartes graphiques discrètes .
- Dans le pilote amdgpu, le support initial du GPU AMD (Navy Flounder) et (Sienna Cichlid). Le support des moteurs d'accélération de l'encodage et du décodage vidéo UVD/VCE pour les GPU Southern Islands (Radeon HD 7000) a été ajouté.
Une propriété pour faire pivoter l'affichage à 90, 180 ou 270 degrés a été ajoutée.Il est intéressant de noter que le pilote pour le GPU AMD le plus grand pilote dans le noyau — il compte environ 2,71 millions de lignes de code, soit environ 10 % de la taille totale du noyau (27,81 millions de lignes). Parmi celles-ci, 1,79 million de lignes sont dédiées aux fichiers d’en-tête générés automatiquement avec des données pour les registres GPU, tandis que le code en C représente 366 000 lignes (pour comparaison, le pilote Intel i915 inclut 209 000 lignes et Nouveau — 149 000).
- Dans le pilote Nouveau prise en charge de la vérification d'intégrité image par image via (Contrôles de redondance cyclique) dans les moteurs d'affichage des GPU NVIDIA. La mise en œuvre est basée sur la documentation fournie par NVIDIA.
- Ajout de pilotes pour les panneaux LCD : Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 et Xingbangda XBD599.
- Dans le sous-système audio ALSA, prise en charge d' (mode d'alimentation constante pour les appareils HDMI externes afin d'éliminer le délai au début de la lecture) et pour contrôler l'éclairage des boutons d'activation du microphone et de coupure du son, ainsi qu'une prise en charge du nouveau matériel, y compris le contrôleur .
- Ajout de la prise en charge des plates-formes ARM, des appareils et des plateformes : Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1, ASUS Google Nexus 7, Acer Iconia Tab A500, Qualcomm Snapdragon SDM630 (utilisé dans Sony Xperia 10, 10 Plus, XA2, XA2 Plus et XA2 Ultra), Jetson Xavier NX, Amlogic WeTek Core2, Aspeed EthanolX, cinq nouvelles cartes basées sur NXP i.MX6, MikroTik RouterBoard 3011, Xiaomi Libra, Microsoft Lumia 950, Sony Xperia Z5, MStar, Microchip Sparx5, Intel Keem Bay, Amazon Alpine v3, Renesas RZ/G2H.
Simultanément, la Fondation latino-américaine pour le logiciel libre
une variante — , débarrassé des éléments de micrologiciels et de pilotes contenant des composants non libres ou des segments de code, dont l'utilisation est restreinte par le fabricant. Dans cette version, le chargement des blobs dans les pilotes pour WiFi rtw8821c et SoC MediaTek mt8183 a été désactivé. Le code de nettoyage des blobs dans les pilotes et sous-systèmes Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) et x86 tactile a été mis à jour.
Source : opennet.ru
