Version du noyau Linux 5.1

Après deux mois de développement Linus Torvalds представил version du noyau Linux 5.1. Parmi les changements les plus notables : une nouvelle interface pour les E/S asynchrones io_uring, la possibilité d'utiliser NVDIMM comme RAM, la prise en charge de la mémoire virtuelle partagée dans Nouveau, la prise en charge de la surveillance évolutive de très gros systèmes de fichiers via fanotify, la possibilité de configurer la compression Zstd. niveaux dans Btrfs, un nouveau gestionnaire cpuidle TEO, implémentation d'appels système pour résoudre le problème 2038, possibilité de démarrer à partir de périphériques mappeurs de périphériques sans initramfs, module SafeSetID LSM, prise en charge des correctifs live combinés.

principal les innovations:

  • Sous-système de disque, E/S et systèmes de fichiers
    • Implémentation d'une nouvelle interface pour les E/S asynchrones - io_urant, qui se distingue par sa prise en charge des interrogations d'E/S et la possibilité de travailler avec ou sans mise en mémoire tampon. Rappelons que le mécanisme d'E/S asynchrone proposé précédemment « aio » ne prenait pas en charge les E/S tamponnées, ne pouvait fonctionner qu'en mode O_DIRECT (sans mise en mémoire tampon ni contournement du cache), avait des problèmes de verrouillage en raison de l'attente de la disponibilité des métadonnées, et présentait des frais généraux importants dus à la copie des données en mémoire.

      Au sein de l'API
      Les développeurs d'io_uring ont essayé d'éliminer les défauts de l'ancienne interface aio. Par productivité io_uring est très proche de SPDK et est nettement en avance sur libaio lorsqu'il travaille avec les sondages activés. Une bibliothèque a été préparée pour utiliser io_uring dans les applications finales exécutées dans l'espace utilisateur libérant, qui fournit un cadre de haut niveau sur l'interface du noyau ;

    • Dans le mécanisme de suivi des événements dans FS fanotify() ajoutée prise en charge du suivi des situations de changement de superbloc et de structure direct (événements de création, suppression et déplacement de répertoires). Les fonctionnalités présentées aident à résoudre les problèmes d'évolutivité qui surviennent lors de la création d'un suivi récursif des modifications dans de très grands systèmes de fichiers à l'aide du mécanisme inotify (les modifications directes ne pouvaient auparavant être suivies que via inotify, mais
      les performances dans des conditions de suivi récursif de grands répertoires imbriqués laissaient beaucoup à désirer). Désormais, une telle surveillance peut être effectuée efficacement via fanotify ;

    • Sur le système de fichiers Btrfs ajoutée la possibilité de personnaliser le niveau de compression pour l'algorithme zstd, qui peut être considéré comme un compromis optimal entre le lz4 rapide mais inefficace et la compression xz lente mais bonne. Par analogie avec la façon dont il était auparavant possible de définir le niveau de compression lors de l'utilisation de zlib, la prise en charge de l'option de montage « -o compress=zstd:level » a été ajoutée pour zstd. Lors des tests, le premier niveau minimum a fourni 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, et le niveau maximum 15 a fourni 3.126 fois, mais avec une compression vitesse de 37.30 Mo/s. déballage 878.84 Mo/s et consommation mémoire 2547 Mo ;
    • Ajouté par la possibilité de démarrer à partir d'un système de fichiers situé sur le périphérique mappeur de périphériques, sans utiliser initramfs. À partir de la version actuelle du noyau, les périphériques de mappage de périphériques peuvent être directement utilisés pendant le processus de démarrage, par exemple en tant que partition avec le système de fichiers racine. La partition est configurée à l'aide du paramètre de démarrage « dm-mod.create ». Les modules de mappage de périphériques autorisés au chargement incluent : « crypt », « delay », « linéaire », « snapshot-origin » et « verity » ;
    • L'indicateur F2FS_NOCOW_FL a été ajouté au système de fichiers F2FS orienté vers les lecteurs Flash, ce qui permet de désactiver le mode copie sur écriture pour un fichier donné ;
    • Système de fichiers supprimé du noyau Exofs, qui est une variante d'ext2, adaptée pour fonctionner avec les stockages d'objets OSD (Object-based Storage Device). La prise en charge du protocole SCSI pour ces périphériques de stockage d'objets a également été supprimée ;
  • Virtualisation et sécurité
    • Ajout de l'option PR_SPEC_DISABLE_NOEXEC à prctl() pour contrôler l'exécution spéculative des instructions pour le processus sélectionné. Une nouvelle option vous permet de désactiver de manière sélective l'exécution spéculative pour les processus susceptibles d'être attaqués par une attaque Spectre. Le verrou dure jusqu'au premier appel à exec();
    • Module LSM implémenté ID de jeu sécurisé, qui permet aux services système de gérer les utilisateurs en toute sécurité sans élever les privilèges (CAP_SETUID) et sans obtenir les privilèges root. Les privilèges sont attribués en définissant des règles dans securityfs basées sur une liste blanche de liaisons valides (sous la forme « UID1:UID2 ») ;
    • Ajout de modifications de bas niveau requises pour le chargement basé sur la pile des modules de sécurité (LSM). Introduction de l'option de démarrage du noyau « lsm » pour contrôler 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 ;
    • Étendu les capacités du plugin GCC structleak, qui vous permettent de bloquer les fuites potentielles du contenu de la mémoire. L'initialisation de toutes les variables utilisées dans le code via un accès de référence sur la pile est fournie ;
  • Sous-système réseau
    • Pour les prises mis en œuvre nouvelle option "SO_BINDTOIFINDEX" similaire à
      "SO_BINDTODEVICE", mais en prenant comme argument le numéro d'index de l'interface réseau au lieu du nom de l'interface ;

    • La pile mac80211 a ajouté la possibilité d'attribuer plusieurs BSSID (adresses MAC) à un seul appareil. Dans le cadre d'un projet visant à optimiser les performances WiFi, la pile mac80211 a ajouté la comptabilité du temps d'antenne et la possibilité de répartir le temps d'antenne entre plusieurs stations (lors du fonctionnement en mode point d'accès, allouant moins de temps de transmission aux stations sans fil lentes, au lieu de répartir le temps uniformément entre toutes). gares);
    • Mécanisme ajouté "santé du lien de développement", qui fournit des notifications lorsque des problèmes surviennent avec l'interface réseau ;
  • Services mémoire et système
    • Mis en œuvre livraison de signal sécurisée qui permet la réutilisation du PID. Par exemple, lors d'un appel précédent à kill, une situation pourrait survenir dans laquelle, immédiatement après l'envoi d'un signal, le PID cible pourrait être libéré en raison de la fin du processus et occupé par un autre processus, et le signal finirait par être transmis à un autre processus. Pour éliminer de telles situations, un nouvel appel système pidfd_send_signal a été ajouté, qui utilise les descripteurs de fichiers de /proc/pid pour garantir une liaison de processus stable. Même si le PID est réutilisé pendant le traitement de l'appel système, le descripteur de fichier ne changera pas et peut être utilisé en toute sécurité pour envoyer un signal au processus ;
    • Ajouté par la possibilité d'utiliser des périphériques de mémoire permanente (mémoire persistante, par exemple) NVDIMM) comme RAM. Jusqu'à présent, le noyau prenait en charge des périphériques tels que les périphériques de stockage, mais ils peuvent désormais également être utilisés comme RAM supplémentaire. La fonctionnalité est implémentée en réponse aux souhaits des utilisateurs qui sont prêts à supporter un décalage de performances et souhaitent utiliser l'API native de gestion de la mémoire du noyau Linux au lieu d'utiliser les systèmes d'allocation de mémoire de l'espace utilisateur existants fonctionnant sur mmap pour le dax. déposer;
    • Ajout d'un nouveau gestionnaire d'inactivité du processeur (cpuidle, décide quand le processeur peut être mis en mode d'économie d'énergie profonde ; plus le mode est profond, plus les économies sont importantes, mais aussi plus il faut de temps pour quitter le mode) - TEO (Timer Events Oriented Governor ). Jusqu'à présent, deux gestionnaires cpuidle ont été proposés - « menu » et « échelle », différant par leur heuristique. Le gestionnaire "menu" a connu des problèmes lors de la prise de décisions heuristiques, pour les éliminer, il a été décidé de préparer un nouveau gestionnaire. TEO se positionne comme une alternative au gestionnaire « menu », permettant des performances plus élevées tout en conservant le même niveau de consommation électrique.
      Vous pouvez activer le nouveau gestionnaire en utilisant le paramètre de démarrage « cpuidle.governor=teo » ;

    • Dans le cadre des travaux visant à éliminer problèmes de 2038, provoqué par un débordement de type time_t 32 bits, inclut des appels système qui proposent des compteurs de temps 32 bits pour les architectures 64 bits. De ce fait, la structure time_t 64 bits peut désormais être utilisée sur toutes les architectures. Des changements similaires ont également été implémentés dans le sous-système réseau pour les options horodatage prises réseau;
    • Dans le système de correctifs à chaud pour le noyau (correctifs en direct) ajoutée Fonctionnalité « Atomic Replace » pour appliquer atomiquement une série de modifications à une seule fonction. Cette fonctionnalité vous permet de distribuer des correctifs récapitulatifs couvrant plusieurs modifications à la fois, au lieu du processus d'application étape par étape des correctifs en direct dans un ordre strictement défini, ce qui est assez difficile à maintenir. Alors qu'auparavant, chaque modification ultérieure devait être basée sur l'état de la fonction après la dernière modification, il est désormais possible de propager plusieurs modifications liées à un état initial à la fois (c'est-à-dire que les responsables peuvent maintenir un correctif consolidé par rapport au noyau de base à la place). d'une chaîne de patchs qui dépendent les uns des autres );
    • Annoncé prise en charge obsolète du format de fichier exécutable a.out et
      supprimé code pour générer des fichiers de base au format a.out, qui est dans un état abandonné. Le format a.out n'a pas été utilisé sur les systèmes Linux depuis longtemps et la génération de fichiers a.out n'a longtemps pas été prise en charge par les outils modernes dans les configurations Linux par défaut. De plus, le chargeur de fichiers a.out peut être entièrement implémenté dans l'espace utilisateur ;

    • La possibilité d'identifier et de supprimer le code inutilisé a été ajoutée au mécanisme de vérification du programme BPF. Le noyau comprend également des correctifs avec prise en charge du spinlock pour le sous-système BPF, offrant des fonctionnalités supplémentaires pour gérer l'exécution parallèle des programmes BPF ;
  • équipement
    • Dans le pilote Nouveau ajoutée prise en charge de la gestion de mémoire hétérogène, permettant au CPU et au GPU d'accéder à des zones de mémoire synchronisées communes. Le système de mémoire virtuelle partagée (SVM, mémoire virtuelle partagée) est implémenté sur la base du sous-système HMM (Heterogeneous Memory Management), qui permet d'utiliser des appareils dotés de leurs propres unités de gestion de mémoire (MMU, unité de gestion de mémoire), qui peuvent accéder mémoire principale. En particulier, 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. La prise en charge SVM n'est actuellement activée que pour les GPU de la famille Pascal, bien que la prise en charge soit également fournie pour les GPU Volta et Turing. D’ailleurs, dans Nouveau ajoutée nouvel ioctl pour contrôler la migration des zones de mémoire de processus vers la mémoire GPU ;
    • Dans le pilote Intel DRM pour GPU Skylake et versions ultérieures (gen9+) allumé Par défaut, le mode fastboot élimine les changements de mode inutiles lors du démarrage. Ajoutée nouveau identifiants d'appareils basés sur les microarchitectures Coffelake et Ice Lake. Pour les chips Coffelake ajoutée Prise en charge GVT (Virtualisation GPU). Pour les GPU virtuels mis en œuvre Prise en charge VFIO EDID. Pour panneaux LCD MIPI/DSI ajoutée prise en charge des éléments ACPI/PMIC. Mis en œuvre nouveaux modes TV 1080p30/50/60 TV ;
    • Ajout de la prise en charge du GPU Vega10/20 BACO au pilote amdgpu. Implémentation de la gestion de l'alimentation Vega 10/20 et des tables de contrôle du refroidisseur Vega 10. Ajout de nouveaux identifiants de périphérique PCI pour les GPU Picasso. Добавлен interface de gestion des dépendances planifiables pour éviter les blocages ;
    • Добавлен Pilote DRM/KMS pour les accélérateurs d'écran BRAS Komeda (Mali D71) ;
    • Ajout de la prise en charge des panneaux d'écran 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 plate-forme audio Mediatek MT8183 ;
    • Ajout de la prise en charge des contrôleurs NAND Flash STMicroelectronics FMC2, Amlogic Meson ;
    • Ajout de la prise en charge des accélérateurs pour les systèmes matériels Habana AI ;
    • Ajout de la prise en charge des contrôleurs Gigabit Ethernet NXP ENETC et des interfaces sans fil MediaTek MT7603E (PCIe) et MT76x8.

Simultanément, la Free Software Foundation Amérique Latine formé
вариант noyau entièrement gratuit 5.1 - Linux libre 5.1-gnu, débarrassé des éléments du firmware et du pilote contenant des composants non libres ou des sections de code, dont la portée est limitée par le fabricant. Dans la nouvelle version, le chargement de blob est désactivé dans les pilotes mt7603 et goya. Code de nettoyage de blob mis à jour dans les pilotes et sous-systèmes wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifiex, btmrvl, btmtk et touchscreen_dmi. Le nettoyage des objets blob dans le chargeur du micrologiciel lantiq xrx200 a été arrêté en raison de sa suppression du noyau.

Source: opennet.ru

Ajouter un commentaire