Version du noyau Linux 5.3

Après deux mois de développement, Linus Torvalds présenté a annoncé la sortie du noyau Linux 5.3. Parmi les changements les plus notables : prise en charge des GPU AMD Navi, des processeurs Zhaoxi et de la technologie de gestion de l'alimentation Intel Speed Select, possibilité d'utiliser les instructions umwait pour attendre sans recourir à des cycles,
mode 'utilization clamping' qui améliore l'interactivité pour les CPU asymétriques, appel système pidfd_open, possibilité d'utiliser des adresses IPv4 du sous-réseau 0.0.0.0/8, possibilité d'accélération matérielle des nftables, support HDR dans le sous-système DRM, intégration de l'hyperviseur ACRN.

Dans l'annonce Dans sa nouvelle version, Linus a rappelé à tous les développeurs la règle fondamentale de développement du noyau : maintenir l'invariabilité du comportement pour les composants de l'espace utilisateur. Les modifications du noyau ne doivent en aucun cas perturber les applications déjà en cours d'utilisation et causer des régressions au niveau de l'utilisateur. Cependant, des perturbations comportementales peuvent être causées non seulement par des modifications de l'ABI, la suppression de code obsolète ou l'apparition de bogues, mais aussi par une influence indirecte sur des améliorations utiles qui fonctionnent correctement. À titre d'exemple, a été rejetée une optimisation dans le code Ext4, réduisant le nombre d'accès au stockage en désactivant la lecture anticipée de la table inode lors de petites requêtes d'E/S. Cette optimisation a conduit à ce que, en raison de la réduction de l'activité disque, l'entropie pour le générateur de nombres aléatoires getrandom() se soit accumulée plus lentement et que, dans certaines configurations , sous certaines circonstances, des blocages aient été observés pendant le démarrage jusqu'à ce que le pool d'entropie soit rempli. Étant donné que l'optimisation est vraiment utile, une discussion a émergé parmi les développeurs, suggérant de résoudre le problème en désactivant par défaut le mode de blocage de l'appel getrandom() avec l'ajout d'un drapeau optionnel pour attendre l'entropie, mais ce changement aurait un impact sur la qualité des nombres aléatoires au début du démarrage.

La nouvelle version a accepté 15794 corrections de 1974 développeurs,

la taille du patch est de 92 Mo (les changements ont touché 13986 fichiers, 258419 lignes de code ajoutées,
599137 lignes supprimées). Environ 39 % de tous les changements présentés dans la version 5.3
sont liés aux pilotes de périphériques, environ 12 % des changements concernent
la mise à jour du code spécifique aux architectures matérielles, 11 %
attitude envers la mise à jour du code spécifique aux architectures matérielles, 11%
lié à la pile réseau, 3 % — aux systèmes de fichiers et 3 % aux sous-systèmes internes.
du noyau.

