Release des Linux-Kernels 5.3

Nach zwei Monaten der Entwicklung präsentierte Linus Torvalds vor die Kernel-Version Linux 5.3. Zu den auffälligsten Änderungen gehören die Unterstützung für AMD Navi GPUs, Zhaoxi Prozessoren und die Intel Speed Select Energieverwaltungstechnologie, die Möglichkeit, umwait-Befehle zum Warten ohne zyklische Abfragen zu verwenden,
den interaktiven Modus ‚utilization clamping‘ für asymmetrische CPUs, den Systemaufruf pidfd_open, die Möglichkeit, IPv4-Adressen aus dem Subnetz 0.0.0.0/8 zu verwenden, die Hardwarebeschleunigung von nftables, die Unterstützung von HDR im DRM-Subsystem und die Integration des ACRN Hypervisors.

Im der Ankündigung Die neue Version von Linus erinnerte alle Entwickler an die wichtigste Regel bei der Entwicklung des Kernels – die Bewahrung der unveränderten Funktionalität für die Komponenten im Benutzerspeicher. Änderungen im Kernel dürfen bestehende Anwendungen in keiner Weise beeinträchtigen und dürfen keine Regressionen auf Benutzerebene verursachen. Ein Verstoß gegen diese Funktionalität kann nicht nur durch ABI-Änderungen, die Entfernung veralteten Codes oder das Auftreten von Fehlern auftreten, sondern auch durch indirekte Auswirkungen korrekt funktionierender nützlicher Verbesserungen. Als anschauliches Beispiel wurde verworfen nützliche Optimierung im Ext4-Code, die die Anzahl der Zugriffe auf das Speichergerät durch das Ausschalten des vorzeitigen Lesens der Inode-Tabelle bei kleinen I/O-Anfragen reduziert.

Die Optimierung führte dazu, dass aufgrund der reduzierten Festplattenaktivität die Entropie für den Zufallszahlengenerator getrandom() langsamer akkumuliert wurde und in einigen Konfigurationen unter bestimmten Umständen hängende Prozesse beim Booten auftraten, bis der Entropie-Pool gefüllt war. Da die Optimierung tatsächlich nützlich ist, entstand unter den Entwicklern eine Diskussion, in der vorgeschlagen wurde, das Problem durch die Deaktivierung des blockierenden Modus des getrandom()-Aufrufs standardmäßig zu lösen und eine optionale Flagge hinzuzufügen, um auf Entropie zu warten, ein solches Änderung würde jedoch die Qualität der Zufallszahlen zu Beginn des Bootens beeinflussen.

In die neue Version wurden 15794 Korrekturen von 1974 Entwicklern aufgenommen,
die Patchgröße beträgt 92 MB (die Änderungen betrafen 13986 Dateien, 258419 Codezeilen wurden hinzugefügt,
599137 Zeilen wurden entfernt). Ungefähr 39 % aller in 5.3
Änderungen sind mit Gerätetreibern verbunden, etwa 12 % der Änderungen betreffen
Codeaktualisierungen spezifisch für Hardwarearchitekturen, 11 %
Subsystemen des Kernels. 12,4 % aller Änderungen wurden von Intel vorbereitet, 6,3 % von Red Hat, 5,4 % von Google, 4,0 % von AMD, 3,1 % von SUSE, 3 % von IBM, 2,7 % von Huawei, 2,7 % von Linaro, 2,2 % von ARM, 1,6 % von Oracle.
Subsystemen des Kernels.

