Sortie du noyau Linux 5.1

Après deux mois de développement, Linus Torvalds présenté a annoncé la sortie du noyau Linux 5.1. Parmi les changements les plus notables : une nouvelle interface pour les entrées/sorties asynchrones io_uring, la possibilité d'utiliser les NVDIMM comme RAM, le support de la mémoire virtuelle partagée dans Nouveau, la prise en charge du monitoring scalable des très grands systèmes de fichiers via fanotify, la possibilité de régler les niveaux de compression Zstd dans Btrfs, un nouveau gestionnaire cpuidle TEO, la mise en œuvre d'appels système pour résoudre le problème de l'an 2038, la possibilité de démarrer à partir d'appareils device-mapper sans initramfs, le module LSM SafeSetID, et le support de patchs live combinés.

Principales nouveautés:

  • Sous-système de disque, entrée/sortie et systèmes de fichiers
    • Une nouvelle interface pour les entrées/sorties asynchrones a été réalisée — io_uring, qui se distingue par le support du polling des entrées/sorties et la possibilité de travailler en pleine mémoire tampon ou sans mémoire tampon. Rappelons que le mécanisme d'entrée/sortie asynchrone « aio » proposé précédemment ne prenait pas en charge l'entrée/sortie tamponnée, ne pouvait être utilisé qu'en mode O_DIRECT (sans mise en cache ni tamponnement), avait des problèmes de blocages dus à l'attente de la disponibilité des métadonnées et présentait des frais généraux élevés en raison de la copie des données en mémoire.

      Dans le cadre de l'API
      io_uring, les développeurs ont tenté d'éliminer les défauts de l'ancienne interface aio. Selon performance io_uring est très proche de SPDK et surpasse considérablement libaio lors de l'utilisation du polling. Pour utiliser io_uring dans les applications finales fonctionnant dans l'espace utilisateur, une bibliothèque a été préparée liburing, fournissant un lien de haut niveau avec l'interface du noyau ;

    • Dans le mécanisme de suivi des événements dans le système de fichiers fanotify() ajouté le support du suivi des situations de changement de superbloc et de structure dirent (événements de création, suppression et déplacement de répertoires). Les capacités présentées aident à résoudre les problèmes de scalabilité qui se posent lors de la création de suivis récursifs des modifications dans de très grands systèmes de fichiers via le mécanisme inotify (les changements dirent ne pouvaient être suivis auparavant que grâce à inotify, mais
      l'efficacité en cas de suivi récursif de grands répertoires imbriqués laissait à désirer). Maintenant, un tel suivi peut être effectué efficacement avec fanotify ;
    • Dans le système de fichiers Btrfs ajouté Possibilité de configurer le niveau de compression pour l'algorithme zstd, qui peut être considéré comme un compromis optimal entre le lz4 rapide mais inefficace et le xz lent mais bien compressant. De la même manière qu'auparavant, on pouvait configurer le niveau de compression lors de l'utilisation de zlib, le support de l'option de montage « -o compress=zstd:level » a été ajouté. Lors des tests, le niveau minimal a assuré une compression des données de 2,658 fois avec une vitesse de compression de 438,47 Mo/s, une vitesse de décompression de 910,51 Mo/s et une consommation de mémoire de 780 Mo, tandis que le niveau maximum 15 a atteint 3,126 fois, mais avec une vitesse de compression de 37,30 Mo/s, de décompression de 878,84 Mo/s et une consommation de mémoire de 2547 Mo;
    • Ajouté Possibilité de démarrer à partir d'un système de fichiers situé sur un dispositif device-mapper, sans utiliser initramfs. À partir de la version actuelle du noyau, le dispositif device-mapper peut être utilisé directement lors du démarrage, par exemple, en tant que partition avec le système de fichiers racine. La configuration de la partition se fait via le paramètre de démarrage « dm-mod.create ». Parmi les modules autorisés au démarrage pour device-mapper : « crypt », « delay », « linear », « snapshot-origin » et « verity »;
    • Un drapeau F2FS_NOCOW_FL a été ajouté au système de fichiers orienté vers les mémoires Flash F2FS, permettant de désactiver le mode copy-on-write pour un fichier donné;
    • Le système de fichiers a été supprimé du noyau Exofs, qui est une variante de ext2, adaptée pour fonctionner avec des dispositifs de stockage d'objets OSD (Object-based Storage Device). Le support du protocole SCSI pour de tels dispositifs de stockage d'objets a également été supprimé;
  • Virtualisation et sécurité
    • Une nouvelle option PR_SPEC_DISABLE_NOEXEC a été ajoutée à prctl() pour gérer l'exécution spéculative des instructions pour un processus sélectionné. Cette nouvelle option permet de désactiver sélectivement l'exécution spéculative pour les processus qui peuvent potentiellement être attaqués via une attaque de type Spectre. Le blocage est actif jusqu'au premier appel de exec();
    • Un module LSM a été mis en œuvre SafeSetID, permettant aux services système de gérer les utilisateurs en toute sécurité sans élévation de privilèges (CAP_SETUID) et sans obtenir les droits de l'utilisateur root. L'attribution des privilèges se fait par la définition dans securityfs de règles basées sur une liste blanche de liaisons autorisées (sous la forme « UID1:UID2 »);
    • Des modifications de bas niveau ont été ajoutées pour l'organisation de la pile de chargement des modules de sécurité (LSM). Un paramètre de chargement du noyau "lsm" a été introduit, permettant de gérer quels modules sont chargés et dans quel ordre ;
    • La prise en charge des espaces de noms de fichiers a été ajoutée au sous-système d'audit ;
    • Étendus Les capacités du plugin GCC structleak, permettant de bloquer les fuites potentielles du contenu de la mémoire, ont été fournies, ainsi que l'initialisation de toutes les variables utilisées dans le code via une référence dans la pile ;
  • Sous-système réseau
    • Pour les sockets, réalisée une nouvelle option "SO_BINDTOIFINDEX", similaire à
      "SO_BINDTODEVICE", mais prenant comme argument l'index du réseau interface au lieu du nom de l'interface ;
    • Dans la pile mac80211, il a été ajouté la possibilité d'assigner plusieurs BSSID (adresses MAC) à un appareil. Dans le cadre du projet d'optimisation des performances WiFi, la pile mac80211 a ajouté la prise en compte de la répartition du temps d'accès et la possibilité de répartir le temps d'accès entre plusieurs stations (lors du fonctionnement en mode point d'accès, moins de temps de transmission est accordé aux stations sans fil lentes, au lieu d'une répartition uniforme du temps entre toutes les stations) ;
    • Un mécanisme "devlink health", fournissant des notifications en cas de problèmes avec l'interface réseau ;
  • Mémoire et services système
    • Mise en œuvre de la livraison sûre des signaux, prenant en compte la possibilité de réutilisation des PID. Par exemple, lors de l'appel de kill, il pouvait y avoir une situation où juste après l'envoi du signal, le PID cible pouvait être libéré en raison de la fin du processus et occupé par un autre processus, et finalement, le signal était transmis à un autre processus. Pour éviter de telles situations, un nouvel appel système pidfd_send_signal a été ajouté, qui utilise des descripteurs de fichiers à partir de /proc/pid pour garantir un lien stable avec le processus. Même si le PID est réutilisé pendant le traitement de l'appel système, le descripteur de fichier ne changera pas et pourra être utilisé en toute sécurité pour envoyer un signal au processus ;
    • Ajouté la possibilité d'utiliser des dispositifs de mémoire persistante (persistent-memory, par exemple NVDIMM) comme RAM. Jusqu'à présent, de tels dispositifs étaient pris en charge en tant que périphériques de stockage dans le noyau, mais ils peuvent désormais également être utilisés comme mémoire vive supplémentaire. Cette possibilité a été mise en œuvre en réponse aux demandes des utilisateurs qui sont prêts à accepter un ralentissement des performances et souhaitent utiliser l'API de gestion de la mémoire du noyau Linux au lieu des systèmes de répartition de la mémoire en espace utilisateur qui fonctionnent au-dessus de mmap pour le fichier dax.
    • Un nouveau gestionnaire de veille CPU (cpuidle, qui détermine quand il est possible de mettre le CPU en modes d'économie d'énergie profonds, plus le mode est profond, plus les économies sont importantes, mais plus il faut de temps pour sortir de ce mode) a été ajouté — TEO (Timer Events Oriented Governor). Jusqu'à présent, deux gestionnaires cpuidle ont été proposés — «menu» et «ladder», qui se distinguent par leur heuristique. Le gestionnaire «menu» présente des problèmes connus pour prendre des décisions heuristiques, ce qui a conduit à la décision de préparer un nouveau gestionnaire. TEO se positionne comme une alternative au gestionnaire «menu», permettant d'obtenir de meilleures performances tout en maintenant le même niveau de consommation d'énergie.
      Le nouveau gestionnaire peut être activé à l'aide du paramètre de boot «cpuidle.governor=teo»;
    • Dans le cadre des travaux pour remédier à du problème de l'an 2038, causée par un dépassement du type time_t 32 bits, des appels système offrent des compteurs de temps 64 bits pour les architectures 32 bits. Au final, la structure time_t 64 bits peut désormais être utilisée sur toutes les architectures. Des modifications similaires ont également été mises en œuvre dans la sous-système réseau pour les options timestamp des sockets réseau;
    • Dans le système de patching à chaud du noyau (live patching) ajouté la fonction « Atomic Replace » pour l'application atomique d'une série de modifications à une seule fonction. Cette fonctionnalité permet de déployer des correctifs globaux couvrant plusieurs modifications à la fois, au lieu du processus complexe de superposition en étapes de correctifs live dans un ordre strictement défini. Auparavant, chaque modification suivante devait s'appuyer sur l'état de la fonction après la modification précédente, mais maintenant il est possible de diffuser plusieurs modifications, liées à un état d'origine unique (c’est-à-dire que les mainteneurs peuvent gérer un seul correctif global par rapport au noyau de base, au lieu d'une chaîne de correctifs dépendants les uns des autres);
    • Déclaré déprécié le support du format de fichiers exécutables a.out et
      supprimé le code pour générer des fichiers core au format a.out, qui est désormais obsolète. Le format a.out n'est plus utilisé sur les systèmes Linux, et la génération de fichiers a.out n'est plus supportée par les outils modernes dans les configurations par défaut pour Linux. De plus, le chargeur pour les fichiers a.out peut être entièrement implémenté dans l'espace utilisateur;
    • Dans le mécanisme de vérification des programmes BPF, a été ajoutée la possibilité de déterminer et de supprimer le code inutilisé. Des correctifs avec support du spinlock pour le sous-système BPF ont également été inclus dans le noyau, offrant des capacités supplémentaires pour gérer l'exécution parallèle des programmes BPF;
  • Matériel
    • Dans le pilote Nouveau ajouté le support de la gestion de mémoire hétérogène, permettant l'accès des CPU et GPU à des zones de mémoire synchronisées partagées. Le système de mémoire virtuelle partagée (SVM, shared virtual memory) est basé sur le sous-système HMM (Heterogeneous memory management), permettant d'utiliser des dispositifs avec leurs propres unités de gestion de 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. Le support de SVM est actuellement uniquement activé pour les GPU de la famille Pascal, bien que le support est également assuré pour les GPU Volta et Turing. De plus, dans Nouveau ajouté nouveau ioctl pour gérer la migration des zones de mémoire des processus vers la mémoire GPU;
    • Dans le pilote DRM d'Intel pour GPU Skylake et plus récent (gen9+) est inclus Par défaut, le mode fastboot exclut les changements inutiles de mode durant le démarrage. Ajoutés appels Identifiants des dispositifs basés sur les microarchitectures Coffeelake et Ice Lake. Pour les puces Coffeelake ajouté prise en charge de GVT (virtualisation GPU). Pour les GPU virtuels réalisée prise en charge de VFIO EDID. Pour les panneaux LCD MIPI/DSI ajouté prise en charge des éléments ACPI/PMIC. De nombreuses nouvelles fonctionnalités du langage, développées dans la spécification Raku v6.e, ont été mises en œuvre. nouveaux modes TV 1080p30/50/60 TV;
    • Le pilote amdgpu a ajouté la prise en charge des GPU Vega10/20 BACO. Des fonctionnalités de gestion de l'alimentation pour Vega 10/20 et des tableaux de gestion des ventilateurs pour Vega 10 ont été mises en œuvre. De nouveaux identifiants PCI pour les dispositifs GPU Picasso ont été ajoutés. Ajouté interface de gestion des dépendances planifiées afin d'éviter les blocages mutuels;
    • Ajouté pilote DRM/KMS pour accélérateurs des opérations d'affichage ARM Komeda (Mali D71);
    • Ajout de la prise en charge des panneaux d'affichage Toppoly TPG110, Sitronix ST7701, PDA 91-00156-A0, LeMaker BL035-RGB-002 3.5 et Kingdisplay kd097d04;
    • Ajout de la prise en charge des codecs audio Rockchip RK3328, Cirrus Logic CS4341 et CS35L36, MediaTek MT6358, Qualcomm WCD9335 et Ingenic JZ4725B, ainsi que de la plateforme audio Mediatek MT8183;
    • Ajout de la prise en charge des contrôleurs NAND Flash de STMicroelectronics FMC2, Amlogic Meson;
    • Ajout de la prise en charge des accélérateurs pour les systèmes de matériel Habana AI;
    • Ajout de la prise en charge des contrôleurs Ethernet gigabit NXP ENETC et des interfaces sans fil MediaTek MT7603E (PCIe) et MT76x8.

En même temps, le Fonds latino-américain pour le logiciel libre a formé
une variante noyau 5.1 entièrement libre — Linux-libre 5.1-gnu, débarrassé des éléments de firmwares et de pilotes contenant des composants ou des morceaux de code non libres, dont l'utilisation est restreinte par le fabricant. Dans cette nouvelle version, le chargement de blobs dans les pilotes mt7603 et goya a été désactivé. Le code de nettoyage des blobs dans les pilotes et sous-systèmes wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifiex, btmrvl, btmtk et touchscreen_dmi a été mis à jour. Le nettoyage des blobs dans le chargeur de firmwares lantiq xrx200 a été interrompu en raison de son retrait du noyau.

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