Release des Linux-Kernels 5.6

Nach zwei Monaten der Entwicklung stellte Linus Torvalds den Release des Kernels Linux 5.6. Zu den auffälligsten Neuerungen gehören die Integration des VPN-Interfaces WireGuard, Unterstützung für USB4, Namensräume für die Zeit, die Möglichkeit, TCP-Überlastbehandler mit BPF zu erstellen, erste Unterstützung für MultiPath TCP, die Beseitigung des 2038-Problems im Kernel, der Mechanismus „bootconfig“ und das Dateisystem ZoneFS.

In die neue Version wurden 13702 Korrekturen von 1810 Entwicklern integriert.
Die Patch-Größe beträgt 40 MB (die Änderungen betreffen 11577 Dateien, hinzugefügt wurden 610012 Zeilen Code,
und 294828 Zeilen wurden entfernt). Etwa 45 % aller in 5.6
vorgestellten Änderungen beziehen sich auf Gerätetreiber, rund 15 % der Änderungen
betreffen die Aktualisierung hardwarearchitekturspezifischen Codes, 12 %
hängen mit dem Netzwerk-Stack zusammen, 4 % mit Dateisystemen und 3 % mit internen
Subsystemen des Kernels.

Haupt Neuheiten:

  • Netzwerksubsystem
    • Hinzugefügt Implementierungen des VPN-Interfaces. WireGuard, der auf modernen Verschlüsselungsmethoden (ChaCha20, Poly1305, Curve25519, BLAKE2s) basiert, benutzerfreundlich ist, ohne komplizierte Elemente auskommt, sich in mehreren großen Implementierungen bewährt hat und eine sehr hohe Leistung bietet (3,9-mal schneller als OpenVPN in Bezug auf Durchsatz). WireGuard verwendet ein Konzept der Schlüssel-basierten Routing, das jedem Netzwerk-Interface einen privaten Schlüssel zuordnet und öffentliche Schlüssel zur Verknüpfung einsetzt. Der Austausch öffentlicher Schlüssel zur Verbindung erfolgt analog zu SSH. Die für WireGuard erforderlichen kryptografischen Primitives wurden übertragen aus der Bibliothek Zinc in das integrierte Crypto API und sind in den Kernel 5.5.
    • Gestartet Integration der Komponenten, die für die Unterstützung von MPTCP (MultiPath TCP) erforderlich sind, einer Erweiterung des TCP-Protokolls, um TCP-Verbindungen zu ermöglichen, die Pakete gleichzeitig über mehrere Routen über verschiedene Netzwerkinterfaces mit unterschiedlichen IP-Adressen liefern. Für Netzwerk-Anwendungen sieht eine solche aggregierte Verbindung aus wie eine normale TCP-Verbindung, während die gesamte Logik der Datenstromaufteilung von MPTCP übernommen wird. Multipath TCP kann sowohl zur Erhöhung der Bandbreite als auch zur Verbesserung der Zuverlässigkeit eingesetzt werden. Beispielsweise kann MPTCP verwendet werden, um Daten auf einem Smartphone zu übertragen, indem gleichzeitig sowohl WiFi- als auch 4G-Verbindungen genutzt werden, oder um Kosten zu sparen, indem ein Server über mehrere kostengünstige Verbindungen anstelle einer teuren Verbindung angeschlossen wird.
    • Hinzugefügt Unterstützung der Disziplin der Verarbeitung von Netzwerkwarteschlangen sch_ets (Enhanced Transmission Selection, IEEE 802.1Qaz), die es ermöglicht, die Bandbreite zwischen verschiedenen Verkehrsarten aufzuteilen. Wenn die Last einer bestimmten Verkehrsart unter der zur Verfügung stehenden Bandbreite liegt, erlaubt ETS anderen Verkehrsarten, die verfügbare (nicht genutzte) Bandbreite zu nutzen. Der Qdisc sch_ets wird als PRIO-Diskziplin konfiguriert und verwendet Verkehrsarten, um strenge sowie gemeinsam genutzte Bandbreitenbeschränkungen zu bestimmen. ETS funktioniert als Kombination von Disziplinen. PRIO und DRR — wenn es starr begrenzte Verkehrsarten gibt, wird PRIO verwendet, aber wenn die Warteschlange leer ist, funktioniert es als DRR.
    • Ein neuer BPF-Programmiertyp wurde hinzugefügt BPF_PROG_TYPE_STRUCT_OPS, der es ermöglicht, Funktionshandler im Kernel über BPF zu implementieren. Aktuell kann diese Funktionalität bereits zur Implementierung von TCP-Staukontrollalgorithmen in Form von BPF-Programmen genutzt werden. Als Beispiel vorgeschlagen BPF-Programm mit Implementierung des Algorithmus DCTCP.
    • Wurde in den Kernel aufgenommen eingeführt wurde, die im Januar dieses Jahres in den Kernel übernommen wurde. Es betrifft ausschließlich die Version 5.1 und tritt in den meisten Fällen auf Systemen mit Samsung-SSD-Speichern auf, bei denen zur Verschlüsselung Daten mit dm-crypt/LUKS über device-mapper/LVM verwendet werden., um das Werkzeug ethtool von ioctl() auf die Verwendung von netlink-Schnittstellen zu übertragen.. Die neue Benutzeroberfläche vereinfacht das Hinzufügen von Erweiterungen, verbessert die Fehlerbehandlung, ermöglicht das Senden von Benachrichtigungen bei Zustandsänderungen, vereinfacht die Interaktion zwischen Kern und Benutzerraum und reduziert die Anzahl der zu synchronisierenden benannten Listen.
    • Eine Implementierung des FQ-PIE-Netzwerkwarteschlangenverwaltungsalgorithmus (Flow Queue PIE) wurde hinzugefügt, der darauf abzielt, die negativen Auswirkungen von Paketpufferung auf grenzwertiger Netzwerkausrüstung (bufferbloat) zu verringern. FQ-PIE zeigt eine hohe Effizienz bei der Verwendung in Systemen mit Kabelmodems.
  • Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
    • Für das Btrfs-Dateisystem hinzugefügt wurde die asynchrone Implementierung der DISCARD-Operation (Markierung freigegebener Blöcke, die physisch nicht mehr gespeichert werden müssen) hinzugefügt. Zuvor wurden DISCARD-Operationen synchron ausgeführt, was zu einem Einbruch der Leistung führen konnte, da auf den Abschluss der entsprechenden Befehle durch die Speichergeräte gewartet werden musste. Die asynchrone Implementierung ermöglicht es, auf den Abschluss von DISCARD durch das Speichermedium nicht zu warten und diese Operation im Hintergrund auszuführen.
    • In XFS wurden durchgeführt Überarbeitung des Codes, der alte 32-Bit-Zeitstempel (von time_t auf time64_t ersetzt) verwendete und das Problem des Jahres 2038 verursachte. Fehler und Speicherbeschädigungen, die auf 32-Bit-Plattformen auftraten, wurden behoben. Der Code wurde für die Arbeit mit erweiterten Attributen neu gestaltet.
    • Im ext4-Dateisystem wurden vorgenommen. Leistungsoptimierungen, die mit der Verarbeitung von Inode-Sperren bei Lese- und Schreibvorgängen verbunden sind. Die Leistung der Neuschreibung im Direct I/O-Modus wurde erhöht. Zur Vereinfachung der Fehlerdiagnose wird die Speicherung der ersten und letzten Fehlermeldungen im Superblock sichergestellt.
    • Im F2FS-Dateisystem wurde die Möglichkeit, Daten komprimiert zu speichern. Für eine einzelne Datei oder ein Verzeichnis kann die Komprimierung mit dem Befehl „chattr +c Datei“ oder „chattr +c Verzeichnis; touch Verzeichnis/Datei“ aktiviert werden. Um den gesamten Partition zu komprimieren, kann in der Mount-Utility die Option „-o compress_extension=ext“ verwendet werden.
    • Das Dateisystem wurde in den Kernel aufgenommen ZoneFS, die die Arbeit mit zonierten Speichereinheiten auf niedriger Ebene vereinfacht. Unter zonierten Speichereinheiten versteht man Geräte auf festen magnetischen Festplatten oder NVMe SSDs, deren Speicherbereich in Zonen unterteilt ist, die Gruppen von Blöcken oder Sektoren bilden, in die Daten nur sequenziell hinzugefügt werden dürfen, wobei die gesamte Gruppe von Blöcken aktualisiert wird. Das Dateisystem ZoneFS wurde von Western Digital entwickelt und verknüpft jede Zone im Speicher mit einer separaten Datei, die für die Speicherung von Daten im Rohformat verwendet werden kann, ohne auf der Sektor- und Blockebene zu manipulieren, d.h. es ermöglicht Anwendungen, die Dateischnittstelle anstelle der direkten Ansprache des Blockgeräts über ioctl zu nutzen.
    • In NFS ist die Montage von Partitionen über UDP standardmäßig deaktiviert. Unterstützung für die in der NFS 4.2-Spezifikation definierte Funktion zum direkten Kopieren von Dateien zwischen Servern wurde hinzugefügt. Eine neue Montageoption "softreval" ermöglicht die Verwendung von zwischengespeicherten Attributwerten im Falle eines Serverausfalls. Beispielsweise bleibt bei Aktivierung dieser Option nach der Nichtverfügbarkeit des Servers der Zugriff auf Pfade im NFS-Bereich und die Informationen, die im Cache abgelegt wurden, möglich.
    • Durchgeführt Optimierung der Leistung des fs-verity-Mechanismus, der zur Integritätskontrolle und zur Authentifizierung einzelner Dateien eingesetzt wird. Die Geschwindigkeit des sequenziellen Lesens wurde durch die Verwendung eines Merkle-Hashbaums erhöht. Die Effizienz von FS_IOC_ENABLE_VERITY wurde bei fehlenden Daten im Cache optimiert (prädiktives Lesen von Datenseiten wurde angewendet).
  • Virtualisierung und Sicherheit
    • Die Möglichkeit, das SELinux-Modul während des Betriebs zu deaktivieren, wurde als veraltet erklärt, und in Zukunft wird das Entladen eines bereits aktivierten SELinux verboten. Um SELinux zu deaktivieren, ist es erforderlich, den Parameter "selinux=0" in der Kernel-Befehlszeile zu übergeben.
    • Hinzugefügt Unterstützung von Zeitspezifikationen (time namespaces), die es ermöglichen, den Zustand der Systemuhr (CLOCK_REALTIME,
      CLOCK_MONOTONIC, CLOCK_BOOTTIME) an den Container zu binden, die eigene Zeit im Container zu verwenden und bei der Migration des Containers auf einen anderen Host die Werte von CLOCK_MONOTONIC und CLOCK_BOOTTIME unverändert zu halten (unter Berücksichtigung der Zeit nach dem Booten, mit oder ohne Berücksichtigung des Schlafmodus).
    • Der blockierte Pool /dev/random wurde entfernt. Das Verhalten von /dev/random wurde in Bezug auf die Vermeidung der Blockierung von Entropie nach der Initialisierung des Pools an /dev/urandom angeglichen.
    • Ein Treiber wurde in den Kern integriert, der es Gastbetriebssystemen, die unter VirtualBox laufen, ermöglicht, vom Host-Umfeld exportierte Verzeichnisse zu mounten (VirtualBox Shared Folder).
    • Ein Satz von Patches wurde zum BPF-Subsystem hinzugefügt (BPF-Dispatcher), der unter Verwendung des Retpoline-Mechanismus zum Schutz vor Spectre V2-Angriffen die Effizienz des Aufrufs von BPF-Programmen bei den damit verbundenen Ereignissen erhöht (zum Beispiel ermöglicht es, den Aufruf von XDP-Handlern beim Empfang von Netzwerkpaketen zu beschleunigen).
    • Ein Treiber wurde hinzugefügt, um Umgebungen für das Trusted Execution Environment (TEE) in AMD APU zu unterstützen.
  • Speicher und Systemdienste
    • In BPF wurde Unterstützung für globale Funktionen hinzugefügt. Die Entwicklung erfolgt im Rahmen der Initiative zur Integration unterstützter Funktionsbibliotheken, die in BPF-Programmen eingebunden werden können. Der nächste Schritt wird die Unterstützung dynamischer Erweiterungen sein, die das Laden globaler Funktionen ermöglicht, einschließlich der Möglichkeit, bestehende globale Funktionen während ihrer Nutzung zu ersetzen. Außerdem wurde in der BPF-Subsystem die Unterstützung für eine Variante der Map-Operation hinzugefügt (die zur Speicherung persistenter Daten verwendet wird), die die Ausführung im Batch-Modus unterstützt.
    • Es wurde hinzugefügt Das Gerät «cpu_cooling» ermöglicht das Kühlen eines überhitzten CPU durch das vorübergehende Versetzen in den Leerlauf (idle) für kurze Zeiträume.
    • Ein Systemaufruf wurde hinzugefügt openat2(), der eine Reihe zusätzlicher Flags anbietet, um die Auflösung des Dateipfads einzuschränken (Verhinderung des Übergreifens von Mount-Punkten, symbolischen Links, magic links (/proc/PID/fd), Komponenten «../»).
    • Für heterogene Systeme auf Basis der big.LITTLE-Architektur, die leistungsstarke und energieeffiziente CPU-Kerne in einem Chip kombinieren, wird bei der Ausführung von Echtzeitanwendungen der Parameter uclamp_min festgelegt.aufgetaucht im Kernel 5.3 mit dem Mechanismus zur Lastenverteilung). Dieser Parameter stellt sicher, dass die Aufgabe vom Scheduler auf einem CPU-Kern platziert wird, der über genügend Leistung verfügt.
    • Der Kernel ist befreit von des Jahr-2038-Problems. Die letzten verbleibenden Handler wurden ersetzt, in denen für den epochalen Zeitstempel ein 32-Bit (signed int) Typ time_t verwendet wurde, der unter Berücksichtigung des Berichts seit 1970 im Jahr 2038 überlaufen sollte.
    • Die Verbesserung der Schnittstelle für asynchronen Input/Output io_uring, in der sicherstellt neue Operationen unterstützt werden: IORING_OP_FALLOCATE (Reservierung leerer Bereiche), IORING_OP_OPENAT,
      IORING_OP_OPENAT2,
      IORING_OP_CLOSE (Öffnen und Schließen von Dateien),
      IORING_OP_FILES_UPDATE (Hinzufügen und Entfernen von Dateien aus der Schnellzugriffsliste),
      IORING_OP_STATX (Anfrage von Datei Informationen),
      IORING_OP_READ,
      IORING_OP_WRITE (vereinfachte Varianten von IORING_OP_READV und IORING_OP_WRITEV),
      IORING_OP_FADVISE,
      IORING_OP_MADVISE (asynchrone Varianten von posix_fadvise und madvise), IORING_OP_SEND,
      IORING_OP_RECV (Versand und Empfang von Netzdaten),
      IORING_OP_EPOLL_CTL (Durchführung von Operationen an epoll-Dateideskriptoren).
    • Ein Systemaufruf wurde hinzugefügt pidfd_getfd(), ermöglicht es einem Prozess, einen Datei Deskriptor einer geöffneten Datei aus einem anderen Prozess zu extrahieren.
    • Flagge „—python.EmulateJython“ implementiert, um JVM-Klassen mit normaler Python-Syntax beim Import zu verwenden und JVM-Ausnahmen aus Python-Code abzufangen. Der Mechanismus „bootconfig“ ermöglicht es, neben den Optionen der Befehlszeile auch die Parameter der Kernel-Arbeit über eine Konfigurationsdatei zu definieren. Zur Integration solcher Dateien in das initramfs-Image wurde das Tool bootconfig vorgeschlagen. Diese Funktion kann beispielsweise zur Konfiguration von kprobes während des Bootvorgangs verwendet werden.
    • Überarbeitet Ein Mechanismus zum Warten auf das Schreiben und Lesen von Daten in unbenannten Kanälen (Pipe). Diese Änderung hat die Ausführung von Aufgaben beschleunigt, wie z.B. das parallele Bauen großer Projekte. Allerdings kann die Optimierung aufgrund eines Fehlers in der Version 4.2.1 von GNU make zu einem Wettlaufszenario führen, das in Version 4.3 behoben wurde.
    • In prctl() wurde die Flagge PR_SET_IO_FLUSHER hinzugefügt, die verwendet werden kann, um Prozesse zu kennzeichnen, die sich um das Freigeben von Speicher kümmern, für die keine Einschränkungen bei Speichermangel im System gelten sollten.
    • Auf der Grundlage des in Android verwendeten Systems zur Speicherzuteilung ION wurde ein Subsystem implementiert. dma-buf heaps, das die Verwaltung der Zuweisung von DMA-Puffern für die gemeinsame Nutzung von Speicherbereichen durch Treiber, Anwendungen und verschiedene Subsysteme ermöglicht.
  • Hardware-Architekturen
    • Die Unterstützung der E0PD-Erweiterung wurde hinzugefügt, die in ARMv8.5 eingeführt wurde und einen Schutz gegen spekulative Ausführungsangriffe in der CPU ermöglicht. Der E0PD-basierte Schutz verursacht geringere Overhead-Kosten als der KPTI-Schutz (Kernel Page Table Isolation).
    • Für Systeme auf Basis der Architektur ARMv8.5 wurde die Unterstützung des RNG-Befehlss hinzugefügt, der Zugriff auf einen Hardware-Zufallszahlengenerator ermöglicht. Im Kernel wird der RNG-Befehl zur Entropiegewinnung bei der Initialisierung des durch den Kernel bereitgestellten pseudorandomzahlengenerators verwendet.
    • Die Unterstützung der MPX-Erweiterungen (Memory Protection Extensions), die im Kernel hinzugefügt wurden, wurde entfernt. 3.19 Diese Technologie ermöglichte die Überprüfung von Zeigern auf die Einhaltung der Speichergrenzen. Die genannte Technologie fand in Compilern keine Verbreitung und wurde aus GCC entfernt.
    • Für die RISC-V-Architektur wurde die Unterstützung des Debugging-Tools KASan (Kernel Address Sanitizer) implementiert, das die Erkennung von Fehlern im Umgang mit Speicher ermöglicht.
  • Ausrüstung
    • Die Unterstützung der Spezifikation wurde umgesetzt. USB 4.0, das auf dem Thunderbolt 3-Protokoll basiert und eine Bandbreite von bis zu 40 Gbit/s bietet, während es abwärtskompatibel mit USB 2.0 und USB 3.2 ist. Analog zu Thunderbolt ermöglicht die USB 4.0-Schnittstelle die Durchleitung verschiedener Protokolle über ein einziges Kabel mit einem Type-C, einschließlich PCIe, DisplayPort und USB 3.x sowie softwarebasierte Implementierungen von Protokollen, um Netzwerkverbindungen zwischen Hosts einzurichten. Die Implementierung basiert auf dem bereits im Linux-Kernel enthaltenen Thunderbolt-Treiber und passt ihn für die Zusammenarbeit mit USB4-kompatiblen Hosts und Geräten an. Die Änderungen fügen auch Unterstützung für Thunderbolt 3-Geräte in der softwarebasierten Implementierung des Connection Managers hinzu, der für die Erstellung von Tunneln verantwortlich ist, um mehrere Geräte über einen Anschluss zu verbinden.
    • Im amdgpu-Treiber hinzugefügt wurde die anfängliche Unterstützung für den HDCP 2.x (High-bandwidth Digital Content Protection) Kopierschutztechnologie hinzugefügt. Unterstützung für den ASIC-Chip AMD Pollock, basierend auf Raven 2, wurde hinzugefügt. Die Möglichkeit, die GPU für die Familien Renoir und Navi zurückzusetzen, wurde implementiert.
    • Im DRM-Treiber für Intel-Grafikkarten hinzugefügt DSI VDSC-Unterstützung für Chips mit Ice Lake- und Tiger Lake-Mikroarchitekturen wurde umgesetzt, LMEM mmap (Gerät lokaler Speicher) realisiert, das Parsen der VBT (Video BIOS Tabelle) verbessert, HDCP 2.2-Unterstützung für Coffee Lake-Chips implementiert.
    • Die Arbeit an der Vereinheitlichung des amdkfd-Treiber-Codes (für diskrete GPUs wie Fiji, Tonga, Polaris) mit dem amdgpu-Treiber wurde fortgesetzt.
    • Der k10temp-Treiber wurde überarbeitet, und unterstützt jetzt die Ausgabe von Spannungs- und Stromparametern für AMD Zen-CPUs sowie erweiterte Temperaturdaten von Sensoren, die in Zen- und Zen 2-CPUs verwendet werden.
    • Im nouveau-Treiber hinzugefügt wurde die Unterstützung für den überprüften Firmware-Lade-Modus für NVIDIA-GPUs auf Basis der Turing-Mikroarchitektur (GeForce RTX 2000) hinzugefügt, was die Unterstützung von 3D-Beschleunigung für diese Karten ermöglicht (offizielle Firmware mit digitaler Signatur von NVIDIA erforderlich). Unterstützung für die TU10x-Grafik-Engine wurde hinzugefügt. HD Audio-Probleme wurden behoben.
    • Unterstützung für die Datenkompression während der Übertragung über DisplayPort MST (Multi-Stream Transport) hinzugefügt.
    • Ein neuer Treiber „ath11k“ für drahtlose Qualcomm-Chips mit Unterstützung für 802.11ax wurde hinzugefügt.
      Der Treiber basiert auf dem mac80211-Stack und unterstützt die Modi Access Point, Workstation und Mesh-Netzwerk.
    • Über sysfs sind die lesbaren Temperaturwerte von Sensoren zugänglich, die in modernen Festplatten und SSDs verwendet werden.
    • Es wurden bedeutende Änderungen am ALSA-Audiosystem, die darauf abzielen, den Code von des Jahr-2038-Problems (Abkehr von der Verwendung des 32-Bit-Typs time_t in den Schnittstellen snd_pcm_mmap_status und snd_pcm_mmap_control). Unterstützung neuer Audio-Codecs hinzugefügt
      Qualcomm WCD9340/WCD9341, Realtek RT700, RT711, RT715, RT1308, Ingenic JZ4770.
    • Es wurden hinzugefügt Treiber für LCD-Panels Logic PD 28, Jimax8729d MIPI-DSI, Ingenic JZ4770, Sony acx424AKP, Leadtek LTK500HD1829, Xinpeng XPP055C272, AUO B116XAK01, GiantPlus GPM940B0,
      BOE NV140FHM-N49,
      Satoz SAT050AT40H12R2,
      Sharp LS020B1DD01D.
    • Hinzugefügt Unterstützung für ARM-Plattformen und Gen1 Amazon Echo-Plattformen (OMAP3630-basiert), 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,
      Tolino Shine 3 E-Book-Reader,
      Embedded Artists COM (i.MX7ULP), SolidRun Clearfog CX/ITX und 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 (ARM926 SoC, Kizboxmini), ST stm32mp15, AM3703/AM3715/DM3725, ST Ericsson ab8505, Unisoc SC9863A, Qualcomm SC7180. Unterstützung für den PCIe-Controller, der in Raspberry Pi 4 verwendet wird, hinzugefügt.

Gleichzeitig hat die lateinamerikanische Free Software Foundation die
Variante ist gut gelungen. vollständig freies Kernel 5.6Linux-libre 5.6-gnu, gereinigt von Firmware- und Treiberelementen, die nicht freie Komponenten oder Codeabschnitte enthalten, deren Verwendung vom Hersteller eingeschränkt ist. In der neuen Version wurde das Laden von Blobs in den Treibern für AMD TEE, ATH11K und Mediatek SCP deaktiviert. Der Code zur Bereinigung von Blobs in den Treibern und Subsystemen AMD PSP, amdgpu und nouveau wurde aktualisiert.

Quelle: opennet.ru

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster