Noyau Linux 5.14

Noyau Linux 5.14

Après deux mois de développement Linus Torvalds представил version du noyau Linux 5.14. Parmi les changements les plus notables : nouveaux appels système quotactl_fd() et memfd_secret(), suppression des pilotes ide et raw, nouveau contrôleur de priorité d'E/S pour cgroup, mode de planification des tâches SCHED_CORE, infrastructure pour créer des chargeurs de programmes BPF vérifiés.

La nouvelle version comprend 15883 2002 correctifs provenant de 69 12580 développeurs, la taille du correctif est de 861501 Mo (les modifications ont affecté 321654 47 fichiers, 5.14 14 lignes de code ont été ajoutées, 13 3 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.

principal les innovations:

  • sous-système de disque, systèmes d'entrée/sortie et de fichiers :
    • pour le groupe de contrôle mis en œuvre nouveau contrôleur de priorité d'E/S - rq-qos, qui peut contrôler la priorité de traitement des demandes de blocage de périphériques générées par les membres de chaque groupe de contrôle. Une nouvelle prise en charge du contrôleur de priorité a été ajoutée au planificateur d'E/S mq-deadline ;
    • sur le système de fichiers ext4 mis en œuvre nouvelle commande ioctl EXT4_IOC_CHECKPOINT, qui force toutes les transactions en attente du journal et des tampons associés sur le disque, et écrase également la zone utilisée par le journal dans le stockage. Le changement a été préparé dans le cadre d'une initiative visant à empêcher les fuites d'informations des systèmes de fichiers ;
    • dans Btrfs introduit Optimisations des performances : en éliminant la journalisation inutile des attributs étendus lors de l'exécution de fsync, les performances des opérations intensives avec des attributs étendus ont augmenté jusqu'à 17 %. De plus, lors de l'exécution d'opérations de découpage qui n'affectent pas les extensions, la synchronisation complète est désactivée, ce qui réduit la durée de l'opération de 12 %. Un paramètre a été ajouté à sysfs pour limiter la bande passante d'E/S lors de la vérification du FS. Ajout d'appels ioctl pour annuler les opérations de redimensionnement et de suppression de périphérique ;
    • dans XFS retravaillé mise en place d'un cache tampon, qui est transféré à l'allocation des pages mémoire en mode batch. Efficacité du cache améliorée ;
    • F2FS a ajouté une option pour fonctionner en mode lecture seule et implémenté un mode de mise en cache de blocs compressés (compress_cache) pour améliorer les performances de lecture aléatoire. La prise en charge a été implémentée pour la compression des fichiers mappés en mémoire à l'aide de l'opération mmap(). Pour désactiver sélectivement la compression de fichiers par masque, une nouvelle option de montage nocompress a été proposée ;
    • des travaux ont été effectués dans le pilote exFAT pour améliorer la compatibilité avec le stockage de certains appareils photo numériques ;
    • appel système ajouté quotactl_fd(), qui vous permet de gérer les quotas non pas via un fichier de périphérique spécial, mais en spécifiant un descripteur de fichier associé au système de fichiers pour lequel le quota est appliqué ;
    • Les anciens pilotes pour les périphériques bloc avec l'interface IDE ont été supprimés du noyau et ont depuis longtemps été remplacés par le sous-système libata. La prise en charge des anciens appareils a été conservée dans son intégralité, les modifications concernent uniquement la possibilité d'utiliser les anciens pilotes, lors de l'utilisation desquels les lecteurs étaient appelés /dev/hd*, et non /dev/sd* ;
    • Le pilote « brut » a été supprimé du noyau, offrant un accès sans tampon aux périphériques de blocage via l'interface /dev/raw. Cette fonctionnalité est implémentée depuis longtemps dans les applications utilisant l'indicateur O_DIRECT ;
  • services mémoire et système :
    • un nouveau mode de planification a été implémenté dans le planificateur de tâches SCHED_CORE, qui vous permet de contrôler quels processus peuvent s'exécuter ensemble sur le même cœur de processeur. Chaque processus peut se voir attribuer un identifiant de cookie qui définit l'étendue de la confiance entre les processus (par exemple, appartenant au même utilisateur ou conteneur). Lors de l'organisation de l'exécution du code, le planificateur peut garantir qu'un cœur de processeur est partagé uniquement entre les processus associés au même propriétaire, ce qui peut être utilisé pour bloquer certaines attaques Spectre en empêchant l'exécution de tâches dignes de confiance et non fiables sur le même thread SMT (Hyper Threading). ;
    • pour le mécanisme cgroup, la prise en charge de l'opération kill a été implémentée, ce qui permet de tuer tous les processus associés au groupe à la fois (envoyer SIGKILL) en écrivant « 1 » dans le fichier virtuel cgroup.kill ;
    • capacités étendues liées à la réponse à la détection de verrous fractionnés (« verrous fractionnés ») qui se produisent 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, il était donc auparavant possible de mettre fin de force à l'application à l'origine du blocage. La nouvelle version ajoute le paramètre de ligne de commande du noyau « split_lock_detect=ratelimit:N », qui vous permet de définir une limite à l'échelle du système sur le taux d'opérations de verrouillage par seconde, après quoi tout processus devenu la source d'un verrou partagé sera être obligé de s'arrêter pendant 20 ms au lieu de terminer ;
    • Le contrôleur de bande passante de groupe de contrôle CFS (contrôleur de bande passante CFS), qui détermine la quantité de temps processeur pouvant être allouée à chaque groupe de contrôle, a la capacité de définir des limites limitées par une durée d'action donnée, ce qui permet une meilleure régulation des charges sensibles à la latence. Par exemple, définir cpu.cfs_quota_us sur 50000 100000 et cpu.cfs_period_us sur 100 50 permettra à un groupe de processus de perdre XNUMX ms de temps CPU toutes les XNUMX ms ;
    • ajoutée infrastructure initiale pour créer des chargeurs de programmes BPF, qui permettront en outre de télécharger uniquement des programmes BPF signés avec une clé numérique fiable ;
    • ajout d'une nouvelle opération futex FUTEX_LOCK_PI2, qui utilise une minuterie monotone pour calculer le délai d'attente, qui prend en compte le temps passé par le système en mode veille ;
    • pour l'architecture RISC-V, prise en charge des grandes pages de mémoire (Transparent Huge-Pages) et possibilité d'utiliser le CLTURE identifier les erreurs lorsque vous travaillez avec la mémoire ;
    • dans l'appel système madvise(), qui fournit un moyen d'optimiser la gestion de la mémoire des processus, ajoutée Indicateurs MADV_POPULATE_READ et MADV_POPULATE_WRITE pour générer une « erreur de page » sur toutes les pages mémoire mappées pour les opérations de lecture ou d'écriture, sans effectuer de lecture ou d'écriture réelle (préfaut). L'utilisation de drapeaux peut être utile pour réduire les délais d'exécution du programme, grâce à l'exécution proactive du gestionnaire « page default » pour toutes les pages non allouées à la fois, sans attendre l'accès effectif à celles-ci ;
    • dans un système de tests unitaires kunit ajoutée prise en charge de l'exécution de tests dans l'environnement QEMU ;
    • nouveaux traceurs ajoutés : "osnoise" pour suivre les retards d'application causés par la gestion des interruptions, et " timerlat " pour afficher des informations détaillées sur les retards lors du réveil après un signal de minuterie ;
  • virtualisation et sécurité :
    • ajoutée appel système memfd_secret(), qui permet de créer une zone mémoire privée dans un espace d'adressage isolé, visible uniquement par le processus propriétaire, non reflétée dans les autres processus et non directement accessible au noyau ;
    • dans le système de filtrage des appels système seccomp, lors du déplacement des gestionnaires de verrous dans l'espace utilisateur, il est possible d'utiliser une opération atomique pour créer un descripteur de fichier pour une tâche isolée et de le renvoyer lors du traitement d'un appel système. L'opération proposée résout problème avec interruption du gestionnaire dans l'espace utilisateur lorsqu'un signal arrive ;
    • ajoutée nouveau mécanisme pour gérer la limitation des ressources dans l'espace de noms de l'ID utilisateur, qui lie les compteurs rlimit individuels à un utilisateur dans « l'espace de noms utilisateur ». Le changement résout le problème de l'utilisation de compteurs de ressources communs lorsqu'un utilisateur exécute des processus dans différents conteneurs ;
    • l'hyperviseur KVM pour les systèmes ARM64 a ajouté la possibilité d'utiliser l'extension MTE (MemTag, Memory Tagging Extension) dans les systèmes invités, ce qui permet de lier des balises à chaque opération d'allocation de mémoire et d'organiser la vérification de la bonne utilisation des pointeurs pour bloquer l'exploitation de vulnérabilités causées par l'accès à des blocs mémoire déjà libérés, les débordements de tampons, les accès avant initialisation et l'utilisation en dehors du contexte actuel ;
    • L'authentification par pointeur fournie par la plate-forme ARM64 peut désormais être configurée séparément pour le noyau et l'espace utilisateur. La technologie vous permet d'utiliser des instructions ARM64 spécialisées pour vérifier les adresses de retour à l'aide de signatures numériques stockées dans les bits supérieurs inutilisés du pointeur lui-même ;
    • sous Linux en mode utilisateur ajoutée prise en charge de l'utilisation de pilotes pour périphériques PCI avec un bus PCI virtuel, implémenté par le pilote PCI-over-virtio ;
    • pour les systèmes x86, ajout de la prise en charge du périphérique paravirtualisé virtio-iommu, qui vous permet d'envoyer des requêtes IOMMU, telles que ATTACH, DETACH, MAP et UNMAP, via le transport virtio sans émuler les tables de pages mémoire ;
    • Pour les processeurs Intel, de la famille Skylake à Coffee Lake, l'utilisation d'Intel TSX (Transactional Synchronization Extensions), qui fournissent des outils permettant d'améliorer les performances des applications multithread en éliminant dynamiquement les opérations de synchronisation inutiles, est désactivée par défaut. Les extensions sont désactivées en raison de la possibilité d'attaques Zombieload, en manipulant les fuites d'informations via des canaux tiers qui se produisent lors du fonctionnement du mécanisme d'interruption asynchrone des opérations (TAA, TSX Asynchronous Abort) ;
  • sous-système réseau :
    • poursuite de l'intégration au cœur de MPTCP (MultiPath TCP), une extension du protocole TCP permettant d'organiser le fonctionnement d'une connexion TCP avec la livraison de paquets simultanément sur plusieurs routes via différentes interfaces réseau associées à différentes adresses IP. Dans le nouveau numéro ajoutée un mécanisme permettant de définir vos propres politiques de hachage de trafic pour IPv4 et IPv6 (politique de hachage multipath), permettant depuis l'espace utilisateur de déterminer quels champs des paquets, y compris ceux encapsulés, seront utilisés lors du calcul du hachage qui détermine le choix du chemin pour le paquet ;
    • la prise en charge des sockets a été ajoutée au virtio de transport virtuel SOCK_SEQPACKET (transmission ordonnée et fiable des datagrammes) ;
    • Les capacités du mécanisme de socket SO_REUSEPORT ont été étendues, ce qui permet à plusieurs sockets d'écoute de se connecter à un port à la fois pour recevoir des connexions avec la répartition des requêtes entrantes simultanément sur toutes les sockets connectées via SO_REUSEPORT, ce qui simplifie la création d'applications serveur multi-thread. . Dans la nouvelle version ajoutée des moyens pour transférer le contrôle vers une autre socket en cas d'échec lors du traitement d'une requête par la socket initialement sélectionnée (résout le problème de la perte de connexions individuelles lors du redémarrage des services) ;
  • équipement:
    • dans le pilote amdgpu mis en œuvre prise en charge de la nouvelle série de GPU AMD Radeon RX 6000, nom de code « Beige Goby » (Navi 24) et « Yellow Carp », ainsi qu'une prise en charge améliorée du GPU Aldebaran (gfx90a) et de l'APU Van Gogh. Ajout de la possibilité de travailler simultanément avec plusieurs panneaux eDP. Pour l'APU Renoir, la prise en charge du travail avec des tampons cryptés dans la mémoire vidéo (TMZ, Trusted Memory Zone) a été implémentée. Ajout de la prise en charge des cartes graphiques déconnectables à chaud. Pour les GPU Radeon RX 6000 (Navi 2x) et les anciens GPU AMD, la prise en charge du mécanisme d'économie d'énergie ASPM (Active State Power Management) est activée par défaut, ce qui n'était auparavant activé que pour les GPU Navi 1x, Vega et Polaris ;
    • pour les puces AMD, la prise en charge de la mémoire virtuelle partagée (SVM, mémoire virtuelle partagée) a été ajoutée sur la base du sous-système HMM (Heterogeneous memory management), qui permet l'utilisation d'appareils 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. Y compris 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 ;
    • ajout d'un support technologique initial Changement intelligent AMD, qui modifie dynamiquement les paramètres de consommation électrique du CPU et du GPU sur les ordinateurs portables équipés d'un chipset et d'une carte graphique AMD pour améliorer les performances lors des jeux, du montage vidéo et du rendu 3D ;
    • dans le pilote i915 pour les cartes vidéo Intel inclus prise en charge des puces Intel Alderlake P ;
    • ajout du pilote drm/hyperv pour l'adaptateur graphique virtuel Hyper-V ;
    • ajoutée Pilote graphique simpledrm qui utilise le framebuffer EFI-GOP ou VESA fourni par le micrologiciel UEFI ou le BIOS pour la sortie. L'objectif principal du pilote est de fournir des capacités de sortie graphique pendant les étapes initiales du démarrage, avant qu'un pilote DRM complet puisse être utilisé. Le pilote peut également être utilisé comme solution temporaire pour les équipements qui ne disposent pas encore de pilotes DRM natifs ;
    • ajoutée support informatique tout-en-un Raspberry Pi 400;
    • Ajout du pilote Dell-wmi-privacy pour prendre en charge les commutateurs matériels de caméra et de microphone inclus dans les ordinateurs portables Dell ;
    • pour les ordinateurs portables Lenovo ajoutée Interface WMI pour modifier les paramètres du BIOS via sysfs /sys/class/firmware-attributes/ ;
    • étendu prise en charge des appareils avec interface USB4 ;
    • ajoutée prise en charge des cartes son et codecs AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 et Texas Instruments TAS2505. Prise en charge audio améliorée sur les ordinateurs portables HP et ASUS. Ajoutée des correctifs pour réduire les délais avant le début de la lecture audio sur les appareils dotés d'une interface USB.

Source – opennet.ru.

Source: linux.org.ru