Version du noyau Linux 5.7

Après deux mois de développement Linus Torvalds представил version du noyau Linux 5.7. Parmi les changements les plus notables : 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 de pointeur pour ARM64, la possibilité d'attacher des programmes BPF aux gestionnaires LSM, une nouvelle implémentation de Curve25519, un split- détecteur de verrouillage, compatibilité BPF avec PREEMPT_RT, suppression de la limite de taille de ligne de 80 caractères dans le code, prise en compte des indicateurs de température CPU dans le planificateur de tâches, possibilité d'utiliser clone() pour générer des processus dans un autre groupe de contrôle, protection contre l'écriture en mémoire en utilisant userfaultfd.

La nouvelle version a accepté 15033 1961 correctifs provenant de XNUMX XNUMX développeurs,
taille du correctif - 39 Mo (les modifications ont affecté 11590 570560 fichiers, ajouté XNUMX XNUMX lignes de code,
297401 lignes supprimées). Environ 41 % de tous ceux présentés en 5.7
les modifications sont associées aux pilotes de périphérique, environ 16 % des modifications ont
attitude envers la mise à jour du code spécifique aux architectures matérielles, 13%
liés à la pile réseau, 4 % aux systèmes de fichiers et 4 % aux systèmes internes
sous-systèmes du noyau.