Haupt- Neuheiten:

  • Speicher und Systemdienste
    • Die Weiterentwicklung der Funktionalität ‚pidfd‘ wurde fortgesetzt, welche hilft, Situationen mit der Wiederverwendung von PID zu verarbeiten (pidfd ist mit einem bestimmten Prozess verbunden und ändert sich nicht, während PID nach dem Abschluss des aktuellen Prozesses, der mit diesem PID assoziiert ist, einem anderen Prozess zugewiesen werden kann). Zuvor wurde bereits in den Kernel
      der Systemaufruf pidfd_send_signal() und das Flag CLONE_PIDFD im Aufruf clone() hinzugefügt, was die Verwendung von pidfd in idfd_send_signal() ermöglicht. Bei der Verwendung des Aufrufs clone() mit dem Flag CLONE_PIDFD konnten Probleme mit Dienstmanagern oder dem System zum zwangsweisen Beenden von Prozessen bei Speichermangel auf der Android-Plattform auftreten. In diesem Fall wird der Aufruf fork() oder clone() ohne CLONE_PIDFD verwendet.

      Im Kernel 5.3 wurde der Systemaufruf pidfd_open(), der es ermöglicht, ein überprüfbares pidfd für einen beliebigen bestehenden Prozess zu erhalten, der nicht über den Aufruf clone() mit dem Flag CLONE_PIDFD erstellt wurde. Zudem wurde die Unterstützung für das Polling von pidfd mittels poll() und epoll() hinzugefügt, was es Prozessmanagern ermöglicht, das Ende beliebiger Prozesse zu überwachen, ohne sich um einen Wettlaufzustand bei der Zuweisung von PID an einen neuen Prozess sorgen zu müssen. Der Mechanismus zur Benachrichtigung über das Ende eines Prozesses, der mit pidfd verbunden ist, ähnelt der Benachrichtigung über das Ende seines eigenen Kindprozesses;

    • Im Task-Scheduler wurde die Unterstützung für den Mechanismus der Auslastungsdämpfung hinzugefügt (Utilization clamping), der es ermöglicht, die minimalen oder maximalen Frequenzbereiche einzuhalten, abhängig von den aktiven CPU-Aufgaben. Der vorgestellte Mechanismus beschleunigt Aufgaben, die sich direkt auf die Benutzerinteraktion auswirken, indem diese Aufgaben mindestens im unteren Bereich der ‚angeforderten‘ Frequenz gestartet werden. Niedrigpriorisierte Aufgaben, die sich nicht auf die Arbeit des Benutzers auswirken, werden mit der oberen Grenze der ‚erlaubten‘ Frequenz gestartet. Die Grenzen werden über die Attribute sched_uclamp_util_min und sched_uclamp_util_max im Systemaufruf sched_setattr() festgelegt.
    • Die Unterstützung der Energieverbrauchssteuerungstechnologie Intel Speed Select, die auf einigen Servern mit Intel Xeon-Prozessoren verfügbar ist. Die angegebene Technologie ermöglicht es, die Leistungs- und Durchsatzparameter von Kernen für verschiedene CPU-Kerne einzustellen, wodurch die Leistung für Aufgaben, die auf bestimmten Kernen ausgeführt werden, priorisiert werden kann, während die Leistung auf anderen Kernen geopfert wird;
    • Prozesse im Benutzerspeicher bereitgestellt die Möglichkeit, kurze Zeit ohne Nutzung von Schleifen mit der Umwait-Anweisung zu warten. Diese Anweisung, zusammen mit den Anweisungen Umonitor und Tpause, wird in den kommenden Intel «Tremont»-Prozessoren angeboten und ermöglicht das Implementieren energieeffizienter Verzögerungen, die die Leistung anderer Threads unter Hyper-Threading nicht beeinträchtigen;
    • Für die RISC-V-Architektur wurde die Unterstützung von großen Seiten im Speicher (Huge Pages) hinzugefügt;
    • Im Kprobes-Trace-Mechanismus wurde die Möglichkeit hinzugefügt, Kernelzeiger im Benutzerspeicher zu dereferenzieren, was beispielsweise zur Bewertung des Inhalts von Strukturen verwendet werden kann, die an Systemaufrufe übergeben werden. Zudem wurde die Möglichkeit zur Überprüfung beim Booten hinzugefügt.
    • In die Konfigurationsdatei wurde die Option PREEMPT_RT für den Echtzeitbetrieb aufgenommen. Der Code zur Unterstützung des Echtzeitbetriebs wurde jedoch noch nicht zum Kernel hinzugefügt, doch das Vorhandensein der Option ist ein gutes Zeichen, dass die jahrelange Odyssee von der Integration Realtime-Preempt-Patches dem Ende entgegengeht;
    • Ein Systemaufruf clone3() wurde hinzugefügt, der eine erweiterbare Variante der clone()-Schnittstelle implementiert und die Angabe einer größeren Anzahl von Flags zulässt;
    • Ein Handler bpf_send_signal() wurde hinzugefügt, der BPF-Programmen das Senden von Signalen an beliebige Prozesse ermöglicht;
    • Für Perf-Ereignisse im KVM-Hypervisor-Umfeld wurde ein neuer Filtermechanismus für Ereignisse hinzugefügt, der es dem Administrator ermöglicht, die Arten von Ereignissen, die für das Monitoring auf der Gastsystemseite zulässig oder unzulässig sind, zu definieren;
    • Im Verifizierungsmechanismus für eBPF-Anwendungen wurde die Möglichkeit zur Verarbeitung von Programmen mit Schleifen hinzugefügt, sofern die Ausführung der Schleife begrenzt ist und nicht zu einer Überschreitung des Limits für die maximale Anzahl an Anweisungen führen kann;
  • Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
    • Für das XFS-Dateisystem wurde die Möglichkeit der mehrthreadigen Durchlauf von Inodes implementiert (zum Beispiel bei der Quota-Prüfung). Es wurden neue ioctls BULKSTAT und INUMBERS hinzugefügt, die Zugang zu Funktionen bieten, die in der fünften Ausgabe des FS-Formats eingeführt wurden, wie etwa das Geburtsdatum des Inodes und die Möglichkeit, BULKSTAT- und INUMBERS-Parameter für jede AG (Allocation Groups) zu setzen;
    • In Ext4 unterstützung wurde hinzugefügt für Leerräume in Verzeichnissen (ungebundene Blöcke).
      Es wurde eine Verarbeitung sichergestellt des Flags „i“ (immutable) für geöffnete Dateien (Schreibsperre in Fällen, in denen das Flag gesetzt wurde, als die Datei bereits geöffnet war);
    • In Btrfs wurde eine schnelle Implementierung von crc32c für alle Architekturen gewährleistet;
    • In CIFS wurde das Erkennungsmerkmal für experimentelle Entwicklung im Code zur Unterstützung von smbdirect entfernt. In SMB3 wurde die Möglichkeit hinzugefügt, Kryptalgorithmen im GCM-Modus zu verwenden. Eine neue Montageoption wurde hinzugefügt, um die Parameter des Modus aus ACE (Access Control Entry)-Einträgen zu extrahieren. Die Leistung des Aufrufs open() wurde optimiert;
    • In F2FS wurde eine Option zur Begrenzung des Garbage Collectors im Modus checkpoint=disable hinzugefügt. Ein ioctl zum Entfernen von Blockbereichen aus F2FS wurde hinzugefügt, was ermöglicht, die Partitionsgröße dynamisch anzupassen. Es wurde die Möglichkeit hinzugefügt, in F2FS eine Auslagerungsdatei mit direktem I/O zu platzieren. Für alle Benutzer wurde die Unterstützung für das Fixieren von Dateien und das Zuweisen von Blöcken für solche Dateien hinzugefügt;
    • Im Interface für asynchronen I/O io_uring wurde die Unterstützung für asynchrone Operationen sendmsg() und recvmsg() hinzugefügt;
    • In das UBIFS-Dateisystem wurde die Unterstützung für Kompression mit dem Algorithmus zstd und die Möglichkeit zur Verifizierung signierter FS-Abbilder integriert;
    • Im Ceph-FS wurde die Unterstützung für SELinux-Sicherheitslabels für Dateien hinzugefügt;
    • Für NFSv4 wurde eine neue Montageoption „nconnect=“ implementiert, die die Anzahl der Verbindungen zum Server bestimmt. Der Datenverkehr zwischen diesen Verbindungen wird mithilfe von Lastverteilung verteilt. Darüber hinaus wird im NFSv4-Server jetzt ein Verzeichnis /proc/fs/nfsd/clients mit Informationen über aktuelle Clients erstellt, einschließlich Informationen über die von ihnen geöffneten Dateien;
  • Virtualisierung und Sicherheit
    • Im Kernel wurde ein Hypervisor für eingebettete Geräte integriert ACRN, der mit Blick auf die Bereitschaft zur Ausführung von Echtzeitanforderungen und die Eignung für kritische Systeme entwickelt wurde. ACRN gewährleistet minimale Overheadkosten, garantiert niedrige Latenzen und angemessene Reaktionszeiten beim Umgang mit Hardware. Es unterstützt die Virtualisierung von CPU-Ressourcen, Eingabe/Ausgabe, Netzwerksubsystemen, Grafik- und Audiooperationen. ACRN kann verwendet werden, um mehrere isolierte virtuelle Maschinen in elektronischen Steuergeräten, Armaturenbrettern, Fahrzeuginformationssystemen, Verbraucher-IoT-Geräten und anderen eingebetteten Technologien zu betreiben;
    • In User-Mode Linux wurde hinzugefügt der „Zeitreise“-Modus, der es ermöglicht, die Zeit in der virtuellen UML-Umgebung zu verlangsamen oder zu beschleunigen, um das Debuggen von zeitabhängigem Code zu erleichtern. Außerdem wurde die Option hinzugefügt
      time-travel-start, mit der die Systemuhren von einem bestimmten Zeitpunkt im Epoch-Format gestartet werden können;
    • Es wurden neue Kernel-Optionen „init_on_alloc“ und „init_on_free“ hinzugefügt, bei deren Angabe die Nullung der zugewiesenen und freigegebenen Speicherbereiche aktiviert wird (Auffüllung mit Nullen bei malloc und free), was die Sicherheit durch zusätzliche Initialisierungskosten erhöht;
    • Ein neuer Treiber wurde hinzugefügt virtio-iommu mit der Implementierung eines para-virtualisierten Geräts, das es ermöglicht, IOMMU-Anfragen wie ATTACH, DETACH, MAP und UNMAP über den virtio-Transport ohne Emulation von Speichertabellen zu versenden;
    • Ein neuer Treiber wurde hinzugefügt virtio-pmem, das den Zugriff auf Speichermedien ermöglicht, die im physischen Adressraum abgebildet sind, wie z. B. NVDIMM;
    • Die Möglichkeit der Anbringung kryptografischer Schlüssel an benutzerdefinierte oder Netzwerknamensräume wurde realisiert (die Schlüssel sind außerhalb des gewählten Namensraums nicht verfügbar), sowie der Schutz der Schlüssel durch ACL;
    • Im Krypto-Subsystem hinzugefügt unterstützt einen sehr schnellen Algorithmus für nicht-kryptografisches Hashing xxhash, dessen Geschwindigkeit auf der Speicherleistung basiert;
  • Netzwerksubsystem
    • Die Verarbeitung von IPv4-Adressen im Bereich 0.0.0.0/8 wurde ermöglicht, die zuvor nicht beschrieben wurden. Diese Subnetz wird ermöglichen verbreitet weitere 16 Millionen IPv4-Adressen;
    • In Netfilter für nftables hinzugefügt wurde die Unterstützung von Hardware-beschleunigten Paketfilterungsmechanismen durch zusätzliche in die Treiber implementierte Funktionen hinzugefügt Flow Block API. Auf Netzwerkadapter können vollständige Regeltabellen mit allen Ketten ausgegeben werden. Die Aktivierung erfolgt durch Bindung des NFT_TABLE_F_HW-Flags an die Tabelle. Es werden einfache Metadaten der Protokolle der Schichten 3 und 4 unterstützt, Aktionen annehmen/ablehnen, Zuordnungen nach IP und Netzwerkports des Senders/Empfängers sowie dem Protokolltyp;
    • Hinzugefügt eingebaute Unterstützung für die Verfolgung von Verbindungen für Netzwerkbrücken, die keine emulierende Schicht br_netfilter benötigen;
    • In nf_tables hinzugefügt Unterstützung für das SYNPROXY-Modul, das ähnliche Funktionen wie iptables bereitstellt, sowie die Möglichkeit, in Regeln nach bestimmten Optionen im IPv4-Header zu überprüfen;
    • Es wurde die Möglichkeit hinzugefügt, BPF-Programme an die Systemaufrufe setsockopt() und getsockopt() anzuhängen, was beispielsweise das Anhängen eigener Zugriffsbehandler an diese Aufrufe ermöglicht. Darüber hinaus wurde ein neuer Hook hinzugefügt, mit dem der Aufruf des BPF-Programms einmal pro RTT-Interval (Round-Trip-Time, Ping-Zeit) organisiert werden kann;
    • Für IPv4 und IPv6 wurde hinzugefügt ein neuer Mechanismus zur Speicherung von Next-Hop-Routing-Daten, der darauf abzielt, die Skalierbarkeit von Routing-Tabellen zu erhöhen. Durchgeführte Tests haben gezeigt, dass bei Verwendung des neuen Systems insgesamt 743.000 Routen in den Kernel in nur 4,3 Sekunden geladen wurden;
    • Für Bluetooth wurde die Funktionalität, die zur Unterstützung von LE-Ping erforderlich ist;
  • Ausrüstung
    • Hinzugefügt Unterstützung für x86-kompatible Prozessoren der Firma Zhaoxin, entwickelt aus einem gemeinsamen Projekt von VIA Technologies und der Stadtregierung von Shanghai. Die CPU-Familie ZX basiert auf der x86-64 Isaiah-Architektur, die die Technologien weiterentwickelt, VIA Centaur;
    • In das DRM (Direct Rendering Manager)-Subsystem sowie in die Grafiktreiber amdgpu und i915 wurde Unterstützung für das Parsen, Verarbeiten und Senden von HDR-Metadaten (High Dynamic Range) über den HDMI-Port hinzugefügt, die die Verwendung von HDR-Panels und Bildschirmen ermöglichen, die zusätzliche Helligkeitsbereiche anzeigen können;
    • Im amdgpu-Treiber wurde die erste Unterstützung für die AMD NAVI-GPU (RX5700) hinzugefügt, die einen Basistreiber, Code für die Interaktion mit Bildschirmen (DCN2), Unterstützung für GFX und Berechnungen (GFX10) umfasst,
      SDMA 5 (System DMA0), Energieverwaltungsfunktionen und Multimedia-Codierer/decoder (VCN2). Im amdgpu wurde auch die Unterstützung für Karten auf Basis der GPU Vega12 und Vega20 verbessert, für die zusätzliche Funktionen zur Speicher- und Energieverwaltung hinzugefügt wurden;
    • Der amdkfd-Treiber (für diskrete GPUs wie Fiji, Tonga, Polaris) unterstützt jetzt GPUs der VegaM-Baureihe.
    • Im DRM-Treiber für Intel-Grafikkarten mit Icelake-Chips. wurde implementiert Ein neuer Multisegment-Gamma-Korrekturmodus wurde hinzugefügt. Die Möglichkeit, über DisplayPort im YCbCr4:2:0-Format auszugeben, wurde ergänzt. Neue Firmware wurde hinzugefügt. GuC für SKL, BXT, KBL, GLK und ICL. Es wurde die Möglichkeit implementiert, die Stromversorgung des Bildschirms im asynchronen Modus abzuschalten. Hinzugefügt Unterstützung für Speicherung und Wiederherstellung des Rendering-Kontexts für Ironlake-Chips (Gen5) und Gen4 (Broadwater – Cantiga), was es ermöglicht, den Zustand der GPU aus dem Benutzerspeicher beim Wechsel zwischen verschiedenen Batch-Operationen wiederherzustellen.
    • Der Nouveau-Treiber ermöglicht die Erkennung des NVIDIA Turing TU116-Chipsatzes.
    • Die Funktionen des DRM/KMS-Treibers für ARM Komeda (Mali D71) Grafikhardware wurden erweitert, einschließlich Unterstützung für Skalierung, Schichtenaufteilung/-fusionierung, Rotation, verzögerte Aufnahme, AFBC, SMMU und Farbcode-Formate Y0L2, P010, YUV420_8/10BIT.
    • Der MSM-Treiber unterstützt jetzt die A540 GPU Adreno-Serie, die in Qualcomm-Prozessoren verwendet wird, sowie den DSI-Controller MSM8998 für Snapdragon 835.
    • Treiber für LCD-Panels wie Samsung S6E63M0, Armadeus ST0700, EDT ETM0430G0DH6, OSD101T2045-53TS wurden hinzugefügt.
      Zusätzlich wurden Evervision VGG804821, FriendlyELEC HD702E, KOE tx14d24vm1bpa, TFC S9700RTWV43TR-01B, EDT ET035012DM6 und VXT VL050-8048NT-C01 hinzugefügt.
    • Hinzugefügt Treiber zur Unterstützung von Video-Dekodierungsbeschleunigungsfunktionen.
      verfügbar im SoC Amlogic Meson.
    • Im v3d-Treiber (für den Broadcom Video Core V, der in Raspberry Pi verwendet wird) wurde jetzt unterstützt eine Verwaltung von Compute-Shaders integriert.
    • Hinzugefügt Der Treiber für SPI-Tastaturen und Touchpads, die in modernen Apple MacBook- und MacBookPro-Modellen eingesetzt werden.
    • Hinzugefügt Zusätzlicher Schutz für ioctl-Aufrufe im Zusammenhang mit dem Floppy-Treiber, der als 'orphaned' markiert wird, was bedeutet, dass sein Test eingestellt wurde. Der Treiber bleibt im Kernel erhalten, aber seine ordnungsgemäße Funktion wird nicht garantiert. Der Treiber wird als veraltet betrachtet, da es schwierig ist, funktionierende Hardware zum Testen zu finden – alle aktuellen externen Speichergeräte verwenden in der Regel USB.
      Der cpufreq-Treiber für Raspberry Pi-Platten ermöglicht eine dynamische Verwaltung der Prozessorfrequenz.
    • Hinzugefügt Unterstützung für neue ARM SoCs Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSPs + MMA) und Amlogic G12B (4x Cortex-A73 + 2x Cortex-A53) sowie Platten:
    • Purism Librem5
      • Aspeed BMC,,
      • Microsoft Olympus BMC,
      • Kontron SMARC,
      • Novtech Meerkat96 (i.MX7),
      • ST Micro Avenger96,
      • ST Micro Avenger96,
      • Google Cheza (Qualcomm SDM845),
      • Qualcomm Dragonboard 845c (Qualcomm SDM845),
      • Hugsun X99 TV Box (Rockchip RK3399),
      • Khadas Edge/Edge-V/Captain (Rockchip RK3399),
      • HiHope RZ/G2M,
      • NXP LS1021A-TSN.

Gleichzeitig Lateinamerikanischer Fonds für freies Software ein vollständig freies Kernels 5.6
Variante vollständig freies Kernel 5.3Linux-libre 5.3-gnu, gereinigt von Elementen von Firmware und Treibern, die nicht-freie Komponenten oder Codeabschnitte enthalten, deren Nutzung durch den Hersteller eingeschränkt ist. Im neuen Release wurde das Laden von Blobs in den Treibern qcom, hdcp drm, allegro-dvt und meson-vdec deaktiviert.
Der Code zur Bereinigung von Blobs in den Treibern und Subsystemen amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, dem Audiotreiber für Skylake sowie in der Dokumentation zum Mikrokode wurde aktualisiert.

Quelle: opennet.ru

60GB SSD 8Gb DDR4