Linux-Kernel Version 5.6

Nach zwei Monaten der Entwicklung präsentierte Linus Torvalds vor die Kernel-Version Linux 5.6. Zu den auffälligsten Änderungen gehören: die Integration der VPN-Schnittstelle WireGuard, Unterstützung für USB4, Namensräume für Zeit, die Möglichkeit, TCP-Überlasthandler mit BPF zu erstellen, erste Unterstützung für MultiPath TCP, die Behebung des Problemes des Jahres 2038, der Mechanismus „bootconfig“, und das Dateisystem ZoneFS.

In die neue Version sind 13702 Korrekturen von 1810 Entwicklern eingeflossen,
die Patch-Größe beträgt 40 MB (die Änderungen betreffen 11577 Dateien, 610012 Zeilen Code wurden hinzugefügt,
294828 Zeilen wurden entfernt). Etwa 45 % aller in 5.6
Änderungen stehen im Zusammenhang mit Gerätetreibern, rund 15 % der Änderungen betreffen
Updates von architekturspezifischem Code, 12 %
einige sind mit dem Netzwerk-Stack verbunden, 4 % — mit Dateisystemen und 3 % mit internen
Subsystemen des Kernels.

Haupt- Neuheiten:

  • Netzwerksubsystem
    • Hinzugefügt Die Implementierung der VPN-Schnittstelle WireGuard, die auf modernen Verschlüsselungsmethoden basiert (ChaCha20, Poly1305, Curve25519, BLAKE2s), einfach zu bedienen ist, keine Komplikationen aufweist, sich in mehreren großen Implementierungen bewährt hat und eine sehr hohe Leistung bietet (3,9-mal übertrifft OpenVPN in der Bandbreite). Bei WireGuard wird das Konzept der schlüsselbasierten Routierung angewendet, was die Zuordnung eines privaten Schlüssels zu jeder Netzwerkschnittstelle und die Verwendung zur Verknüpfung öffentlicher Schlüssel umfasst. Der Austausch öffentlicher Schlüssel zur Einrichtung einer Verbindung erfolgt analog zu SSH. Die für den Betrieb von WireGuard erforderlichen kryptografischen Primitive wurden in das Zinc-Bibliothek in die Standard-Crypto-API und in den Kernel integriert. aufgenommen im Kern 5.5.
    • Die Integration von Komponenten, die zur Unterstützung von MPTCP (MultiPath TCP) erforderlich sind, einer Erweiterung des TCP-Protokolls, die es ermöglicht, TCP-Verbindungen mit der gleichzeitigen Zustellung von Paketen über mehrere Routen durch verschiedene Netzwerkschnittstellen zu organisieren, die an unterschiedlichen IP-Adressen gebunden sind. Für Netzwerkapplikationen sieht eine solche aggregierte Verbindung wie eine gewöhnliche TCP-Verbindung aus, während die gesamte Logik zur Trennung der Ströme von MPTCP umgesetzt wird. Multipath TCP kann sowohl zur Erhöhung der Bandbreite als auch zur Verbesserung der Zuverlässigkeit verwendet werden. Zum Beispiel kann MPTCP für die Datenübertragung auf einem Smartphone eingesetzt werden, das gleichzeitig WiFi- und 4G-Verbindungen nutzt, oder um Kosten zu sparen, indem man einen Server mit mehreren kostengünstigen Verbindungen anstelle einer teuren anbindet.
    • Hinzugefügt Unterstützung der Disziplin der Verarbeitung von Netzwerkwarteschlangen sch_ets (Enhanced Transmission Selection, IEEE 802.1Qaz), die die Möglichkeit bietet, die Bandbreite auf verschiedene Verkehrsklassen zu verteilen. Wenn die Last auf einer bestimmten Verkehrsgruppe die bereitgestellte Bandbreite unterschreitet, ermöglicht ETS anderen Verkehrsgruppen, die verfügbare (unbenutzte) Bandbreite zu nutzen. Die Qdisc sch_ets wird als PRIO-Dienst eingerichtet und verwendet Verkehrsgruppen, um strenge und gemeinsam genutzte Bandbreitenbeschränkungen zu definieren. ETS funktioniert als Kombination der Disziplinen PRIO und DRR – bei harten Bandbreitenbeschränkungen wird PRIO verwendet, aber wenn die Warteschlange leer ist, funktioniert es als DRR.
    • Ein neuer Typ von BPF-Programmen wurde hinzugefügt BPF_PROG_TYPE_STRUCT_OPS, das es ermöglicht, Kernelfunktionshandler über BPF zu implementieren. Derzeit kann diese Möglichkeit bereits zur Implementierung von TCP-Überlastkontrollalgorithmen in Form von BPF-Programmen genutzt werden. Als Beispiel wurde vorgeschlagen ein BPF-Programm zur Implementierung des Algorithmus DCTCP.
    • Im Kernel wurden angenommen Änderungen, die das Werkzeug ethtool von ioctl() auf die Nutzung des Netlink-Interfaces. Das neue Interface vereinfacht die Hinzufügung von Erweiterungen, verbessert die Fehlerbehandlung, ermöglicht die Versendung von Benachrichtigungen bei Statusänderungen, vereinfacht die Interaktion zwischen Kernel und Benutzerspeicher und reduziert die Anzahl der zu synchronisierenden benannten Listen.
    • Die Implementierung des FQ-PIE (Flow Queue PIE)-Algorithmus zur Verwaltung von Netzwerkwarteschlangen wurde hinzugefügt, der darauf abzielt, die negativen Auswirkungen der Zwischenspeicherung von Paketen auf Grenznetzwerkausrü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 eine asynchrone Implementierung der DISCARD-Operation (Markierung freigegebener Blöcke, die physisch nicht mehr gespeichert werden müssen) eingeführt. Ursprünglich wurden DISCARD-Operationen synchron ausgeführt, was zu einer schlechten Leistung aufgrund des Wartens auf den Abschluss der entsprechenden Befehle durch die Speichermedien führen konnte. Die asynchrone Implementierung ermöglicht es, das Ende des DISCARD-Vorgangs durch das Speichermedium nicht abzuwarten und diese Operation im Hintergrund auszuführen.
    • In XFS wurde der Code bereinigt, in dem alte 32-Bit-Zeitstempel verwendet wurden (der Typ time_t wurde durch time64_t ersetzt), was zu Problemen im Jahr 2038 führte. Fehler und Speicherbeschädigungen, die auf 32-Bit-Plattformen auftraten, wurden behoben. Der Code zur Arbeit mit erweiterten Attributen wurde überarbeitet.
    • Im ext4-Dateisystem wurden Leistungsoptimierungen vorgenommen, die mit der Verarbeitung von Inode-Sperren bei Lese- und Schreibvorgängen zusammenhängen. Die Leistung beim Überschreiben im Direct I/O-Modus wurde verbessert. Zum Erleichtern der Problemdiagnose wird die Speicherung des ersten und letzten Fehlercodes im Superblock bereitgestellt.
    • Im F2FS-Dateisystem wurde die Möglichkeit zur Speicherung von Daten in komprimierter Form implementiert. Für eine einzelne Datei oder ein Verzeichnis kann die Komprimierung mit dem Befehl „chattr +c file“ oder „chattr +c dir; touch dir/file“ aktiviert werden. Um die gesamte Partition zu komprimieren, kann in der Mount-Anwendung die Option „-o compress_extension=ext“ verwendet werden.
    • Im Kernel wurde das Dateisystem ZoneFS, die die niederleveligen Arbeiten mit zonierten Speichereinheiten vereinfacht. Unter zonierten Speichern versteht man Geräte auf herkömmlichen magnetischen Festplatten oder NVMe SSDs, deren Speicherbereich in Zonen unterteilt ist, die Gruppen von Blöcken oder Sektoren bilden, in die nur sequenziell Daten hinzugefügt werden dürfen, wobei die gesamte Gruppe von Blöcken aktualisiert werden muss. Das Dateisystem ZoneFS wurde von Western Digital entwickelt und verknüpft jede Zone im Speicher mit einer separaten Datei, die im Raw-Modus zur Datenspeicherung verwendet werden kann, ohne auf der Ebene von Sektoren und Blöcken zu manipulieren, d.h. es ermöglicht Anwendungen, die Dateisystem-API zu verwenden, anstatt direkt auf das Blockgerät über ioctl zuzugreifen.
    • In NFS ist die Montage von Partitionen über UDP standardmäßig deaktiviert. Eine Unterstützung für die in der Spezifikation NFS 4.2 festgelegte Funktionalität zum direkten Kopieren von Dateien zwischen Servern wurde hinzugefügt. Eine neue Montageoption „softreval“ wurde hinzugefügt, die im Falle eines Serverausfalls die Verwendung von zwischengespeicherten Attributwerten erlaubt. Zum Beispiel bleibt bei Angabe dieser Option nach Nichterreichbarkeit des Servers die Möglichkeit bestehen, durch Pfade im NFS-Partition und auf Informationen zuzugreifen, die im Cache verbleiben.
    • Durchgeführt wurde eine Leistungsoptimierung des Mechanismus fs-verity, der zur Integritätsprüfung und Authentifizierung einzelner Dateien verwendet wird. Die Geschwindigkeit des sequenziellen Lesens wurde durch die Anwendung von Merkle-Baum-Hashes erhöht. Die Effizienz von FS_IOC_ENABLE_VERITY wurde unter Bedingungen ohne Daten im Cache optimiert (es wurde ein vorzeitiges Lesen von Seiten mit Daten angewendet).
  • Virtualisierung und Sicherheit
    • Die Möglichkeit, das SELinux-Modul während des Betriebs zu deaktivieren, wurde für veraltet erklärt, und in Zukunft wird das Entladen eines bereits aktivierten SELinux verboten. Um SELinux zu deaktivieren, muss der Parameter „selinux=0“ an die Kernel-Befehlszeile übergeben werden.
    • Hinzugefügt Unterstützung von Zeit-Namensräumen (time namespaces), die es ermöglichen, den Zustand der Systemuhren (CLOCK_REALTIME,
      CLOCK_MONOTONIC, CLOCK_BOOTTIME) an einen Container zu binden, die Verwendung eigener Zeit im Container zu ermöglichen und bei der Migration des Containers auf einen anderen Host die Unveränderlichkeit der Werte von CLOCK_MONOTONIC und CLOCK_BOOTTIME sicherzustellen (die Zeit nach dem Booten unter Berücksichtigung oder ohne Berücksichtigung des Schlafmodus zu berücksichtigen).
    • Der blockierte Pool /dev/random wurde entfernt. Das Verhalten von /dev/random ähnelt dem von /dev/urandom in Bezug auf die Vermeidung von Entropieblockaden nach der Initialisierung des Pools.
    • Im Hauptkern wurde ein Treiber hinzugefügt, der es Gastbetriebssystemen, die unter VirtualBox laufen, ermöglicht, von der Host-Umgebung geteilte Verzeichnisse (VirtualBox Shared Folder) zu montieren.
    • Es wurde eine Reihe von Patches zum BPF-Subsystem hinzugefügt (BPF-Dispatcher), um die Effizienz des Aufrufs von BPF-Programmen bei Auftreten von an sie gebundenen Ereignissen zu erhöhen, unter Verwendung des Retpoline-Mechanismus zum Schutz vor Spectre V2-Angriffen (z. B. wird der Aufruf von XDP-Handlern beim Empfang von Netzwerkpaketen beschleunigt).
    • Ein Treiber zur Unterstützung von in APU AMD integrierten TEE-Umgebungen (Trusted Execution Environment) wurde hinzugefügt.
  • Speicher und Systemdienste
    • Im BPF wurde die Unterstützung für globale Funktionen hinzugefügt. Die Entwicklung erfolgt im Rahmen einer Initiative zur Einführung von Unterstützungsbibliotheken für Funktionen, die in BPF-Programmen verbunden werden können. Der nächste Schritt wird die Unterstützung von dynamischen Erweiterungen sein, die das Laden globaler Funktionen ermöglichen, einschließlich der Möglichkeit, bestehende globale Funktionen während ihrer Nutzung zu ersetzen. Im BPF-Subsystem wurde auch die Unterstützung einer Variante der map-Operation hinzugefügt (verwendet zum Speichern dauerhafter Daten), die die Ausführung im Batch-Modus unterstützt.
    • Hinzugefügt gerätes „cpu_cooling“, das es ermöglicht, überhitzte CPUs durch vorübergehenden Wechsel in den Leerlauf (idle) abzukühlen.
    • Ein Systemaufruf wurde hinzugefügt, openat2(), der eine Reihe zusätzlicher Flags bietet, um die Auflösung des Dateipfads einzuschränken (Verbot der Überschreitung von Einhängepunkten, symbolischen Links, Magic-Links (/proc/PID/fd), Komponenten „..“).
    • Für heterogene Systeme auf Basis der big.LITTLE-Architektur, die leistungsstarke und weniger leistungsfähige energieeffiziente CPU-Kerne in einem Chip kombinieren, wurde sichergestellt, dass der Parameter uclamp_min eingestellt wird (der in Kernel 5.3 eingeführt wurde, um die Lastbindung zu steuern). Dieser Parameter stellt sicher, dass die Aufgabe vom Scheduler auf einem CPU-Kern mit ausreichender Leistung platziert wird. im Kern 5.3 Mechanismus zur Lastverteilung). Der angegebene Parameter garantiert, dass die Aufgabe vom Scheduler auf einem CPU-Kern platziert wird, der über ausreichend Leistung verfügt.
    • Der Kernel wurde von der 2038-Jahr-Problematik befreit. Die letzten verbleibenden Handler wurden ersetzt, in denen für den Epoch-Zähler der 32-Bit (signed int) Typ time_t verwendet wurde, der unter Berücksichtigung des Berichts von 1970 im Jahr 2038 überlaufen sollte.
    • Die Verbesserung des Interface für asynchronen Ein-/Ausgabe wurde fortgesetzt io_uring, in dem ist sichergestellt Unterstützung neuer Operationen: 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 schnellen Zugriffsliste),
      IORING_OP_STATX (Anfrage von Dateiinformationen),
      IORING_OP_READ,
      IORING_OP_WRITE (vereinfachte Entsprechungen 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 (Senden und Empfangen von Netzwerkinformationen),
      IORING_OP_EPOLL_CTL (Durchführung von Operationen an epoll-Dateideskriptoren).
    • Ein Systemaufruf wurde hinzugefügt, pidfd_getfd(), das es einem Prozess ermöglicht, einen Dateideskriptor einer offenen Datei aus einem anderen Prozess zu extrahieren.
    • Implementiert Der „bootconfig“-Mechanismus, der es ermöglicht, neben den Optionen in der Befehlszeile Kernelarbeitsparameter über eine Konfigurationsdatei zu definieren. Ein Dienstprogramm bootconfig wurde vorgeschlagen, um solche Dateien in das initramfs-Image einzufügen. Diese Möglichkeit kann beispielsweise für die Konfiguration von kprobes während des Bootvorgangs verwendet werden.
    • Überarbeitet der Mechanismus zum Warten auf das Schreiben und Lesen von Daten in unbenannten Rohren (pipe). Die Änderung hat die Ausführung solcher Aufgaben wie die parallele Erstellung großer Projekte beschleunigt. Diese Optimierung kann jedoch aufgrund eines Fehlers in der Version 4.2.1 zu einem Rennzustand in GNU make führen, der in Version 4.3 behoben wurde.
    • In prctl() wurde das Flag PR_SET_IO_FLUSHER hinzugefügt, das zur Markierung von Prozessen verwendet werden kann, die für das Freigeben von Speicher verantwortlich sind, für die keine Einschränkungen in einer Situation mit unzureichendem Speicher im System gelten sollen.
    • Basierend auf dem in Android verwendeten Speichermanagementsystem ION wurde ein Subsystem dma-buf heaps, das ermöglicht, die Zuweisung von DMA-Puffern für die gemeinsame Nutzung von Speicherbereichen durch Treiber, Anwendungen und verschiedene Subsysteme zu verwalten.
  • Hardware-Architekturen
    • Die Unterstützung der E0PD-Erweiterung wurde hinzugefügt, die in ARMv8.5 eingeführt wurde und einen Schutz vor Angriffen ermöglicht, die mit spekulativer Ausführung von Anweisungen in der CPU verbunden sind. Der E0PD-basierte Schutz verursacht geringere Overheadkosten als der KPTI-Schutz (Kernel Page Table Isolation).
    • Für Systeme auf Basis der Architektur ARMv8.5 wurde die Unterstützung des RNG-Befehls hinzugefügt, der Zugriff auf den Hardware-Zufallszahlengenerator bietet. Im Kernel wird der RNG-Befehl zur Generierung von Entropie bei der Initialisierung des vom Kernel bereitgestellten Zufallszahlengenerators verwendet.
    • Die Unterstützung für die MPX (Memory Protection Extensions), die im Kernel hinzugefügt wurde, wurde entfernt. 3.19 Damit kann die Überprüfung von Zeigern auf die Einhaltung von Speichergrenzen organisiert werden. Diese Technologie fand in Compilern keine Verbreitung und wurde aus dem GCC entfernt.
    • Für die RISC-V-Architektur wurde die Unterstützung des Debugging-Tools KASan (Kernel Address Sanitizer) implementiert, das bei der Erkennung von Speicherfehlern hilft.
  • Ausrüstung
    • Die Unterstützung der Spezifikation USB 4.0, die auf dem Thunderbolt 3-Protokoll basiert und eine Bandbreite von bis zu 40 Gbit/s bietet, während die Abwärtskompatibilität mit USB 2.0 und USB 3.2 erhalten bleibt. Analog zu Thunderbolt ermöglicht der USB 4.0-Schnittstelle das Tunnelieren verschiedener Protokolle über ein einzelnes Kabel mit einem Type-C-Anschluss, einschließlich PCIe, Display Port und USB 3.x, sowie Softwareimplementierungen von Protokollen, z.B. zur Einrichtung von Netzwerkverbindungen zwischen Hosts. Die Implementierung basiert auf dem bereits im Linux-Kernel vorhandenen Thunderbolt-Treiber und passt ihn für die Arbeit mit USB4-kompatiblen Hosts und Geräten an. Die Änderungen fügen auch die Unterstützung von Thunderbolt 3-Geräten in die Softwareimplementierung des Connection Managers ein, der für die Erstellung von Tunnelverbindungen zu mehreren Geräten über einen einzigen Anschluss verantwortlich ist.
    • Im amdgpu-Treiber hinzugefügt wurde die anfängliche Unterstützung für die HDCP 2.x-Technologie (High-bandwidth Digital Content Protection) hinzugefügt. Die Unterstützung des AMD Pollock ASIC-Chips, der auf Raven 2 basiert, wurde implementiert. Zudem wurde die Möglichkeit zum Zurücksetzen der GPU für die Familien Renoir und Navi hinzugefügt.
    • Im DRM-Treiber für Intel-Grafikkarten hinzugefügt wurde die Unterstützung von DSI VDSC für Chips auf Basis der Mikroarchitektur Ice Lake und Tiger Lake implementiert, LMEM mmap (device local memory) realisiert, das Parsing von VBT (Video BIOS Table) verbessert und die Unterstützung von HDCP 2.2 für Chips der Coffee Lake-Serie implementiert.
    • Die Arbeiten zur Vereinheitlichung des amdkfd-Treibercodes (für diskrete GPUs wie Fiji, Tonga, Polaris) mit dem amdgpu-Treiber werden fortgesetzt.
    • Der k10temp-Treiber wurde überarbeitet und unterstützt nun die Ausgabe von Spannungs- und Stromparametern für AMD Zen-CPUs sowie erweiterte Informationen von den Temperatursensoren, die in CPUs der Zen- und Zen 2-Reihe verwendet werden.
    • Im nouveau-Treiber hinzugefügt Unterstützung des verifizierten Lade-Mode für NVIDIA-GPU-Firmware basierend auf der Turing-Mikroarchitektur (GeForce RTX 2000), was die Unterstützung von 3D-Beschleunigung für diese Karten ermöglichte (offizielle Firmware mit digitaler Signatur von NVIDIA erforderlich). Unterstützung der Grafikschnittstelle TU10x hinzugefügt. Probleme mit HD Audio wurden behoben.
    • Unterstützung der Datenkompression bei der Übertragung über DisplayPort MST (Multi-Stream Transport) hinzugefügt.
    • Neuer Treiber „ath11k“ für drahtlose Qualcomm-Chips mit Unterstützung für 802.11ax hinzugefügt.
      Der Treiber basiert auf dem mac80211-Stack und unterstützt Access Point-, Station- und Mesh-Netzwerk-Modi.
    • Über sysfs wird Zugriff auf lesbare Temperaturen der Sensoren gewährt, die in modernen Festplatten und SSDs verwendet werden.
    • Es wurden wesentliche Änderungen am ALSA-Audiosystem vorgenommen, um den Code von 2038-Jahr-Problematik befreit (Abkehr von 32-Bit time_t in den Schnittstellen snd_pcm_mmap_status und snd_pcm_mmap_control) zu befreien. Unterstützung neuer Audiocodecs hinzugefügt
      Qualcomm WCD9340/WCD9341, Realtek RT700, RT711, RT715, RT1308, Ingenic JZ4770.
    • Hinzugefügt Treiber für LCD-Panels 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.
    • Hinzugefügt Unterstützung für ARM-Plattformen und Gen1 Amazon Echo-Plattformen (basierend auf 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,
      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 des PCIe-Controllers, der im Raspberry Pi 4 verwendet wird, hinzugefügt.

Gleichzeitig hat die lateinamerikanische Free Software Foundation ein vollständig freies Kernels 5.6
Variante Linux-libre 5.6-gnu, von Firmware- und Treiber-Elementen befreit, die nicht-freie Komponenten oder Codebereiche enthalten, deren Nutzung 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.Zweite Beta-Version von Android 11: Entwickler-Vorschau 2

Quelle: opennet.ru

60GB SSD 8Gb DDR4