principal les innovations:

  • Sous-système de disque, E/S et systèmes de fichiers
    • Ajout d'une nouvelle implémentation du pilote exFAT, fondé basé 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 le code Samsung existant (version 1.2.9) et était environ 10 % en retard par rapport au nouveau pilote en termes de performances. Rappelons que l'ajout du support exFAT au noyau est devenu possible après que Microsoft опубликовала spécifications publiques et rendu les brevets exFAT disponibles pour une utilisation libre de droits sur Linux.
    • Btrfs implémente une nouvelle commande ioctl() - BTRFS_IOC_SNAP_DESTROY_V2, qui vous permet de supprimer une sous-section par son identifiant. Une prise en charge complète du clonage d’extensions en ligne est fournie. Le nombre de points d'annulation pour les opérations de redistribution a été augmenté, ce qui a réduit les longues attentes lors de l'exécution de la commande « balance Cancel ». La détermination des backlinks vers les extensions a été accélérée (par exemple, le temps d'exécution du script de test est passé d'une heure à plusieurs minutes). Ajout de la possibilité d'attacher des extensions de fichiers à chaque inode d'une arborescence. Le schéma de blocage utilisé lors de l'écriture dans des sous-partitions et lors de l'exclusion de NOCOW a été repensé. Amélioration de l'efficacité de l'exécution de fsync pour les plages.
    • XFS a amélioré la vérification des métadonnées et fsck pour les partitions actives. Une bibliothèque a été proposée pour reconstruire les structures btree, qui sera utilisée à l'avenir pour retravailler xfs_repair et implémenter la possibilité de récupération sans démonter la partition.
    • La prise en charge expérimentale du placement d'une partition d'échange dans les stockages SMB3 a été ajoutée à CIFS. Implémentation des extensions POSIX pour readdir, définies dans la spécification SMB3.1.1. Performances d'écriture améliorées pour les pages de 64 Ko lorsque le mode cache=strict est activé et que les versions de protocole 2.1+ sont utilisées.
    • FS EXT4 a été transféré de bmap et iopoll vers iomap.
    • F2FS fournit une prise en charge facultative pour la compression des données à l'aide de l'algorithme zstd. Par défaut, l'algorithme LZ4 est utilisé pour la compression. Ajout de la prise en charge de la commande "chattr -c commit". L'affichage du temps de montage est fourni. Ajout de ioctl F2FS_IOC_GET_COMPRESS_BLOCKS pour obtenir des informations sur le nombre de blocs compressés. Ajout de la sortie des données de compression via statx.
    • Le système de fichiers Ceph a ajouté la possibilité d'effectuer localement des opérations de création et de suppression de fichiers (dissocier) sans attendre une réponse du serveur (travail en mode asynchrone). Le changement, par exemple, peut améliorer considérablement les performances lors de l'exécution de l'utilitaire rsync.
    • La possibilité d'utiliser virtiofs comme système de fichiers de niveau supérieur a été ajoutée à OVERLAYFS.
    • Réécrit Le code de traversée de chemin dans VFS, le code d'analyse des liens symboliques a été retravaillé et la traversée du point de montage a été unifiée.
    • Dans le sous-système scsi pour les utilisateurs non privilégiés permis exécution des commandes ZBC.
    • Dans dm_writecache mis en œuvre la possibilité de vider progressivement le cache en fonction du paramètre max_age, qui définit la durée de vie maximale d'un bloc.
    • Dans dm_integrity ajoutée prise en charge de l'opération "rejeter".
    • Dans null_blk ajoutée prise en charge de la substitution d'erreurs pour simuler les échecs pendant les tests.
    • Ajouté par possibilité d'envoyer des notifications udev sur les changements de taille de périphérique de blocage.
  • Sous-système réseau
    • Filtre réseau inclus changements, accélérant considérablement le traitement de grandes listes de correspondances (ensembles nftables), qui nécessitent de vérifier une combinaison de sous-réseaux, de ports réseau, de protocoles et d'adresses MAC.
      Optimisations introduit dans le module nft_set_pipapo (PIle PAcket POlicies), qui résout le problème de la correspondance du contenu d'un paquet avec des plages d'état de champ arbitraires utilisées dans les règles de filtrage, telles que les plages d'adresses IP et de ports réseau (nft_set_rbtree et nft_set_hash manipulent la correspondance d'intervalle et la réflexion directe des valeurs ). La version de pipapo vectorisée à l'aide d'instructions AVX256 2 bits sur un système doté d'un processeur AMD Epyc 7402 a montré une augmentation des performances de 420 % lors de l'analyse de 30 1000 enregistrements, y compris les combinaisons port-protocole. L'augmentation en comparant une combinaison d'un sous-réseau et d'un numéro de port lors de l'analyse de 87 4 enregistrements était de 128 % pour IPv6 et de XNUMX % pour IPvXNUMX.

    • Добавлен module bareudp, qui vous permet d'encapsuler divers protocoles L3, tels que MPLS, IP et NSH, dans un tunnel UDP.
    • L'intégration des composants MPTCP (MultiPath TCP), extension du protocole TCP permettant d'organiser le fonctionnement d'une connexion TCP avec livraison de paquets simultanément sur plusieurs routes via différentes interfaces réseau liées à différentes adresses IP, s'est poursuivie.
    • Ajouté par prise en charge des mécanismes d'accélération matérielle pour encapsuler les trames Ethernet en 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 la propriété des fichiers correspondants dans sysfs sont ajustés.
    • Ajout de la possibilité d'utiliser l'indicateur SO_BINDTODEVICE pour les utilisateurs non root.
    • La troisième partie des correctifs a été acceptée, convertissant la boîte à outils ethtool de ioctl() en utilisant l'interface netlink. La nouvelle interface facilite l'ajout d'extensions, améliore la gestion des erreurs, permet d'envoyer des notifications lorsque l'état change, simplifie l'interaction entre le noyau et l'espace utilisateur et réduit le nombre de listes nommées qui doivent être synchronisées.
    • Ajout de la possibilité d'utiliser des accélérateurs matériels spéciaux pour effectuer des opérations de suivi de connexion.
    • Dans filtre net ajoutée un hook pour connecter les classificateurs de paquets sortants (egress), qui complétait le hook précédemment présent pour les paquets entrants (ingress).
  • Virtualisation et sécurité
    • Ajout de l'implémentation matérielle de l'authentification du pointeur (Authentification du pointeur), qui utilise des instructions CPU ARM64 spécialisées pour se protéger contre les attaques utilisant des techniques de programmation orientée retour (ROP), dans lesquelles l'attaquant n'essaye pas de placer son code en mémoire, mais opère sur des morceaux d'instructions machine déjà disponibles dans les bibliothèques chargées, se terminant avec une instruction de retour de contrôle. La sécurité revient à utiliser des signatures numériques pour vérifier les adresses de retour au niveau du noyau. La signature est stockée dans les bits supérieurs inutilisé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 spéciales du processeur.
    • Ajouté par 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 défauts de page (accès aux pages mémoire non allouées) dans l'espace utilisateur. L'idée est d'utiliser userfaultfd() à la fois pour détecter les violations d'accès aux pages marquées comme protégées en écriture et pour appeler un gestionnaire capable de répondre à de telles tentatives d'écriture (par exemple, pour gérer les modifications lors de la création d'instantanés en direct des processus en cours d'exécution, l'état capture lors du vidage des vidages de mémoire sur le disque, de la mise en œuvre de la mémoire partagée, du suivi des modifications dans la mémoire). Fonctionnalité équivalent en utilisant mprotect() en conjonction avec le gestionnaire de signal SIGSEGV, mais cela fonctionne sensiblement plus rapidement.
    • SELinux a rendu obsolète le paramètre "checkreqprot", qui permet de désactiver les contrôles de protection de la mémoire lors du traitement des règles (permettant l'utilisation de zones mémoire exécutables, quelles que soient les règles spécifiées dans les règles). Les liens symboliques Kernfs sont autorisés à hériter du contexte de leurs répertoires parents.
    • la composition allumé module KRSI, qui vous permet d'attacher des programmes BPF à n'importe quel hook LSM du noyau. Le changement permet de créer des modules LSM (Linux Security Module) sous forme de programmes BPF pour résoudre les problèmes d'audit et de contrôle d'accès obligatoire.
    • Réalisé Optimise les performances de /dev/random en regroupant les valeurs CRNG au lieu d'appeler les instructions RNG individuellement. Amélioration des performances de getrandom et /dev/random sur les systèmes ARM64 fournissant des instructions RNG.
    • Implémentation d'une courbe elliptique Curve25519 remplacé pour l'option de la bibliothèque HACLpour lequel donné preuve mathématique de vérification formelle de la fiabilité.
    • Добавлен mécanisme d'information sur les pages de mémoire libre. Grâce à ce mécanisme, les systèmes invités peuvent transmettre des informations sur les pages qui ne sont plus utilisées au système hôte, et l'hôte peut récupérer les données de la page.
    • En vfio/pci ajoutée prise en charge de SR-IOV (Single-Root I/O Virtualization).
  • Services mémoire et système
    • De 80 à 100 caractères augmenté limitation de la longueur maximale des lignes dans les textes sources. Dans le même temps, il est toujours recommandé aux développeurs de rester dans la limite de 80 caractères par ligne, mais ce n'est plus une limite stricte. De plus, le dépassement de la limite de taille de ligne entraînera désormais un avertissement de build uniquement si checkpatch est exécuté avec l'option '--strict'. Le changement permettra de ne pas distraire les développeurs en manipulation avec des espaces et sentez-vous plus libre lors de l'alignement du code, ainsi que empêchera rupture de ligne excessive, inquiétant compréhension et recherche de code.
    • Ajouté par prise en charge du mode de démarrage mixte EFI, qui vous permet de charger un noyau 64 bits à partir d'un micrologiciel 32 bits exécuté sur un processeur 64 bits sans utiliser de chargeur de démarrage spécialisé.
    • Inclus système d’identification et de débogage des verrous divisés («serrure divisée"), qui se produit 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. Un tel blocage entraîne une baisse significative des performances (1000 XNUMX cycles plus lents qu'une opération atomique sur les données tombant dans une seule ligne de cache). En fonction du paramètre de démarrage "split_lock_detect", le noyau peut détecter de tels verrous à la volée et émettre des avertissements ou envoyer un signal SIGBUS à l'application à l'origine du verrouillage.
    • Le planificateur de tâches assure le suivi des capteurs de température (Pression thermique) et mis en œuvre en tenant compte de la surchauffe lors du placement des tâches. À l'aide des statistiques fournies, le régulateur thermique peut ajuster la fréquence maximale du processeur en cas de surchauffe, et le planificateur de tâches prend désormais en compte la réduction de la puissance de calcul due à une telle réduction de fréquence lors de la planification des tâches à exécuter (auparavant, le planificateur répondait aux changements en fréquence avec un certain retard, prenant pendant un certain temps des décisions basées sur des hypothèses exagérées concernant les ressources informatiques disponibles).
    • Le planificateur de tâches comprend indicateurs invariants suivi de la charge, vous permettant d'estimer correctement la charge, quelle que soit la fréquence de fonctionnement actuelle du processeur. Le changement vous permet de prédire plus précisément le comportement des tâches dans des conditions de changements dynamiques de tension et de fréquence du processeur. Par exemple, une tâche qui consommait 1/3 des ressources du processeur à 1000 2 MHz consommera 3/500 des ressources lorsque la fréquence chutera à XNUMX MHz, ce qui créait auparavant une fausse hypothèse selon laquelle elle fonctionnait à pleine capacité (c'est-à-dire que les tâches apparaissaient plus grand pour le planificateur uniquement en réduisant la fréquence, ce qui a conduit à des décisions incorrectes dans le gouverneur schedutil cpufreq).
    • Le pilote Intel P-state, responsable de la sélection des modes de performances, a été modifié pour utiliser Schedutil.
    • La possibilité d'utiliser le sous-système BPF lorsque le noyau s'exécute en temps réel (PREEMPT_RT) a été implémentée. Auparavant, lorsque PREEMPT_RT était activé, BPF devait être désactivé.
    • Un nouveau type de programme BPF a été ajouté - BPF_MODIFY_RETURN, qui peut être attaché à une fonction dans le noyau et modifier la valeur renvoyée par cette fonction.
    • Ajouté par occasion Utilisation de l'appel système clone3() pour créer un processus dans un groupe de contrôle différent du groupe de contrôle parent, permettant au processus parent d'appliquer des restrictions et d'activer la comptabilité immédiatement après la création d'un nouveau processus ou thread. Par exemple, un gestionnaire de services peut allouer directement de nouveaux services à des groupes de contrôle distincts, et les nouveaux processus, lorsqu'ils sont placés dans des groupes de contrôle « gelés », seront immédiatement arrêtés.
    • dans Kbuild ajoutée prise en charge de la variable d'environnement "LLVM=1" pour passer à la boîte à outils Clang/LLVM lors de la construction du noyau. Les exigences pour la version binutils ont été augmentées (2.23).
    • Une section /sys/kernel/debug/kunit/ a été ajoutée à debugfs avec les résultats des tests kunit.
    • Ajout du paramètre de démarrage du noyau pm_debug_messages (analogue à /sys/power/pm_debug_messages), qui permet la sortie d'informations de débogage sur le fonctionnement du système de gestion de l'énergie (utile lors du débogage de problèmes d'hibernation et de mode veille).
    • Vers l'interface d'E/S asynchrone io_urant support supplémentaire épissure() и sélection de tampon atomique.
    • Profilage de groupe de contrôle amélioré à l'aide de la boîte à outils Perf. Auparavant, perf ne pouvait profiler que les tâches d'un groupe de contrôle spécifique et ne pouvait pas savoir à quel groupe de contrôle appartient l'échantillon actuel. perf récupère désormais les informations de groupe de contrôle pour chaque échantillon, vous permettant de profiler plusieurs groupes de contrôle et d'appliquer un tri par
      cgroup dans les rapports.

    • cgroupfs, un pseudo-FS pour la gestion des groupes de contrôle, a ajouté la prise en charge des attributs étendus (xattrs), avec lesquels, par exemple, vous pouvez laisser des informations supplémentaires pour les gestionnaires dans l'espace utilisateur.
    • Dans le contrôleur de mémoire cgroup ajoutéeet prise en charge de la protection récursive de la valeur « memory.low », qui régule la quantité minimale de RAM fournie aux membres du groupe. Lors du montage d'une hiérarchie de groupe de contrôle avec l'option "memory_recursiveprot", la valeur de "memory.low" définie pour les nœuds inférieurs sera automatiquement distribuée à tous les nœuds enfants.
    • Добавлен Cadre Uacce (Unified/User-space-access-intended Accelerator Framework) pour le partage d'adresses virtuelles (SVA, Shared Virtual Addressing) entre le processeur et les périphériques, permettant aux accélérateurs matériels d'accéder aux structures de données du processeur principal.
  • Architectures matérielles
    • Pour l'architecture ARM, la possibilité de récupérer à chaud la mémoire est implémentée.
    • Pour l'architecture RISC-V, la prise en charge du branchement à chaud et du retrait des processeurs (CPU hotplug) a été ajoutée. Pour RISC-V 32 bits, eBPF JIT est implémenté.
    • La possibilité d'utiliser des systèmes ARM 32 bits pour exécuter des environnements invités KVM a été supprimée.
    • Suppression de l'implémentation NUMA « factice » pour l'architecture s390, pour laquelle aucun cas d'utilisation n'a été trouvé pour améliorer les performances.
    • Pour ARM64, ajout de la prise en charge de l'extension AMU (Activity Monitors Unit), définie dans ARMv8.4 et fournissant des compteurs de performances utilisés pour calculer les facteurs de correction de mise à l'échelle de fréquence dans le planificateur de tâches.
  • équipement
    • Ajouté par prise en charge des appareils vDPA qui utilisent un canal d'échange de données conforme aux spécifications virtio. Les appareils vDPA peuvent être soit des équipements physiquement connectés, soit des appareils virtuels émulés par logiciel.
    • Dans le sous-système GPIO apparu une nouvelle commande ioctl() pour surveiller les changements, vous permettant d'informer le processus des changements dans l'état de n'importe quelle ligne GPIO. À titre d'exemple d'utilisation de la nouvelle commande proposé utilitaire gpio-watch.
    • Dans le pilote DRM i915 pour les cartes vidéo Intel inclus prise en charge par défaut des puces Tigerlake (« Gen12 ») et ajout de la prise en charge initiale du contrôle du rétroéclairage OLED. Prise en charge améliorée des puces Ice Lake, Elkhart Lake, Baytrail et Haswell.
    • Dans le pilote amdgpu ajoutée possibilité de charger le firmware dans la puce USBC pour ASIC. Prise en charge améliorée des puces AMD Ryzen 4000 "Renoir". Il existe désormais un support pour contrôler les panneaux OLED. Affichage fourni de l'état du firmware dans les debugfs.
    • La possibilité d'utiliser OpenGL 4 dans les systèmes invités a été ajoutée au pilote vmwgfx DRM pour les systèmes de virtualisation VMware (auparavant, OpenGL 3.3 était pris en charge).
    • Ajout de nouveaux pilotes DRM pour le système d'affichage de la plate-forme TI Keystone.
    • Pilotes ajoutés pour les panneaux LCD : Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101II01D-CT, Frida FRD350H54004.
    • Vers le système de gestion de l'énergie ajoutée 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 et du smartphone Pine64 PineTab PinePhone basé sur Allwinner A64.
    • Ajout de la prise en charge de nouveaux codecs et puces audio :
      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 et plates-formes ARM Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron « sl28 », 11 options de carte i.MX6 TechNexion Pico, trois nouvelles options 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

Ajouter un commentaire