Version du noyau Linux 6.7

Après deux mois de développement, Linus Torvalds a présenté la sortie du noyau Linux 6.7. Parmi les changements les plus notables : l'intégration du système de fichiers Bcachefs, l'arrêt du support de l'architecture Itanium, la capacité de Nouvea à travailler avec le firmware GSP-R, le support du chiffrement TLS dans NVMe-TCP, la possibilité d'utiliser des exceptions dans BPF, prise en charge de futex dans io_uring, optimisation des performances du planificateur fq (Fair Queuing), prise en charge de l'extension TCP-AO (option d'authentification TCP) et possibilité de restreindre les connexions réseau dans le mécanisme de sécurité Landlock, ajout du contrôle d'accès à l'espace de noms utilisateur et à io_uring via AppArmor.

La nouvelle version comprend 18405 2066 correctifs provenant de 72 13467 développeurs, la taille du correctif est de 906147 Mo (les modifications ont affecté 341048 15291 fichiers, 2058 39 lignes de code ont été ajoutées, 45 6.7 lignes ont été supprimées). La dernière version contenait 14 13 correctifs provenant de 5 3 développeurs, la taille du correctif était de XNUMX Mo. Environ XNUMX % de toutes les modifications introduites dans la version XNUMX sont liées aux pilotes de périphériques, environ XNUMX % des modifications sont liées à la mise à jour du code spécifique aux architectures matérielles, XNUMX % sont liées à la pile réseau, XNUMX % sont liées aux systèmes de fichiers et XNUMX % sont liés aux sous-systèmes internes du noyau.

