Linux 5.9-Kernel-Release

Nach zwei Monaten Entwicklungszeit hat Linus Torvalds eingeführt Kernel-Release Linux 5.9. Zu den bemerkenswertesten Änderungen gehören: Beschränkung des Imports von Symbolen aus proprietären Modulen auf GPL-Module, Beschleunigung von Kontextwechselvorgängen mithilfe der FSGSBASE-Prozessoranweisung, Unterstützung der Kernel-Image-Komprimierung mithilfe von Zstd, Überarbeitung der Priorisierung von Threads im Kernel, Unterstützung für PRP (Parallel Redundancy Protocol), bandbreitenbewusste Planung im Terminplaner, präventives Packen von Speicherseiten, Fähigkeitsflag CAP_CHECKPOINT_RESTOR, Systemaufruf close_range(), dm-crypt-Leistungsverbesserungen, Codeentfernung für 32-Bit-Xen-PV-Gäste, neuer Slab-Speicher Verwaltungsmechanismus, Option „Rescue“ in Btrfs, Unterstützung für Inline-Verschlüsselung in ext4 und F2FS.

Die neue Version enthält 16074 Fixes von Entwicklern aus dem Jahr 2011,
Patchgröße - 62 MB (Änderungen betrafen 14548 Dateien, 782155 Codezeilen wurden hinzugefügt, 314792 Zeilen wurden gelöscht). Etwa 45 % aller in 5.9 vorgestellten Fälle
Änderungen beziehen sich auf Gerätetreiber, etwa 15 % der Änderungen
Einstellung zur Aktualisierung von Hardware-Architektur-spezifischem Code, 13 %
bezogen auf den Netzwerk-Stack, 3 % auf Dateisysteme und 3 % auf interne
Kernel-Subsysteme.

