Veröffentlichung des Linux-Kernels 5.9

Nach zwei Monaten der Entwicklung stellte Linus Torvalds den Release des Kernels Linux 5.9. Zu den bemerkenswertesten Änderungen gehören: die Einschränkung des Imports von Symbolen aus proprietären Modulen in GPL-Module, die Beschleunigung von Kontextwechsel-Operationen durch den Prozessorbefehl FSGSBASE, die Unterstützung der Komprimierung des Kernel-Images mit Zstd, eine Überarbeitung der Priorisierung von Threads im Kernel, die Unterstützung des Protokolls PRP (Parallel Redundancy Protocol), bandbreitenbewusstes Scheduling im Deadline-Scheduler, proaktive Paginierung von Speicherseiten, der Capability-Flag CAP_CHECKPOINT_RESTOR, der Systemaufruf close_range(), Leistungssteigerungen bei dm-crypt, die Entfernung des Codes für 32-Bit-Gastsysteme von Xen PV, ein neuer Slab-Speicherverwaltungsmekanismus, die „rescue“-Option in Btrfs sowie die Unterstützung von Inline-Verschlüsselung in ext4 und F2FS.

In die neue Version wurden 16074 Korrekturen von 2011 Entwicklern aufgenommen,
die Patchgröße beträgt 62 MB (Änderungen betreffen 14548 Dateien, 782155 Codezeilen wurden hinzugefügt, 314792 Zeilen wurden entfernt). Ungefähr 45 % aller Änderungen in 5.9
vorgestellten Änderungen beziehen sich auf Gerätetreiber, rund 15 % der Änderungen
auf Updates des mit Hardware-Architekturen spezifischen Codes, 13 %
beziehen sich auf den Netzwerk-Stack, 3 % auf Dateisysteme und 3 % auf interne Komponenten.
Subsystemen des Kernels.

