Version du noyau Linux 5.9

Après deux mois de développement Linus Torvalds представил version du noyau Linux 5.9. Parmi les changements les plus notables : limitation de l'import de symboles des modules propriétaires vers les modules GPL, accélération des opérations de changement de contexte grâce à l'instruction du processeur FSGSBASE, support de la compression d'image du noyau grâce à Zstd, retravaillage de la priorisation des threads dans le noyau, support du PRP. (Parallel Redundancy Protocol), planification tenant compte de la bande passante dans le planificateur d'échéances, compression préemptive des pages de mémoire, indicateur de capacité CAP_CHECKPOINT_RESTOR, appel système close_range(), améliorations des performances dm-crypt, suppression de code pour les invités Xen PV 32 bits, nouvelle dalle de mémoire mécanisme de gestion, option « rescue » dans Btrfs, prise en charge du chiffrement en ligne dans ext4 et F2FS.

La nouvelle version comprend 16074 2011 correctifs des développeurs de XNUMX,
taille du correctif - 62 Mo (les modifications ont affecté 14548 782155 fichiers, 314792 45 lignes de code ont été ajoutées, 5.9 XNUMX lignes ont été supprimées). Environ XNUMX% de tous présentés en XNUMX
les modifications sont associées aux pilotes de périphérique, environ 15 % des modifications ont
attitude envers la mise à jour du code spécifique aux architectures matérielles, 13%
liés à la pile réseau, 3 % aux systèmes de fichiers et 3 % aux systèmes internes
sous-systèmes du noyau.