Haupt- Innovationen:

  • Speicher- und Systemdienste
    • Verschärft Schutz vor der Verwendung von GPL-Schichten zur Verknüpfung proprietärer Treiber mit Kernel-Komponenten, die nur für Module unter der GPL-Lizenz exportiert werden. Das Flag TAINT_PROPRIETARY_MODULE wird jetzt in allen Modulen geerbt, die Symbole aus Modulen mit diesem Flag importieren. Wenn ein GPL-Modul versucht, Symbole von einem Nicht-GPL-Modul zu importieren, erbt dieses GPL-Modul die Bezeichnung TAINT_PROPRIETARY_MODULE und kann nicht auf Kernelkomponenten zugreifen, die nur für GPL-lizenzierte Module verfügbar sind, selbst wenn das Modul zuvor Symbole importiert hat die Kategorie „gploly“. Die Rückwärtssperre (exportiert nur EXPORT_SYMBOL_GPL in Module, die EXPORT_SYMBOL_GPL importiert haben), die die Arbeit proprietärer Treiber beeinträchtigen könnte, ist nicht implementiert (nur das proprietäre Modul-Flag wird geerbt, nicht jedoch die GPL-Bindungen).
    • Hinzugefügt von kcompactd-Engine-Unterstützung für Vorpacken von Speicherseiten im Hintergrund, um die Anzahl der großen Speicherseiten zu erhöhen, die dem Kernel zur Verfügung stehen. Nach vorläufigen Schätzungen kann die Hintergrundverpackung bei minimalem Overhead die Verzögerungen bei der Zuweisung großer Speicherseiten (Huge-Page) um das 70- bis 80-fache im Vergleich zum zuvor verwendeten Verpackungsmechanismus reduzieren, der bei Bedarf gestartet wird (On-Demand). ). Um die Grenzen der externen Fragmentierung festzulegen, die kcompactd bereitstellt, wurde sysctl vm.compaction_proactiveness hinzugefügt.
    • Hinzugefügt von Unterstützung für die Kernel-Image-Komprimierung mithilfe eines Algorithmus zstandard (zstd).
    • Für x86-Systeme wurde die Unterstützung von Prozessoranweisungen implementiert FSGSBASE, mit dem Sie den Inhalt der FS/GS-Register aus dem Benutzerbereich lesen und ändern können. Im Kernel wird FSGSBASE verwendet, um Kontextwechselvorgänge zu beschleunigen, indem unnötige MSR-Schreibvorgänge für GSBASE eliminiert werden, und im Benutzerbereich werden unnötige Systemaufrufe zum Ändern von FS/GS vermieden.
    • Добавлен Mit dem Parameter „allow_writes“ können Sie Änderungen an den MSR-Registern des Prozessors aus dem Benutzerbereich verbieten und den Zugriff auf den Inhalt dieser Register auf Lesevorgänge beschränken, da eine Änderung des MSR zu Problemen führen kann. Standardmäßig ist das Schreiben noch nicht deaktiviert und Änderungen am MSR werden im Protokoll widergespiegelt. In Zukunft ist jedoch geplant, den Standardzugriff auf den schreibgeschützten Modus umzustellen.
    • Zur asynchronen I/O-Schnittstelle io_uring Vollständige Unterstützung für asynchrone gepufferte Lesevorgänge hinzugefügt, die keine Kernel-Threads erfordern. Aufnahmeunterstützung wird in einer zukünftigen Version erwartet.
    • In der E/A-Scheduler-Frist umgesetzt Kapazitätsorientierte Planung, erlauben Treffen Sie richtige Entscheidungen bei asymmetrischen Systemen wie ARM-basierten Systemen DynamIQ und big.LITTLE, die leistungsstarke und weniger effiziente energieeffiziente CPU-Kerne in einem Chip vereinen. Mit dem neuen Modus können Sie insbesondere Planungskonflikte vermeiden, wenn ein langsamer CPU-Kern nicht über die richtigen Ressourcen verfügt, um eine Aufgabe rechtzeitig abzuschließen.
    • Das Energieverbrauchsmodell im Kernel (Energy Model Framework) ist jetzt verfügbar описывает Dabei geht es nicht nur um das Stromverbrauchsverhalten der CPU, sondern auch um Peripheriegeräte.
    • Der Systemaufruf close_range() wurde implementiert, um einem Prozess das gleichzeitige Schließen einer ganzen Reihe geöffneter Dateideskriptoren zu ermöglichen.
    • Von der Implementierung der Textkonsole und des fbcon-Treibers Code entfernt, die die Möglichkeit bietet, Text programmgesteuert um mehr als die Menge des VGA-Textmodus-Videospeichers zurückzuscrollen (CONFIG_VGACON_SOFT_SCROLLBACK).
    • Neu gestaltet Algorithmus zum Zuweisen von Prioritäten zu Threads innerhalb des Kernels. Die neue Option sorgt für eine bessere Konsistenz über alle Kernel-Subsysteme hinweg bei der Zuweisung von Prioritäten an Echtzeitaufgaben.
    • Sysctl hinzugefügt sched_uclamp_util_min_rt_default um die CPU-Boost-Einstellungen für Echtzeitaufgaben zu steuern (Sie können beispielsweise das Verhalten von Echtzeitaufgaben im laufenden Betrieb ändern, um nach dem Wechsel auf Batteriebetrieb oder auf mobilen Systemen Strom zu sparen).
    • Es wurden Vorbereitungen getroffen, um die Unterstützung der Transparent Huge Pages-Technologie im Seitencache zu implementieren.
    • Die Fanotify-Engine implementiert die neuen Flags FAN_REPORT_NAME und FAN_REPORT_DIR_FID, um den übergeordneten Namen und eindeutige FID-Informationen zu melden, wenn Erstellungs-, Lösch- oder Verschiebungsereignisse für Verzeichniselemente und Nicht-Verzeichnisobjekte auftreten.
    • Für Gruppen implementiert ein neuer Slab-Speicher-Controller, der sich dadurch auszeichnet, dass er die Slab-Abrechnung von der Speicherseitenebene auf die Kernel-Objektebene verlagert, wodurch es möglich wird, Slab-Seiten in verschiedenen Kontrollgruppen zu teilen, anstatt jeder Kontrollgruppe separate Slab-Caches zuzuweisen. Der vorgeschlagene Ansatz ermöglicht es, die Effizienz der Slab-Nutzung zu steigern, die Größe des für Slab verwendeten Speichers um 30–45 % zu reduzieren, den Gesamtspeicherverbrauch des Kernels erheblich zu reduzieren und die Speicherfragmentierung zu reduzieren.
    • Im Sound-Subsystem ALSA и USB-Stack, gemäß kürzlich verabschiedet Empfehlungen zur Verwendung inklusiver Terminologie im Linux-Kernel; politisch inkorrekte Begriffe wurden bereinigt. Der Code wurde von den Wörtern „Slave“, „Master“, „Blacklist“ und „Whitelist“ befreit.
  • Virtualisierung und Sicherheit
    • Beim Erstellen des Kernels mit dem Clang-Compiler erschienen die Möglichkeit, die automatische Initialisierung aller auf dem Stapel gespeicherten Variablen auf Null zu konfigurieren (CONFIG_INIT_STACK_ALL_ZERO) (geben Sie beim Erstellen „-ftrivial-auto-var-init=zero“ an).
    • Wenn im Seccomp-Subsystem der Prozesssteuerungsmodus im Benutzerbereich verwendet wird, hinzugefügt Gelegenheit Ersetzen von Dateideskriptoren im überwachten Prozess, um Systemaufrufe vollständig zu emulieren, die zur Erstellung von Dateideskriptoren führen. Die Funktionalität ist in isolierten Containersystemen und Sandbox-Implementierungen für Chrome gefragt.
    • Für die xtensa- und csky-Architekturen wurde Unterstützung für die Begrenzung von Systemaufrufen mithilfe des seccomp-Subsystems hinzugefügt. Für xtensa ist zusätzlich die Unterstützung des Audit-Mechanismus implementiert.
    • Добавлен Neues Funktionsflag CAP_CHECKPOINT_RESTORE, mit dem Sie Zugriff auf Funktionen im Zusammenhang mit dem Einfrieren und Wiederherstellen des Status von Prozessen gewähren können, ohne zusätzliche Berechtigungen zu übertragen.
    • GCC 11 bietet alle Funktionen, die Sie benötigen
      Debugging-Tool KCSAN (Kernel Concurrency Sanitizer), das zur dynamischen Erkennung von Race Conditions im Kernel entwickelt wurde. Somit kann KCSAN jetzt mit in GCC erstellten Kerneln verwendet werden.

    • Für AMD Zen und neuere CPU-Modelle hinzugefügt Unterstützung der P2PDMA-Technologie, die Ihnen die Verwendung von DMA für die direkte Datenübertragung zwischen dem Speicher zweier an den PCI-Bus angeschlossener Geräte ermöglicht.
    • dm-crypt wurde ein Modus hinzugefügt, der es Ihnen ermöglicht, die Latenz zu reduzieren, indem Sie die kryptografische Datenverarbeitung ohne Verwendung von Arbeitswarteschlangen durchführen. Dieser Modus ist auch für den korrekten Betrieb mit erforderlich zoniert Blockgeräte (Geräte mit Bereichen, die nacheinander beschrieben werden müssen, wodurch die gesamte Blockgruppe aktualisiert wird). Es wurde daran gearbeitet, den Durchsatz zu erhöhen und die Latenz in dm-crypt zu reduzieren.
    • Code zur Unterstützung von 32-Bit-Gästen, die im Paravirtualisierungsmodus ausgeführt werden und den Xen-Hypervisor ausführen, wurde entfernt. Benutzer solcher Systeme sollten auf die Verwendung von 64-Bit-Kerneln in Gastumgebungen umsteigen oder vollständige (HVM) oder kombinierte (PVH) Virtualisierungsmodi anstelle der Paravirtualisierung (PV) verwenden, um Umgebungen auszuführen.
  • Festplattensubsystem, E/A und Dateisysteme
    • Auf dem Btrfs-Dateisystem umgesetzt eine „Rescue“-Mount-Option, die den Zugriff auf alle anderen Wiederherstellungsoptionen vereinheitlicht. Die Unterstützung für die Optionen „alloc_start“ und „subvolrootid“ wurde entfernt und die Option „inode_cache“ ist veraltet. Es wurde eine Leistungsoptimierung durchgeführt, die insbesondere die Ausführung von fsync()-Operationen deutlich beschleunigt. Hinzugefügt von die Möglichkeit, andere Prüfsummentypen als CRC32c zu verwenden.
    • Hinzugefügt von die Möglichkeit, Inline-Verschlüsselung (Inline Encryption) in ext4- und F2FS-Dateisystemen zu verwenden, zu deren Aktivierung die Mount-Option „inlinecrypt“ bereitgestellt wird. Im Inline-Verschlüsselungsmodus können Sie die im Laufwerkscontroller integrierten Verschlüsselungsmechanismen nutzen, die Ein-/Ausgaben transparent verschlüsseln und entschlüsseln.
    • In XFS gesichert Inode-Reset (Flush) in einem vollständig asynchronen Modus, der keine Prozesse blockiert, wenn eine Speicherbereinigungsoperation durchgeführt wird. Es wurde ein seit langem bestehendes Kontingentproblem behoben, das dazu führte, dass Soft-Limit- und Inode-Limit-Warnungen falsch verfolgt wurden. Einheitliche Implementierung der DAX-Unterstützung für ext4 und xfs.
    • In Ext4 umgesetzt Blockzuordnungs-Bitmaps vorab laden. In Kombination mit der Einschränkung des Scannens nicht initialisierter Gruppen reduzierte die Optimierung die Zeit, die zum Mounten sehr großer Partitionen erforderlich war.
    • In F2FS hinzugefügt ioctl F2FS_IOC_SEC_TRIM_FILE, mit dem Sie die TRIM/Discard-Befehle verwenden können, um bestimmte Daten in einer Datei physisch zurückzusetzen, um beispielsweise Zugriffsschlüssel zu löschen, ohne Restdaten auf dem Laufwerk zu hinterlassen.
      Auch in F2FS hinzugefügt Neuer Garbage-Collection-Modus GC_URGENT_LOW, der aggressiver arbeitet, indem er einige Überprüfungen auf den Ruhezustand vor dem Starten des Garbage Collectors eliminiert.

    • In bcache wurde die Bucket_size für Extents von 16 auf 32 Bit erhöht, um die Aktivierung von Zonen-Geräte-Caches vorzubereiten.
    • Dem SCSI-Subsystem wurde die Möglichkeit hinzugefügt, Inline-Verschlüsselung basierend auf der integrierten Hardware-Verschlüsselung zu verwenden, die von UFS-Controllern bereitgestellt wird (Universeller Flash-Speicher).
    • Ein neuer Kernel-Befehlszeilenparameter „debugfs“ wurde hinzugefügt, mit dem Sie die Verfügbarkeit des gleichnamigen Pseudo-FS steuern können.
    • Der NFSv4.2-Client bietet Unterstützung für erweiterte Dateiattribute (xattr).
    • Im DM-Staub hinzugefügt Schnittstelle zur sofortigen Anzeige einer Liste aller identifizierten fehlerhaften Blöcke auf der Festplatte („dmsetup message dust1 0 listbadblocks“).
    • Für md/raid5 wurde der Parameter /sys/block/md1/md/stripe_size hinzugefügt, um die STRIPE-Blockgröße zu konfigurieren.
    • Für NVMe-Speichergeräte hinzugefügt Unterstützung für Laufwerks-Zoning-Befehle (ZNS, NVM Express Zoned Namespace), mit denen Sie den Speicherplatz in Zonen unterteilen können, die Blockgruppen bilden, um eine vollständigere Kontrolle über die Platzierung von Daten auf dem Laufwerk zu erhalten.
  • Netzwerk-Subsystem
    • Im Netzfilter hinzugefügt die Möglichkeit, Pakete in der Phase vor der Routing-Prüfung abzulehnen (der REJECT-Ausdruck kann jetzt nicht nur in den INPUT-, FORWARD- und OUTPUT-Ketten, sondern auch in der PREROUTING-Phase für ICMP und TCP verwendet werden).
    • In nftables hinzugefügt die Möglichkeit, Ereignisse im Zusammenhang mit Konfigurationsänderungen zu überwachen.
    • In nftables in der Netlink-API hinzugefügt Unterstützung für anonyme Ketten, deren Name dynamisch vom Kernel zugewiesen wird. Wenn Sie eine mit einer anonymen Kette verknüpfte Regel löschen, wird die Kette selbst automatisch gelöscht.
    • BPF bietet Unterstützung für Iteratoren zum Durchlaufen, Filtern und Ändern von Elementen assoziativer Arrays (Maps), ohne Daten in den Benutzerbereich zu kopieren. Iteratoren können für TCP- und UDP-Sockets verwendet werden, sodass BPF-Programme Listen offener Sockets durchlaufen und daraus die benötigten Informationen extrahieren können.
    • Ein neuer BPF-Programmtyp BPF_PROG_TYPE_SK_LOOKUP hinzugefügt, der gestartet wird, wenn der Kernel nach einem geeigneten Listening-Socket für eine eingehende Verbindung sucht. Mit einem BPF-Programm wie diesem können Sie Handler erstellen, die Entscheidungen darüber treffen, welchem ​​Socket eine Verbindung zugeordnet werden soll, ohne durch den Systemaufruf bind() eingeschränkt zu werden. Sie können beispielsweise einen einzelnen Socket einem Bereich von Adressen oder Ports zuordnen. Darüber hinaus wurde bpf_setsockopt() Unterstützung für das Flag SO_KEEPALIVE hinzugefügt und die Möglichkeit zur Installation von BPF_CGROUP_INET_SOCK_RELEASE-Handlern implementiert, die aufgerufen werden, wenn der Socket freigegeben wird.
    • Protokollunterstützung implementiert PRP (Parallel Redundancy Protocol), das bei Ausfall von Netzwerkkomponenten eine für Anwendungen transparente Ethernet-basierte Umschaltung auf einen Backup-Kanal ermöglicht.
    • Stapeln Sie mac80211 hinzugefügt Unterstützung für die vierstufige WPA/WPA2-PSK-Kanalaushandlung im Access Point-Modus.
    • Es wurde die Möglichkeit hinzugefügt, den qdisc-Scheduler (Queuing Discipline) so umzustellen, dass er standardmäßig den Netzwerkwarteschlangenverwaltungsalgorithmus FQ-PIE (Flow Queue PIE) verwendet, um die negativen Auswirkungen der Zwischenpufferung von Paketen auf Edge-Netzwerkgeräte (Bufferbloat) in Netzwerken mit zu reduzieren Kabelmodems.
    • MPTCP (MultiPath TCP), Erweiterungen des TCP-Protokolls zur Organisation des Betriebs einer TCP-Verbindung mit der gleichzeitigen Zustellung von Paketen auf mehreren Routen über verschiedene Netzwerkschnittstellen, die unterschiedlichen IP-Adressen zugeordnet sind, wurden um neue Funktionen erweitert. Unterstützung für Syn-Cookie, DATA_FIN, automatische Pufferoptimierung, Socket-Diagnose und die Flags REUSEADDR, REUSEPORT und V6ONLY in Setsockopt hinzugefügt.
    • Für virtuelle Routing-Tabellen VRF (Virtual Routing and Forwarding), die es ermöglichen, den Betrieb mehrerer Routing-Domänen auf einem System zu organisieren, wurde der „strenge“ Modus implementiert. In diesem Modus kann eine virtuelle Tabelle nur einer Routing-Tabelle zugeordnet werden, die nicht in anderen virtuellen Tabellen verwendet wird.
    • Der WLAN-Treiber ist ath11k hinzugefügt unterstützt 6GHz Frequenz und Spektralscanning.
  • Ausrüstung
    • Code zur Unterstützung der UniCore-Architektur entfernt, die am Mikroprozessorzentrum der Universität Peking entwickelt und 2011 in den Linux-Kernel aufgenommen wurde. Diese Architektur wird seit 2014 nicht mehr gepflegt und wird in GCC nicht unterstützt.
    • Unterstützung für die RISC-V-Architektur wurde implementiert kcov (Debugfs-Schnittstelle zur Analyse der Kernel-Codeabdeckung), kmemleak (System zur Erkennung von Speicherlecks), Stapelschutz, Sprungmarken und Tickless-Operationen (Multitasking unabhängig von Zeitsignalen).
    • Für die PowerPC-Architektur wurde die Unterstützung von Spinlock-Warteschlangen implementiert, was die Leistung in Sperrkonfliktsituationen deutlich verbessert hat.
    • Für ARM- und ARM64-Architekturen ist der Prozessorfrequenzregulierungsmechanismus standardmäßig aktiviert Schedutil (cpufreq Governor), der direkt Informationen aus dem Taskplaner verwendet, um eine Entscheidung über die Änderung der Frequenz zu treffen, und sofort auf die cpufreq-Treiber zugreifen kann, um die Frequenz schnell zu ändern und die CPU-Betriebsparameter sofort an die aktuelle Auslastung anzupassen.
    • Der i915 DRM-Treiber für Intel-Grafikkarten bietet Unterstützung für Chips, die auf Mikroarchitektur basieren Rocket Lake und anfängliche Unterstützung für diskrete Karten hinzugefügt Intel Xe DG1.
    • Amdgpu-Treiber fügte anfängliche Unterstützung für AMD-GPUs hinzu Navi 21 (Navy Flunder) und Navi 22 (Sienna-Buntbarsch). Unterstützung für UVD/VCE-Videokodierungs- und -dekodierungsbeschleunigungs-Engines für die Southern Islands GPU (Radeon HD 7000) hinzugefügt.
      Eine Eigenschaft hinzugefügt, um die Anzeige um 90, 180 oder 270 Grad zu drehen.

      Interessanterweise der Treiber für AMD GPU ist der größte Treiber im Kernel – er verfügt über etwa 2.71 Millionen Codezeilen, was etwa 10 % der gesamten Kernelgröße (27.81 Millionen Zeilen) entspricht. Gleichzeitig entfallen 1.79 Millionen Zeilen auf automatisch generierte Header-Dateien mit Daten für GPU-Register, und der C-Code umfasst 366 Zeilen (zum Vergleich: Der Intel i915-Treiber umfasst 209 Zeilen und Nouveau - 149 Zeilen).

    • Im Nouveau-Stil hinzugefügt Unterstützung für die Frame-by-Frame-Integritätsprüfung mit CRC (Zyklische Redundanzprüfungen) in NVIDIA GPU-Anzeige-Engines. Die Implementierung basiert auf der von NVIDIA bereitgestellten Dokumentation.
    • Treiber für LCD-Panels hinzugefügt: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 und Xingbangda XBD599.
    • Das ALSA-Audio-Subsystem unterstützt Intel Silent Stream (Dauerstrommodus für externe HDMI-Geräte, um Verzögerungen beim Starten der Wiedergabe zu vermeiden) und neues Gerät um die Beleuchtung der Mikrofonaktivierungs- und Stummschalttasten zu steuern und außerdem Unterstützung für neue Geräte, einschließlich eines Controllers, hinzuzufügen Longson 7A1000.
    • Unterstützung für ARM-Boards, 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 v2, Renesas RZ/G6H.

Gleichzeitig die Latin American Free Software Foundation gebildet
вариант völlig kostenloser Kernel 5.9 - Linux-libre 5.9-gnu, frei von Firmware- und Treiberelementen, die unfreie Komponenten oder Codeabschnitte enthalten, deren Umfang vom Hersteller begrenzt ist. Die neue Version deaktiviert das Laden von Blobs in Treibern für WiFi rtw8821c und SoC MediaTek mt8183. Aktualisierter Blob-Reinigungscode in den Touchscreen-Treibern und -Subsystemen Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) und x86.

Source: opennet.ru

Kommentar hinzufügen