Haupt Neuheiten:

  • Speicher und Systemdienste
    • Strengere Schutz vor der Verwendung von GPL-Wrappern zur Verknüpfung proprietärer Treiber mit Kernkomponenten, die nur für GPL-lizenzierte Module exportiert werden. Das Flag TAINT_PROPRIETARY_MODULE wird jetzt in allen Modulen vererbt, die Symbole aus Modulen mit diesem Flag importieren. Wenn ein GPL-Modul versucht, Symbole aus einem Nicht-GPL-Modul zu importieren, erbt dieses GPL-Modul das Label TAINT_PROPRIETARY_MODULE und kann nicht auf Kernkomponenten zugreifen, die nur für GPL-lizenzierte Module verfügbar sind, selbst wenn das Modul zuvor Symbole aus der Kategorie „gplonly“ importiert hat. Eine Rückwärtsblockade (Export nur von EXPORT_SYMBOL_GPL in Modulen, die EXPORT_SYMBOL_GPL importiert haben), die proprietäre Treiber beeinträchtigen könnte, wurde nicht implementiert (nur das Flag für proprietäre Module wird vererbt, nicht jedoch die GPL-Verknüpfung).
    • Hinzugefügt Unterstützung des kcompactd-Mechanismus für vorausschauendes Packen von Speicherseiten Im Hintergrund ermöglicht es, die Anzahl großer Seiten im Speicher, die dem Kern zur Verfügung stehen, zu erhöhen. Schätzungen zufolge ermöglicht die Hintergrundverpackung bei minimalen Overheads eine 70- bis 80-fache Reduzierung der Latenzzeiten bei der Zuweisung großer Seiten (Huge Pages) im Vergleich zum zuvor verwendeten Mechanismus, der bei Bedarf aktiviert wurde (on-demand). Um die Grenzen der externen Fragmentierung, die von kcompactd bereitgestellt wird, festzulegen, wurde sysctl vm.compaction_proactiveness hinzugefügt.
    • Hinzugefügt Unterstützung der Kernel-Image-Komprimierung unter Verwendung eines Algorithmus Zstandard (zstd) wurde hinzugefügt.
    • Für x86-Systeme wurde Unterstützung für die Prozessoranweisung FSGSBASE, die es ermöglicht, den Inhalt der Register FS/GS aus dem Benutzerspeicher zu lesen und zu ändern. Im Kernel wird FSGSBASE verwendet, um Kontextwechseloperationen zu beschleunigen, indem überflüssige MSR-Schreiboperationen für GSBASE ausgeschlossen werden, und im Benutzerspeicher ermöglicht es, ohne überflüssige Systemaufrufe zur Änderung von FS/GS auszukommen.
    • Hinzugefügt Der Parameter «allow_writes» ermöglicht es, Änderungen an den MSR-Registern des Prozessors aus dem Benutzermodus zu verbieten und den Zugriff auf die Inhalte dieser Register auf Leseoperationen zu beschränken, da Änderungen an den MSR zu Problemen führen können. Standardmäßig ist das Schreiben vorerst nicht verboten, jedoch wird jede Änderung der MSR im Protokoll vermerkt; es ist jedoch geplant, den Standardzugang in Zukunft auf den Nur-Lese-Modus umzustellen.
    • In die Schnittstelle für asynchronen Input/Output io_uring Vollständige Unterstützung für asynchrone, gepufferte Leseoperationen wurde hinzugefügt, die keine Kernel-Threads erfordern. Unterstützung für Schreibvorgänge wird in der nächsten Version erwartet.
    • Im Input/Output-Scheduler den Deadline-Algorithmus wurde Planung unter Berücksichtigung der Bandbreite, implementiert, um korrekte Entscheidungen auf asymmetrischen Systemen zu treffen, wie zum Beispiel ARM-Systeme basierend auf den Architekturen DynamIQ und big.LITTLE, die in einem Chip leistungsstarke und weniger leistungsfähige energieeffiziente CPU-Kerne kombinieren. Insbesondere ermöglicht der neue Modus, Inkonsistenzen bei der Planung zu vermeiden, wenn ein langsamer CPU-Kern nicht über die notwendigen Ressourcen verfügt, um eine Aufgabe innerhalb der fristgerechten Anforderungen zu erfüllen.
    • Das Energieverbrauchsmodell im Kern (Energy Model Framework) ist jetzt beschreibt Es betrifft nicht nur das Energieverbrauchsverhalten der CPU, sondern schließt auch Peripheriegeräte ein.
    • Ein Systemaufruf close_range() wurde implementiert, der es einem Prozess ermöglicht, einen gesamten Bereich offener Dateideskriptoren auf einmal zu schließen.
    • Aus der Implementierung der Textkonsole und des Treibers fbcon wurde der Code, der die Möglichkeit bietet, Text programmatisch mehr als das Volumen des Grafikspeichers im Textmodus VGA zurückzuscrollen (CONFIG_VGACON_SOFT_SCROLLBACK).
    • Überarbeitet ein Algorithmus zur Prioritätenzuweisung für Threads innerhalb des Kernels. Die neue Variante sorgt für eine bessere Konsistenz in allen Kernelsubsystemen bei der Priorisierung von Echtzeitarbeiten.
    • Hinzugefügt wurde sysctl sched_uclamp_util_min_rt_default zum Verwalten von Parametern zur Festlegung der CPU-Frequenz für Echtzeitarbeiten (z. B. kann das Verhalten von Echtzeitarbeiten zur Energieeinsparung bei Wechseln auf Akkubetrieb oder bei mobilen Systemen dynamisch angepasst werden).
    • Die Vorbereitung zur Implementierung der Unterstützung für die Technologie Transparent Huge Pages im Seiten-Cache wurde abgeschlossen.
    • Im fanotify-Mechanismus wurden neue Flags FAN_REPORT_NAME und FAN_REPORT_DIR_FID implementiert, um Informationen über den übergeordneten Namen und die eindeutige FID-Identifikation bei der Erzeugung, Löschung oder Verschiebung von Katalogelementen sowie bei nicht katalogbezogenen Objekten zu übermitteln.
    • Für cgroups implementiert. gibt es einen neuen Slab-Speichercontroller (slab memory controller), der durch die Verlagerung der Slab-Zählung von der Seite auf die Objektebene auffällt. Dies ermöglicht eine gemeinsame Nutzung von Slab-Seiten in verschiedenen cgroups, anstelle von separaten Slab-Caches für jede cgroup. Der vorgeschlagene Ansatz kann die Effizienz der Slab-Nutzung steigern, den Slab-Speicher um 30-45 % reduzieren, den gesamten Speicherverbrauch des Kernels deutlich senken und die Speicherfragmentierung verringern.
    • Im Audiosubsystem ALSA und im USB-Stack, gemäß den kürzlich angenommenen den Empfehlungen zur Verwendung inklusiver Terminologie im Linux-Kernel wurden unangemessene Begriffe bereinigt. Der Code wurde von den Ausdrücken „slave“, „master“, „blacklist“ und „whitelist“ gereinigt.
  • Virtualisierung und Sicherheit
    • Beim Kompilieren des Kernels mit dem Clang-Compiler wurde eingeführt Die Möglichkeit zur Konfiguration (CONFIG_INIT_STACK_ALL_ZERO) der automatischen Initialisierung aller im Stack gespeicherten Variablen mit dem Wert Null (wird beim Kompilieren mit „-ftrivial-auto-var-init=zero“ angegeben).
    • Im seccomp-Untersystem, bei Verwendung des Prozessüberwachungsmodus im Benutzerspeicher, hinzugefügt die Möglichkeit Ersatz von in Aktienprozesse eingebetteten Dateideskriptoren zur vollständigen Emulation von Systemaufrufen, die zur Erstellung von Dateideskriptoren führen. Diese Funktionalität wird in isolierten Containersystemen und bei der Umsetzung von Sandboxes für Chrome benötigt.
    • Für die Architekturen xtensa und csky wurde die Unterstützung zur Begrenzung von Systemaufrufen mit Hilfe des seccomp-Untersystems hinzugefügt. Für xtensa wurde außerdem die Unterstützung des Audit-Mechanismus realisiert.
    • Hinzugefügt Neuer Capability-Flag CAP_CHECKPOINT_RESTORE, der ohne zusätzliche Privilegien den Zugang zu Funktionen im Zusammenhang mit dem Einfrieren und Wiederherstellen des Zustands von Prozessen ermöglicht.
    • In GCC 11 wurden alle erforderlichen Funktionen implementiert, um
      Das Debugging-Tool KCSAN (Kernel Concurrency Sanitizer) wurde entwickelt, um dynamisch Zustände von Race Conditions im Kernel zu erkennen. Damit kann KCSAN jetzt auch mit in GCC kompilierten Kernen verwendet werden.
    • Für AMD Zen und neuere CPU-Modelle hinzugefügt Unterstützung der P2PDMA-Technologie, die die DMA-Nutzung für eine direkte Datenübertragung zwischen dem Speicher von zwei Geräten ermöglicht, die mit dem PCI-Bus verbunden sind.
    • In dm-crypt wurde ein Modus hinzugefügt, der Latenzen verringert, indem die kryptografische Verarbeitung der Daten ohne die Verwendung von Arbeitswarteschlangen durchgeführt wird. Dieser Modus ist zudem erforderlich für die ordnungsgemäße Funktion mit zonierten Blockgeräten (Geräte mit Bereichen, die sequenziell mit einer Aktualisierung der gesamten Gruppe von Blöcken geschrieben werden müssen). Es wurden Maßnahmen ergriffen, um die Bandbreite zu erhöhen und die Latenzen in dm-crypt zu reduzieren.
    • Der Support für 32-Bit-Gastsysteme, die im Para-Virtualisierungsmodus unter dem Hypervisor Xen laufen, wurde entfernt. Nutzer solcher Systeme sollten auf 64-Bit-Kerne in den Gastumgebungen umsteigen oder für den Start der Umgebungen anstelle der Para-Virtualisierung die vollständige (HVM) oder kombinierte (PVH) Virtualisierung verwenden.
  • Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
    • Im Dateisystem Btrfs wurde Die Mount-Option ‚rescue‘ wurde eingeführt, um den Zugang zu allen anderen Wiederherstellungsoptionen zu vereinheitlichen. Die Unterstützung der Optionen ‚alloc_start‘ und ‚subvolrootid‘ wurde entfernt, und die Option ‚inode_cache‘ wurde für veraltet erklärt. Die Leistung wurde optimiert, insbesondere wurden die fsync()-Operationen deutlich beschleunigt. Hinzugefügt Die Möglichkeit, alternative Prüfzahltatbestände neben CRC32c zu verwenden.
    • Hinzugefügt Die Möglichkeit der Verwendung von Inline-Verschlüsselung in den Dateisystemen ext4 und F2FS, für die die Mount-Option ‚inlinecrypt‘ vorgesehen ist. Der Inline-Verschlüsselungsmodus erlaubt die Nutzung der im Speichercontroller integrierten Verschlüsselungsmechanismen, die eine transparente Verschlüsselung und Entschlüsselung von Ein- und Ausgaben ermöglichen.
    • In XFS bereitgestellt Inode-Flush im vollständig asynchronen Modus, der keine Prozesse während der Speicherräumungsoperation blockiert. Ein altes Problem mit Quoten wurde gelöst, das dazu führte, dass Warnungen über die Überschreitung des Softlimits und die Anzahl der Inodes nicht ordnungsgemäß überwacht wurden. Die Unterstützung von DAX für ext4 und xfs wurde vereinheitlicht.
    • In Ext4 wurde Präventives Laden der Bitmaps zur Blockverteilung. In Kombination mit der Beschränkung des Scannens von nicht initialisierten Gruppen hat die Optimierung die Zeit für das Einbinden sehr großer Partitionen verkürzt.
    • In F2FS ein Ioctl F2FS_IOC_SEC_TRIM_FILE, das TRIM/discard-Befehle ermöglicht, um die angegebenen Daten in einer Datei physisch zu nullen, beispielsweise um Zugangsschlüssel zu entfernen, ohne dass Restdaten auf dem Speicher verbleiben.
      In F2FS gibt es auch ein einen neuen Modus für die Müllbeseitigung GC_URGENT_LOW, der durch den Ausschluss bestimmter Prüfungen des Leerlaufs (idle) vor dem Start des Müllbeseitigers aggressiver arbeitet.
    • In Bcache wurde die Größe der bucket_size für Extents von 16 auf 32 Bit erhöht, um die Verwendung für den Cache von zonierten Geräten zu ermöglichen.
    • Im SCSI-Subsystem wurde die Möglichkeit zur Verwendung von Inline-Verschlüsselung auf Basis der integrierten Hardwareverschlüsselung, die von UFS-Controllern bereitgestellt wird, hinzugefügt.Universal Flash Storage).
    • Ein neuer Kernel-Befehlszeilenparameter „debugfs“ wurde hinzugefügt, der die Verwaltung der Verfügbarkeit des gleichnamigen Pseudo-Dateisystems ermöglicht.
    • Der NFSv4.2-Client unterstützt jetzt erweiterte Dateiattribute (xattr).
    • In dm-dust ein wurde eine Schnittstelle zum gleichzeitigen Auflisten aller erkannten fehlerhaften Blöcke auf der Festplatte hinzugefügt („dmsetup message dust1 0 listbadblocks“).
    • Für md/raid5 wurde der Parameter /sys/block/md1/md/stripe_size zur Einstellung der STRIPE-Blockgröße hinzugefügt.
    • Für NVMe-Speichergeräte hinzugefügt wurde die Unterstützung von Befehlen für das Zonieren des Speichermediums (ZNS, NVM Express Zoned Namespace) hinzugefügt, die es ermöglichen, den Speicher in Zonen zu unterteilen, die Gruppen von Blöcken bilden, um eine umfassendere Datenplatzierung zu ermöglichen.
  • Netzwerksubsystem
    • In Netfilter hinzugefügt wurde die Möglichkeit zur Ablehnung von Paketen in der Phase vor der Routingprüfung hinzugefügt (der Ausdruck REJECT kann jetzt nicht nur in den Chains INPUT, FORWARD und OUTPUT, sondern auch in der PREROUTING-Phase für icmp und tcp verwendet werden).
    • In nftables hinzugefügt wurde die Möglichkeit zur Überwachung von Ereignissen in Bezug auf Konfigurationsänderungen eingeführt.
    • In nftables im netlink API hinzugefügt Unterstützung für anonyme Chains, deren Namen dynamisch vom Kernel zugewiesen wird. Wenn die mit einer anonymen Chain verbundene Regel entfernt wird, wird auch die Chain automatisch gelöscht.
    • BPF hat Unterstützung für Iteratoren hinzugefügt, um Elemente von assoziativen Arrays (map) zu durchlaufen, zu filtern und zu ändern, ohne Daten in den Nutzerraum zu kopieren. Iteratoren können für TCP- und UDP-Sockets verwendet werden, was es BPF-Programmen ermöglicht, Listen offener Sockets zu durchlaufen und benötigte Informationen herauszuziehen.
    • Ein neuer Typ von BPF-Programmen, BPF_PROG_TYPE_SK_LOOKUP, wurde hinzugefügt, der ausgeführt wird, wenn der Kernel nach einem geeigneten anhörenden Socket für eine eingehende Verbindung sucht. Mit einem solchen BPF-Programm können Handler erstellt werden, die entscheiden, mit welchem Socket die Verbindung assoziiert werden soll, ohne auf den Systemaufruf bind() beschränkt zu sein. Beispielsweise kann eine Zuordnung eines Sockets zu einem Adressbereich oder Port durchgeführt werden. Darüber hinaus wurde in bpf_setsockopt() die Unterstützung für das Flag SO_KEEPALIVE hinzugefügt, und die Möglichkeit zur Installation von Handlers BPF_CGROUP_INET_SOCK_RELEASE wurde implementiert, die beim Freigeben eines Sockets aufgerufen werden.
    • Unterstützung für das Protokoll PRP (Parallel Redundancy Protocol), das eine nahtlose Umschaltung auf ein alternatives Netzwerk bei Ausfällen von Komponenten ermöglicht.
    • Im Stack mac80211 hinzugefügt unterstützt die vierstufige Aushandlung von WPA/WPA2-PSK im Access Point-Modus.
    • Die Möglichkeit wurde hinzugefügt, den qdisc-Scheduler (queuing discipline) standardmäßig auf den FQ-PIE-Algorithmus (Flow Queue PIE) umzustellen. Dieser zielt darauf ab, die negativen Auswirkungen der Paketzwischenpufferung auf Border-Geräten (bufferbloat) in Kabelmodemnetzwerken zu verringern.
    • Neue Funktionen wurden für MPTCP (MultiPath TCP) hinzugefügt, eine Erweiterung des TCP-Protokolls zur gleichzeitigen Übertragung von TCP-Paketen über mehrere Routen hinweg, die mit unterschiedlichen IP-Adressen an verschiedenen Netzwerk-Interfaces verbunden sind. Unterstützung für syn cookie, DATA_FIN, automatische Puffereinstellung, Socket-Diagnose sowie die Verwendung der Flags REUSEADDR, REUSEPORT und V6ONLY in setsockopt wurde hinzugefügt.
    • Für virtuelle Routing-Tableaus VRF (Virtual Routing and Forwarding), die es ermöglichen, mehrere Routing-Domänen auf einem System zu organisieren, wurde der Modus „strict“ implementiert. In diesem Modus kann die virtuelle Tabelle nur mit einer Routing-Tabelle verbunden werden, die nicht in anderen virtuellen Tabellen verwendet wird.
    • Im drahtlosen Treiber ath11k hinzugefügt unterstützt die Frequenz 6 GHz und Spektralscanning..
  • Ausrüstung
    • Der Code zur Unterstützung der UniCore-Architektur, die im Mikroprozessortechnologiezentrum der Peking-Universität entwickelt wurde und 2011 Teil des Linux-Kernels wurde, wurde entfernt. Diese Architektur wird seit 2014 nicht mehr unterstützt und hat keine Unterstützung in GCC.
    • Für die RISC-V-Architektur wurde Unterstützung für kcov (debugfs-Schnittstelle zur Analyse der Codeabdeckung des Kernels), kmemleak (Speicherleck-Erkennungssystem), Stack-Schutz, Sprungmarken und tickless-Betrieb (signalunabhängige Multitasking).
    • Für die PowerPC-Architektur wurde Unterstützung für Warteschlangen für Spinlocks implementiert, was die Leistung in Konfliktsituationen erheblich steigert.
    • Für ARM- und ARM64-Architekturen ist standardmäßig ein CPU-Frequenzregler aktiviert. schedutil (cpufreq governor), der zur Entscheidungsfindung über Frequenzänderungen direkt Informationen vom Task-Scheduler verwendet und sofort auf cpufreq-Treiber zugreifen kann, um die Frequenz in Echtzeit anzupassen und die CPU-Leistungsparameter an die aktuelle Last anzupassen.
    • Der DRM-Treiber i915 für Intel-Grafikkarten unterstützt Chips auf Basis der Mikroarchitektur. Rocket Lake Außerdem wurde eine erste Unterstützung für diskrete Karten hinzugefügt. Intel Xe DG1.
    • Im amdgpu-Treiber wurde die erste Unterstützung für AMD-GPUs eingeführt. Navi 21 (Navy Flounder) und Navi 22 (Sienna Cichlid). Es wurden Unterstützung für die Video-Encoding- und Decoding-Beschleunigungs-Engines UVD/VCE für GPUs der Southern Islands (Radeon HD 7000) hinzugefügt.
      Eine Eigenschaft zum Drehen der Anzeige um 90, 180 oder 270 Grad wurde hinzugefügt.

      Interessanterweise unterstützt der Treiber für AMD-GPUs ist der größte Treiber im Kernel – er umfasst etwa 2,71 Millionen Codezeilen, was ungefähr 10 % der Gesamtgröße des Kernels (27,81 Millionen Zeilen) ausmacht. Davon entfallen 1,79 Millionen Zeilen auf automatisch generierte Header-Dateien mit Daten für GPU-Register, während der C-Code 366.000 Zeilen umfasst (zum Vergleich: der Intel i915-Treiber enthält 209.000 Zeilen, und Nouveau 149.000).

    • Im Nouveau-Treiber hinzugefügt Frame-by-Frame-Integritätsprüfung mithilfe von CRC (Cyclic Redundancy Checks) in den Display-Engines von NVIDIA-GPUs. Die Implementierung basiert auf den von NVIDIA bereitgestellten Dokumentationen.
    • Treiber für LCD-Panels hinzugefügt: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 und Xingbangda XBD599.
    • Im ALSA-Audiosubsystem wurde die Unterstützung für Intel Silent Stream (ein Modus zur konstanten Stromversorgung für externe HDMI-Geräte zur Vermeidung von Verzögerungen beim Start der Wiedergabe) sowie ein neues Gerät zur Steuerung der Hintergrundbeleuchtung der Mikrofonschalttasten sowie zur Stummschaltung hinzugefügt, und es wurde auch die Unterstützung neuer Hardware, einschließlich des Controllers, hinzufügt. Loongson 7A1000..
    • Unterstützung für ARM-Plattformen, Geräte und Plattformen hinzugefügt: Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1, ASUS Google Nexus 7, Acer Iconia Tab A500, Qualcomm Snapdragon SDM630 (verwendet in Sony Xperia 10, 10 Plus, XA2, XA2 Plus und XA2 Ultra), Jetson Xavier NX, Amlogic WeTek Core2, Aspeed EthanolX, fünf neue Platinen basierend auf NXP i.MX6, MikroTik RouterBoard 3011, Xiaomi Libra, Microsoft Lumia 950, Sony Xperia Z5, MStar, Microchip Sparx5, Intel Keem Bay, Amazon Alpine v3, Renesas RZ/G2H.

Gleichzeitig hat die lateinamerikanische Free Software Foundation die
Variante ist gut gelungen. vollständig freies Kernel 5.9Linux-libre 5.9-gnu, bereinigt von Elementen von Firmware und Treibern, die nicht freie Komponenten oder Codeabschnitte enthalten, deren Verwendung auf den Hersteller beschränkt ist. In der neuen Version wurde das Laden von Blobs in den Treibern für WiFi rtw8821c und SoC MediaTek mt8183 deaktiviert. Der Code zur Bereinigung von Blobs in den Treibern und Subsystemen Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) und x86-Touchscreen 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