Principales nouveautés:

  • Mémoire et services système
    • Le développement de la fonctionnalité ‘pidfd’ a été poursuivi, aidant à traiter les situations de réutilisation de PID (le pidfd est lié à un processus spécifique et ne change pas, tandis que le PID peut être lié à un autre processus après la fin du processus actuel associé à ce PID). Une fonctionnalité a déjà été ajoutée au noyau.
      L'appel système pidfd_send_signal() et le drapeau CLONE_PIDFD dans l'appel clone(), permettant d'obtenir un pidfd pour utilisation dans pidfd_send_signal(). Lors de l'utilisation de l'appel clone() avec le drapeau CLONE_PIDFD, des problèmes pouvaient survenir avec les gestionnaires de services ou le système de terminaison forcée des processus en cas de manque de mémoire sur la plateforme Android. Dans ce cas, l'appel fork() ou clone() sans CLONE_PIDFD est utilisé pour lancer.

      Dans le noyau 5.3, l'appel système a été introduit. pidfd_open(), permettant d'obtenir un pidfd vérifiable pour n'importe quel processus existant, créé sans passer par l'appel clone() avec le drapeau CLONE_PIDFD. Le support du polling pidfd a également été ajouté via poll() et epoll(), permettant aux gestionnaires de processus de suivre les terminaisons d'un processus quelconque, sans craindre d'état de compétition lors de l'attribution d'un PID à un nouveau processus. Le mécanisme de notification de la terminaison d'un processus lié au pidfd est similaire à l'information sur la terminaison de son propre processus fils.

    • Le planificateur de tâches a ajouté la prise en charge du mécanisme de limitation d'utilisation (Utilization clamping), permettant de respecter des plages minimales ou maximales de fréquences, selon les 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 à faible priorité, n'impactant pas 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 du support de la technologie de gestion de la consommation d'énergie Intel Speed Select, disponible sur certains serveurs équipés de processeurs Intel Xeon. La technologie spécifiée permet de configurer les performances et la bande passante des partitions pour différents cœurs de CPU, ce qui permet de prioriser les performances pour les tâches exécutées sur certains cœurs, au détriment des performances sur d'autres cœurs ;
    • Aux processus en espace utilisateur fournie la possibilité d'attendre pendant une courte période sans utiliser de cycles grâce à l'instruction umwait. Cette instruction, avec les instructions umonitor et tpause, sera disponible dans les puces Intel « Tremont » à venir, permettant d'implémenter des délais efficaces sur le plan énergétique sans affecter les performances des autres threads utilisant le Hyper Threading ;
    • Pour l'architecture RISC-V, le support des grandes pages mémoire (huge pages) a été ajouté ;
    • Dans le mécanisme de traçage « kprobes », la possibilité de déférer des pointeurs du noyau en espace utilisateur a été ajoutée, ce qui peut être utilisé, par exemple, pour évaluer le contenu des structures passant par des appels système. La capacité d'installer des vérifications au démarrage a également été ajoutée.
    • Une option PREEMPT_RT a été ajoutée au fichier de configuration pour fonctionner en mode temps réel. Le code pour le support du mode temps réel n'a pas encore été ajouté au noyau, mais l'apparition de cette option est un bon signe que l'épopée de plusieurs années sur d'intégrer les patches Realtime-Preempt touche à sa fin ;
    • Un appel système clone3() a été ajouté avec une mise en œuvre d'une version d'interface clone() plus extensible, permettant de spécifier un plus grand nombre de drapeaux ;
    • Un gestionnaire bpf_send_signal() a été ajouté, permettant aux programmes BPF d'envoyer des signaux à n'importe quel processus ;
    • Pour les événements perf dans l'environnement de l'hyperviseur KVM, un nouveau mécanisme de filtrage des événements a été ajouté, permettant à l'administrateur de définir les types d'événements autorisés ou non pour la surveillance côté système invité ;
    • Le mécanisme de vérification des applications eBPF a ajouté la capacité de traiter les programmes ayant des boucles, à condition que l'exécution de la boucle soit limitée et ne puisse pas entraîner un dépassement de la limite du nombre maximum d'instructions ;
  • Sous-système de disque, entrée/sortie et systèmes de fichiers
    • Pour le système de fichiers XFS, une possibilité de parcours multithread des inodes a été mise en place (par exemple, lors de la vérification des quotas). De nouvelles ioctl BULKSTAT et INUMBERS ont été ajoutées, offrant un accès aux fonctionnalités apparues dans la cinquième édition du format FS, telles que le temps de naissance de l'inode et la possibilité de définir des paramètres BULKSTAT et INUMBERS pour chaque groupe AG (Allocation Groups).
    • Dans Ext4 ajout de la prise en charge des espaces vides dans les répertoires (blocs non liés).
      Traitement assuré du drapeau « i » (immutable) pour les fichiers ouverts (interdiction d'écriture si le drapeau a été défini au moment où le fichier était déjà ouvert).
    • Dans Btrfs, la définition d'une implémentation rapide de crc32c est assurée sur toutes les architectures.
    • Dans CIFS, le code pour le support de smbdirect a vu son statut d'expérimental supprimé. Dans SMB3, la possibilité d'utiliser des algorithmes cryptographiques en mode GCM a été ajoutée. Une nouvelle option de montage a été ajoutée pour extraire les paramètres de mode des enregistrements ACE (Access Control Entry). La performance de l'appel open() a été optimisée.
    • Dans F2FS, une option a été ajoutée pour limiter le ramasse-miettes en fonction du mode checkpoint=disable. Un ioctl pour supprimer des plages de blocs de F2FS a été ajouté, permettant l'ajustement de la taille de la partition à la volée. La possibilité d'implémenter un fichier d'échange avec un accès direct à F2FS a été ajoutée. Pour tous les utilisateurs, la prise en charge de l'ancrage de fichiers et de l'attribution de blocs pour des fichiers similaires a été ajoutée.
    • Le support des opérations asynchrones sendmsg() et recvmsg() a été ajouté dans l'interface pour le fonctionnement des entrées/sorties asynchrones io_uring.
    • Dans le système de fichiers UBIFS, la prise en charge de la compression utilisant l'algorithme zstd et la possibilité de validation des images FS signées ont été ajoutées.
    • Dans le FS Ceph, un support pour les étiquettes de sécurité SELinux pour les fichiers a été ajouté.
    • Pour NFSv4, une nouvelle option de montage « nconnect= » a été mise en œuvre, définissant le nombre de connexions établies avec le serveur. Le trafic entre ces connexions sera réparti à l'aide de l'équilibrage de charge. De plus, le serveur NFSv4 crée désormais un répertoire /proc/fs/nfsd/clients contenant des informations sur les clients actuels, y compris des détails sur les fichiers qu'ils ont ouverts.
  • Virtualisation et sécurité
    • Le noyau a inclus un hyperviseur pour les appareils intégrés. ACRN, qui est écrit en tenant compte de la préparation à l'exécution de tâches en temps réel et de son utilisation dans des systèmes critiques. ACRN assure des frais généraux minimaux, garantit de faibles latences et une réactivité adéquate lors de l'interaction avec le matériel. La virtualisation des ressources CPU, d'entrée/sortie, de la sous-système réseau, et des opérations graphiques et sonores est prise en charge. ACRN peut être utilisé pour exécuter plusieurs machines virtuelles isolées dans des blocs de contrôle électroniques, des tableaux de bord, des systèmes d'information automobile, des appareils IoT grand public et d'autres matériels embarqués ;
    • En mode utilisateur Linux ajouté le mode 'voyage dans le temps', permettant de ralentir ou d'accélérer le temps dans l'environnement virtuel UML pour simplifier le débogage du code lié au temps. Un paramètre a également été ajouté
      time-travel-start, qui permet de démarrer les horloges système à partir d'un moment spécifié au format epoch ;
    • De nouvelles options de ligne de commande du noyau 'init_on_alloc' et 'init_on_free' ont été ajoutées, qui, lorsqu'elles sont spécifiées, activent la mise à zéro des zones de mémoire allouées et libérées (remplissage par des zéros lors de malloc et free), renforçant ainsi la sécurité grâce à des frais généraux supplémentaires pour l'initialisation ;
    • Un nouveau driver a été ajouté virtio-iommu , avec la mise en œuvre d'un périphérique paravirtualisé, permettant d'envoyer des requêtes IOMMU, telles que ATTACH, DETACH, MAP et UNMAP, via le transport virtio sans émuler des tables de pages mémoire ;
    • Un nouveau driver a été ajouté virtio-pmem, offrant un accès aux dispositifs de stockage mappés dans l'espace d'adresses physiques, tels que NVDIMM ;
    • La possibilité de lier des clés cryptographiques à un espace de noms utilisateur ou réseau (les clés deviennent inaccessibles en dehors de l'espace de noms choisi) a été mise en œuvre, ainsi que la protection des clés via des ACL ;
    • Dans le sous-système cryptographique ajouté le support d'un algorithme très rapide de hachage non cryptographique xxhash, dont la vitesse dépend des performances de la mémoire ;
  • Sous-système réseau
    • Le traitement des adresses IPv4 dans la plage 0.0.0.0/8, qui était auparavant inaccessible, a été assuré. L'introduction de ce sous-réseau permettra de distribuer encore 16 millions d'adresses IPv4 ;
    • Dans Netfilter pour nftables ajouté le support des mécanismes d'accélération matérielle pour la filtration des paquets a été assuré grâce à l'application ajoutée dans les pilotes API de Flow Block. Des tables de règles complètes avec toutes les chaînes peuvent être déplacées vers le côté des adaptateurs réseau. L'activation se fait en utilisant le drapeau NFT_TABLE_F_HW pour la table. La prise en charge des métadonnées simples des protocoles de niveau 3 et 4, des actions d'accepter/rejeter, des correspondances par IP et des ports réseau de l'expéditeur/récepteur et du type de protocole est disponible ;
    • Ajouté prise en charge intégrée du suivi des connexions pour les ponts réseau, sans nécessiter l'application d'une couche d'émulation br_netfilter ;
    • Dans nf_tables ajouté prise en charge du module SYNPROXY, répliquant une fonctionnalité similaire de iptables, ainsi que la possibilité de vérifier les options individuelles dans l'en-tête IPv4 ;
    • Ajout de la possibilité de lier des programmes BPF aux appels système setsockopt() et getsockopt(), permettant par exemple d'attacher ses propres gestionnaires d'accès à ces appels. De plus, un nouveau point d'accroche (hook) a été ajouté, permettant d'organiser l'appel d'un programme BPF une fois par intervalle RTT (round-trip-time, temps de ping) ;
    • Pour IPv4 et IPv6 ajouté un nouveau mécanisme de stockage des données de routage nexthop, visant à augmenter la scalabilité des tables de routage. Les tests effectués ont montré qu'avec le nouveau système, l'importation de 743 000 routes dans le noyau a été réalisée en seulement 4,3 secondes ;
    • Pour Bluetooth réalisée les fonctionnalités nécessaires pour prendre en charge LE ping ;
  • Matériel
    • Ajouté prise en charge des processeurs compatibles x86 de la société Zhaoxin, développés dans le cadre d'un projet conjoint entre VIA Technologies et la municipalité de Shanghai. La famille de CPU ZX est basée sur l'architecture x86-64 Isaiah, poursuivant le développement des technologies VIA Centaur;
    • Un support a été ajouté dans le sous-système DRM (Direct Rendering Manager) ainsi que dans les pilotes graphiques amdgpu et i915 pour l'analyse, le traitement et l'envoi via le port HDMI de métadonnées HDR (high dynamic range), permettant d'utiliser des panneaux HDR et des écrans capables d'afficher des plages de luminosité supplémentaires ;
    • Le pilote amdgpu a ajouté un support initial pour le GPU AMD NAVI (RX5700), qui comprend le pilote de base, le code d'interaction avec les écrans (DCN2), ainsi que la prise en charge du GFX et des calculs (GFX10),
      SDMA 5 (System DMA0), des outils de gestion de l'alimentation et des encodeurs/décodeurs multimédia (VCN2). Dans amdgpu, la prise en charge des cartes basées sur le GPU Vega12 et Vega20 a également été améliorée, avec des fonctionnalités supplémentaires pour la gestion de la mémoire et de la consommation d'énergie ;
    • Le pilote amdkfd (pour les GPU discrets, tels que Fiji, Tonga, Polaris) ajoute le support des cartes basées sur le GPU VegaM;
    • Dans le pilote DRM pour les cartes graphiques Intel pour les puces Icelake mis en œuvre un nouveau mode de correction gamma multi-segment. Ajout de la possibilité de sortie via DisplayPort au format YCbCr4:2:0. Nouvelles mises à jour de firmware ajoutées GuC pour SKL, BXT, KBL, GLK et ICL. La possibilité de désactiver l'alimentation de l'écran en mode asynchrone a été mise en œuvre. Ajouté support de la sauvegarde et de la restauration du contexte de rendu pour les puces Ironlake (gen5) et gen4 (Broadwater — Cantiga), ce qui permet de restaurer l'état du GPU à partir de l'espace utilisateur lors du passage d'un ensemble d'opérations à un autre;
    • Dans le pilote Nouveau, il est maintenant possible d'identifier le chipset NVIDIA Turing TU116;
    • Les capacités du pilote DRM/KMS pour les accélérateurs des opérations d'écran ARM Komeda (Mali D71) ont été étendues, avec ajout du support de l'échelle, de la séparation/fusion des couches, de la rotation, de l'enregistrement différé, de l'AFBC, du SMMU et des formats de codage de couleur Y0L2, P010, YUV420_8/10BIT;
    • Le pilote MSM a ajouté le support de la série A540 GPU Adreno utilisée dans les processeurs Qualcomm, ainsi que le support 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;
    • Ajouté un pilote pour activer les outils d'accélération de décodage
      vidéo disponibles dans le SoC Amlogic Meson;
    • Le pilote v3d (pour le GPU Broadcom Video Core V utilisé dans Raspberry Pi) a introduit la prise en charge la gestion des shaders de calcul;
    • Ajouté un pilote pour les claviers SPI et les pavés tactiles utilisés dans les modèles modernes de laptops Apple MacBook et MacBookPro;
    • Ajouté une protection supplémentaire des appels ioctl associés au pilote floppy, et ce dernier est marqué comme abandonné
      (« orphelin »), ce qui signifie l'arrêt de ses tests. Le pilote est pour l'instant conservé dans le noyau, mais son fonctionnement correct 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.
    • Ajouté un pilote cpufreq pour les cartes Raspberry Pi, permettant de gérer dynamiquement la fréquence du processeur;
    • Ajout du support de nouveaux SoC ARM 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 cartes :
      • Purism Librem5,
      • Aspeed BMC,
      • Microsoft Olympus BMC,
      • Kontron SMARC,
      • Novtech Meerkat96 (i.MX7),
      • ST Micro Avenger96,
      • Google Cheza (Qualcomm SDM845),
      • Qualcomm Dragonboard 845c (Qualcomm SDM845),
      • Hugsun X99 TV Box (Rockchip RK3399),
      • Khadas Edge/Edge-V/Captain (Rockchip RK3399),
      • HiHope RZ/G2M,
      • NXP LS1021A-TSN.

En même temps, le Fonds latino-américain pour le logiciel libre a formé
une variante noyau entièrement libre 5.3 — Linux-libre 5.3-gnu, nettoyé de tous les éléments de firmwares et de pilotes contenant des composants ou des portions de code non libres, dont l'utilisation est limitée par le fabricant. Dans cette nouvelle version, le chargement des blobs dans les pilotes qcom, hdcp drm, allegro-dvt et meson-vdec a été désactivé.
Le code de nettoyage des blobs dans les pilotes et sous-systèmes amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, et le pilote audio pour skylake a également été mis à jour, ainsi que la documentation concernant le microcode.

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