Après deux mois de développement, Linus Torvalds a annoncé la sortie du noyau . Parmi les changements les plus notables : intégration de l'interface VPN WireGuard, prise en charge de l'USB4, espaces de noms pour le temps, possibilité de créer des gestionnaires de surcharge TCP à l'aide de BPF, prise en charge initiale de MultiPath TCP, élimination du problème de l'an 2038 dans le noyau, mécanisme « bootconfig », FS ZoneFS.
La nouvelle version a inclus 13702 corrections de 1810 développeurs,
la taille du patch est de 40 Mo (les modifications ont touché 11577 fichiers, 610012 lignes de code ont été ajoutées,
294828 lignes ont été supprimées). Environ 45 % de tous les changements présentés dans 5.6
sont liés aux pilotes de périphériques, environ 15 % des changements concernent
la mise à jour du code spécifique aux architectures matérielles, 12 %
sont liés à la pile réseau, 4 % aux systèmes de fichiers et 3 % aux implémentations internes.
du noyau.
:
- Sous-système réseau
- implémentation de l'interface VPN , qui est basé sur des méthodes modernes de cryptage (ChaCha20, Poly1305, Curve25519, BLAKE2s), est simple à utiliser, sans complications, a bien fait ses preuves dans plusieurs grandes implémentations et offre des performances très élevées (3,9 fois plus rapides que OpenVPN en termes de bande passante). WireGuard utilise le concept de routage par clés de cryptage, qui implique l'attribution d'une clé privée à chaque interface réseau et l'application de clés publiques pour établir des connexions. L'échange de clés publiques pour l'établissement de la connexion se fait par analogie avec SSH. Les primitives cryptographiques nécessaires au fonctionnement de WireGuard de la bibliothèque dans le cadre du Crypto API standard et dans le noyau .
- des composants nécessaires pour prendre en charge MPTCP (MultiPath TCP) a commencé, une extension du protocole TCP visant à organiser le fonctionnement des connexions TCP avec livraison simultanée des paquets via plusieurs chemins à travers différentes interfaces réseau, associées à différentes adresses IP. Pour les applications réseau, une telle connexion agrégée apparaît comme une connexion TCP ordinaire, tandis que toute la logique de séparation des flux est effectuée par MPTCP. Le Multipath TCP peut être utilisé à la fois pour augmenter la bande passante et pour améliorer la fiabilité. Par exemple, MPTCP peut être utilisé pour établir la transmission de données sur un smartphone en utilisant simultanément des liaisons WiFi et 4G ou pour réduire les coûts en connectant un serveur avec plusieurs liaisons peu coûteuses au lieu d'une seule coûteuse.
- prise en charge de la discipline de traitement des files d'attente réseau sch_ets (, IEEE 802.1Qaz), offrant la possibilité de répartir la bande passante entre différentes classes de trafic. Si la charge d'une classe de trafic particulière est inférieure à la bande passante attribuée, alors ETS permet aux autres classes de trafic d'utiliser la bande passante disponible (non utilisée). La Qdisc sch_ets est configurée comme une discipline PRIO et utilise des classes de trafic pour déterminer les limites de bande passante strictes et partagées. ETS fonctionne comme une combinaison de disciplines et — si des classes de trafic sont strictement limitées, PRIO est utilisé, mais si la file d'attente de trafic est vide, il fonctionne comme DRR.
- Un nouveau type de programmes BPF a été ajouté , permettant d'implémenter des gestionnaires de fonctions du noyau via BPF. Actuellement, cette possibilité peut déjà être utilisée pour implémenter des algorithmes de contrôle de congestion TCP sous forme de programmes BPF. À titre d'exemple programme BPF mettant en œuvre l'algorithme .
- A été accepté dans le noyau , transférant les outils avec ioctl() à l'utilisation . La nouvelle interface simplifie l'ajout d'extensions, améliore la gestion des erreurs, permet d'envoyer des notifications lors des changements d'état, facilite l'interaction entre le noyau et l'espace utilisateur, et réduit le nombre de listes nommées synchronisées.
- Une mise en œuvre de l'algorithme de gestion des files d'attente réseau FQ-PIE (Flow Queue PIE) a été ajoutée, visant à réduire l'impact négatif du stockage tampon intermédiaire des paquets sur l'équipement réseau en bordure (bufferbloat). FQ-PIE démontre une grande efficacité lorsqu'il est utilisé dans des systèmes avec des modems câble.
- Sous-système de disque, entrée/sortie et systèmes de fichiers
- Pour le système de fichiers Btrfs implémentation asynchrone de l'opération DISCARD (marquage des blocs libérés qui peuvent déjà ne plus être stockés physiquement). Initialement, les opérations DISCARD étaient exécutées de manière synchrone, ce qui pouvait entraîner des baisses de performance en raison de l'attente de la fin des commandes correspondantes par les disques. L'implémentation asynchrone permet de ne pas attendre la fin du DISCARD par le disque et d'exécuter cette opération en arrière-plan.
- Dans XFS nettoyage du code utilisant de vieux compteurs de temps 32 bits (type time_t remplacé par time64_t), entraînant le problème de l'an 2038. Les erreurs et corruptions de mémoire, apparues sur les plateformes 32 bits, ont été résolues. Le code a été retravaillé pour fonctionner avec des attributs étendus.
- dans le système de fichiers ext4 des optimisations de performance liées à la gestion du verrouillage des inode lors des opérations de lecture et d'écriture. La performance de la réécriture en mode entrée/sortie directe (Direct I/O) a été améliorée. Pour simplifier le diagnostic des problèmes, les premiers et derniers codes d'erreur sont désormais conservés dans le superbloc.
- Dans le système de fichiers F2FS la possibilité de stocker des données sous forme comprimée. Pour un fichier ou un répertoire spécifique, la compression peut être activée avec la commande « chattr +c file » ou « chattr +c dir; touch dir/file ». Pour compresser l'ensemble de la partition, l'option « -o compress_extension=ext » peut être utilisée dans l'outil mount.
- Le système de fichiers , simplifie le travail de bas niveau avec des dispositifs de stockage zonés. Les dispositifs de stockage zonés sont des disques durs magnétiques ou des SSD NVMe, dont l'espace de stockage est divisé en zones, constituant des groupes de blocs ou de secteurs où il est permis d'ajouter des données de manière séquentielle en mettant à jour l'ensemble du groupe de blocs. Le système de fichiers ZoneFS a été développé par Western Digital et associe chaque zone dans le stockage avec un fichier individuel, pouvant être utilisé pour le stockage de données en mode brut sans manipulation au niveau des secteurs et blocs, c'est-à-dire permettant aux applications d'utiliser l'API de fichiers au lieu d'appeler directement le périphérique de bloc via ioctl.
- Dans NFS, le montage des partitions au-dessus de UDP est désactivé par défaut. Le support d'une fonctionnalité de copie directe de fichiers entre serveurs spécifiée dans la norme NFS 4.2 a été ajouté. Une nouvelle option de montage « softreval » a été ajoutée, permettant l'utilisation des valeurs d'attributs mises en cache en cas d'échec du serveur. Par exemple, avec cette option, après l'indisponibilité du serveur, il est possible de naviguer dans les chemins du partage NFS et d'accéder aux informations qui étaient en cache.
- optimisation des performances du mécanisme fs-verity, utilisé pour le contrôle de l'intégrité et la vérification de l'authenticité des fichiers individuels. La vitesse de lecture séquentielle a été augmentée grâce à l'utilisation d'un arbre de hachage Merkle. La performance de FS_IOC_ENABLE_VERITY a été optimisée en l'absence de données dans le cache (lecture anticipée des pages avec des données appliquée).
- Virtualisation et sécurité
- La possibilité de désactiver le module SELinux pendant le fonctionnement a été déclarée obsolète, et à l'avenir, le déchargement de SELinux déjà activé sera interdit. Pour désactiver SELinux, il sera nécessaire de passer le paramètre « selinux=0 » dans la ligne de commande du noyau.
- prise en charge des espaces de noms temporels (time namespaces), permettant de lier l'état des horloges système (CLOCK_REALTIME,
CLOCK_MONOTONIC, CLOCK_BOOTTIME) à un conteneur, d'utiliser son propre temps dans le conteneur et de garantir l'immuabilité des valeurs de CLOCK_MONOTONIC et CLOCK_BOOTTIME lors de la migration du conteneur vers un autre hôte (en tenant compte du temps après le démarrage avec ou sans prise en compte du mode veille). - Le pool bloqué /dev/random a été supprimé. Le comportement de /dev/random a été rapproché de /dev/urandom en ce qui concerne la prévention du blocage de l'entropie après l'initialisation du pool.
- Un pilote permettant aux systèmes invités fonctionnant sous VirtualBox de monter des répertoires exportés par l'environnement hôte (Dossier partagé VirtualBox) a été inclus dans le noyau principal.
- Un ensemble de correctifs a été ajouté au sous-système BPF (), dans le cadre de l'application du mécanisme Retpoline pour se protéger contre les attaques de type Spectre V2, permettant d'améliorer l'efficacité de l'appel des programmes BPF lors de l'occurrence d'événements qui leur sont associés (par exemple, cela permet d'accélérer l'appel des gestionnaires XDP lors de la réception d'un paquet réseau).
- Un pilote a été ajouté pour prendre en charge les environnements TEE (Trusted Execution Environment) intégrés dans les APU AMD.
- Mémoire et services système
- Le BPF a ajouté la prise en charge des fonctions globales. Le développement se fait dans le cadre de l'initiative visant à ajouter la prise en charge des bibliothèques de fonctions pouvant être intégrées dans les programmes BPF. L'étape suivante sera la prise en charge des extensions dynamiques, permettant de charger des fonctions globales, y compris pour remplacer des fonctions globales existantes lors de leur utilisation. Le sous-système BPF a également ajouté la prise en charge d'une variante de l'opération map (utilisée pour conserver des données permanentes), prenant en charge l'exécution en mode batch.
- dispositif «cpu_cooling» permettant de refroidir un CPU en surchauffe en le plaçant en état d'inactivité (idle) pendant de courtes périodes.
- Ajout d'un appel système , proposant un ensemble de drapeaux supplémentaires pour restreindre l'accès aux chemins de fichiers (interdiction de traverser les points de montage, les liens symboliques, les magic-links ( /proc/PID/fd), les composants «..»).
- Pour les systèmes hétérogènes basés sur l'architecture big.LITTLE, combinant dans une même puce des cœurs CPU puissants et moins performants pour une meilleure efficacité énergétique, lors de l'exécution de tâches temps réel un paramètre uclamp_min est garanti ( dans le noyau 5.3 avec le mécanisme de répartition de charge). Ce paramètre garantit que la tâche sera placée par le planificateur sur un cœur CPU disposant de performances suffisantes.
- Le noyau est débarrassé . Les derniers gestionnaires restants utilisant un type time_t en 32 bits (int signé) pour le compteur de temps epoch, qui, compte tenu du rapport depuis 1970, devrait déborder en 2038.
- Poursuite de l'amélioration de l'interface d'entrée/sortie asynchrone , dans laquelle support de nouvelles opérations : IORING_OP_FALLOCATE (réservation d'espaces vides), IORING_OP_OPENAT,
IORING_OP_OPENAT2,
IORING_OP_CLOSE (ouverture et fermeture de fichiers),
IORING_OP_FILES_UPDATE (ajout et suppression de fichiers de la liste d'accès rapide),
IORING_OP_STATX (demande d'information sur un fichier),
IORING_OP_READ,
IORING_OP_WRITE (versions simplifiées de IORING_OP_READV et IORING_OP_WRITEV),
IORING_OP_FADVISE,
IORING_OP_MADVISE (versions asynchrones des appels posix_fadvise et madvise), IORING_OP_SEND,
IORING_OP_RECV (envoi et réception de données réseau),
IORING_OP_EPOLL_CTL (exécution d'opérations sur les descripteurs de fichiers epoll). - Ajout d'un appel système , permettant à un processus d'extraire un descripteur de fichier ouvert d'un autre processus.
- mécanisme «bootconfig», permettant, en plus des options de ligne de commande, de définir les paramètres de fonctionnement du noyau via un fichier de configuration. Un utilitaire bootconfig a été proposé pour ajouter de tels fichiers à l'image initramfs. Cette fonctionnalité peut être utilisée, par exemple, pour configurer des kprobes lors du démarrage.
- mécanisme d'attente pour l'écriture et la lecture de données dans des canaux anonymes (pipe). Ce changement a permis d'accélérer l'exécution de tâches telles que la compilation parallèle de grands projets. Toutefois, l'optimisation peut entraîner un état de concurrence dans GNU make en raison d'un bug dans la version 4.2.1, qui a été corrigé dans la version 4.3.
- Le drapeau PR_SET_IO_FLUSHER a été ajouté à prctl(), permettant de marquer les processus responsables de la libération de mémoire, pour lesquels les limitations ne doivent pas s'appliquer en cas de pénurie de mémoire dans le système.
- Une sous-système a été mise en place sur la base du système de gestion de la mémoire ION utilisé dans Android. , permettant de gérer l'allocation de tampons DMA pour le partage de zones de mémoire entre les pilotes, les applications et divers sous-systèmes.
- Architectures matérielles
- Le support de l'extension E0PD, introduite dans ARMv8.5, permettant de sécuriser contre les attaques liées à l'exécution spéculative d'instructions dans le CPU, a été ajouté. La protection basée sur E0PD entraîne moins de frais généraux que la protection KPTI (Kernel Page Table Isolation).
- Pour les systèmes basés sur l'architecture ARMv8.5, le support de l'instruction RNG a été ajouté, fournissant un accès au générateur matériel de nombres pseudo-aléatoires. Dans le noyau, l'instruction RNG est utilisée pour générer de l'entropie lors de l'initialisation du générateur de nombres pseudo-aléatoires fourni par le noyau.
- Le support des extensions MPX (Memory Protection Extensions), ajoutées dans le noyau et permettant de vérifier les pointeurs pour le respect des limites des zones de mémoire, a été supprimé. Cette technologie n'a pas été adoptée dans les compilateurs et a été retirée de GCC.
- Pour l'architecture RISC-V, le support de l'outil de débogage KASan (Kernel address sanitizer), permettant d'identifier les erreurs de gestion de la mémoire, a été mis en œuvre.
- Matériel
- Le support de la spécification , qui est basé sur le protocole Thunderbolt 3 et offre une bande passante allant jusqu'à 40 Gbit/s, tout en maintenant la compatibilité avec USB 2.0 et USB 3.2. À l'instar de , l'interface USB 4.0 permet de faire passer divers protocoles sur un seul câble avec une connectique , y compris PCIe, Display Port et USB 3.x, ainsi que des implémentations logicielles de protocoles, par exemple, pour établir des liaisons réseau entre des hôtes. L'implémentation est basée sur le pilote Thunderbolt déjà intégré dans le noyau Linux et l'adapte pour fonctionner avec des hôtes et des dispositifs compatibles USB4. Les modifications ajoutent également la prise en charge des périphériques Thunderbolt 3 dans l'implémentation logicielle du gestionnaire de connexions (Connection Manager), qui est chargé de créer des tunnels pour connecter plusieurs dispositifs via un seul port.
- Dans le pilote amdgpu , le support initial de la technologie de protection contre la copie HDCP 2.x (High-bandwidth Digital Content Protection) a été ajouté. Support du chip ASIC AMD Pollock basé sur Raven 2. La possibilité de réinitialiser le GPU pour les familles Renoir et Navi a été mise en œuvre.
- Dans le pilote DRM pour les cartes graphiques Intel, le support DSI VDSC pour les chipsets basés sur l'architecture Ice Lake et Tiger Lake a été ajouté, la carte mémoire locale (LMEM mmap) a été implémentée, l'analyse de VBT (Video BIOS Table) a été améliorée, et le support HDCP 2.2 a été réalisé pour les chipsets Coffee Lake.
- Le travail de standardisation du code du pilote amdkfd (pour les GPU discrets tels que Fiji, Tonga, Polaris) a été poursuivi.
- Le pilote k10temp a été révisé, ajoutant le support pour la sortie des paramètres de tension et de courant pour les CPU AMD Zen, ainsi que des informations avancées provenant de capteurs de température utilisés dans les CPU Zen et Zen 2.
- Dans le pilote nouveau, le support du mode de vérification du chargement du firmware pour les GPU NVIDIA basés sur l'architecture Turing (GeForce RTX 2000) a été ajouté, ce qui a permis d'activer la prise en charge de l'accélération 3D pour ces cartes (un chargement des firmwares officiels avec une signature numérique NVIDIA est requis). Le support du moteur graphique TU10x a été ajouté. Des problèmes avec HD Audio ont été résolus.
- La prise en charge de la compression des données lors du transfert via DisplayPort MST (Multi-Stream Transport) a été ajoutée.
- Un nouveau pilote «» pour les puces sans fil Qualcomm avec support de 802.11ax a été ajouté.
Le pilote est basé sur la pile mac80211 et supporte les modes point d'accès, station de travail et nœud de réseau maillé. - L'accès aux lectures des capteurs de température utilisés sur les disques durs modernes et les SSD est fourni via sysfs.
- changements importants ont été apportés au système sonore ALSA, visant à débarrasser le code de (abandon de l'utilisation du type 32 bits time_t dans les interfaces snd_pcm_mmap_status et snd_pcm_mmap_control). La prise en charge de nouveaux codecs audio a été ajoutée,
Qualcomm WCD9340/WCD9341, Realtek RT700, RT711, RT715, RT1308, Ingenic JZ4770. - drivers pour les panneaux LCD Logic PD 28, Jimax8729d MIPI-DSI, igenic JZ4770, Sony acx424AKP, Leadtek LTK500HD1829, Xinpeng XPP055C272, AUO B116XAK01, GiantPlus GPM940B0,
BOE NV140FHM-N49,
Satoz SAT050AT40H12R2,
Sharp LS020B1DD01D. - support des plates-formes ARM et des plateformes Gen1 Amazon Echo (basé sur OMAP3630), Samsung Galaxy S III mini (GT-I8190), Allwinner Emlid Neutis, Libre Computer ALL-H3-IT, PineH64 Model B, Aibretech Amlogic GX PC,
Armada SolidRun Clearfog GTR, NXPGateworks GW59xx,
lecteur eBook Tolino Shine 3,
Embedded Artists COM (i.MX7ULP), SolidRun Clearfog CX/ITX et HoneyComb (LX2160A), Google Coral Edge TPU (i.MX8MQ),
Rockchip Radxa Dalang Carrier, Radxa Rock Pi N10, VMARC RK3399Pro SOM
ST Ericsson HREF520, Inforce 6640, SC7180 IDP, Atmel/Microchip AM9X60 (SoC ARM926, Kizboxmini), ST stm32mp15, AM3703/AM3715/DM3725, ST Ericsson ab8505, Unisoc SC9863A, Qualcomm SC7180. Support ajouté pour le contrôleur PCIe utilisé dans le Raspberry Pi 4.
Simultanément, la Fondation latino-américaine pour le logiciel libre
une variante — , dépouillé des éléments de firmwares et de drivers contenant des composants ou des parties de code non libres, dont l'utilisation est limitée par le fabricant. La nouvelle version désactive le chargement des blobs dans les drivers pour AMD TEE, ATH11K et Mediatek SCP. Le code de nettoyage des blobs dans les drivers et sous-systèmes AMD PSP, amdgpu et nouveau a été mis à jour.
Source : opennet.ru
