Version du noyau Linux 5.3

Après deux mois de développement Linus Torvalds представил version du noyau Linux 5.3. Les changements notables incluent : la prise en charge des GPU AMD Navi, des processeurs Zhaoxi et de la technologie de gestion de l'alimentation Intel Speed ​​​​Select, la possibilité d'utiliser les instructions umwait pour attendre sans utiliser de boucles,
Mode d'interactivité « utilisation clamping » pour les processeurs asymétriques, appel système pidfd_open, possibilité d'utiliser les adresses IPv4 du sous-réseau 0.0.0.0/8, capacité d'accélération matérielle nftables, prise en charge HDR dans le sous-système DRM, intégration de l'hyperviseur ACRN.

В annonce Avec la nouvelle version, Linus a rappelé à tous les développeurs la règle principale du développement du noyau : maintenir inchangé le comportement des composants de l'espace utilisateur. Les modifications apportées au noyau ne doivent en aucun cas casser les applications existantes et conduire à des régressions au niveau des utilisateurs. Dans le même temps, une violation du comportement peut entraîner non seulement un changement d'ABI, la suppression de code obsolète ou l'apparition d'erreurs, mais également l'impact indirect d'améliorations utiles fonctionnant correctement. À titre d'exemple illustratif, il y avait mis au rebut utile optimisation en code Ext4, qui réduit le nombre d'accès au disque en désactivant la prélecture de la table des inodes pour les petites requêtes d'E/S.

L'optimisation a abouti au fait qu'en raison de la réduction de l'activité du disque, l'entropie du générateur de nombres aléatoires getrandom() a commencé à s'accumuler plus lentement, et dans certaines configurations, dans certaines circonstances, il pouvait y avoir un gel pendant le chargement jusqu'à ce que le pool d'entropie soit épuisé. complet. Étant donné que l'optimisation est vraiment utile, il y a eu une discussion entre les développeurs dans laquelle il a été proposé de résoudre le problème en désactivant le comportement de blocage par défaut de l'appel getrandom() avec l'ajout d'un indicateur facultatif pour attendre l'entropie, mais un tel un changement affecterait la qualité des nombres aléatoires au stade initial du chargement.

La nouvelle version a accepté 15794 1974 correctifs provenant de XNUMX XNUMX développeurs,
taille du correctif - 92 Mo (les modifications ont affecté 13986 258419 fichiers, XNUMX XNUMX lignes de code ajoutées,
599137 lignes supprimées). Environ 39 % de tous ceux présentés en 5.3
les modifications sont associées aux pilotes de périphérique, environ 12 % des modifications ont
attitude envers la mise à jour du code spécifique aux architectures matérielles, 11%
liés à la pile réseau, 3 % aux systèmes de fichiers et 3 % aux systèmes internes
sous-systèmes du noyau.

