Version du noyau Linux 5.6

Après deux mois de développement Linus Torvalds представил version du noyau Linux 5.6. Parmi les changements les plus notables : l'intégration de l'interface VPN WireGuard, le support de l'USB4, les espaces de noms pour le temps, la possibilité de créer des gestionnaires de congestion TCP à l'aide de BPF, le support initial de MultiPath TCP, débarrassant le noyau du problème 2038, le mécanisme « bootconfig » , ZoneFS.

La nouvelle version a accepté 13702 1810 correctifs provenant de XNUMX XNUMX développeurs,
taille du correctif - 40 Mo (les modifications ont affecté 11577 610012 fichiers, XNUMX XNUMX lignes de code ajoutées,
294828 lignes supprimées). Environ 45 % de tous ceux présentés en 5.6
les modifications sont associées aux pilotes de périphérique, environ 15 % des modifications ont
attitude envers la mise à jour du code spécifique aux architectures matérielles, 12%
associés à la pile réseau, 4 % aux systèmes de fichiers et 3 % aux systèmes internes
sous-systèmes du noyau.

principal les innovations:

  • Sous-système réseau
    • Ajouté par mise en place d'une interface VPN WireGuard, qui est implémenté sur la base de méthodes de cryptage modernes (ChaCha20, Poly1305, Curve25519, BLAKE2s), est facile à utiliser, sans complications, a fait ses preuves dans un certain nombre d'implémentations à grande échelle et offre des performances très élevées (3,9 fois plus rapides qu'OpenVPN en termes de de débit). WireGuard utilise le concept de routage de clé de chiffrement, qui consiste à attacher une clé privée à chaque interface réseau et à l'utiliser pour lier les clés publiques. Les clés publiques sont échangées pour établir une connexion de la même manière que SSH. Primitives cryptographiques requises pour que WireGuard fonctionne étaient reportés de la bibliothèque Zinc dans le cadre de l'API Crypto standard et inclus dans le noyau 5.5.
    • Commencé intégration des composants nécessaires au support de MPTCP (MultiPath TCP), une extension du protocole TCP pour organiser le fonctionnement d'une connexion TCP avec la livraison de paquets simultanément sur plusieurs routes via différentes interfaces réseau associées à différentes adresses IP. Pour les applications réseau, une telle connexion agrégée ressemble à une connexion TCP classique et toute la logique de séparation des flux est effectuée par MPTCP. Multipath TCP peut être utilisé à la fois pour augmenter le débit et augmenter la fiabilité. Par exemple, MPTCP peut être utilisé pour organiser 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 en utilisant plusieurs liaisons bon marché au lieu d'une seule coûteuse.
    • Ajouté par prise en charge de la discipline de traitement des files d'attente réseau sch_ets (Sélection de transmission améliorée, IEEE 802.1Qaz), qui offre la possibilité de répartir la bande passante entre différentes classes de trafic. Si la charge sur une classe de trafic particulière est inférieure à la bande passante allouée, l'ETS autorise d'autres classes de trafic à utiliser la bande passante disponible (inutilisée). Qdisc sch_ets est configuré comme une discipline PRIO et utilise des classes de trafic pour définir des limites de bande passante strictes et partagées. ETS fonctionne comme une combinaison de disciplines PRÉALABLE и RRC — s'il y a des classes de trafic strictement limitées, PRIO est utilisé, mais s'il n'y a pas de trafic dans la file d'attente, cela fonctionne comme DRR.
    • Ajout d'un nouveau type de programmes BPF BPF_PROG_TYPE_STRUCT_OPS, qui vous permet d'implémenter des gestionnaires de fonctions du noyau via BPF. Actuellement, cette fonctionnalité peut déjà être utilisée pour implémenter des algorithmes de contrôle de congestion TCP sous la forme de programmes BPF. Par exemple proposé Programme BPF avec implémentation d'algorithme DCTCP.
    • Accepté dans le noyau changements, outils de traduction outil eth avec ioctl() à utiliser interface netlink. La nouvelle interface facilite l'ajout d'extensions, améliore la gestion des erreurs, permet d'envoyer des notifications lorsque l'état change, simplifie l'interaction entre le noyau et l'espace utilisateur et réduit le nombre de listes nommées qui doivent être synchronisées.
    • Ajout de l'implémentation de l'algorithme de gestion de file d'attente réseau FQ-PIE (Flow Queue PIE), visant à réduire l'impact négatif de la mise en mémoire tampon intermédiaire des paquets sur les équipements réseau de périphérie (bufferbloat). FQ-PIE démontre une efficacité élevée lorsqu'il est utilisé dans des systèmes avec des modems câble.
  • Sous-système de disque, E/S et systèmes de fichiers
    • Pour le système de fichiers Btrfs ajoutée implémentation asynchrone de l'opération DISCARD (marquage des blocs libérés qui n'ont plus besoin d'être physiquement stockés). Initialement, les opérations DISCARD étaient effectuées de manière synchrone, ce qui pouvait entraîner une dégradation des performances en raison du fait que les disques attendaient la fin des commandes correspondantes. L'implémentation asynchrone vous permet de ne pas attendre que le lecteur termine DISCARD et d'effectuer cette opération en arrière-plan.
    • Dans XFS tenue Nettoyage du code qui utilisait d'anciens compteurs de temps 32 bits (le type time_t a été remplacé par time64_t), conduisant au problème 2038. Correction d'erreurs et de corruption de mémoire survenues sur les plates-formes 32 bits. Le code a été retravaillé pour fonctionner avec des attributs étendus.
    • Vers le système de fichiers ext4 introduit Optimisations des performances liées à la gestion du verrouillage des inodes lors des opérations de lecture et d'écriture. Performances de réécriture améliorées en mode Direct I/O. Pour simplifier le diagnostic des problèmes, le premier et le dernier code d'erreur sont stockés dans le superbloc.
    • Sur le système de fichiers F2FS mis en œuvre possibilité de stocker des données sous forme compressée. Pour un fichier ou un répertoire individuel, la compression peut être activée à l'aide de la commande « chattr +c file » ou « chattr +c dir ; touchez répertoire/fichier". Pour compresser la partition entière, vous pouvez utiliser l'option « -o compress_extension=ext » dans l'utilitaire de montage.
    • Le noyau comprend un système de fichiers ZoneFS, ce qui simplifie le travail de bas niveau avec les périphériques de stockage zonés. Les lecteurs zonés désignent des appareils sur des disques magnétiques durs ou des SSD NVMe, dont l'espace de stockage est divisé en zones qui constituent des groupes de blocs ou de secteurs, dans lesquels seul l'ajout séquentiel de données est autorisé, mettant à jour l'ensemble du groupe de blocs. FS ZoneFS a été développé par Western Digital et associe chaque zone du lecteur à un fichier distinct qui peut être utilisé pour stocker des données en mode brut sans manipulation au niveau du secteur et du bloc, c'est-à-dire Permet aux applications d'utiliser l'API de fichier au lieu d'accéder directement au périphérique de bloc à l'aide d'un ioctl.
    • Dans NFS, le montage de partitions via UDP est désactivé par défaut. Ajout de la prise en charge de la possibilité de copier directement des fichiers entre serveurs, définie dans la spécification NFS 4.2. Ajout d'une nouvelle option de montage "softreval", qui permet d'utiliser les valeurs d'attribut mises en cache en cas de panne du serveur. Par exemple, en précisant cette option, après l'indisponibilité du serveur, il reste possible de parcourir les chemins de la partition NFS et d'accéder aux informations déposées dans le cache.
    • Réalisé optimisation des performances du mécanisme fs-verity, utilisé pour surveiller l'intégrité et l'authentification des fichiers individuels. Augmentation de la vitesse de lecture séquentielle grâce à l'utilisation d'un arbre de hachage Merkle. Les performances de FS_IOC_ENABLE_VERITY ont été optimisées lorsqu'il n'y a pas de données dans le cache (une lecture préemptive des pages contenant des données a été appliquée).
  • Virtualisation et sécurité
    • La possibilité de désactiver le module SELinux pendant l'exécution est obsolète et le déchargement d'un SELinux déjà activé sera interdit à l'avenir. Pour désactiver SELinux, vous devrez passer le paramètre "selinux=0" sur la ligne de commande du noyau.
    • Ajouté par prise en charge des espaces de noms pour le temps (espaces de noms temporels), vous permettant de lier l'état de l'horloge système au conteneur (CLOCK_REALTIME,
      CLOCK_MONOTONIC, CLOCK_BOOTTIME), utilisez votre propre temps dans le conteneur et, lors de la migration du conteneur vers un autre hôte, assurez-vous que les lectures CLOCK_MONOTONIC et CLOCK_BOOTTIME restent inchangées (tenez compte du temps après le chargement, avec ou sans prise en compte du fait d'être en mode veille ).

    • Le pool de blocage /dev/random a été supprimé. Le comportement de /dev/random est similaire à /dev/urandom en termes de prévention du blocage de l'entropie après l'initialisation du pool.
    • Le noyau principal comprend un pilote qui permet aux systèmes invités exécutant VirtualBox de monter les répertoires exportés par l'environnement hôte (dossier partagé VirtualBox).
    • Un ensemble de correctifs a été ajouté au sous-système BPF (Répartiteur BPF), lors de l'utilisation du mécanisme Retpoline pour se protéger contre les attaques de classe Spectre V2, il permet d'augmenter l'efficacité de l'appel des programmes BPF lorsque des événements qui leur sont associés se produisent (par exemple, il permet d'accélérer l'appel des gestionnaires XDP lorsqu'un le paquet réseau arrive).
    • Ajout d'un pilote pour prendre en charge TEE (Trusted Execution Environment) intégré aux APU AMD.
  • Services mémoire et système
    • BPF a ajouté la prise en charge des fonctions globales. Le développement est effectué dans le cadre d'une initiative visant à ajouter la prise en charge des bibliothèques de fonctions pouvant être incluses dans les programmes BPF. La prochaine étape consistera à prendre en charge les extensions dynamiques permettant de charger des fonctions globales, notamment en remplaçant les fonctions globales existantes pendant leur utilisation. Le sous-système BPF ajoute également la prise en charge d'une variante de l'opération map (utilisée pour stocker des données persistantes), qui prend en charge l'exécution en mode batch.
    • Ajouté Le dispositif « cpu_cooling » permet de refroidir un CPU surchauffé en le plaçant en état d'inactivité pendant de courtes périodes.
    • Appel système ajouté ouvrir à2(), qui propose un ensemble de flags supplémentaires pour limiter la résolution des chemins de fichiers (interdiction de franchir les points de montage, liens symboliques, liens magiques (/proc/PID/fd), composants « ../ »).
    • Pour les systèmes hétérogènes basés sur l'architecture big.LITTLE, combinant des cœurs de processeur puissants et moins économes en énergie dans une seule puce, le paramètre uclamp_min est défini lors de l'exécution de tâches en temps réel (est apparu dans le noyau 5.3, il existe un mécanisme pour sécuriser le chargement). Ce paramètre garantit que la tâche sera placée par le planificateur sur un cœur de processeur doté de performances suffisantes.
    • Le noyau est libéré de problèmes de 2038. Remplacement des derniers gestionnaires restants, qui utilisaient le type time_t 32 bits (int signé) pour le compteur de temps d'époque, qui, compte tenu du rapport de 1970, devrait déborder en 2038.
    • Amélioration continue de l'interface d'E/S asynchrone io_urant, dans lequel à condition prise en charge des nouvelles opérations : IORING_OP_FALLOCATE (réservation de zones 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'informations sur le fichier),
      IORING_OP_READ,
      IORING_OP_WRITE (analogues simplifiés de IORING_OP_READV et IORING_OP_WRITEV),
      IORING_OP_FADVISE,
      IORING_OP_MADVISE (variantes 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 (effectuer des opérations sur les descripteurs de fichiers epoll).

    • Appel système ajouté pidfd_getfd(), permettant à un processus de récupérer un descripteur de fichier pour un fichier ouvert à partir d'un autre processus.
    • Mis en œuvre le mécanisme « bootconfig », qui permet, en plus des options de ligne de commande, de déterminer les paramètres du noyau via un fichier de paramètres. Pour ajouter de tels fichiers à l'image initramfs, l'utilitaire bootconfig est proposé. Cette fonctionnalité peut être utilisée, par exemple, pour configurer les kprobes au démarrage.
    • Retravaillé un mécanisme pour attendre l'écriture et la lecture de données dans des canaux sans nom. Le changement a permis d'accélérer des tâches telles que l'assemblage parallèle de grands projets. Cependant, l'optimisation peut conduire à une condition de concurrence critique dans GNU make en raison d'un bug dans la version 4.2.1, qui a été corrigé dans la version 4.3.
    • Ajout de l'indicateur PR_SET_IO_FLUSHER à prctl(), qui peut être utilisé pour marquer les processus sans mémoire qui ne devraient pas être soumis à des limites lorsque le système manque de mémoire.
    • Basé sur le système de distribution de mémoire ION utilisé dans Android, un sous-système a été implémenté tas dma-buf, qui vous permet de contrôler l'allocation des tampons DMA pour partager les zones de mémoire entre les pilotes, les applications et divers sous-systèmes.
  • Architectures matérielles
    • Ajout du support de l'extension E0PD, apparue dans ARMv8.5 et permettant une protection contre les attaques liées à l'exécution spéculative d'instructions sur le CPU. La protection basée sur E0PD entraîne une surcharge inférieure à la protection KPTI (Kernel Page Table Isolation).
    • Pour les systèmes basés sur l'architecture ARMv8.5, la prise en charge de l'instruction RNG a été ajoutée, donnant accès à un 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.
    • Suppression du support pour MPX (Memory Protection Extensions) ajouté dans le noyau 3.19 et permet d'organiser la vérification des pointeurs pour s'assurer que les limites des zones mémoire sont respectées. Cette technologie n'était pas largement utilisée dans les compilateurs et a été supprimée de GCC.
    • Pour l'architecture RISC-V, la prise en charge de l'outil de débogage KASan (Kernel Address Sanitizer) a été implémentée, ce qui permet d'identifier les erreurs lors du travail avec la mémoire.
  • équipement
    • Prise en charge des spécifications implémentée USB 4.0, qui est basé sur le protocole Thunderbolt 3 et offre un débit allant jusqu'à 40 Gbit/s, tout en conservant une compatibilité descendante avec USB 2.0 et USB 3.2. Par analogie avec Thunderbolt L'interface USB 4.0 vous permet de relier différents protocoles sur un seul câble doté d'un connecteur Type-C, notamment PCIe, Display Port et USB 3.x, ainsi que des implémentations logicielles de protocoles, par exemple pour organiser les liens réseau entre les hôtes. L'implémentation s'appuie sur le pilote Thunderbolt déjà inclus dans le noyau Linux et l'adapte pour fonctionner avec des hôtes et des périphériques compatibles USB4. Les modifications ajoutent également la prise en charge des appareils Thunderbolt 3 à l'implémentation logicielle du gestionnaire de connexion, qui est responsable de la création de tunnels pour connecter plusieurs appareils via un seul connecteur.
    • Dans le pilote amdgpu ajoutée prise en charge initiale de la technologie de protection contre la copie HDCP 2.x (High-bandwidth Digital Content Protection). Ajout du support de la puce AMD Pollock ASIC basée sur Raven 2. Implémentation de la possibilité de réinitialiser le GPU pour les familles Renoir et Navi.
    • Pilote DRM pour les cartes vidéo Intel ajoutée La prise en charge DSI VDSC pour les puces basées sur la microarchitecture Ice Lake et Tiger Lake, le mmap LMEM (mémoire locale de l'appareil) a été implémenté, l'analyse VBT (Video BIOS Table) a été améliorée et la prise en charge HDCP 2.2 a été implémentée pour les puces Coffee Lake.
    • Les travaux se sont poursuivis pour unifier le code du pilote amdkfd (pour les GPU discrets, tels que Fidji, Tonga, Polaris) avec le pilote amdgpu.
    • Le pilote k10temp a été retravaillé, ajoutant la prise en charge de l'affichage des paramètres de tension et de courant pour les processeurs AMD Zen, ainsi que des informations étendues provenant des capteurs de température utilisés dans les processeurs Zen et Zen 2.
    • Dans le nouveau pilote ajoutée prise en charge du mode de chargement du firmware vérifié pour les GPU NVIDIA basés sur la microarchitecture Turing (GeForce RTX 2000), qui a permis d'activer la prise en charge de l'accélération 3D pour ces cartes (le téléchargement du firmware officiel avec une signature numérique NVIDIA est requis). Ajout de la prise en charge du moteur graphique TU10x. Les problèmes avec l'audio HD ont été résolus.
    • Ajout de la prise en charge de la compression des données lors de la transmission via DisplayPort MST (Multi-Stream Transport).
    • Ajout d'un nouveau pilote "ath11k» pour les puces sans fil Qualcomm prenant en charge 802.11ax.
      Le pilote est basé sur la pile mac80211 et prend en charge les modes point d'accès, poste de travail et nœud de réseau maillé.

    • Grâce à sysfs, l'accès aux lectures lisibles des capteurs de température utilisés sur les disques durs et SSD modernes est fourni.
    • Contribué des changements importants au système audio ALSA, visant à débarrasser le code de problèmes de 2038 (en évitant l'utilisation du type time_t 32 bits dans les interfaces snd_pcm_mmap_status et snd_pcm_mmap_control). Ajout de la prise en charge de nouveaux codecs audio
      Qualcomm WCD9340/WCD9341, Realtek RT700, RT711, RT715, RT1308, Ingenic JZ4770.

    • Ajoutée pilotes pour panneaux LCD Logic PD 28, Jimax8729d MIPI-DSI, igenic JZ4770, Sony acx424AKP, Leadtek LTK500HD1829, Xinpeng XPP055C272, AUO B116XAK01, GiantPlus GPM940B0,
      BOE NV140FHM-N49,
      SatozSAT050AT40H12R2,
      Sharp LS020B1DD01D.

    • Ajouté par prise en charge des cartes ARM et des plates-formes 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 de livres électroniques Tolino Shine 3,
      Artistes intégrés COM (i.MX7ULP), SolidRun Clearfog CX/ITX et HoneyComb (LX2160A), Google Coral Edge TPU (i.MX8MQ),
      Support Rockchip Radxa Dalang, Radxa Rock Pi N10, VMARC RK3399Pro SOM
      ST Ericsson HREF520, Inforce 6640, SC7180 IDP, Atmel/Microchip AM9X60 (ARM926 SoC, Kizboxmini), ST stm32mp15, AM3703/AM3715/DM3725, ST Ericsson ab8505, Unisoc SC9863A, Qualcomm SC7180. Ajout de la prise en charge du contrôleur PCIe utilisé dans Raspberry Pi 4.

Parallèlement, la Fondation latino-américaine du logiciel libre formé
вариант noyau entièrement gratuit 5.6 - Linux libre 5.6-gnu, débarrassé des éléments du firmware et du pilote contenant des composants non libres ou des sections de code, dont la portée est limitée par le fabricant. La nouvelle version désactive le chargement de blob dans les pilotes pour AMD TEE, ATH11K et Mediatek SCP. Code de nettoyage de blob mis à jour dans les pilotes et sous-systèmes AMD PSP, amdgpu et nouveau.

Source: opennet.ru

Ajouter un commentaire