AprÚs deux mois de développement, Linus Torvalds présenté version du noyau Linux 5.14. Parmi les changements notables : nouveaux appels systÚme quotactl_fd() et memfd_secret(), suppression des pilotes ide et raw, nouveau contrÎleur de priorités d'entrée/sortie 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 corrections apportées par 2002 développeurs, la taille du patch est de 69 Mo (les modifications concernent 12580 fichiers, 861501 lignes de code ajoutées et 321654 lignes supprimées). Environ 47 % de toutes les modifications présentées dans 5.14 sont liées aux pilotes de périphériques, environ 14 % des modifications concernent la mise à jour du code spécifique aux architectures matérielles, 13 % sont liées à la pile réseau, 3 % aux systÚmes de fichiers et 3 % aux sous-systÚmes internes du noyau.
- sous-systÚme de disque, entrée/sortie et systÚmes de fichiers :
- pour cgroup mis en Ćuvre nouveau contrĂŽleur de priorisation d'entrĂ©e/sortie â rq-qos, qui peut gĂ©rer la prioritĂ© de traitement des requĂȘtes aux dispositifs de bloc 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 réalisée nouvelle commande ioctl EXT4_IOC_CHECKPOINT, forçant l'écriture sur disque de toutes les transactions en attente du journal et des tampons qui y sont associés, ainsi que la réécriture de 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 des systÚmes de fichiers ;
- dans Btrfs ajoutés optimisations des performances : grùce à l'élimination du journalisation superflue des attributs étendus lors de l'exécution de fsync, la performance des opérations intensives sur les attributs étendus a été améliorée jusqu'à 17 %. De plus, lors des opérations de troncation, ne touchant pas les étendues, l'exécution de la synchronisation complÚte a été désactivée, réduisant le temps d'exécution de l'opération de 12 %. Une option a été ajoutée dans sysfs pour limiter la bande passante d'entrée/sortie lors de la vérification du FS. Des appels ioctl ont été ajoutés pour annuler les opérations de redimensionnement et de suppression de dispositif ;
- dans XFS restructurée implémentation du cache tampon, qui a été révisée pour allouer des pages mémoire en mode batch. L'efficacité du cache a été améliorée ;
- Dans F2FS, une option a Ă©tĂ© ajoutĂ©e pour fonctionner 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 compression des fichiers mappĂ©s en mĂ©moire via l'opĂ©ration mmap() est prise en charge. Une nouvelle option de montage nocompress a Ă©tĂ© proposĂ©e pour dĂ©sactiver sĂ©lectivement la compression des fichiers par masque;
- Des travaux ont été réalisés sur le pilote exFAT pour améliorer la compatibilité avec le stockage de certaines caméras numériques;
- Un appel systÚme a été ajouté quotactl_fd(), qui permet de gérer les quotas non pas par un fichier de périphérique spécial, mais par la spécification d'un descripteur de fichier associé au systÚme de fichiers pour lequel le quota s'applique;
- Les anciens pilotes pour les dispositifs de bloc avec interface IDE ont été supprimés du noyau, remplacés depuis longtemps par le sous-systÚme libata. Le support des anciens dispositifs est conservé dans son intégralité, les modifications concernent uniquement la possibilité d'utiliser les anciens pilotes, pour lesquels les stockage étaient nommés /dev/hd*, et non /dev/sd*;
- Le pilote « raw », fournissant un accĂšs non tamponnĂ© aux dispositifs de bloc via l'interface /dev/raw, a Ă©tĂ© supprimĂ© du noyau. Cette fonctionnalitĂ© est mise en Ćuvre depuis longtemps dans les applications Ă l'aide du drapeau O_DIRECT;
- Mémoire et services systÚme :
- Un nouveau mode de planification SCHED_CORE, a Ă©tĂ© mis en Ćuvre dans le planificateur de tĂąches, permettant de gĂ©rer quels processus peuvent s'exĂ©cuter en parallĂšle sur un mĂȘme cĆur CPU. Ă chaque processus peut ĂȘtre attribuĂ© un identifiant cookie, dĂ©finissant le domaine de confiance entre les processus (par exemple, appartenant Ă 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 CPU uniquement pour les processus liĂ©s Ă un mĂȘme propriĂ©taire, ce qui peut ĂȘtre utilisĂ© pour bloquer certaines attaques de type Spectre en empĂȘchant l'exĂ©cution dans un mĂȘme flux SMT (Hyper-Threading) de tĂąches dignes de confiance et non dignes de confiance;
- Pour le mĂ©canisme cgroup, le support de l'opĂ©ration kill a Ă©tĂ© mis en Ćuvre, permettant de terminer tous les processus liĂ©s au groupe en une seule fois (envoyer SIGKILL) en Ă©crivant « 1 » dans le fichier virtuel cgroup.kill;
- Les capacitĂ©s liĂ©es Ă la dĂ©tection des blocages fractionnĂ©s (« split lock »), qui se produisent lors de l'accĂšs Ă des donnĂ©es non alignĂ©es en mĂ©moire du fait que, lors de l'exĂ©cution d'instructions atomiques, les donnĂ©es traversent deux lignes de cache du CPU, ont Ă©tĂ© Ă©tendues. De tels blocages entraĂźnent une chute significative des performances, c'est pourquoi auparavant il Ă©tait possible de forcer la fermeture de l'application Ă l'origine du blocage. Dans cette nouvelle version, un paramĂštre de ligne de commande du noyau « split_lock_detect=ratelimit:N » a Ă©tĂ© ajoutĂ©, permettant de dĂ©finir la limite d'intensitĂ© des opĂ©rations de blocage par seconde pour l'ensemble du systĂšme. Lorsque cette limite est dĂ©passĂ©e, tout processus Ă l'origine d'un blocage fractionnĂ© sera suspendu pendant 20 ms au lieu d'ĂȘtre arrĂȘtĂ©.
- Dans le contrĂŽleur de bande passante CFS (CFS bandwidth controller), qui dĂ©termine combien de temps processeur peut ĂȘtre attribuĂ© Ă chaque cgroup, il est dĂ©sormais possible de dĂ©finir des limites dĂ©terminĂ©es par une durĂ©e d'action, ce qui permet de mieux rĂ©guler les charges sensibles aux latences. Par exemple, paramĂ©trer la valeur cpu.cfs_quota_us Ă 50000 et cpu.cfs_period_us Ă 100000 permettra Ă un groupe de processus d'utiliser 50 ms de temps CPU toutes les 100 ms.
- ajouté Une infrastructure initiale pour créer des chargeurs de programmes BPF, qui permettra ultérieurement de n'autoriser que le chargement de 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 minuteur monotone pour calculer le délai d'expiration, tenant compte du temps passé par le systÚme en mode veille.
- Un support pour les grandes pages mémoire (Transparent Huge-Pages) et la possibilité d'appliquer le mécanisme KFENCE pour la détection d'erreurs lors de l'utilisation de la mémoire.
- Dans l'appel systĂšme madvise(), fournissant des moyens pour optimiser la gestion de la mĂ©moire du processus, ajoutĂ©es les indicateurs MADV_POPULATE_READ et MADV_POPULATE_WRITE pour gĂ©nĂ©rer des « page fault » dans toutes les pages mĂ©moire concernĂ©es pour les opĂ©rations de lecture ou d'Ă©criture, sans effectuer de lecture ou d'Ă©criture rĂ©elle (prefault). L'utilisation de ces indicateurs peut ĂȘtre utile pour rĂ©duire les latences lors du fonctionnement du programme, en permettant l'exĂ©cution anticipĂ©e du gestionnaire de « page fault » pour toutes les pages non allouĂ©es, sans attendre lâaccĂšs effectif Ă celles-ci.
- dans le systÚme de test unitaire kunit ajouté prise en charge du lancement de tests dans l'environnement QEMU;
- de nouveaux traceurs ont été ajoutés : «osnoise» pour suivre les latences dans les applications causées par le traitement des interruptions, et «timerlat» pour fournir des informations détaillées sur les latences lors des réveils par signal de minuterie;
- virtualisation et sécurité :
- ajouté appel systÚme memfd_secret(), qui permet de créer une zone mémoire privée dans un espace d'adresses isolé, visible uniquement par le processus propriétaire, non répercutée dans d'autres processus et directement inaccessible au noyau;
- dans le systÚme de filtrage des appels systÚme seccomp, lors du déplacement des 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 la tùche isolée et de le renvoyer lors du traitement de l'appel systÚme. L'opération proposée résout le problÚme avec l'interruption du gestionnaire dans l'espace utilisateur lors de la réception d'un signal;
- ajouté un nouveau mécanisme pour gérer la limitation des ressources dans l'espace de noms des identifiants utilisateur, qui lie des compteurs rlimit individuels à l'utilisateur dans le «user namespace». Ce changement résout le problÚme de l'application de compteurs de ressources partagés lors du lancement par un utilisateur de processus 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 des accÚs à des blocs de mémoire déjà libérés, des débordements de tampon, des accÚs avant initialisation et une utilisation hors du contexte actuel;
- les outils d'authentification des pointeurs fournis par la plateforme ARM64 peuvent maintenant ĂȘtre configurĂ©s sĂ©parĂ©ment pour le noyau et l'espace utilisateur. La 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 non utilisĂ©s du pointeur lui-mĂȘme;
- dans User-mode Linux ajouté prise en charge de l'utilisation de pilotes pour des périphériques PCI avec un bus PCI virtuel, réalisé par le pilote PCI-over-virtio;
- Un support pour le dispositif paravirtualisĂ© virtio-iommu a Ă©tĂ© ajoutĂ© pour les systĂšmes x86, permettant d'envoyer des requĂȘtes IOMMU telles que ATTACH, DETACH, MAP et UNMAP, au-dessus du transport virtio sans Ă©mulation des tables de pages mĂ©moire ;
- Pour les processeurs Intel, depuis la famille Skylake jusqu'à Coffee Lake, l'utilisation des extensions Intel TSX (Transactional Synchronization Extensions) est désactivée par défaut, fournissant des moyens d'améliorer la performance des applications multithreads par l'exception dynamique des opérations de synchronisation excessives. Les extensions sont désactivées en raison de la possibilité d'attaques Zombieload, manipulant les fuites d'informations par des canaux secondaires, résultant du fonctionnement du mécanisme d'interruption asynchrone des opérations (TAA, TSX Asynchronous Abort) ;
- sous-systÚme réseau :
- L'intégration dans le noyau MPTCP (MultiPath TCP), une extension du protocole TCP permettant de faire fonctionner une connexion TCP avec la livraison des paquets simultanément par plusieurs chemins à travers différentes interfaces réseau reliées à différentes adresses IP, se poursuit. Dans cette nouvelle version ajouté un mécanisme pour définir ses propres politiques de hachage du trafic pour IPv4 et IPv6 (multipath hash policy), permettant depuis l'espace utilisateur de déterminer quels champs des paquets, y compris les incapsulés, seront utilisés lors du calcul du hachage déterminant le chemin à suivre pour le paquet ;
- Un support pour les sockets SOCK_SEQPACKET (transmission ordonnée et fiable des datagrammes) a été ajouté au transport virtio ;
- Les capacitĂ©s du mĂ©canisme de sockets SO_REUSEPORT ont Ă©tĂ© Ă©tendues, permettant Ă plusieurs sockets Ă l'Ă©coute de se connecter Ă un mĂȘme port pour accepter les connexions avec une distribution des requĂȘtes entrantes simultanĂ©ment sur tous les sockets connectĂ©s via SO_REUSEPORT, facilitant ainsi la crĂ©ation d'applications serveur multithread. Dans cette nouvelle version ajoutĂ©es 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 sĂ©lectionnĂ© (rĂ©solvant le problĂšme de perte de connexions individuelles lors du redĂ©marrage des services) ;
- matériel :
- dans le pilote amdgpu réalisée prise en charge des nouvelles séries de GPU AMD Radeon RX 6000, développés sous les noms de code « Beurre Goby » (Navi 24) et « Carpe Jaune », ainsi qu'une meilleure prise en charge des GPU Aldebaran (gfx90a) et APU Van Gogh. Ajout de la possibilité de travailler simultanément avec plusieurs panneaux eDP. Pour APU Renoir, prise en charge de l'utilisation de tampons cryptés dans la mémoire vidéo (TMZ, Trusted Memory Zone). Ajout de la prise en charge du retrait à chaud des cartes graphiques (hot-unplug). 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. Notamment, grùce à HMM, il est possible d'organiser un espace d'adressage commun entre le GPU et le CPU, dans lequel le GPU peut accéder à la mémoire principale du processus;
- prise en charge initiale de la technologie AMD Smart Shift, qui change dynamiquement les paramÚtres de consommation d'énergie du CPU et du GPU sur les ordinateurs portables doté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 driver i915 pour les cartes graphiques Intel sont incluses. prise en charge des puces Intel Alderlake P;
- ajout d'un driver drm/hyperv pour le pilote graphique virtuel Hyper-V;
- ajoutĂ© driver graphique simpledrm, utilisant le framebuffer EFI-GOP ou VESA, fourni par le firmware UEFI ou le BIOS. Le but principal du driver est de permettre la sortie graphique dans les premiĂšres Ă©tapes du chargement, avant qu'il ne soit possible d'utiliser un driver DRM Ă part entiĂšre. Le driver peut Ă©galement ĂȘtre utilisĂ© comme solution temporaire pour le matĂ©riel pour lequel il n'existe pas encore de drivers DRM natifs;
- ajoutĂ© prise en charge de lâordinateur tout-en-un Raspberry Pi 400;
- ajout du driver dell-wmi-privacy 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 ajouté interface WMI pour modifier les paramÚtres du BIOS via sysfs /sys/class/firmware-attributes/;
- extension de la prise en charge des dispositifs avec interface USB4;
- ajouté prise en charge des cartes son et des codecs 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és patches pour réduire les délais avant le démarrage de la lecture audio sur les appareils dotés d'une interface USB.
Source â opennet.ru.
Source : linux.org.ru