principal les innovations:

  • Services mémoire et système
    • Resserré protection contre l'utilisation de couches GPL pour relier les pilotes propriétaires avec les composants du noyau exportés uniquement pour les modules sous licence GPL. L'indicateur TAINT_PROPRIETARY_MODULE est désormais hérité dans tous les modules qui importent des symboles à partir de modules avec cet indicateur. Si un module GPL tente d'importer des symboles à partir 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 les modules sous licence GPL, même si le module a déjà importé des symboles de la catégorie "gplonly". Le verrouillage inversé (exportation uniquement EXPORT_SYMBOL_GPL dans les modules ayant importé EXPORT_SYMBOL_GPL), qui pourrait interrompre le travail des pilotes propriétaires, n'est pas implémenté (seul l'indicateur du module propriétaire est hérité, mais pas les liaisons GPL).
    • Ajouté par prise en charge du moteur kcompactd pour pages mémoire de pré-emballage en arrière-plan pour augmenter le nombre de pages mémoire volumineuses disponibles pour le noyau. Selon des estimations préliminaires, le packaging en arrière-plan, au prix d'une surcharge minimale, peut réduire les délais d'allocation de pages de mémoire volumineuses (pages énormes) de 70 à 80 fois par rapport au mécanisme de packaging précédemment utilisé, lancé lorsque le besoin s'en fait sentir (à la demande ). Pour définir les limites de la fragmentation externe fournie par kcompactd, sysctl vm.compaction_proactiveness a été ajouté.
    • Ajouté par prise en charge de la compression d'image du noyau à l'aide d'un algorithme zstandard (zstd).
    • La prise en charge des instructions du processeur a été implémentée pour les systèmes x86 FSGSBASE, qui vous permet 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 éliminant les opérations d'écriture MSR inutiles pour GSBASE, et dans l'espace utilisateur, il évite les appels système inutiles pour changer FS/GS.
    • Добавлен le paramètre «allow_writes» permet 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 la modification du MSR peut entraîner des problèmes. Par défaut, l'écriture n'est pas encore désactivée et les modifications apportées au MSR sont reflétées dans le journal, mais à l'avenir, il est prévu de basculer l'accès par défaut en mode lecture seule.
    • Vers l'interface d'E/S asynchrone io_urant Ajout d'une prise en charge complète des opérations de lecture asynchrones en tampon qui ne nécessitent pas de threads du noyau. La prise en charge de l'enregistrement est attendue dans une prochaine version.
    • Dans la date limite du planificateur d'E/S mis en œuvre planification basée sur la capacité, en permettant prendre des décisions correctes sur les systèmes asymétriques tels que les systèmes basés sur ARM DynamIQ et big.LITTLE, qui combinent des cœurs de processeur puissants et moins économes en énergie dans une seule puce. En particulier, le nouveau mode vous permet d'éviter les décalages de planification lorsqu'un cœur de processeur lent ne dispose pas des ressources appropriées pour terminer une tâche à temps.
    • Le modèle de consommation d'énergie dans le noyau (Energy Model framework) est désormais décrit le non seulement le comportement de consommation d'énergie du processeur, mais couvre également les périphériques.
    • L'appel système close_range() a été implémenté pour permettre à un processus de fermer simultanément toute une gamme de descripteurs de fichiers ouverts.
    • De l'implémentation de la console texte et du driver fbcon code supprimé, qui offre la possibilité de faire défiler le texte par programmation (CONFIG_VGACON_SOFT_SCROLLBACK) d'une quantité supérieure à la quantité de mémoire vidéo en mode texte VGA.
    • Retravaillé algorithme pour attribuer des priorités aux threads au sein du noyau. La nouvelle option offre une meilleure cohérence entre tous les sous-systèmes du noyau lors de l'attribution de priorités aux tâches en temps réel.
    • Système ajouté sched_uclamp_util_min_rt_default pour contrôler les paramètres d'augmentation du processeur pour les tâches en temps réel (par exemple, vous pouvez modifier le comportement des tâches en temps réel à la volée pour économiser de l'énergie après le passage à l'alimentation par batterie ou sur les systèmes mobiles).
    • Des préparatifs ont été faits pour implémenter la prise en charge de la technologie Transparent Huge Pages dans le cache de pages.
    • Le moteur fanotify implémente de nouveaux indicateurs FAN_REPORT_NAME et FAN_REPORT_DIR_FID pour signaler le nom du parent et les informations FID uniques lorsque des événements de création, de suppression ou de mouvement se produisent pour les éléments de répertoire et les objets hors répertoire.
    • Pour les groupes de contrôle mis en œuvre un nouveau contrôleur de mémoire de dalle, qui se distingue par le déplacement de la comptabilité de dalle du niveau de la page mémoire au niveau de l'objet du noyau, ce qui permet de partager des pages de dalle dans différents groupes de contrôle, au lieu d'allouer des caches de dalle séparés pour chaque groupe de contrôle. L'approche proposée permet d'augmenter l'efficacité d'utilisation de slab, de réduire de 30 à 45 % la taille de la mémoire utilisée pour slab, de réduire considérablement la consommation globale de mémoire du noyau et de réduire la fragmentation de la mémoire.
    • Dans le sous-système sonore ALSA и Pile USB, conformément à récemment adopté recommandations sur l'utilisation d'une terminologie inclusive dans le noyau Linux ; les termes politiquement incorrects ont été nettoyés. Le code a été débarrassé des mots « esclave », « maître », « liste noire » et « liste blanche ».
  • Virtualisation et sécurité
    • Lors de la construction du noyau à l'aide du compilateur Clang apparu la possibilité de configurer (CONFIG_INIT_STACK_ALL_ZERO) l'initialisation automatique à zéro de toutes les variables stockées sur la pile (lors de la construction, préciser « -ftrivial-auto-var-init=zero »).
    • Dans le sous-système seccomp, lors de l'utilisation du mode contrôle de processus dans l'espace utilisateur, ajoutée occasion substitution de descripteurs de fichiers dans le processus surveillé pour émuler entièrement les appels système qui conduisent à la création de descripteurs de fichiers. Cette fonctionnalité est recherchée dans les systèmes de conteneurs isolés et les implémentations de sandbox pour Chrome.
    • Pour les architectures xtensa et csky, la prise en charge a été ajoutée pour limiter les appels système à l'aide du sous-système seccomp. Pour xtensa, la prise en charge du mécanisme d'audit est également implémentée.
    • Добавлен nouvel indicateur de capacité CAP_CHECKPOINT_RESTORE, qui vous permet de donner accès aux fonctionnalités liées au gel et à la restauration de l'état des processus sans transférer de privilèges supplémentaires.
    • GCC 11 fournit toutes les fonctionnalités dont vous avez besoin pour
      outil de débogage KCSAN (Kernel Concurrency Sanitizer), conçu pour détecter dynamiquement les conditions de concurrence au sein du noyau. Ainsi, KCSAN peut désormais être utilisé avec les noyaux construits dans GCC.

    • Pour AMD Zen et les modèles de processeurs plus récents ajoutée prise en charge de la technologie P2PDMA, qui vous permet d'utiliser DMA pour le transfert direct de données entre la mémoire de deux appareils connectés au bus PCI.
    • Un mode a été ajouté à dm-crypt qui vous permet de réduire la latence en effectuant un traitement de données cryptographiques sans utiliser de files d'attente de travail. Ce mode est également nécessaire au bon fonctionnement avec zoné appareils de bloc (appareils avec des zones qui doivent être écrites de manière séquentielle, mettant à jour l'ensemble du groupe de blocs). Des travaux ont été effectués pour augmenter le débit et réduire la latence dans dm-crypt.
    • Suppression du code pour prendre en charge les invités 32 bits exécutés en mode paravirtualisation exécutant l'hyperviseur Xen. Les utilisateurs de tels systèmes doivent utiliser des noyaux 64 bits dans les environnements invités ou utiliser les modes de virtualisation complets (HVM) ou combinés (PVH) au lieu de la paravirtualisation (PV) pour exécuter des environnements.
  • Sous-système de disque, E/S et systèmes de fichiers
    • Sur le système de fichiers Btrfs mis en œuvre une option de montage « de secours » qui unifie 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 » est obsolète. Des optimisations de performances ont été apportées, accélérant notamment sensiblement l'exécution des opérations fsync(). Ajouté par la possibilité d'utiliser d'autres types de sommes de contrôle autres que CRC32c.
    • Ajouté par la possibilité d'utiliser le cryptage en ligne (Inline Encryption) dans les systèmes de fichiers ext4 et F2FS, pour lequel l'option de montage « inlinecrypt » est fournie. Le mode de chiffrement en ligne vous permet d'utiliser les mécanismes de chiffrement intégrés au contrôleur de lecteur, qui chiffrent et déchiffrent les entrées/sorties de manière transparente.
    • Dans XFS sécurisé réinitialisation de l'inode (flush) dans un mode complètement asynchrone qui ne bloque pas les processus lors de l'exécution d'une opération de nettoyage de la mémoire. Résolution d'un problème de quota de longue date qui entraînait un suivi incorrect des avertissements de limite logicielle et de limite d'inode. Implémentation unifiée de la prise en charge de DAX pour ext4 et xfs.
    • Dans Ext4 mis en œuvre précharger les bitmaps d'allocation de blocs. Combinée à la limitation de l'analyse des groupes non initialisés, l'optimisation a réduit le temps nécessaire au montage de très grandes partitions.
    • Dans F2FS ajoutée ioctl F2FS_IOC_SEC_TRIM_FILE, qui vous permet d'utiliser les commandes TRIM/discard pour réinitialiser physiquement les données spécifiées dans un fichier, par exemple, pour supprimer les clés d'accès sans laisser de données résiduelles sur le lecteur.
      Dans F2FS également ajoutée nouveau mode de garbage collection GC_URGENT_LOW, qui fonctionne de manière plus agressive en éliminant certaines vérifications d'état inactif avant de démarrer le garbage collector.

    • Dans bcache, la taille du bucket_size pour les extensions a été augmentée de 16 à 32 bits en vue de l'activation des caches de périphériques zonés.
    • La possibilité d'utiliser le chiffrement en ligne basé sur le chiffrement matériel intégré fourni par les contrôleurs UFS a été ajoutée au sous-système SCSI (Stockage Flash Universel).
    • Un nouveau paramètre de ligne de commande du noyau « debugfs » a été ajouté, qui permet de contrôler la disponibilité du pseudo-FS du même nom.
    • Le client NFSv4.2 prend en charge les attributs de fichier étendus (xattr).
    • Dans la poussière de DM ajoutée interface permettant d'afficher simultanément une liste de tous les blocs défectueux identifiés sur le disque (« message dmsetup dust1 0 listbadblocks »).
    • Pour md/raid5, le paramètre /sys/block/md1/md/stripe_size a été ajouté pour configurer la taille du bloc STRIPE.
    • Pour les périphériques de stockage NVMe ajoutée prise en charge des commandes de zonage du lecteur (ZNS, NVM Express Zoned Namespace), qui vous permet de diviser l'espace de stockage en zones qui constituent des groupes de blocs pour un contrôle plus complet sur le placement des données sur le lecteur.
  • Sous-système réseau
    • Dans Netfilter ajoutée la possibilité de rejeter les paquets à l'étape précédant 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 également à l'étape PREROUTING pour icmp et tcp).
    • Dans nftables ajoutée la possibilité d'auditer les événements liés aux modifications de configuration.
    • Dans nftables dans l'API netlink ajoutée prise en charge des chaînes anonymes dont le nom est attribué dynamiquement par le noyau. Lorsque vous supprimez une règle associée à une chaîne anonyme, la chaîne elle-même est automatiquement supprimée.
    • BPF ajoute la prise en charge des itérateurs pour parcourir, filtrer et modifier les éléments des tableaux associatifs (cartes) 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 des listes de sockets ouverts et d'en extraire les informations dont ils ont besoin.
    • Ajout d'un nouveau type de programme BPF BPF_PROG_TYPE_SK_LOOKUP, qui est lancé lorsque le noyau recherche un socket d'écoute approprié pour une connexion entrante. En utilisant un programme BPF comme celui-ci, vous pouvez créer des gestionnaires qui prennent des décisions sur le socket auquel une connexion doit être associée, sans être contraint par l'appel système bind(). Par exemple, vous pouvez associer un seul socket à une plage d'adresses ou de ports. De plus, la prise en charge de l'indicateur SO_KEEPALIVE a été ajoutée à bpf_setsockopt() et la possibilité d'installer les gestionnaires BPF_CGROUP_INET_SOCK_RELEASE, appelés lorsque le socket est libéré, a été implémentée.
    • Prise en charge du protocole implémentée PRP (Parallel Redundancy Protocol), qui permet une commutation basée sur Ethernet vers un canal de secours, transparent pour les applications, en cas de panne d'un composant du réseau.
    • Pile mac80211 ajoutée prise en charge de la négociation de canal WPA/WPA2-PSK en quatre étapes en mode point d'accès.
    • Ajout de la possibilité de faire basculer le planificateur qdisc (discipline de file d'attente) pour utiliser l'algorithme de gestion de file d'attente réseau FQ-PIE (Flow Queue PIE) par défaut, visant à réduire l'impact négatif de la mise en mémoire tampon intermédiaire des paquets sur les équipements réseau de périphérie (bufferbloat) dans les réseaux avec modems câble.
    • De nouvelles fonctionnalités ont été ajoutées à MPTCP (MultiPath TCP), extensions 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. Ajout de la prise en charge du cookie syn, DATA_FIN, du réglage automatique du tampon, des diagnostics de socket et des indicateurs REUSEADDR, REUSEPORT et V6ONLY dans setsockopt.
    • Pour les tables de routage virtuelles VRF (Virtual Routing and Forwarding), qui permettent d'organiser le fonctionnement de plusieurs domaines de routage sur un même système, le mode « strict » a été implémenté. Dans ce mode, une table virtuelle ne peut être associée qu'à une table de routage qui n'est pas utilisée dans d'autres tables virtuelles.
    • Le pilote sans fil est ath11k ajoutée prend en charge la fréquence 6 GHz et balayage spectral.
  • équipement
    • Suppression du code pour prendre en charge l'architecture UniCore, développée au Microprocessor Center de l'Université de Pékin et incluse dans le noyau Linux en 2011. Cette architecture n'est plus maintenue depuis 2014 et n'a aucun support dans GCC.
    • La prise en charge de l'architecture RISC-V a été implémentée kcov (interface de débogage pour analyser la couverture du code du noyau), kmemleak (système de détection des fuites de mémoire), protection de la pile, marques de saut et opérations sans ticks (multitâche indépendant des signaux de minuterie).
    • Pour l'architecture PowerPC, la prise en charge des files d'attente spinlock a été implémentée, ce qui a considérablement amélioré les performances dans les situations de conflit de verrouillage.
    • Pour les architectures ARM et ARM64, le mécanisme de régulation de fréquence du processeur est activé par défaut Schedutil (gouverneur cpufreq), qui utilise directement les informations du planificateur de tâches pour prendre une décision sur la modification de la fréquence et peut accéder immédiatement aux pilotes cpufreq pour modifier rapidement la fréquence, ajustant instantanément les paramètres de fonctionnement du processeur à la charge actuelle.
    • Le pilote DRM i915 pour cartes graphiques Intel inclut la prise en charge des puces basées sur la microarchitecture Rocket Lake et ajout du support initial pour les cartes discrètes Intel Xe DG1.
    • Le pilote Amdgpu a ajouté la prise en charge initiale des GPU AMD Navi 21 (Plet bleu marine) et Navi 22 (Cichlidé de Sienne). Ajout de la prise en charge des moteurs d'accélération d'encodage et de décodage vidéo UVD/VCE pour le GPU Southern Islands (Radeon HD 7000).
      Ajout d'une propriété pour faire pivoter l'affichage de 90, 180 ou 270 degrés.

      Fait intéressant, le pilote pour GPU AMD il est le plus grand pilote du noyau - il contient environ 2.71 millions de lignes de code, soit environ 10 % de la taille totale du noyau (27.81 millions de lignes). Dans le même temps, 1.79 million de lignes sont représentées par des fichiers d'en-tête générés automatiquement avec des données pour les registres GPU, et le code C compte 366 915 lignes (à titre de comparaison, le pilote Intel i209 comprend 149 XNUMX lignes et Nouveau - XNUMX XNUMX).

    • Dans le pilote Nouveau ajoutée prise en charge de la vérification de l'intégrité image par image à l'aide de CRC (Contrôles de redondance cyclique) dans les moteurs d'affichage GPU NVIDIA. L'implémentation 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.
    • Le sous-système audio ALSA prend en charge Flux silencieux Intel (mode d'alimentation continue pour les appareils HDMI externes afin d'éliminer le retard lors du démarrage de la lecture) et nouvel appareil pour contrôler l'éclairage des boutons d'activation et de sourdine du microphone, et également ajouté la prise en charge de nouveaux équipements, y compris un contrôleur Longson 7A1000.
    • Ajout de la prise en charge des cartes, appareils et plates-formes ARM : 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.

Parallèlement, la Fondation latino-américaine du logiciel libre formé
вариант noyau entièrement gratuit 5.9 - Linux libre 5.9-gnu, débarrassé des éléments du firmware et du pilote contenant des composants non libres ou des sections de code, dont la portée est limitée par le fabricant. La nouvelle version désactive le chargement de blob dans les pilotes pour WiFi rtw8821c et SoC MediaTek mt8183. Code de nettoyage de blob mis à jour dans Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) et pilotes et sous-systèmes d'écran tactile x86.

Source: opennet.ru

Ajouter un commentaire