Innovations clés dans le noyau 6.7 :

  • Sous-système de disque, E/S et systèmes de fichiers
    • Le noyau adopte le code du système de fichiers Bcachefs, qui tente d'atteindre les performances, la fiabilité et l'évolutivité de XFS, combinés avec des éléments des fonctionnalités avancées de Btrfs et ZFS. Par exemple, Bcachefs prend en charge des fonctionnalités telles que l'inclusion de plusieurs périphériques dans une partition, les configurations de disques multicouches (la couche inférieure avec les données fréquemment utilisées basées sur des SSD rapides et la couche supérieure avec les données les moins utilisées des disques durs), la réplication (RAID 1/10), mise en cache, compression transparente des données (modes LZ4, gzip et ZSTD), tranches d'état (instantanés), vérification de l'intégrité à l'aide de sommes de contrôle, possibilité de stocker des codes de correction d'erreurs Reed-Solomon (RAID 5/6), stockage des informations dans forme cryptée (ChaCha20 et Poly1305 sont utilisés). En termes de performances, Bcachefs est en avance sur Btrfs et autres systèmes de fichiers basés sur le mécanisme Copy-on-Write, et démontre une vitesse de fonctionnement proche d'Ext4 et XFS.
    • Le système de fichiers Btrfs introduit un mode de quota simplifié qui permet d'obtenir des performances plus élevées en suivant les extensions uniquement dans la sous-partition dans laquelle elles sont créées, ce qui simplifie considérablement les calculs et améliore les performances, mais ne permet pas de prendre en compte les extensions partagées dans plusieurs sous-partitions.
    • Btrfs a ajouté une nouvelle structure de données « arbre à bandes », adaptée au mappage d'étendue logique dans les situations où les mappages physiques ne correspondent pas entre les appareils. La structure est actuellement utilisée dans les implémentations de RAID0 et RAID1 pour les périphériques bloc zonés. À l'avenir, ils prévoient d'utiliser cette structure dans des RAID de niveau supérieur, ce qui résoudra un certain nombre de problèmes existants dans la mise en œuvre actuelle.
    • Le système de fichiers Ceph implémente la prise en charge du mappage des ID utilisateur des systèmes de fichiers montés, utilisé pour faire correspondre les fichiers d'un utilisateur spécifique sur une partition étrangère montée avec un autre utilisateur sur le système actuel.
    • Ajout de la possibilité de spécifier l'uid et le gid lors du montage sur efivarfs pour permettre aux processus non root de modifier les variables UEFI.
    • Ajout d'appels ioctl à exFAT pour lire et modifier les attributs FS. Ajout de la gestion des répertoires de taille nulle.
    • F2FS implémente la possibilité d'utiliser des blocs de 16 Ko.
    • Le mécanisme de montage automatique autofs a été modifié pour utiliser la nouvelle API de montage de partition.
    • OverlayFS propose des options de montage "lowerdir+" et "datadir+". Ajout de la prise en charge du montage imbriqué d'OverlayFS avec xattrs.
    • XFS a optimisé la charge CPU dans le code d'allocation de blocs en temps réel. La possibilité d'effectuer simultanément des opérations de lecture et FICLONE est fournie.
    • Le code EXT2 a été converti pour utiliser les folios de pages.
  • Services mémoire et système
    • La prise en charge de l'architecture ia64 utilisée dans les processeurs Intel Itanium, qui ont été complètement abandonnées en 2021, a été interrompue. Les processeurs Itanium ont été introduits par Intel en 2001, mais l'architecture ia64 n'a pas réussi à rivaliser avec l'AMD64, principalement en raison des performances plus élevées de l'AMD64 et de la transition plus fluide des processeurs x32 86 bits. En conséquence, les intérêts d'Intel se sont déplacés en faveur des processeurs x86-64, et le lot d'Itanium est resté les serveurs HP Integrity, dont les commandes ont été arrêtées il y a trois ans. Le code pour le support ia64 a été supprimé du noyau principalement en raison du manque de support à long terme pour cette plate-forme, tandis que Linus Torvalds a exprimé sa volonté de renvoyer le support ia64 au noyau, mais seulement s'il existe un responsable capable de démontrer une haute qualité. support de cette plateforme en dehors du noyau principal pendant au moins un an.
    • Ajout du paramètre de commande de ligne de noyau « ia32_emulation », qui vous permet d'activer ou de désactiver la prise en charge de l'émulation en mode 32 bits dans les noyaux construits pour l'architecture x86-64 au stade du démarrage. Côté pratique, la nouvelle option permet de construire le noyau avec le support de la compatibilité avec les applications 32 bits, mais de désactiver ce mode par défaut pour réduire le vecteur d'attaque sur le noyau, puisque l'API de compatibilité est moins testée que le noyau principal. interfaces.
    • Poursuite de la migration des modifications de la branche Rust-for-Linux liées à l'utilisation du langage Rust comme deuxième langage pour le développement de pilotes et de modules du noyau (le support de Rust n'est pas actif par défaut, et ne conduit pas à l'inclusion de Rust parmi les dépendances d'assemblage requises pour le noyau). La nouvelle version effectue la transition vers l'utilisation de la version Rust 1.73 et propose un ensemble de liaisons pour travailler avec les files d'attente de travail.
    • Il est possible d'utiliser le mécanisme binfmt_misc pour ajouter la prise en charge de nouveaux formats de fichiers exécutables (par exemple, pour exécuter des applications Java ou Python compilées) dans des espaces de noms distincts sans privilèges.
    • Le cpuset du contrôleur de groupe de contrôle, qui vous permet de contrôler l'utilisation des cœurs de processeur lors de l'exécution d'une tâche, fournit une division en partitionnement local et distant, qui diffèrent selon que le groupe de contrôle parent est la bonne section racine ou non. De nouveaux paramètres « cpuset.cpus.exclusive » et « cpuset.cpus.excluisve.effect » ont également été ajoutés à cpuset pour une liaison exclusive au processeur.
    • Le sous-système BPF implémente la prise en charge des exceptions, qui sont traitées comme une sortie de secours d'un programme BPF avec la possibilité de dérouler en toute sécurité les cadres de pile. De plus, les programmes BPF permettent l'utilisation de pointeurs kptr en relation avec le CPU.
    • La prise en charge des opérations avec futex a été ajoutée au sous-système io_uring et de nouvelles opérations ont été implémentées : IORING_OP_WAITID (version asynchrone de waitid), SOCKET_URING_OP_GETSOCKOPT (option getsockoptand), SOCKET_URING_OP_SETSOCKOPT (option setsockopt) et IORING_OP_READ_MULTISHOT (opérations de lecture multiples qui ne s'arrêtent pas pendant il y a des données ou la mémoire tampon n'est pas pleine).
    • Ajout de l'implémentation de files d'attente FIFO légères à connexion unique qui nécessitent un verrou tournant uniquement pour le retrait de la file d'attente dans un contexte de processus et dispensent d'un verrou tournant pour les ajouts atomiques à la file d'attente dans n'importe quel contexte.
    • Ajout d'un tampon en anneau "objpool" avec une implémentation évolutive d'une file d'attente hautes performances pour l'allocation et le retour des objets.
    • La partie initiale des modifications a été ajoutée pour implémenter la nouvelle API futex2, qui offre de meilleures performances sur les systèmes NUMA, prend en charge des tailles autres que 32 bits et peut être utilisée à la place de l'appel système futex() multiplexé.
    • Pour les architectures ARM32 et S390x, la prise en charge de l'ensemble actuel (cpuv4) d'instructions BPF a été ajoutée.
    • Pour l'architecture RISC-V, il est possible d'utiliser le mode de vérification Shadow-Call Stack disponible dans Clang 17, conçu pour se protéger contre l'écrasement de l'adresse de retour d'une fonction en cas de débordement de tampon sur la pile. L'essence de la protection est de sauvegarder l'adresse de retour dans une pile « fantôme » distincte après avoir transféré le contrôle à une fonction et de récupérer cette adresse avant de quitter la fonction.
    • Un nouveau mode d'analyse 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 leur nouvelle analyse. Pour activer le nouveau mode, le paramètre /sys/kernel/mm/ksm/smart_scan a été ajouté.
    • Ajout d'une nouvelle commande ioctl PAGEMAP_SCAN, qui, lorsqu'elle est utilisée avec userfaultfd(), vous permet de déterminer les faits d'écriture dans une plage de mémoire spécifique. La nouvelle fonctionnalité, par exemple, peut être utilisée dans le système pour sauvegarder et restaurer l'état des processus CRIU ou dans les systèmes anti-triche des jeux.
    • Dans le système d'assemblage, si le compilateur Clang est disponible, l'assemblage d'exemples d'utilisation du sous-système perf, écrits sous forme de programmes BPF, est activé par défaut.
    • L'ancienne couche videobuf, qui était utilisée pour gérer les framebuffers dans le sous-système multimédia et qui a été remplacée par une nouvelle implémentation de videobuf10 il y a plus de 2 ans, a été supprimée.
  • Virtualisation et sécurité
    • La possibilité de chiffrer les données dans des blocs plus petits que la taille des blocs dans le système de fichiers a été ajoutée au sous-système fscrypt. Cela peut être nécessaire pour activer les mécanismes de chiffrement matériel qui ne prennent en charge que les petits blocs (par exemple, les contrôleurs UFS qui prennent uniquement en charge une taille de bloc de 4096 16 peuvent être utilisés avec un système de fichiers avec une taille de bloc de XNUMX Ko).
    • Le sous-système « iommufd », qui vous permet de gérer les tables de pages mémoire IOMMU (I/O Memory-Management Unit) via des descripteurs de fichiers depuis l'espace utilisateur, a ajouté le suivi des données qui n'ont pas encore été vidées du cache (sales) pour DMA. opérations, ce qui est nécessaire pour déterminer la mémoire avec des données non vidées lors de la migration du processus.
    • La prise en charge de la définition de règles de contrôle d'accès pour les sockets TCP a été ajoutée au mécanisme Landlock, ce qui permet de limiter l'interaction d'un groupe de processus avec l'environnement externe. Par exemple, vous pouvez créer une règle qui autorise uniquement l'accès au port réseau 443 pour établir des connexions HTTPS.
    • Le sous-système AppArmor a ajouté la possibilité de contrôler l'accès au mécanisme io_uring et de créer des espaces de noms utilisateur, ce qui vous permet d'autoriser de manière sélective l'accès à ces fonctionnalités uniquement à certains processus.
    • Ajout de l'API d'attestation de machine virtuelle pour vérifier l'intégrité du processus de démarrage de la machine virtuelle.
    • Les systèmes LoongArch prennent en charge la virtualisation à l'aide de l'hyperviseur KVM.
    • Lors de l'utilisation de l'hyperviseur KVM sur les systèmes RISC-V, la prise en charge de l'extension Smstateen est apparue, qui empêche la machine virtuelle d'accéder aux registres CPU qui ne sont pas explicitement pris en charge par l'hyperviseur. Ajout également de la prise en charge de l'utilisation de l'extension Zicond dans les systèmes invités, qui permet l'utilisation de certaines opérations entières conditionnelles.
    • Dans les systèmes invités x86 exécutés sous KVM, jusqu'à 4096 XNUMX processeurs virtuels sont autorisés.
  • Sous-système réseau
    • Le pilote NVMe-TCP (NVMe over TCP), qui vous permet d'accéder aux disques NVMe sur le réseau (NVM Express over Fabrics) à l'aide du protocole TCP, a ajouté la prise en charge du cryptage du canal de transmission de données à l'aide de TLS (en utilisant KTLS et un processus en arrière-plan dans l'espace utilisateur tlshd pour la négociation de connexion).
    • Les performances du planificateur de paquets fq (Fair Queuing) ont été optimisées, ce qui a permis d'augmenter le débit de 5% sous fortes charges dans le test tcp_rr (TCP Request/Response) et de 13% avec un flux illimité de paquets UDP.
    • TCP ajoute une fonctionnalité facultative d'horodatage de précision à la microseconde (TCP TS) (RFC 7323), qui permet une estimation plus précise de la latence et des modules de contrôle de congestion plus avancés. Pour l'activer, vous pouvez utiliser la commande « ip route add 10/8...features tcp_usec_ts ».
    • La pile TCP a ajouté la prise en charge de l'extension TCP-AO (TCP Authentication Option, RFC 5925), qui permet de vérifier les en-têtes TCP à l'aide de codes MAC (Message Authentication Code), en utilisant des algorithmes plus modernes HMAC-SHA1 et CMAC-AES- 128, à la place de l'option TCP-MD5 précédemment disponible, basée sur l'algorithme MD5 existant.
    • 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 à l'aide d'un programme BPF.
    • KSMBD, une implémentation au niveau du noyau d'un serveur SMB, a ajouté la prise en charge de la résolution des noms de fichiers contenant des paires de substitution de caractères composés.
    • NFS a amélioré l'implémentation des threads avec les services RPC. Ajout de la prise en charge de la délégation d'écriture (pour NFSv4.1+). NFSD a ajouté la prise en charge du gestionnaire netlink rpc_status. Prise en charge améliorée des clients NFSv4.x lors de la réexportation vers knfsd.
  • équipement
    • La prise en charge initiale du micrologiciel GSP-RM a été ajoutée au module de noyau Nouveau, qui est utilisé dans le GPU NVIDIA RTX 20+ pour déplacer les opérations d'initialisation et de contrôle du GPU du côté d'un microcontrôleur GSP distinct (processeur système GPU). La prise en charge de GSP-RM permet au pilote Nouveau de fonctionner via des appels de micrologiciel, plutôt que de programmer directement des interactions matérielles, ce qui facilite grandement l'ajout de la prise en charge des nouveaux GPU NVIDIA en utilisant des appels prédéfinis pour l'initialisation et la gestion de l'alimentation.
    • Le pilote AMDGPU prend en charge GC 11.5, NBIO 7.11, SMU 14, SMU 13.0 OD, DCN 3.5, VPE 6.1 et DML2. Prise en charge améliorée pour un chargement fluide (pas de scintillement lors du changement de mode vidéo).
    • Le pilote i915 ajoute la prise en charge des puces Intel Meteor Lake et ajoute une implémentation initiale d'Intel LunarLake (Xe 2).
    • Ajout de la prise en charge des canaux de transmission asymétriques ajoutés à la spécification USB4 v2 (120/40G).
    • Ajout de la prise en charge des 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 les NAS).
    • Ajout de la prise en charge du smartphone Fairphone 5 et des cartes ARM Orange Pi 5, QuartzPro64, Turing RK1, Variscite MX6, BigTreeTech CB1, Freescale LX2162, Google Spherion, Google Hayato, Genio 1200 EVK, RK3566 Powkiddy RGB30.
    • Ajout de la prise en charge des cartes RISC-V Milk-V Pioneer et Milk-V Duo.
    • Ajout de la prise en charge des interfaces sonores des ordinateurs portables HUAWEI fournis avec des processeurs AMD. Ajout de la prise en charge de haut-parleurs supplémentaires installés sur les ordinateurs portables Dell Oasis 13/14/16. Ajout de la prise en charge des haut-parleurs intégrés ASUS K6500ZC. Ajout de la prise en charge de l'indicateur de sourdine sur les ordinateurs portables HP 255 G8 et G10. Ajout de la prise en charge des pilotes audio acp6.3. Ajout de la prise en charge des interfaces d'enregistrement professionnelles Focusrite Clarett+ 2Pre et 4Pre.

Dans le même temps, la Fondation latino-américaine du logiciel libre a créé une version du noyau entièrement libre 6.7 - Linux-libre 6.7-gnu, débarrassée des éléments de firmware et des pilotes contenant des composants ou des sections de code non libres, dont la portée est limitée par le fabricant. Dans la version 6.7, le code de nettoyage des objets blob a été mis à jour dans divers pilotes et sous-systèmes, par exemple dans 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. Suppression des composants inutiles pour le nettoyage des pilotes xhci-pci, rtl8xxxu et rtw8822b, précédemment ajoutés par erreur. Nettoyage des noms de blob dans les fichiers dts pour l'architecture Aarch64. Suppression des blobs dans les nouveaux pilotes mt7925, tps6598x, aw87390 et aw88399.

Source: opennet.ru

Ajouter un commentaire