Sortie du noyau Linux 5.14

Après deux mois de développement, Linus Torvalds a présenté la version du noyau Linux 5.14. Parmi les changements les plus notables : les nouveaux appels système quotactl_fd() et memfd_secret(), la suppression des pilotes ide et raw, un nouveau contrôleur de priorité d'entrée/sortie pour les cgroups, le mode de planification de tâches SCHED_CORE, et l'infrastructure pour créer des chargeurs de programmes BPF vérifiés.

La nouvelle version intègre 15 883 corrections de la part de 2002 développeurs, la taille du patch étant de 69 Mo (les changements ont concerné 12 580 fichiers, ajoutant 861 501 lignes de code, et supprimant 321 654 lignes). Environ 47 % de tous les changements présentés dans 5.14 concernent les pilotes de périphériques, environ 14 % sont liés à la mise à jour du code spécifique à des architectures matérielles, 13 % concernent la pile réseau, et 3 % sont liés aux systèmes de fichiers et 3 % aux sous-systèmes internes du noyau.

Les principales nouveautés :

  • Sous-système de disque, entrée/sortie et systèmes de fichiers
    • Pour les cgroups, un nouveau contrôleur de priorisation d'entrée/sortie — rq-qos — a été mis en œuvre, permettant de gérer la priorité de traitement des requêtes vers des dispositifs de stockage, générées par les membres de chaque cgroup. Le support de ce nouveau contrôleur de priorité a été ajouté au planificateur d'entrée/sortie mq-deadline.
    • Dans le système de fichiers ext4, une nouvelle commande ioctl EXT4_IOC_CHECKPOINT a été mise en œuvre, forçant l'écriture sur disque de toutes les transactions en attente du journal et des tampons associés, ainsi que réécrivant la zone utilisée par le journal dans le stockage. Ce changement a été préparé dans le cadre d'une initiative visant à prévenir les fuites d'informations à partir des systèmes de fichiers.
    • Des optimisations de performance ont été apportées à Btrfs : grâce à l'élimination de la journalisation inutile des attributs étendus lors de l'exécution de fsync, les performances des opérations intensives sur les attributs étendus ont été améliorées jusqu'à 17 %. De plus, lors de l'exécution d'opérations de réduction ne touchant pas les étendues, l'exécution d'une synchronisation complète a été désactivée, ce qui a réduit le temps d'exécution de l'opération de 12 %. Une configuration a été ajoutée dans sysfs pour limiter la bande passante d'entrée/sortie lors de la vérification du système de fichiers. Des appels ioctl ont été ajoutés pour annuler les opérations de redimensionnement et de suppression de dispositifs.
    • Dans XFS, la mise en œuvre du cache tampon a été repensée, passant à l'allocation de pages de mémoire en mode par lot. L'efficacité du cache a été améliorée.
    • Dans F2FS, une option a été ajoutée pour le fonctionnement en mode lecture seule et un mode de mise en cache des blocs compressés (compress_cache) a été mis en œuvre pour améliorer les performances de lecture aléatoire. La prise en charge de la compression des fichiers mappés en mémoire à l'aide de l'opération mmap() a été réalisée. Une nouvelle option de montage, nocompress, a été proposée pour désactiver sélectivement la compression des fichiers sur la base d'un masque.
    • Dans le pilote exFAT, des améliorations ont été apportées à la compatibilité avec le stockage de certaines caméras numériques.
    • Un appel système, quotactl_fd(), a été ajouté, permettant de gérer les quotas non pas via un fichier de périphérique spécial, mais en spécifiant un descripteur de fichier lié au système de fichiers auquel le quota s'applique.
    • Les anciens pilotes pour les périphériques de disque utilisant l'interface IDE ont été supprimés du noyau, remplacés depuis longtemps par la sous-système libata.
    • Le pilote « raw », offrant un accès non tamponné aux périphériques de bloc via l'interface /dev/raw, a été supprimé du noyau. Cette fonctionnalité est depuis longtemps mise en œuvre dans les applications à l'aide du drapeau O_DIRECT.
  • Mémoire et services système
    • Dans le planificateur de tâches, un nouveau mode de planification SCHED_CORE a été implémenté, permettant de gérer les processus pouvant s'exécuter ensemble sur un même cœur de CPU. À chaque processus, un identifiant cookie peut être attribué, déterminant le domaine de confiance entre les processus (par exemple, appartenance à un même utilisateur ou conteneur). Lors de l'organisation de l'exécution du code, le planificateur peut assurer le partage d'un même cœur de CPU uniquement pour les processus liés à un seul propriétaire, ce qui peut être utilisé pour bloquer certaines attaques de type Spectre en empêchant l'exécution, dans un même thread SMT (Hyper Threading), de tâches de confiance et de défiance.
    • Pour cgroup, le support de l'opération kill a été implémenté, permettant de terminer simultanément tous les processus associés au groupe (envoyer SIGKILL) en écrivant « 1 » dans le fichier virtuel cgroup.kill.
    • Les capacités liées à la réponse à la détection des blocages fractionnés (« split lock »), qui se produisent lors d'un 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 de cache CPU, ont été étendues. De tels blocages entraînent une baisse significative des performances, ce qui auparavant permettait de forcer la fermeture de l'application à l'origine du blocage. Dans la nouvelle version, un paramètre de ligne de commande du noyau « split_lock_detect=ratelimit:N » a été ajouté, permettant de définir une limite de taux d'opérations de blocage par seconde, après laquelle tout processus à l'origine d'un blocage fractionné sera forcé de s'arrêter pendant 20 ms au lieu d'être terminé.
    • Dans le contrôleur de groupe de contrôle de bande passante CFS (CFS bandwidth controller), qui définit combien de temps CPU peut être alloué à chaque cgroup, il est désormais possible de définir des limites restreintes temporellement, permettant de mieux réguler les charges sensibles aux retard. Par exemple, définir la valeur cpu.cfs_quota_us à 50000 et cpu.cfs_period_us à 100000 permettra à un groupe de processus de dépenser 50 ms de temps CPU toutes les 100 ms.
    • Une infrastructure initiale pour la création de chargeurs de programmes BPF a été ajoutée, ce qui permettra à l'avenir de n'autoriser le chargement que des programmes BPF signés par une clé numérique de confiance.
    • Une nouvelle opération futex FUTEX_LOCK_PI2 a été ajoutée, utilisant un chronomètre monotone pour calculer le délai d'expiration, qui prend en compte le temps passé par le système en état de sommeil.
    • Pour l'architecture RISC-V, un support pour les grandes pages mémoire (Transparent Huge-Pages) et la possibilité d'appliquer le mécanisme KFENCE pour détecter les erreurs lors de l'utilisation de la mémoire ont été implémentés.
    • L'appel système madvise() a été amélioré avec l'ajout des drapeaux MADV_POPULATE_READ et MADV_POPULATE_WRITE, permettant de générer des « page faults » pour toutes les pages de mémoire en attente de lecture ou d'écriture, sans effectuer de véritables opérations de lecture ou d'écriture (prefault). L'utilisation de ces drapeaux peut être bénéfique pour réduire les latences lors de l'exécution d'un programme, en prévenant le gestionnaire de « page fault » pour toutes les pages non allouées, sans attendre l'accès effectif à celles-ci.
    • Le système de tests unitaires kunit a été mis à jour pour prendre en charge l'exécution des tests dans un environnement QEMU.
    • De nouveaux traceurs ont été ajoutés : « osnoise » pour suivre les latences dans les applications causées par le traitement d'interruptions, et « timerlat » pour fournir des informations détaillées sur les latences lors des réveils dus aux signaux de minuterie.
  • Virtualisation et sécurité
    • Un nouvel appel système memfd_secret() a été introduit, permettant de créer une zone de mémoire privée dans un espace d'adresses isolé, visible uniquement par le processus propriétaire, non reflétée dans d'autres processus et inaccessible directement par le noyau.
    • Dans le système de filtrage des appels système seccomp, en déplaçant les gestionnaires de blocage dans l'espace utilisateur, il est désormais possible d'utiliser une seule opération atomique pour créer un descripteur de fichier pour une tâche isolée et le renvoyer durant le traitement de l'appel système. Cette opération résout le problème d'interruption du gestionnaire dans l'espace utilisateur lors de la réception d'un signal.
    • Un nouveau mécanisme de gestion des restrictions de ressources dans l'espace de noms d'identification des utilisateurs a été ajouté, permettant d'associer des compteurs rlimit spécifiques à chaque utilisateur dans le « user namespace ». Ce changement résout le problème de l'application des compteurs de ressources partagés lors de l'exécution de processus par un même utilisateur dans différents conteneurs.
    • Dans l'hyperviseur KVM Pour les systèmes ARM64, la possibilité d'utiliser dans les systèmes invités l'extension MTE (MemTag, Memory Tagging Extension) a été ajoutée, permettant d'attacher des balises à chaque opération d'allocation de mémoire et d'organiser la vérification de l'utilisation correcte des pointeurs pour bloquer l'exploitation des vulnérabilités causées par l'accès à des blocs de mémoire déjà libérés, des débordements de tampon, des accès avant initialisation, et des utilisations en dehors du contexte actuel.
    • Les moyens d'authentification de pointeurs (Pointer Authentication) fournis par la plateforme ARM64 peuvent désormais être configurés séparément pour le noyau et l'espace utilisateur. Cette technologie permet d'utiliser des instructions ARM64 spécialisées pour vérifier les adresses de retour à l'aide de signatures numériques, qui sont stockées dans les bits supérieurs inutilisés du pointeur lui-même.
    • User-mode Linux a ajouté le support de l'utilisation de pilotes pour les appareils PCI avec un bus PCI virtuel, mis en œuvre par le pilote PCI-over-virtio.
    • Pour les systèmes x86, le dispositif paravirtualisé virtio-iommu a été ajouté, permettant d'envoyer des requêtes IOMMU telles que ATTACH, DETACH, MAP et UNMAP à travers le transport virtio sans émulation des tables de pages mémoire.
    • Pour les processeurs Intel, à partir de la famille Skylake jusqu'à Coffee Lake, l'utilisation des extensions Intel TSX (Transactional Synchronization Extensions) est par défaut désactivée, car elles fournissent des moyens d'améliorer les performances des applications multithreads en éliminant dynamiquement les opérations de synchronisation superflues. Ces extensions sont désactivées en raison de la possibilité d'attaques Zombieload, qui manipulent des fuites d'informations par canaux auxiliaires lors de l'utilisation du mécanisme d'interruption asynchrone des opérations (TAA, TSX Asynchronous Abort).
  • Sous-système réseau
    • L'intégration du noyau MPTCP (MultiPath TCP) se poursuit, une extension du protocole TCP pour gérer les connexions TCP avec la livraison de paquets simultanément par plusieurs chemins à travers différentes interfaces réseau, liées à différentes adresses IP. Dans cette nouvelle version, un mécanisme a été ajouté pour définir des politiques de hachage de trafic personnalisées pour IPv4 et IPv6 (multipath hash policy), permettant de spécifier depuis l'espace utilisateur quels champs des paquets, y compris les paquets encapsulés, seront utilisés pour le calcul du hachage déterminant le choix du chemin pour le paquet.
    • Le transport virtio a ajouté le support des sockets SOCK_SEQPACKET (transmission ordonnée et fiable de datagrammes).
    • Les capacités du mécanisme de sockets SO_REUSEPORT ont été étendues, permettant à plusieurs sockets d'écoute de se connecter au même port pour accepter des connexions, tout en répartissant les requêtes entrantes simultanément entre tous les sockets connectés via SO_REUSEPORT, ce qui facilite la création d'applications serveur multithreadées. La nouvelle version inclut des outils pour transférer le contrôle à un autre socket en cas d'échec lors du traitement d'une requête par le socket initialement choisi (résolvant ainsi le problème de la perte de certaines connexions lors du redémarrage des services).
  • Matériel
    • Le pilote amdgpu prend en charge les nouvelles séries de GPU AMD Radeon RX 6000, développées sous les noms de code « Beige Goby » (Navi 24) et « Yellow Carp », ainsi qu'une prise en charge améliorée des GPU Aldebaran (gfx90a) et APU Van Gogh. La possibilité de travailler simultanément avec plusieurs panneaux eDP a été ajoutée. Pour les APU Renoir, la prise en charge des buffers chiffrés en mémoire vidéo (TMZ, Trusted Memory Zone) a été introduite. La prise en charge du retrait à chaud des cartes graphiques (hot-unplug) a été ajoutée. 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, qui était auparavant activée uniquement pour les GPU Navi 1x, Vega et Polaris.
    • Pour les puces AMD, la prise en charge de la mémoire virtuelle partagée (SVM, shared virtual memory) basée sur le sous-système HMM (Heterogeneous memory management) a été ajoutée, permettant d'utiliser des dispositifs avec leurs propres unités de gestion de la mémoire (MMU, memory management unit), qui peuvent accéder à la mémoire principale. Grâce à HMM, il est également possible d'organiser un espace d'adressage commun entre le GPU et le CPU, où le GPU peut accéder à la mémoire principale du processus.
    • La prise en charge initiale de la technologie AMD Smart Shift a été ajoutée, modifiant dynamiquement les paramètres de consommation d'énergie du CPU et du GPU sur les ordinateurs portables avec chipset et carte graphique AMD pour optimiser les performances lors des jeux, du montage vidéo et du rendu 3D.
    • Dans le pilote i915 pour les cartes graphiques Intel, la prise en charge des puces Intel Alder Lake P a été ajoutée.
    • Un pilote drm/hyperv pour l'adaptateur graphique virtuel Hyper-V a été ajouté.
    • La prise en charge de l'ordinateur tout-en-un Raspberry Pi 400 a été ajoutée.
    • Le pilote dell-wmi-privacy a été ajouté pour prendre en charge les interrupteurs matériels de caméra et de microphone fournis dans les ordinateurs portables Dell.
    • Pour les ordinateurs portables Lenovo, une interface WMI a été ajoutée pour modifier les paramètres du BIOS via sysfs /sys/class/firmware-attributes/.
    • Prise en charge étendue des appareils avec interface USB4.
    • Ajout de la prise en charge des cartes son et des codec AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 et Texas Instruments TAS2505. Amélioration de la prise en charge audio sur les ordinateurs portables HP et ASUS. Ajout de correctifs pour réduire les délais avant le début de la lecture audio sur les appareils avec interface USB.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster