Version du noyau Linux 6.7

Après deux mois de développement, Linus Torvalds a présenté la version du noyau Linux 6.7. Parmi les changements les plus notables : intégration du système de fichiers Bcachefs, arrêt du support de l'architecture Itanium, possibilité pour Nouveau de travailler avec les firmwares GSP-R, prise en charge du chiffrement TLS dans NVMe-TCP, possibilité d'utiliser des exceptions dans BPF, support de futex dans io_uring, optimisation des performances de l'ordonneur fq (Fair Queuing), prise en charge de l'extension TCP-AO (TCP Authentication Option) et possibilité de limiter les connexions réseau dans le mécanisme de protection Landlock, ajout de la gestion des accès à user namespace et io_uring via AppArmor.

La nouvelle version inclut 18405 corrections provenant de 2066 développeurs, la taille du patch est de 72 Mo (les modifications ont touché 13467 fichiers, 906147 lignes de code ajoutées, 341048 lignes supprimées). Dans la précédente version, il y avait 15291 corrections provenant de 2058 développeurs, la taille du patch était de 39 Mo. Environ 45 % de toutes les modifications présentées dans 6.7 sont liées aux pilotes d'appareils, environ 14 % des changements concernent la mise à jour de code spécifique aux architectures matérielles, 13 % sont liés à la pile réseau, 5 % aux systèmes de fichiers et 3 % aux sous-systèmes internes du noyau.

Les nouveautés majeures du noyau 6.7 :

  • Sous-système de disque, entrée/sortie et systèmes de fichiers
    • Le code du système de fichiers Bcachefs a été intégré au noyau, avec pour objectif d'atteindre des niveaux de performance, de fiabilité et d'évolutivité similaires à ceux de XFS, tout en intégrant des éléments de fonctionnalités avancées présentes dans Btrfs et ZFS. Par exemple, Bcachefs prend en charge des fonctionnalités telles que l'inclusion de plusieurs appareils dans une partition, la disposition multi-niveaux des systèmes de stockage (niveaux inférieurs avec des données souvent utilisées sur des SSD rapides, et niveaux supérieurs avec des données moins sollicitées provenant de disques durs), la réplication (RAID 1/10), le cache, la compression transparente des données (modes LZ4, gzip et ZSTD), les instantanés, la vérification de l'intégrité par checksums, la possibilité de stocker des codes de correction d'erreurs Reed-Solomon (RAID 5/6), et le stockage d'informations de manière chiffrée (utilisant ChaCha20 et Poly1305). En termes de performance, Bcachefs surpasse Btrfs et d'autres systèmes de fichiers basés sur le mécanisme Copy-on-Write, et montre des vitesses de fonctionnement proches de celles d'Ext4 et XFS.
    • Le système de fichiers Btrfs a introduit un mode de quotas simplifié qui permet d'obtenir une meilleure performance en suivant les extents uniquement dans la sous-partie où ils ont été créés, ce qui simplifie considérablement les calculs et améliore les performances, mais ne permet pas de prendre en compte les extents partagés entre plusieurs sous-parties.
    • Btrfs a ajouté une nouvelle structure de données « stripe tree », adaptée pour le mappage logique des extents dans des situations où le mappage physique ne correspond pas sur différents dispositifs. Cette structure est actuellement utilisée dans les implémentations RAID0 et RAID1 pour les dispositifs de stockage zonés. À l'avenir, cette structure devrait également être utilisée dans des niveaux RAID supérieurs, ce qui permettra de résoudre plusieurs problèmes existants dans l'implémentation actuelle.
    • Le système de fichiers Ceph a implémenté la prise en charge du mappage des identifiants d'utilisateurs des systèmes de fichiers montés, utilisé pour faire correspondre les fichiers d'un utilisateur spécifique sur une partition montée à un autre utilisateur dans le système actuel.
    • Dans efivarfs, il a été ajouté la possibilité de spécifier uid et gid lors du montage pour permettre aux processus s'exécutant sans les droits root de modifier les variables UEFI.
    • Dans exFAT, des appels ioctl pour lire et modifier les attributs du système de fichiers ont été ajoutés. La gestion des répertoires de taille nulle a également été intégrée.
    • Dans F2FS, la possibilité d'utiliser des blocs de taille 16K a été implémentée.
    • Le mécanisme d'automontage autofs a été mis à jour pour utiliser une nouvelle API de montage de partitions.
    • Dans OverlayFS, des options de montage « lowerdir+ » et « datadir+ » ont été proposées. La prise en charge du montage imbriqué d'OverlayFS avec xattrs a été ajoutée.
    • Dans XFS, l'optimisation de la charge CPU dans le code de distribution des blocs en temps réel a été réalisée. La possibilité d'exécuter simultanément des opérations de lecture et FICLONE a été garantie.
    • Le code EXT2 a été modifié pour utiliser des folios de pages mémoire.
  • Mémoire et services système
    • Le support de l'architecture ia64, utilisée dans les processeurs Intel Itanium, a été interrompu, les ventes ayant entièrement cessé en 2021. Les processeurs Itanium ont été introduits par Intel en 2001, mais l'architecture ia64 n'a pas pu rivaliser avec AMD64, principalement en raison des performances supérieures d'AMD64 et d'une transition plus fluide depuis les processeurs x86 32 bits. Par conséquent, l'intérêt d'Intel s'est déplacé vers les processeurs x86-64, laissant Itanium de côté. serveurs HP Integrity, dont la prise de commandes a été arrêtée il y a trois ans. Le code pour le support de l'ia64 a été retiré du noyau en raison de l'absence prolongée de maintenance de cette plateforme, bien que Linus Torvalds ait exprimé sa volonté de réintégrer le support de l'ia64 dans le noyau, mais seulement si un mainteneur se manifeste et démontre un support de qualité pour cette plateforme en dehors du noyau principal pendant au moins un an.
    • Un paramètre de ligne de commande du noyau « ia32_emulation » a été ajouté, permettant d'activer et de désactiver le support de l'émulation 32 bits lors du démarrage dans des noyaux compilés pour l'architecture x86-64. Sur le plan pratique, ce nouveau paramètre permet de compiler le noyau avec un support de compatibilité pour des applications 32 bits, mais désactive par défaut ce mode afin de réduire le vecteur d'attaque sur le noyau, car l'API pour garantir cette compatibilité a été moins testée que les interfaces principales du noyau.
    • Le transfert des modifications de la branche Rust-for-Linux a été poursuivi, concernant l'utilisation du langage Rust comme second langage pour le développement de pilotes et de modules noyau (le support de Rust n'est pas actif par défaut et n'implique pas que Rust devienne une dépendance de construction obligatoire du noyau). Dans cette nouvelle version, la transition vers la version Rust 1.73 a été effectuée et un ensemble de liaisons pour travailler avec des files d'attente de travail (workqueues) a été proposé.
    • Le mécanisme binfmt_misc a été rendu disponible pour ajouter le support de nouveaux formats de fichiers exécutables (par exemple, pour exécuter des applications compilées en Java ou Python) à l'intérieur de namespaces non privilégiés (namespace).
    • Dans le contrôleur cgroup cpuset, qui permet de gérer l'affectation des cœurs CPU lors de l'exécution d'une tâche, il est assuré une séparation entre la partition locale et distante (remote partition), qui diffèrent par le fait que le cgroup parent est une section racine correcte ou non. De nouvelles options « cpuset.cpus.exclusive » et « cpuset.cpus.exclusive.effective » pour le lien exclusif aux CPU ont également été ajoutées au cpuset.
    • La sous-système BPF a mis en œuvre un support pour les exceptions, qui sont traitées comme une sortie urgente du programme BPF avec la possibilité d'un déroulement sécurisé des cadres de pile. De plus, l'utilisation de pointeurs kptr dans le lien vers le CPU est autorisée dans les programmes BPF.
    • Le sous-système io_uring a ajouté un support pour les opérations avec des futex, et de nouvelles opérations ont également été mises en œuvre : IORING_OP_WAITID (version asynchrone de waitid), SOCKET_URING_OP_GETSOCKOPT (variante de getsockopt), SOCKET_URING_OP_SETSOCKOPT (variante de setsockopt) et IORING_OP_READ_MULTISHOT (opérations de lecture multiples qui ne se terminent pas jusqu'à ce qu'il n'y ait plus de données ou que le tampon soit plein).
    • Une implémentation de FIFO léger à sens unique a été ajoutée, nécessitant un verrouillage par spin uniquement pour la suppression de la file d'attente dans le contexte du processus et ne nécessitant pas de verrouillage par spin pour l'ajout atomique à la file d'attente dans n'importe quel contexte.
    • Un tampon circulaire « objpool » a été ajouté avec une mise en œuvre évolutive d'une file d'attente à hautes performances pour l'allocation et le retour d'objets.
    • Une première partie des changements pour la mise en œuvre de la nouvelle API futex2 a été ajoutée, qui présente des performances plus élevées sur des systèmes NUMA, prend en charge des tailles différentes de 32 bits et peut être utilisée à la place de l'appel système multiplexé futex().
    • Un support pour l'ensemble actuel d'instructions BPF (cpuv4) a été ajouté pour les architectures ARM32 et S390x.
    • Pour l'architecture RISC-V, la possibilité d'utiliser le mode de vérification Shadow-Call Stack disponible dans Clang 17 a été mise en œuvre, conçu pour protéger contre la réécriture de l'adresse de retour d'une fonction en cas de dépassement de tampon dans la pile. Le concept de protection consiste à sauvegarder l'adresse de retour après le transfert de contrôle à la fonction dans une « pile d'ombre » séparée et à récupérer cette adresse avant de sortir de la fonction.
    • Un nouveau mode de numérisation intelligent des pages mémoire a été ajouté au mécanisme de fusion des pages mémoire identiques (KSM: Kernel Samepage Merging), qui suit les pages numérisées sans succès et réduit l'intensité de leurs rescans. Pour activer ce nouveau mode, une configuration a été ajoutée à /sys/kernel/mm/ksm/smart_scan.
    • Une nouvelle commande ioctl PAGEMAP_SCAN a été ajoutée, permettant, lorsqu'elle est utilisée avec userfaultfd(), de déterminer les écritures dans une plage mémoire spécifique. Cette nouvelle fonctionnalité peut par exemple être utilisée dans les systèmes pour sauvegarder et restaurer l'état des processus CRIU ou dans les systèmes anti-triche de jeux.
    • Le système de construction inclut par défaut la compilation des exemples d'utilisation de la sous-système perf, écrits sous forme de programmes BPF, lorsqu'un compilateur Clang est présent.
    • L'ancien niveau videobuf, utilisé pour gérer les buffers vidéo dans la sous-système multimédia, a été supprimé, ayant été remplacé il y a plus de 10 ans par une nouvelle implémentation videobuf2.
  • Virtualisation et sécurité
    • La sous-système fscrypt a ajouté la possibilité de chiffrer les données par blocs de taille inférieure à celle du bloc dans le système de fichiers. Cela peut être nécessaire pour utiliser des mécanismes de chiffrement matériels ne prenant en charge que de petits blocs (par exemple, les contrôleurs UFS ne prenant en charge que la taille de bloc 4096 pourront être utilisés avec un système de fichiers de taille de bloc 16K).
    • Dans la sous-système iommufd, qui permet de gérer les tables de pages mémoire I/O via des descripteurs de fichiers de l'espace utilisateur, un suivi des données non nettoyées du cache (dirty) pour les opérations DMA a été ajouté, ce qui est nécessaire pour déterminer la mémoire avec des données non nettoyées lors de la migration des processus.
    • Le mécanisme Landlock, qui permet de restreindre l'interaction d'un groupe de processus avec l'environnement externe, a ajouté la prise en charge de la définition de règles de gestion d'accès aux sockets TCP. Par exemple, une règle peut être créée pour n'autoriser l'accès qu'au port réseau 443 pour établir des connexions HTTPS.
    • La sous-système AppArmor a ajouté la possibilité de gérer l'accès au mécanisme io_uring et de créer des espaces de noms d'identificateurs utilisateur, permettant d'autoriser sélectivement l'accès à ces fonctionnalités uniquement pour certains processus.
    • Une API d'attestation a été ajoutée machines virtuelles pour confirmer l'intégrité du processus de leur chargement.
    • Les systèmes LoongArch prennent en charge la virtualisation en utilisant l'hyperviseur KVM.
    • L'utilisation de l'hyperviseur KVM sur les systèmes RISC-V a introduit la prise en charge de l'extension Smstateen, qui bloque l'accès de la machine virtuelle aux registres CPU qui ne sont pas explicitement pris en charge par l'hyperviseur. De plus, la prise en charge de l'utilisation de l'extension Zicond dans les systèmes invités a été ajoutée, permettant d'effectuer certaines opérations conditionnelles sur des entiers.
    • Dans les systèmes invités fonctionnant sous KVM basés sur l'architecture x86, l'utilisation d'un maximum de 4096 CPU virtuels est autorisée.
  • Sous-système réseau
    • Le pilote NVMe-TCP (NVMe sur TCP), qui permet d'accéder aux disques NVMe via le réseau (NVM Express over Fabrics) en utilisant le protocole TCP, a été amélioré avec la prise en charge du chiffrement des canaux de transmission de données utilisant TLS (utilisant KTLS et un processus d'arrière-plan dans l'espace utilisateur tlshd pour négocier la connexion).
    • Une optimisation de la performance du planificateur de paquets fq (Fair Queuing) a permis d'augmenter la capacité de 5% sous des charges élevées lors du test tcp_rr (TCP Request/Response) et de 13% lors d'un flux UDP illimité.
    • Dans le protocole TCP, une fonctionnalité optionnelle d'utilisation des horodatages (TCP TS) avec une précision en microsecondes (RFC 7323) a été ajoutée, permettant d'évaluer plus précisément les latences et de créer des modules de contrôle de congestion plus avancés. Pour l'activer, utilisez la commande « ip route add 10/8 … features tcp_usec_ts ».
    • Dans la pile TCP, la prise en charge de l'extension TCP-AO (TCP Authentication Option, RFC 5925) a été ajoutée, permettant de vérifier les en-têtes TCP via des codes MAC (Message Authentication Code), utilisant des algorithmes modernes HMAC-SHA1 et CMAC-AES-128 au lieu de l'ancienne option TCP-MD5 basée sur l'algorithme obsolète MD5.
    • Un nouveau type de périphériques réseau virtuels « netkit » a été ajouté, dont la logique de transfert de données est définie par un programme BPF.
    • Dans KSMBD, l'implémentation du serveur SMB au niveau du noyau, la prise en charge de la conversion des noms de fichiers contenant des paires de caractères de substitution a été ajoutée.
    • Dans NFS, l'implémentation des flux avec des services RPC a été améliorée. La prise en charge du délégation d'écriture a été ajoutée (pour NFSv4.1+). NFSD a ajouté la prise en charge du gestionnaire netlink rpc_status. Le support des clients NFSv4.x lors de l'exportation répétée vers knfsd a été amélioré.
  • Matériel
    • Le module noyau Nouveau a ajouté un support initial pour les firmwares GSP-RM, utilisés dans les GPU NVIDIA RTX 20+ pour déléguer les opérations d'initialisation et de gestion des GPU à un microcontrôleur séparé GSP (GPU System Processor). Le support GSP-RM permet au pilote Nouveau de fonctionner via des appels de firmware, au lieu de programmer directement les opérations d'interaction avec le matériel, ce qui simplifie considérablement l'ajout de support pour de nouveaux GPU NVIDIA grâce à l'utilisation d'appels prêts pour l'initialisation et la gestion de la consommation d'énergie.
    • Le pilote AMDGPU a intégré le support de GC 11.5, NBIO 7.11, SMU 14, SMU 13.0 OD, DCN 3.5, VPE 6.1 et DML2. Le support du chargement sans couture a été amélioré (sans scintillement lors du changement de mode vidéo).
    • Le pilote i915 a ajouté le support des puces Intel Meteor Lake et a inclus une implémentation initiale de Intel LunarLake (Xe 2).
    • Le support des canaux de transmission asymétriques, ajoutés dans les spécifications USB4 v2 (120/40G), a été ajouté.
    • Support ajouté pour les SoC ARM : Qualcomm Snapdragon 720G (utilisé dans les smartphones Xiaomi), AMD Pensando Elba, Renesas, R8A779F4 (R-Car S4-8), USRobotics USR8200 (utilisé dans les routeurs et NAS).
    • Support ajouté pour le smartphone Fairphone 5 et les plates-formes ARM Orange Pi 5, QuartzPro64, Turing RK1, Variscite MX6, BigTreeTech CB1, Freescale LX2162, Google Spherion, Google Hayato, Genio 1200 EVK, RK3566 Powkiddy RGB30.
    • Support ajouté pour les cartes RISC-V Milk-V Pioneer et Milk-V Duo.
    • Support ajouté pour les interfaces audio des ordinateurs portables HUAWEI, équipés de CPU AMD. Support ajouté pour des haut-parleurs supplémentaires installés sur les ordinateurs portables Dell Oasis 13/14/16. Support ajouté pour les haut-parleurs intégrés ASUS K6500ZC. Support ajouté pour l'indicateur de désactivation du son sur les ordinateurs portables HP 255 G8 et G10. Support ajouté pour les pilotes audio acp6.3. Support ajouté pour les interfaces audio professionnelles Focusrite Clarett+ 2Pre et 4Pre.

Simultanément, la Fondation latino-américaine pour le logiciel libre a créé une version totalement libre du noyau 6.7 — Linux-libre 6.7-gnu, débarrassé d'éléments de firmware et de pilotes contenant des composants ou sections de code non libres, dont l'utilisation est limitée par le fabricant. Dans la version 6.7, le code de nettoyage des blobs a été mis à jour dans divers pilotes et sous-systèmes, tels que les pilotes amdgpu, nouveau, adreno, mwifiex, mt7988, ath11k, avs et btqca. Le code de nettoyage des pilotes localtalk et rtl8192u a été supprimé en raison de leur exclusion du noyau. Des composants superflus du nettoyage des pilotes xhci-pci, rtl8xxxu et rtw8822b, précédemment ajoutés par erreur, ont été retirés. Un nettoyage des noms des blobs dans les fichiers dts pour l'architecture Aarch64 a été effectué. Des blobs ont été supprimés dans les nouveaux pilotes mt7925, tps6598x, aw87390 et aw88399.

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