principal les innovations:

  • Services mémoire et système
    • Développement continu de la fonctionnalité « pidfd » pour aider à gérer les situations de réutilisation de PID (pidfd est lié à un processus particulier et ne change pas, tandis qu'un PID peut être lié à un autre processus après la fin du processus actuel associé à ce PID). Auparavant, le noyau a déjà été ajouté
      l'appel système pidfd_send_signal() et l'indicateur CLONE_PIDFD dans l'appel clone() pour obtenir le pidfd à utiliser dans idfd_send_signal(). Lors de l'utilisation de l'appel clone() avec l'indicateur CLONE_PIDFD, des problèmes peuvent survenir avec les gestionnaires de services ou le système permettant d'arrêter de force les processus avec une mémoire insuffisante sur la plate-forme Android. Dans ce cas, un appel fork() ou clone() sans CLONE_PIDFD est utilisé pour démarrer.

      Le noyau 5.3 introduit l'appel système pidfd_open(), qui vous permet d'obtenir un pidfd vérifiable pour un processus existant arbitraire non créé via un appel à clone() avec l'indicateur CLONE_PIDFD. Nous avons également ajouté la prise en charge de l'interrogation de pidfd avec poll() et epoll(), qui permet aux gestionnaires de processus de suivre l'arrêt de processus arbitraires sans se soucier d'une condition de concurrence critique si un PID est attribué à un nouveau processus. Le mécanisme pour notifier la sortie d'un processus associé à pidfd est similaire à l'information de la sortie de son processus enfant ;

    • Ajout de la prise en charge du mécanisme d'épinglage de charge dans le planificateur de tâches (Utilisation serrage), qui permet de respecter les plages de fréquences minimales ou maximales, en fonction des tâches actives sur le CPU. Le mécanisme présenté accélère les tâches qui affectent directement la qualité de l'interaction utilisateur en exécutant ces tâches au moins à la limite inférieure de la fréquence « demandée ». Les tâches de faible priorité qui n'affectent pas le travail de l'utilisateur sont lancées en utilisant la limite supérieure de la fréquence « autorisée ». Les limites sont définies via les attributs sched_uclamp_util_min et sched_uclamp_util_max dans l'appel système sched_setattr().
    • Ajout de la prise en charge de la technologie de gestion de l'énergie Sélection de vitesse Intel, disponible sur certains serveurs équipés de processeurs Intel Xeon. Cette technologie vous permet de définir les paramètres de performances et de partitionner la bande passante pour différents cœurs de processeur, ce qui vous permet de prioriser les performances des tâches effectuées sur certains cœurs, en sacrifiant les performances sur d'autres cœurs ;
    • Processus dans l'espace utilisateur fourni par la possibilité d'attendre un court instant sans utiliser de boucles à l'aide de l'instruction umwait. Cette instruction, ainsi que les instructions umonitor et tpause, seront proposées dans les prochaines puces Intel « Tremont » et permettront des retards économes en énergie et n'affecteront pas les performances des autres threads lors de l'utilisation de l'Hyper Threading ;
    • La prise en charge des grandes pages de mémoire (pages énormes) a été ajoutée pour l'architecture RISC-V ;
    • La possibilité de déréférencer les pointeurs du noyau vers l'espace utilisateur a été ajoutée au mécanisme de traçage "kprobes", qui peut être utilisé, par exemple, pour évaluer le contenu des structures transmises aux appels système. Ajout également de la possibilité de définir des contrôles au stade du démarrage.
    • L'option PREEMPT_RT a été ajoutée au fichier de configuration pour un fonctionnement en temps réel. Le code temps réel lui-même n'a pas encore été ajouté au noyau, mais l'apparition de l'option est un bon signe que la saga à long terme de intégration les correctifs Realtime-Preempt sont presque terminés ;
    • L'appel système clone3() a été ajouté avec l'implémentation d'une version plus extensible de l'interface clone(), qui permet de spécifier un plus grand nombre d'indicateurs ;
    • Ajout du gestionnaire bpf_send_signal() pour permettre aux programmes BPF d'envoyer des signaux à des processus arbitraires ;
    • Pour les événements de performance dans l'environnement de l'hyperviseur KVM, un nouveau mécanisme de filtrage des événements a été ajouté pour permettre à l'administrateur de déterminer les types d'événements autorisés ou non à être surveillés côté invité ;
    • Ajout de la possibilité de traiter des programmes avec des cycles au mécanisme de vérification des applications eBPF si l'exécution du cycle est limitée et ne peut conduire à dépasser la limite du nombre maximum d'instructions ;
  • Sous-système de disque, E/S et systèmes de fichiers
    • Pour le système de fichiers XFS, la possibilité de parcourir des inodes multithread est implémentée (par exemple, lors de la vérification des quotas). Ajout des nouveaux ioctl BULKSTAT et INUMBERS, donnant accès aux fonctionnalités introduites dans la cinquième édition du format FS, telles que l'heure de naissance de l'inode et la possibilité de définir les paramètres BULKSTAT et INUMBERS pour chaque groupe AG (groupes d'allocation) ;
    • Dans Ext4 support supplémentaire vides dans les répertoires (blocs non attachés).
      Traitement fourni flag "i" (immuable) pour les fichiers ouverts (interdiction d'écrire dans une situation si le flag était positionné au moment où le fichier était déjà ouvert) ;

    • Btrfs fournit une définition pour une implémentation rapide de crc32c sur toutes les architectures ;
    • Dans CIFS, le code permettant de prendre en charge smbdirect est obsolète. SMB3 ajoute la possibilité d'utiliser des algorithmes cryptographiques en mode GCM. Une nouvelle option de montage a été ajoutée pour extraire les paramètres de mode des ACE (Access Control Entry). Performances d'appel open() optimisées ;
    • Une option a été ajoutée à F2FS pour restreindre le garbage collector lors de l'exécution en mode checkpoint=disable. Ajout d'ioctl pour supprimer les plages de blocs de F2FS, permettant un redimensionnement de partition à la volée. Ajout de la possibilité de placer un fichier d'échange dans F2FS avec E/S directes. Ajout de la prise en charge de l'épinglage d'un fichier et de l'attribution de blocs pour des fichiers similaires à tous les utilisateurs ;
    • Ajout de la prise en charge des opérations asynchrones sendmsg() et recvmsg() à l'interface d'E/S asynchrone io_uring ;
    • La prise en charge de la compression à l'aide de l'algorithme zstd et la possibilité de vérifier les images FS signées ont été ajoutées au système de fichiers UBIFS ;
    • La prise en charge des étiquettes de sécurité SELinux pour les fichiers a été ajoutée à Ceph FS ;
    • Pour NFSv4, une nouvelle option de montage "nconnect=" est implémentée, qui détermine le nombre de connexions établies avec le serveur. Le trafic entre ces connexions sera réparti via l’équilibrage de charge. De plus, le répertoire /proc/fs/nfsd/clients est désormais créé par le serveur NFSv4 avec des informations sur les clients actuels, y compris des informations sur les fichiers qu'ils ont ouverts ;
  • Virtualisation et sécurité
    • Le noyau inclut un hyperviseur pour les appareils embarqués ACRN, qui est écrit en gardant à l'esprit la disponibilité en temps réel et la convivialité critique. ACRN fournit une surcharge minimale, garantit une faible latence et une réactivité adéquate lors de l’interaction avec l’équipement. La virtualisation des ressources CPU, des E/S, du sous-système réseau, des opérations graphiques et sonores est prise en charge. ACRN peut être utilisé pour exécuter plusieurs machines virtuelles isolées dans des unités de contrôle électroniques, des tableaux de bord, des systèmes d'information automobiles, des appareils IoT grand public et d'autres équipements embarqués ;
    • Sous Linux en mode utilisateur ajoutée un mode de voyage dans le temps qui vous permet de ralentir ou d'accélérer le temps dans l'environnement virtuel UML pour faciliter le débogage du code lié au temps. Paramètre également ajouté
      time-travel-start, qui permet à l'horloge système de démarrer à partir de l'heure spécifiée au format époque ;

    • Ajout de nouvelles options de ligne de commande du noyau "init_on_alloc" et "init_on_free", qui, si spécifiées, permettent la mise à zéro des zones de mémoire allouées et libérées (remplissage avec des zéros pendant malloc et free), ce qui permet d'augmenter la sécurité en raison d'une surcharge d'initialisation supplémentaire ;
    • Ajout d'un nouveau pilote virtio-iommu avec la mise en œuvre d'un dispositif paravirtualisé qui permet d'envoyer des requêtes IOMMU, telles que ATTACH, DETACH, MAP et UNMAP, sur le transport virtio sans émuler les tables de pages mémoire ;
    • Ajout d'un nouveau pilote virtio-pmemA représentant l'accès aux périphériques de stockage mappés à l'espace d'adressage physique, tels que les NVDIMM ;
    • Implémentation de la possibilité d'attacher des clés cryptographiques à un espace de noms utilisateur ou réseau (les clés deviennent inaccessibles en dehors de l'espace de noms sélectionné), ainsi que de protéger les clés à l'aide d'ACL ;
    • Vers le sous-système crypto ajoutée prise en charge d'un algorithme de hachage non cryptographique très rapide xxhash, dont la vitesse dépend des performances de la mémoire ;
  • Sous-système réseau
    • Gestion prise en charge des adresses IPv4 dans la plage 0.0.0.0/8, qui était auparavant inutilisable. Introduction de ce sous-réseau volonté allouer 16 millions d'adresses IPv4 supplémentaires ;
    • Dans Netfilter pour nftables ajoutée prise en charge des mécanismes de filtrage de paquets accélérés par le matériel grâce à l'utilisation de ce qui a été ajouté aux pilotes API de bloc de flux. Des tableaux de règles entiers avec toutes les chaînes peuvent être placés du côté des adaptateurs réseau. L'activation se fait en liant l'indicateur NFT_TABLE_F_HW à la table. Prend en charge les métadonnées simples des protocoles de couches 3 et 4, les actions d'acceptation/rejet, les mappages par IP source/destination et les ports réseau et le type de protocole ;
    • Ajouté par prise en charge intégrée du suivi des connexions pour les ponts réseau, qui ne nécessite pas l'utilisation de la couche d'émulation br_netfilter ;
    • Dans nf_tables ajoutée prise en charge du module SYNPROXY, qui répète des fonctionnalités similaires d'iptables, ainsi que la possibilité de vérifier les règles pour les options individuelles dans l'en-tête IPv4 ;
    • Ajout de la possibilité d'attacher des programmes BPF aux appels système setsockopt() et getsockopt(), ce qui, par exemple, vous permet d'attacher des gestionnaires d'accès personnalisés à ces appels. De plus, un nouveau point d'appel (hook) a été ajouté, à l'aide duquel il est possible d'organiser un appel au programme BPF une fois pour chaque intervalle RTT (temps aller-retour, temps ping) ;
    • Pour IPv4 et IPv6 ajoutée un nouveau mécanisme de stockage des données de routage nexthop, visant à augmenter l'évolutivité des tables de routage. Les tests effectués ont montré qu'en utilisant le nouveau système, un ensemble de 743 4.3 routes a été chargé dans le noyau en seulement XNUMX secondes ;
    • Pour Bluetooth mis en œuvre fonctionnalité requise pour prendre en charge LE ping ;
  • équipement
    • Ajouté par prise en charge des processeurs d'entreprise compatibles x86 Zhaoxinedéveloppé à la suite d'un projet conjoint entre VIA Technologies et la municipalité de Shanghai. La famille CPU ZX est basée sur l'architecture x86-64 Isaiah, poursuivant le développement de la technologie VIA Centaure;
    • Le sous-système DRM (Direct Rendering Manager), ainsi que les pilotes graphiques amdgpu et i915, ont ajouté la prise en charge de l'analyse, du traitement et de l'envoi de métadonnées HDR (plage dynamique élevée) via le port HDMI, permettant l'utilisation de panneaux et d'écrans HDR capables d'afficher des plages supplémentaires de luminosité ;
    • Le pilote Amdgpu ajoute la prise en charge initiale du GPU AMD NAVI (RX5700), qui comprend le pilote principal, le code d'interaction d'écran (DCN2), le GFX et la prise en charge du calcul (GFX10),
      SDMA 5 (Système DMA0), gestion de l'alimentation et encodeurs/décodeurs multimédia (VCN2). amdgpu améliore également la prise en charge des cartes GPU basées sur Vega12 et Vega20 avec plus d'options de mémoire et de gestion de l'alimentation ;

    • Le pilote Amdkfd (pour les GPU discrets comme Fiji, Tonga, Polaris) a ajouté la prise en charge des cartes basées sur les GPU VegaM ;
    • Dans le pilote DRM pour les cartes vidéo Intel pour les puces Icelake mis en œuvre nouveau mode de correction gamma multi-segments. Ajout de la possibilité de sortie via DisplayPort au format YCbCr4:2:0. Ajout d'un nouveau firmware GuC pour SKL, BXT, KBL, GLK et ICL. Implémentation de la possibilité de désactiver l'alimentation de l'écran en mode asynchrone. Ajouté par prise en charge de la sauvegarde et de la restauration du contexte de rendu pour les puces Ironlake (gen5) et gen4 (Broadwater - Cantiga), qui permet de restaurer l'état du GPU depuis l'espace utilisateur lors du passage d'une opération batch à une autre ;
    • Le pilote Nouveau permet la détection du chipset NVIDIA Turing TU116 ;
    • Capacités étendues du pilote DRM/KMS pour les accélérateurs d'opérations d'écran ARM Komeda (Mali D71), prise en charge supplémentaire de la mise à l'échelle, du fractionnement/fusion des couches, de la rotation, de l'écriture différée, AFBC, SMMU et des formats d'encodage couleur Y0L2, P010, YUV420_8/10BIT ;
    • Ajout de la prise en charge de la série GPU Adreno A540 de Qualcomm au pilote MSM, ainsi que de la prise en charge du contrôleur DSI MSM8998 pour Snapdragon 835 ;
    • Ajout de pilotes pour les panneaux LCD Samsung S6E63M0, Armadeus ST0700, EDT ETM0430G0DH6, OSD101T2045-53TS,
      Evervision VGG804821, FriendlyELEC HD702E, KOE tx14d24vm1bpa, TFC S9700RTWV43TR-01B, EDT ET035012DM6 et VXT VL050-8048NT-C01 ;

    • Добавлен pilote pour activer les outils d'accélération du décodage
      vidéos disponibles dans SoC Amlogic Meson ;

    • Le pilote v3d (pour le GPU Broadcom Video Core V utilisé dans le Raspberry Pi) introduit soutenir distribuer des shaders de calcul ;
    • Добавлен pilote pour les claviers et trackpads SPI utilisés dans les modèles modernes d'ordinateurs portables Apple MacBook et MacBook Pro ;
    • Ajouté par protection supplémentaire pour les appels ioctl associés au pilote de disquette, et le pilote lui-même est marqué comme non maintenu
      ("orphelin"), ce qui implique la fin de ses tests. Le pilote est toujours stocké dans le noyau, mais son bon fonctionnement n'est pas garanti. Le pilote est considéré comme obsolète car il est difficile de trouver du matériel fonctionnel pour le tester - tous les disques externes actuels utilisent généralement l'interface USB.

    • Добавлен pilote cpufreq pour les cartes Raspberry Pi, qui vous permet de contrôler dynamiquement le changement de fréquence du processeur ;
    • Ajout de la prise en charge du nouveau ARM SoC Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSP + MMA) et Amlogic G12B (4x Cortex-A73 + 2x Cortex- A53 ), ainsi que des planches :
      • Purisme Librem5,
      • vitesse bmc,
      • Microsoft Olympus BMC,
      • Kontron SMARC,
      • Novtech Suricate96 (i.MX7),
      • ST Micro Avenger96,
      • Google Cheza (Qualcomm SDM845),
      • Qualcomm Dragonboard 845c (Qualcomm SDM845),
      • Boîtier TV Hugsun X99 (Rockchip RK3399),
      • Khadas Edge/Edge-V/Capitaine (Rockchip RK3399),
      • HiHope RZ/G2M,
      • NXP LS1021A-TSN.

Simultanément, la Free Software Foundation Amérique Latine formé
вариант noyau entièrement gratuit 5.3 - Linux libre 5.3-gnu, nettoyé des éléments du firmware et des pilotes contenant des composants ou des sections de code non libres, dont la portée est limitée par le fabricant. La nouvelle version désactive le chargement de blob dans les pilotes qcom, hdcp drm, allegro-dvt et meson-vdec.
Code de nettoyage des objets blob mis à jour dans les pilotes et sous-systèmes amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, pilote audio skylake et documentation du microcode.

Source: opennet.ru

Ajouter un commentaire