Version du noyau Linux 6.12 avec prise en charge en temps réel

Après deux mois de développement, Linus Torvalds a publié le noyau. Linux 6.12. Parmi les changements les plus notables : la possibilité d'activer le mode temps réel, sched_ext pour la création de planificateurs de processeur via eBPF, la sortie de code QR en cas d'urgence, le mécanisme TCP de mémoire de périphérique, le mécanisme de réservation de ressources serveur SCHED_DEADLINE, l'amélioration du planificateur de tâches EEVDF, le module IPE pour la définition des politiques d'intégrité.

La nouvelle version comprend 14607 2167 correctifs provenant de 37 13087 développeurs, la taille du correctif est de 507913 Mo (les modifications ont affecté 234083 15130 fichiers, 2078 85 lignes de code ont été ajoutées, 6.10 41 lignes ont été supprimées). La dernière version contenait 45 6.12 correctifs provenant de 12 13 développeurs, la taille du correctif était de 6 Mo (dans le noyau 3, 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 % aux systèmes de fichiers et XNUMX % sont liés aux sous-systèmes internes du noyau.

Innovations clés dans le noyau 6.12 :

  • Services mémoire et système
    • Il est désormais possible de compiler le noyau avec l'option PREEMPT_RT sans correctifs supplémentaires pour le fonctionnement en temps réel. La dernière fonctionnalité manquante qui empêchait l'activation du mode PREEMPT_RT était la prise en charge des sorties atomiques non bloquantes via la fonction printk, également incluse dans le noyau. La prise en charge de PREEMPT_RT est disponible pour les architectures x86, x86_64, ARM64 et RISC-V. Jusqu'à présent, l'implémentation du mode PREEMPT_RT était fournie sous forme de correctifs externes, utilisés par certaines distributions, telles que RHEL, SUSE et autres. Ubuntu, ont créé des éditions Realtime distinctes de leurs produits, demandées dans des domaines tels que les systèmes financiers, les appareils de traitement audio et vidéo, l'aviation, la médecine, la robotique, les télécommunications et les systèmes industriels, où il est nécessaire de garantir un temps de traitement des événements prévisible.
    • Le mécanisme « sched_ext » (SCX) a été ajouté, permettant l’utilisation d’eBPF pour créer des planificateurs de processeur couvrant la quasi-totalité des aspects de la planification des tâches et de l’allocation des ressources du processeur. Ces planificateurs peuvent être chargés et exécutés dynamiquement au sein du noyau. Linux в machine virtuelle eBPF. Le mécanisme sched_ext simplifie la création de planificateurs dédiés à des tâches spécifiques, permet d'expérimenter différentes techniques et stratégies de planification, et facilite la création rapide de prototypes fonctionnels ainsi que le remplacement à la volée des planificateurs dans les infrastructures de production. Par exemple, grâce à sched_ext, vous pouvez créer un planificateur qui prend en compte les spécificités d'une application et adapte dynamiquement sa stratégie de planification en fonction de l'état du système et d'autres facteurs.
    • La composition comprend le reste des correctifs nécessaires au fonctionnement du mécanisme serveur SCHED_DEADLINE, qui résout le problème de sous-utilisation des ressources CPU par les tâches ordinaires lorsque le CPU est monopolisé par des tâches hautement prioritaires (en temps réel). Pour éviter la monopolisation du processeur, le noyau utilisait auparavant le mécanisme de limitation en temps réel, qui tentait de réserver 5 % aux tâches de faible priorité, laissant 95 % du temps aux tâches en temps réel. Ce mécanisme laissait beaucoup à désirer, car dans de nombreuses situations, les tâches ordinaires ne recevaient pas suffisamment de temps processeur. Le serveur SCHED_DEADLINE implémente un mécanisme de réservation de ressources plus efficace.
    • L'intégration du planificateur de tâches EEVDF (Earliest Eligible Virtual Deadline First) est terminée, qui remplace le planificateur CFS (Completely Fair Scheduler), fourni à partir du noyau 2.6.23. Le nouveau planificateur, lors du choix du prochain processus vers lequel transférer l'exécution, prend en compte les processus qui n'ont pas reçu suffisamment de ressources processeur ou qui ont reçu une quantité de temps processeur injustement importante. Dans le premier cas, le transfert du contrôle au procédé est forcé, et dans le second, au contraire, il est reporté. L'ancien planificateur CFS utilisait des heuristiques et des réglages fins pour identifier les processus nécessitant une attention particulière, tandis que le nouveau planificateur les suit de manière plus explicite et ne nécessite aucun réglage précis. L'EEVDF devrait réduire les retards dans les tâches pour lesquelles le CFS a rencontré des problèmes de planification.
    • Dans le gestionnaire d'urgence du noyau - DRM Panic, qui utilise le sous-système DRM (Direct Rendering Manager) pour afficher un rapport visuel dans le style de « l'écran bleu de la mort », la possibilité d'afficher un logo et un code QR avec un rapport kmsg sur l'écran lorsqu'une condition d'urgence se produit a été ajouté. Étant donné que seulement 2953 octets rentrent dans un code QR, l'option DRM_PANIC_SCREEN_QR_CODE_URL est fournie, dans laquelle le rapport kmsg est compressé à l'aide de zlib et attaché en tant que paramètre à l'URL, ce qui permet de transférer environ 40 7500 octets via le code QR VXNUMX. Lors de la création de packages avec le noyau, les distributions peuvent définir une URL de base pour l'URL, ce qui leur permettra de naviguer vers une page pour signaler un problème. Pour sélectionner le format du code QR, le paramètre DRM_PANIC_SCREEN_QR_VERSION est fourni.
    • Ajout de la prise en charge de l'ARM POE (Permission Overlay Extension), qui permet de définir les droits d'accès aux zones mémoire. Grâce à cette extension, sur les systèmes équipés de processeurs ARM64, le mécanisme Memory Protection Keys peut être implémenté, qui permet de limiter l'accès aux pages mémoire sans modifier la table des pages mémoire.
    • Pour les architectures Loongarch, ARM64, PowerPC et s390, l'implémentation de l'appel système getrandom() a été déplacée, optimisée grâce au mécanisme vDSO (Virtual Dynamic Shared Object), qui permet de déplacer le gestionnaire d'appel système du noyau vers l'utilisateur. espace et éviter les changements de contexte. L'optimisation vous permet d'accélérer la génération de nombres aléatoires jusqu'à 15 fois.
    • La possibilité d'utiliser des délais d'attente absolus, déclenchés lorsqu'une certaine heure est atteinte sur l'horloge système, a été ajoutée au sous-système d'entrée/sortie asynchrone io_uring (auparavant, seuls les délais d'attente relatifs pouvaient être définis, qui indiquaient la durée depuis le début de l'opération. ).
    • Ajout de fichiers pour générer des liaisons pour la bibliothèque libcpupower à l'aide de la boîte à outils SWIG, qui vous permet de générer des liaisons à partir de code C/C++ pour différents langages de programmation. Les liaisons vous permettent de créer des scripts en Python et dans d'autres langages, et de les utiliser pour étendre les fonctionnalités de la bibliothèque libcpupower, qui fournit une API pour gérer cpufreq et les pilotes depuis l'espace utilisateur.
    • L'utilitaire cpuidle affiche la valeur de la « résidence » à l'état inactif, utilisée pour les systèmes temps réel et prenant en compte le temps minimum pendant lequel le processeur doit être en état d'inactivité pour justifier les coûts énergétiques de transition vers et hors de cet état.
    • Ajout de la possibilité d'utiliser le compilateur Clang pour compiler la bibliothèque C standard nolibc, qui est incluse dans le code source du noyau. Linux et fournit une interface pour les appels système de base. Lors de la compilation de nolibc avec Clang, l'optimisation au moment de l'édition de liens (LTO) est activée.
    • Certaines interfaces cgroup1 sont obsolètes, telles que la comptabilité TCP, la version XNUMX des limites logicielles et la gestion de l'épuisement de la mémoire. La prise en charge de ces fonctionnalités reste complète pour l'instant, et l'avertissement est lancé pour étudier le nombre d'utilisateurs qui continuent à utiliser ces fonctionnalités.
    • Ajout de la possibilité de configurer un tampon de trace en anneau pour enregistrer les données accumulées après un redémarrage, ce qui vous permettra de ne pas perdre les informations de débogage accumulées en cas de crash du noyau. Les données sont stockées en mémoire. L'activation se fait via le paramètre de ligne de commande du noyau trace_instance, par exemple, le réglage « trace_instance=boot_map@0x285400000:12M » réservera 12 Mo de mémoire à 0x285400000 pour le tampon « boot_map », qui sera accessible via le fichier /sys/kernel /tracing/instances/boot_map.
    • Poursuite de la migration des modifications depuis la branche Rust-for-LinuxConcernant l'utilisation de Rust comme langage secondaire pour le développement de pilotes et de modules noyau (le support de Rust n'est pas activé par défaut et Rust ne figure pas parmi les dépendances requises pour la compilation du noyau), les modules « list » et « rbtree » ont été ajoutés pour la manipulation de listes doublement chaînées et d'arbres de recherche rouge-noir. Les fonctionnalités des modules « init », « sync », « types » et « error » ont été étendues. Il est désormais possible d'utiliser du code Rust lors de la compilation d'un noyau protégé contre les attaques Spectre (options MITIGATION_{RETHUNK,RETPOLINE,SLS}), grâce au système de débogage KASAN, aux mécanismes de protection contre les appels fantômes (kCFI et kCFI) et aux plugins GCC supplémentaires. Un pilote pour le contrôleur Ethernet PHY QT2025 d'Applied Micro, écrit en Rust, a été ajouté. Un site web dédié à la documentation est disponible : rust.docs.kernel.org.
    • L'utilitaire xdrgen a été ajouté au code source du noyau pour convertir les spécifications XDR (eXternal Data Representation) en fonctions d'encodage et de décodage XDR écrites dans le style C adopté par le noyau. Linux.
    • Le noyau a été modifié pour implémenter un mécanisme de masquage de pointeur afin de réduire le nombre d'appels lents à barrière_nospec() dans la fonction copy_from_user() 64 bits, utilisée pour copier des données dans le noyau depuis l'espace utilisateur. L'utilisation du masquage accélère de 2.6 % le test « per_thread_ops », qui évalue le nombre d'opérations pouvant être effectuées dans un thread.
    • Un nouveau pilote USB a été ajouté qui vous permet d'utiliser le protocole 9pfs comme moyen de transport pour envoyer et recevoir des données depuis un périphérique USB lors du montage du système de fichiers 9p via USB (par exemple, « mount -t 9p -o trans=usbg, aname=/chemin/vers/fs /mnt/9"). Un exemple d'utilisation du nouveau pilote consiste à l'utiliser à la place de NFS pour organiser le démarrage de la partition racine lors du développement de périphériques embarqués.
  • Sous-système de disque, E/S et systèmes de fichiers
    • La possibilité de travailler avec des périphériques de stockage dont la taille de bloc est supérieure à la taille de la page mémoire du système a été ajoutée au sous-système VFS. Dans les systèmes de fichiers, cette fonctionnalité n'est actuellement prise en charge que dans XFS.
    • Le sous-système FUSE, qui vous permet de créer des implémentations de systèmes de fichiers fonctionnant dans l'espace utilisateur, a ajouté la prise en charge du mappage des identifiants 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 la partition actuelle. système.
    • Une nouvelle opération fcntl, F_CREATED_QUERY, a été implémentée, donnant à une application la possibilité de déterminer si un fichier ouvert à l'aide de l'indicateur O_CREAT a été créé ou s'il existait déjà auparavant.
    • Ajout de la possibilité d'utiliser des ID de point de montage 64 bits uniques à l'appel système name_to_handle_at() pour éviter les conditions de concurrence lors de l'analyse de /proc/mountinfo.
    • La taille de la structure « fichier » dans le noyau a été réduite de 232 à 184 octets, ce qui réduit la consommation de mémoire sur les systèmes qui travaillent activement avec des fichiers.
    • Le montage de systèmes de fichiers pour monter des points dans la hiérarchie /proc, tels que /proc/PID/fd, était interdit, ce qui créait des problèmes de sécurité potentiels.
    • Le pseudo-FS NSFS (NameSpace FS), utilisé pour travailler avec les espaces de noms, fournit des informations supplémentaires sur les espaces de noms des points de montage.
    • Le système de fichiers EROFS (Extendable Read-Only File System), conçu pour être utilisé sur des partitions en lecture seule, prend désormais en charge le montage de systèmes de fichiers directement à partir d'images disque enregistrées sous forme de fichiers.
    • De nouvelles commandes ioctl XFS_IOC_START_COMMIT et XFS_IOC_COMMIT_RANGE ont été ajoutées à XFS pour échanger du contenu entre deux fichiers.
    • NFS a ajouté la prise en charge du protocole « LOCALIO », qui permet de déterminer si le client et serveur NFS sur le même hôte pour activer les optimisations correspondantes.
    • Dans le système de fichiers Btrfs, des optimisations de performances ont été proposées, le code a été refactorisé, la zone de verrouillage de l'étendue lors des opérations de lecture a été réduite, les travaux se sont poursuivis sur la conversion des pages mémoire pour utiliser les folios de pages et la libération automatique de la mémoire a été implémenté pour la structure btrfs_path.
    • Dans le système de fichiers Ext4, les bogues liés à l'allocation de blocs, à la gestion des extensions, à la validation rapide et à la journalisation ont été corrigés.
  • Virtualisation et sécurité
    • Ajout du module LSM IPE (Integrity Policy Enforcement), développé par Microsoft pour étendre le système de contrôle d'accès obligatoire existant. Le module vous permet de définir une politique générale d'intégrité pour l'ensemble du système, indiquant quelles opérations sont autorisées et comment l'authenticité des composants doit être vérifiée. Par exemple, en utilisant IPE, vous pouvez spécifier quels fichiers exécutables sont autorisés à s'exécuter, en tenant compte de leur conformité avec la version de référence à l'aide des hachages cryptographiques fournis par le système dm-verity.
    • Au stade de la compilation du noyau, il est possible d'activer séparément les méthodes de protection disponibles contre les différentes vulnérabilités de classe Spectre dans le CPU. Kconfig propose de nouveaux paramètres : MITIGATE_MDS (protection contre la vulnérabilité Microarchitectural Data Sampling), MITIGATE_TAA (protection contre la vulnérabilité TSX Asynchronous Abort), MITIGATE_MMIO_STALE_DATA (protection contre la vulnérabilité MMIO Stale Data), MITIGATE_L1TF (protection contre la vulnérabilité L1 Terminal Fault), MITIGATE_RETBLEED (protection contre les vulnérabilités Retbleed), MITIGATE_SPECTRE_V1, MITIGATE_SPECTRE_V2 (protection contre les vulnérabilités Spectre), MITIGATE_SRBDS (protection contre la vulnérabilité Special Register Buffer Data Sampling), MITIGATE_SSB (protection contre la vulnérabilité Speculative Store Bypass).
    • Ajout de l'option de ligne de commande proc_mem.force_override et d'un ensemble de paramètres d'assembly dans Kconfig (PROC_MEM_FORCE_ALWAYS, PROC_MEM_FORCE_PTRACE et PROC_MEM_FORCE_NEVER) pour empêcher les modifications de mémoire via /proc/pid/mem.
    • sous-système LSM (Linux Le module de sécurité utilise désormais des appels statiques, ce qui a amélioré la sécurité et les performances.
    • La possibilité d'utiliser des cœurs standard pour l'architecture ARM64 dans des environnements invités exécutés sur Android-systèmes avec un hyperviseur KVM modifié (KVM protégé).
    • Le module Landlock LSM, qui permet de limiter l'interaction d'un groupe de processus avec l'environnement externe, implémente le concept de « cadrage IPC » pour limiter sélectivement l'interaction avec les environnements sandbox à l'aide de sockets et de signaux Unix. Par exemple, vous pouvez interdire les connexions utilisant des sockets Unix depuis un environnement sandbox vers des processus pour lesquels aucune isolation n'est appliquée, mais autoriser les connexions aux processus dans la même étendue.
    • Dans l'hyperviseur KVM, un indicateur a été ajouté au CPUID pour les systèmes invités indiquant la prise en charge des extensions AVX10.1.
  • Sous-système réseau
    • Le mécanisme Device Memory TCP a été ajouté, permettant l'utilisation de sockets réseau pour envoyer directement le contenu de la mémoire des périphériques sur le réseau (mode zéro copie) et placer directement le contenu des paquets réseau dans la zone mémoire de l'appareil sur le côté destinataire. Les données transmises par paquets sont transférées de la carte réseau à la mémoire d'un périphérique ou de la mémoire de l'appareil à la carte réseau directement, en contournant le processeur, et les en-têtes de paquets se retrouvent dans les tampons réguliers du noyau.
    • Les capacités de nombreux pilotes Ethernet et sans fil ont été étendues. Par exemple, le pilote Intel iwlwifi a ajouté la prise en charge du déplacement des opérations RLC/SMPS vers le micrologiciel, le pilote RealTek rtw89 a augmenté les performances et a ajouté la prise en charge des puces RTL8852BT/8852BE-VT (WiFi 6), le pilote Ethernet microchip a ajouté la prise en charge de IEEE 802.3. bw (100BASE) -T1) et les implémentations IEEE 802.3bp, Microsoft vNIC et IBM veth virtual Ethernet ont été améliorées. Ajout de nouveaux pilotes pour les puces Ethernet Realtek RTL9054, RTL9068, RTL9072, RTL9075, RTL9068, RTL9071 et Microchip LAN8650/1 10BASE-T1S MAC-PHY.
    • Dans MPTCP (MultiPath TCP), extension du protocole TCP permettant d'organiser la livraison de paquets TCP simultanément sur plusieurs routes via différentes interfaces réseau, la taille des poids utilisés dans le routage est augmentée de 8 à 16 bits. Mise en œuvre de la détection du trafic perdu (trou noir) et suspension pendant un certain temps des tentatives d'établissement de connexions avec les systèmes entraînant une perte de trafic.
    • Pour IPv6, la prise en charge est implémentée pour l'indicateur « p » dans le PIO (Prefix Information Option), utilisé dans les publicités RA (IPv6 Router Advertisements) pour sélectionner un modèle de déploiement client via DHCPv6-PD (délégation de préfixe DHCPv6, RFC9663) au lieu d'attribuer. adresses individuelles basées sur des préfixes utilisant SLAAC (Stateless Address Autoconfiguration). IPv6 IOAM6 ajoute la prise en charge d'un nouveau mode d'encapsulation tunsrc qui permet de meilleures performances.
    • Performances améliorées pour le traitement des paquets de contrôle IPsec.
    • Amélioration des performances de vidage des grands ensembles de règles nftables. nfnetlink_queue a amélioré la prise en charge du protocole SCTP.
    • L'API ethtool a ajouté la prise en charge de la liaison de plusieurs cartes réseau à une seule interface réseau.
  • Équipement
    • Dans le pilote AMDGPU, les travaux se poursuivent pour implémenter la prise en charge des GPU AMD RDNA4 (« GFX12 »). Ajout de la possibilité de réinitialiser les files d'attente de tâches individuelles sans réinitialiser l'intégralité du GPU.
    • Les travaux se sont poursuivis sur le pilote Xe drm (Direct Rendering Manager) pour les GPU basés sur l'architecture Intel Xe, qui est utilisé dans les cartes vidéo de la famille Intel Arc et les graphiques intégrés, à commencer par les processeurs Tiger Lake. La nouvelle version inclut la prise en charge des GPU basés sur les microarchitectures Battlemage et Lunar Lake. La prise en charge des modificateurs Xe2 CCS (Color Control Surface) a été introduite pour contrôler les paramètres des GPU intégrés et discrets.
    • Le pilote i915 implémente la possibilité de générer des informations sur la vitesse du ventilateur via l'interface HWMON ou sysfs (l'attribut « fan1_input »). Le paramètre "i915.modeset" est obsolète ; le paramètre "i915.nomodeset" doit être utilisé à la place de "i0.modeset=915".
    • Ajout de la prise en charge des GPU A615, A306 et A621 au pilote msm DRM (GPU Qualcomm Adreno).
    • Le driver Nouveau a vu ses structures internes retravaillées et nettoyées.
    • Le pilote intel_pstate, qui contrôle les paramètres de consommation d'énergie (P-state) sur les systèmes équipés de processeurs Intel, a ajouté la prise en charge des systèmes hybrides avec des processeurs asymétriques (caractéristiques différentes), ainsi que la prise en charge de la gestion de l'énergie des processeurs basés sur Granite Rapids et Sierra Forest. microarchitectures. Ajout de la prise en charge du processeur Xeon Granite Rapids au pilote intel_idle. Le pilote intel_rapl permet la reconnaissance des processus de la famille AMD 1Ah et des processeurs Intel ArrowLake-U.
    • Inclusion continue de modifications pour prendre en charge le ARM SoC Snapdragon X Elite, qui utilise le processeur Oryon à 12 cœurs de Qualcomm et le GPU Qualcomm Adreno. La puce est destinée à être utilisée dans les ordinateurs portables et les PC et devance les puces Apple M3 et Intel Core Ultra 155H dans de nombreux tests de performances.
    • Prise en charge supplémentaire des cartes ARM, SoC et appareils : Broadcom bcm2712 (Raspberry Pi 5), Renesas R9A09G057 (RZ/V2H), Qualcomm Snapdragon 414 (MSM8929), Lenovo ThinkPad T14s Gen 6, Lenovo A6000/A6010, Surface Laptop 7, Anbernic RG35XXSP , Firefly Core-PX30-JD4, Lunzn Fastrhino R68S, Aspeed Riser, AGX Orin, Rockchip Qnap-TS433, Huashan Pi, Meta Catalina, BeagleY-AI, NanoPi R2S Plus, ExynosAuto v920, SOPHGO SG2002, Qualcomm IPQ5332, LG G4 (h815 ), Cool Pi CM5 GenBook, Anbernic RG35XXSP, GameForce Ace, IBM P11, Kontron i.MX93 OSM-S, NanoPC-T6
    • Ajout de la prise en charge des panneaux d'écran Anbernic RG28XX, On Tat Industrial Company KD50G21-40NT-A1, Innolux G070ACE-LH3, Melfas lmfbx101117480, Densitron DMT028VGHMCMI-1D, Microchip AC40T08A, AOU B116XTN02.3, AUO B116XAN06.1, AT116, BOE TV04.1WUM -LL101, BOE NV2WUM-N140, BOE NV41WUM-N133, BOE NV63WHM-A116D, BOE NE4WUM-N140G, CMN N6BCA-EA116, CMN N2BCP-EA116, CSW MNB2LS601-1, Étoilé er4.
    • Le sous-système audio a ajouté la prise en charge des puces et des codecs RME Digiface USB, AMD ACP 7.1, Mediatek MT6367, MT8365, Realtek RTL1320, C-Media CM9825. Les anciens pilotes audio pour Intel ASoC ont été déclarés obsolètes et il est recommandé d'utiliser à la place les pilotes AVS. De nombreuses améliorations ont été apportées au pilote SoundWire.

Source: opennet.ru

Achetez un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Achetez un hébergement web fiable avec protection DDoS, serveurs VPS et VDS | ProHoster