Linux 5.3-Kernel-Release

Nach zwei Monaten Entwicklungszeit hat Linus Torvalds eingeführt Kernel-Release Linux 5.3. Zu den bemerkenswertesten Änderungen gehören: Unterstützung für AMD Navi-GPUs, Zhaoxi-Prozessoren und Intel Speed ​​​​Select-Energieverwaltungstechnologie, die Möglichkeit, Umwait-Anweisungen zum Warten ohne Verwendung von Zyklen zu verwenden,
„Utilization Clamping“-Modus, der die Interaktivität für asymmetrische CPUs erhöht, der Systemaufruf pidfd_open, die Möglichkeit, IPv4-Adressen aus dem 0.0.0.0/8-Subnetz zu verwenden, die Möglichkeit der nftables-Hardwarebeschleunigung, HDR-Unterstützung im DRM-Subsystem, Integration des ACRN Hypervisor.

В Bekanntmachung In der neuen Version erinnerte Linus alle Entwickler an die Hauptregel der Kernel-Entwicklung – die Beibehaltung des gleichen Verhaltens für User-Space-Komponenten. Änderungen am Kernel sollten in keiner Weise bereits laufende Anwendungen beschädigen oder zu Regressionen auf Benutzerebene führen. In diesem Fall kann ein Verhaltensverstoß nicht nur zu einer Änderung des ABI, der Entfernung veralteten Codes oder dem Auftreten von Fehlern führen, sondern auch indirekt zu nützlichen Verbesserungen führen, die ordnungsgemäß funktionieren. Als anschauliches Beispiel gab es verworfen nützlich Optimierung im Ext4-Code, der die Anzahl der Laufwerkszugriffe reduziert, indem das Vorlesen der Inode-Tabelle für kleine E/A-Anfragen deaktiviert wird.

Die Optimierung führte dazu, dass sich aufgrund einer Abnahme der Festplattenaktivität die Entropie für den Zufallszahlengenerator getrandom() langsamer anzusammeln begann und es in manchen Konfigurationen unter Umständen zu Einfrierungen während des Ladens kam, bis der Entropiepool leer war gefüllt. Da die Optimierung wirklich nützlich ist, kam es unter Entwicklern zu einer Diskussion, in der vorgeschlagen wurde, das Problem durch Deaktivieren des Standardblockierungsmodus des getrandom()-Aufrufs und Hinzufügen eines optionalen Flags zum Warten auf Entropie zu beheben. Eine solche Änderung würde sich jedoch auf die Funktion auswirken Qualität der Zufallszahlen in der Anfangsphase des Ladens.

Die neue Version enthält 15794 Fixes von 1974 Entwicklern,
Patchgröße - 92 MB (Änderungen betrafen 13986 Dateien, 258419 Codezeilen wurden hinzugefügt,
599137 Zeilen entfernt). Etwa 39 % aller in 5.3 vorgestellten Fälle
Änderungen beziehen sich auf Gerätetreiber, etwa 12 % der Änderungen
Einstellung zur Aktualisierung von Hardware-Architektur-spezifischem Code, 11 %
bezogen auf den Netzwerk-Stack, 3 % auf Dateisysteme und 3 % auf interne
Kernel-Subsysteme.

Haupt- Innovationen:

  • Speicher- und Systemdienste
    • Weiterentwicklung der „pidfd“-Funktionalität, um den Umgang mit PID-Wiederverwendungssituationen zu erleichtern (pidfd ist einem bestimmten Prozess zugeordnet und ändert sich nicht, während eine PID einem anderen Prozess zugeordnet werden kann, nachdem der aktuelle Prozess, der dieser PID zugeordnet ist, beendet wird). Es wurde zuvor dem Kernel hinzugefügt
      den Systemaufruf pidfd_send_signal() und das Flag CLONE_PIDFD im Aufruf clone(), um ein pidfd zur Verwendung in idfd_send_signal() zu erhalten. Die Verwendung von clone() mit dem CLONE_PIDFD-Flag kann zu Problemen mit Dienstmanagern oder dem System zur erzwungenen Beendigung aufgrund von Speichermangel der Android-Plattform führen. In diesem Fall wird zum Starten ein Aufruf von fork() oder clone() ohne CLONE_PIDFD verwendet.

      Kernel 5.3 führte den Systemaufruf ein pidfd_open(), wodurch Sie ein überprüfbares pidfd für einen beliebigen vorhandenen Prozess erhalten können, der nicht durch Aufrufen von clone() mit dem Flag CLONE_PIDFD erstellt wurde. Außerdem wurde Unterstützung für die pidfd-Abfrage mit poll() und epoll() hinzugefügt, die es Prozessmanagern ermöglicht, die Beendigung beliebiger Prozesse zu verfolgen, ohne eine Race Condition befürchten zu müssen, wenn einem neuen Prozess eine PID zugewiesen wird. Der Mechanismus zur Benachrichtigung, wenn ein mit pidfd verknüpfter Prozess beendet wurde, ähnelt der Benachrichtigung, wenn sein untergeordneter Prozess beendet wurde.

    • Dem Aufgabenplaner wurde Unterstützung für den Load-Pinning-Mechanismus hinzugefügt (Auslastung Klemmung), sodass Sie abhängig von den auf der CPU aktiven Aufgaben die minimalen oder maximalen Frequenzbereiche einhalten können. Der vorgestellte Mechanismus beschleunigt Aufgaben, die sich direkt auf die Qualität der Benutzererfahrung auswirken, indem er diese Aufgaben mindestens am unteren Ende der „angeforderten“ Häufigkeit ausführt. Aufgaben mit niedriger Priorität, die die Arbeit des Benutzers nicht beeinträchtigen, werden mit der oberen Grenze der „erlaubten“ Häufigkeit gestartet. Grenzwerte werden über die Attribute sched_uclamp_util_min und sched_uclamp_util_max im Systemaufruf sched_setattr() festgelegt.
    • Unterstützung für Energiemanagementtechnologie hinzugefügt Intel Speed ​​Select, verfügbar auf ausgewählten Servern mit Intel Xeon-Prozessoren. Mit dieser Technologie können Sie Leistungs- und Partitionsdurchsatzeinstellungen für verschiedene CPU-Kerne festlegen, wodurch Sie die Leistung für Aufgaben priorisieren können, die auf bestimmten Kernen ausgeführt werden, wodurch die Leistung anderer Kerne geopfert wird.
    • Prozesse im Benutzerbereich gewährt die Möglichkeit, mit der umwait-Anweisung eine kurze Zeit zu warten, ohne Schleifen zu verwenden. Diese Anweisung wird zusammen mit den umonitor- und tpause-Anweisungen in Intels kommenden „Tremont“-Chips angeboten und ermöglicht die Implementierung von Verzögerungen, die energieeffizient sind und die Leistung anderer Threads bei Verwendung von Hyper Threading nicht beeinträchtigen;
    • Für die RISC-V-Architektur wurde Unterstützung für große Speicherseiten hinzugefügt;
    • Der kprobes-Tracing-Mechanismus hat die Möglichkeit hinzugefügt, Kernel-Zeiger auf den Benutzerraum zu dereferenzieren, was beispielsweise verwendet werden kann, um den Inhalt von Strukturen auszuwerten, die an Systemaufrufe übergeben werden. Außerdem wurde die Möglichkeit hinzugefügt, Prüfungen beim Booten zu installieren.
    • Option PREEMPT_RT zur Konfigurationsdatei für den Echtzeitbetrieb hinzugefügt. Der Code selbst zur Unterstützung des Echtzeitmodus wurde noch nicht zum Kernel hinzugefügt, aber das Erscheinen der Option ist ein gutes Zeichen dafür, dass das langfristige Epic Integration Realtime-Preempt-Patches stehen kurz vor der Fertigstellung;
    • Der Systemaufruf clone3() wurde mit der Implementierung einer erweiterbareren Version der clone()-Schnittstelle hinzugefügt, die die Angabe einer größeren Anzahl von Flags ermöglicht;
    • bpf_send_signal()-Handler hinzugefügt, der es BPF-Programmen ermöglicht, Signale an beliebige Prozesse zu senden;
    • Für Perf-Ereignisse in der KVM-Hypervisor-Umgebung wurde ein neuer Ereignisfiltermechanismus hinzugefügt, der es dem Administrator ermöglicht, die Arten von Ereignissen zu bestimmen, die für die Überwachung auf der Seite des Gastsystems zulässig oder nicht zulässig sind;
    • Dem eBPF-Anwendungsüberprüfungsmechanismus wurde die Möglichkeit hinzugefügt, Programme mit Schleifen zu verarbeiten, wenn die Ausführung der Schleife begrenzt ist und nicht zu einer Überschreitung der Grenze der maximalen Anzahl von Anweisungen führen kann;
  • Festplattensubsystem, E/A und Dateisysteme
    • Das XFS-Dateisystem unterstützt jetzt die Multithread-Inode-Umgehung (z. B. bei der Überprüfung von Kontingenten). Es wurden neue ioctls BULKSTAT und INUMBERS hinzugefügt, die Zugriff auf die Funktionen bieten, die in der fünften Ausgabe des FS-Formats erschienen sind, wie z. B. die Inode-Geburtszeit und die Möglichkeit, die Parameter BULKSTAT und INUMBERS für jede AG-Gruppe (Zuordnungsgruppen) festzulegen;
    • In Ext4 Unterstützung hinzugefügt Lücken in Verzeichnissen (nicht verknüpfte Blöcke).
      Verarbeitung vorausgesetzt Flag „i“ (unveränderlich) für geöffnete Dateien (Schreiben ist in einer Situation verboten, in der das Flag zu einem Zeitpunkt gesetzt wurde, als die Datei bereits geöffnet war);

    • Btrfs bietet eine Definition einer schnellen Implementierung von crc32c auf allen Architekturen;
    • In CIFS wurde der Code für die smbdirect-Unterstützung als experimentelle Entwicklung entfernt. SMB3 fügte die Möglichkeit hinzu, kryptografische Algorithmen im GCM-Modus zu verwenden. Es wurde eine neue Mount-Option hinzugefügt, um Modusparameter aus ACE-Einträgen (Access Control Entry) zu extrahieren. Die Leistung des open()-Aufrufs wurde optimiert.
    • F2FS wurde eine Option hinzugefügt, um den Garbage Collector einzuschränken, wenn er im Checkpoint=Disable-Modus ausgeführt wird. ioctl hinzugefügt, um Blockbereiche aus F2FS zu entfernen, was eine spontane Anpassung der Partitionsgröße ermöglicht. Es wurde die Möglichkeit hinzugefügt, eine Auslagerungsdatei in F2FS zu platzieren, um direkte E/A bereitzustellen. Unterstützung für das Anheften einer Datei und das Zuweisen von Blöcken für ähnliche Dateien für alle Benutzer hinzugefügt;
    • Unterstützung für asynchrone Operationen sendmsg() und recvmsg() zur Schnittstelle für asynchrone Ein-/Ausgabe io_uring hinzugefügt;
    • Dem UBIFS-Dateisystem wurden Unterstützung für die Komprimierung mithilfe des zstd-Algorithmus und die Möglichkeit zur Überprüfung signierter FS-Bilder hinzugefügt.
    • Ceph FS unterstützt jetzt SELinux-Sicherheitsetiketten für Dateien;
    • Für NFSv4 wurde eine neue Mount-Option „nconnect=“ implementiert, die die Anzahl der mit dem Server aufgebauten Verbindungen bestimmt. Der Datenverkehr zwischen diesen Verbindungen wird mithilfe des Lastausgleichs verteilt. Darüber hinaus erstellt der NFSv4-Server jetzt ein Verzeichnis /proc/fs/nfsd/clients mit Informationen über aktuelle Clients, einschließlich Informationen über die von ihnen geöffneten Dateien;
  • Virtualisierung und Sicherheit
    • Der Kernel enthält einen Hypervisor für eingebettete Geräte ACRN, das mit Blick auf die Bereitschaft für Echtzeitaufgaben und die Eignung für den Einsatz in geschäftskritischen Systemen geschrieben wurde. ACRN bietet minimalen Overhead, garantiert geringe Latenz und angemessene Reaktionsfähigkeit bei der Interaktion mit Geräten. Unterstützt die Virtualisierung von CPU-Ressourcen, E/A, Netzwerksubsystem, Grafik- und Soundvorgängen. ACRN kann verwendet werden, um mehrere isolierte virtuelle Maschinen in elektronischen Steuergeräten, Dashboards, Automobilinformationssystemen, Verbraucher-IoT-Geräten und anderen eingebetteten Technologien auszuführen;
    • Im Benutzermodus Linux hinzugefügt Zeitreisemodus, der es Ihnen ermöglicht, die Zeit in einer virtuellen UML-Umgebung zu verlangsamen oder zu beschleunigen, um das Debuggen von zeitbezogenem Code zu erleichtern. Darüber hinaus wurde ein Parameter hinzugefügt
      Zeitreisestart, der es der Systemuhr ermöglicht, ab einem bestimmten Zeitpunkt im Epochenformat zu starten;

    • Neue Kernel-Befehlszeilenoptionen „init_on_alloc“ und „init_on_free“ wurden hinzugefügt. Wenn sie angegeben werden, ist das Nullen von zugewiesenen und freigegebenen Speicherbereichen aktiviert (Füllen mit Nullen für malloc und free), was aufgrund des zusätzlichen Initialisierungsaufwands eine erhöhte Sicherheit ermöglicht;
    • Neuer Treiber hinzugefügt virtio-iommu mit der Implementierung eines paravirtualisierten Geräts, das es Ihnen ermöglicht, IOMMU-Anfragen wie ATTACH, DETACH, MAP und UNMAP über den Virtio-Transport zu senden, ohne Speicherseitentabellen zu emulieren;
    • Neuer Treiber hinzugefügt virtio-pmem, stellt den Zugriff auf Speichergeräte dar, die dem physischen Adressraum zugeordnet sind, wie z. B. NVDIMMs;
    • Es wurde die Möglichkeit implementiert, kryptografische Schlüssel an einen Benutzer- oder Netzwerk-Namespace anzuhängen (auf Schlüssel kann außerhalb des ausgewählten Namespace nicht mehr zugegriffen werden) sowie Schlüssel mithilfe von ACLs zu schützen.
    • Zum Krypto-Subsystem hinzugefügt Unterstützung für einen sehr schnellen nicht-kryptografischen Hashing-Algorithmus xxhash, dessen Geschwindigkeit von der Speicherleistung abhängt;
  • Netzwerk-Subsystem
    • Ermöglicht die Verarbeitung von IPv4-Adressen im Bereich 0.0.0.0/8, der bisher nicht zur Verwendung verfügbar war. Einführung dieses Subnetzes werden weitere 16 Millionen IPv4-Adressen verteilen;
    • In Netfilter für nftables hinzugefügt Unterstützung von Hardwarebeschleunigungsmechanismen für die Paketfilterung durch die Verwendung hinzugefügter Treiber Flow Block-API. Auf der Seite von Netzwerkadaptern können ganze Regeltabellen mit allen Ketten platziert werden. Die Aktivierung erfolgt durch Bindung des NFT_TABLE_F_HW-Flags an die Tabelle. Unterstützt einfache Layer-3- und Layer-4-Protokollmetadaten, Akzeptierungs-/Ablehnungsaktionen, Zuordnungen nach IP und Sender-/Empfänger-Netzwerkports und Protokolltyp;
    • Hinzugefügt von integrierte Unterstützung für die Verbindungsverfolgung für Netzwerkbrücken, die nicht die Verwendung der Emulationsschicht br_netfilter erfordert;
    • In nf_tables hinzugefügt Unterstützung für das SYNPROXY-Modul, das ähnliche Funktionen von iptables repliziert, und die Möglichkeit, Regeln für einzelne Optionen im IPv4-Header einzuchecken, ist ebenfalls implementiert;
    • Es wurde die Möglichkeit hinzugefügt, BPF-Programme an die Systemaufrufe setsockopt() und getsockopt() anzuhängen, wodurch Sie beispielsweise Ihre eigenen Zugriffshandler an diese Aufrufe anhängen können. Darüber hinaus wurde ein neuer Aufrufpunkt (Hook) hinzugefügt, mit dem Sie einmal pro RTT-Intervall (Round-Trip-Time, Ping-Time) einen Aufruf zum BPF-Programm organisieren können;
    • Für IPv4 und IPv6 hinzugefügt Neuer Nexthop-Routing-Datenspeichermechanismus, der die Skalierbarkeit von Routing-Tabellen erhöhen soll. Tests zeigten, dass bei Verwendung des neuen Systems ein Satz von 743 Routen in nur 4.3 Sekunden in den Kernel geladen wurde;
    • Für Bluetooth umgesetzt erforderliche Funktionalität zur Unterstützung von LE-Ping;
  • Ausrüstung
    • Hinzugefügt von Unterstützung für die x86-kompatiblen Prozessoren des Unternehmens Zhaoxin, entwickelt als Ergebnis eines gemeinsamen Projekts zwischen VIA Technologies und der Stadt Shanghai. Die ZX-CPU-Familie basiert auf der x86-64-Isaiah-Architektur und setzt die technologische Entwicklung fort VIA Centaur;
    • Das Subsystem DRM (Direct Rendering Manager) sowie die Grafiktreiber amdgpu und i915 unterstützen jetzt das Parsen, Verarbeiten und Senden von HDR-Metadaten (High Dynamic Range) über den HDMI-Anschluss und ermöglichen so die Verwendung von HDR-Panels und -Bildschirmen Anzeige zusätzlicher Helligkeitsbereiche ;
    • Der amdgpu-Treiber hat anfängliche Unterstützung für die AMD NAVI GPU (RX5700) hinzugefügt, die den Basistreiber, Bildschirminteraktionscode (DCN2), GFX und Rechenunterstützung (GFX10) umfasst.
      SDMA 5 (System DMA0), Energieverwaltung und Multimedia-Encoder/Decoder (VCN2). amdgpu verbessert außerdem die Unterstützung für Karten, die auf Vega12- und Vega20-GPUs basieren, für die zusätzliche Speicher- und Energieverwaltungsfunktionen hinzugefügt wurden;

    • Unterstützung für Karten, die auf VegaM-GPUs basieren, zum amdkfd-Treiber hinzugefügt (für diskrete GPUs wie Fiji, Tonga, Polaris);
    • Im DRM-Treiber für Intel-Grafikkarten für Icelake-Chips implementiert Neuer Multisegment-Gammakorrekturmodus. Möglichkeit zur Ausgabe über DisplayPort im YCbCr4:2:0-Format hinzugefügt. Neue Firmware hinzugefügt GuC für SKL, BXT, KBL, GLK und ICL. Die Möglichkeit, die Bildschirmstromversorgung im asynchronen Modus auszuschalten, wurde implementiert. Hinzugefügt von Unterstützung für das Speichern und Wiederherstellen des Rendering-Kontexts für Ironlake- (Gen5) und Gen4-Chips (Broadwater – Cantiga), wodurch Sie den GPU-Status aus dem Benutzerbereich wiederherstellen können, wenn Sie von einem Batch-Vorgang zu einem anderen wechseln;
    • Der Nouveau-Treiber ermöglicht die Erkennung des NVIDIA Turing TU116-Chipsatzes;
    • Die Fähigkeiten des DRM/KMS-Treibers für ARM-Komeda-Bildschirmbeschleuniger (Mali D71) wurden erweitert, Unterstützung für Skalierung, Teilen/Zusammenführen von Ebenen, Rotation, verzögertes Schreiben, AFBC, SMMU und Farbkodierungsformate Y0L2, P010, YUV420_8/10BIT hinzugefügt;
    • Der MSM-Treiber bietet Unterstützung für die A540 GPU Adreno-Serie, die in Qualcomm-Prozessoren verwendet wird, sowie Unterstützung für den MSM8998 DSI-Controller für Snapdragon 835;
    • Treiber für LCD-Panels Samsung S6E63M0, Armadeus ST0700, EDT ETM0430G0DH6, OSD101T2045-53TS hinzugefügt.
      Evervision VGG804821, FriendlyELEC HD702E, KOE tx14d24vm1bpa, TFC S9700RTWV43TR-01B, EDT ET035012DM6 und VXT VL050-8048NT-C01;

    • Добавлен Treiber zum Aktivieren von Dekodierungsbeschleunigungstools
      Videos verfügbar im Amlogic Meson SoC;

    • Im v3d-Treiber (für die im Raspberry Pi verwendete Broadcom Video Core V-GPU) ist aufgetaucht unterstützen Versenden von Computer-Shadern;
    • Добавлен Treiber für SPI-Tastaturen und Trackpads, die in modernen Modellen von Apple MacBook- und MacBookPro-Laptops verwendet werden;
    • Hinzugefügt von Zusätzlicher Schutz für ioctl-Aufrufe im Zusammenhang mit dem Diskettentreiber, und der Treiber selbst wird als nicht gewartet markiert
      („verwaist“), was die Beendigung seiner Tests bedeutet. Der Treiber ist weiterhin im Kernel gespeichert, seine korrekte Funktion kann jedoch nicht garantiert werden. Der Treiber gilt als veraltet, da es schwierig ist, funktionierende Geräte zum Testen zu finden – alle aktuellen externen Laufwerke nutzen in der Regel die USB-Schnittstelle.

    • Добавлен cpufreq-Treiber für Raspberry Pi-Boards, mit dem Sie Änderungen der Prozessorfrequenz dynamisch steuern können;
    • Unterstützung für den neuen ARM-SoC 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) hinzugefügt. AXNUMX ), sowie Tafeln:
      • Purismus Librem5,
      • Aspeed BMC,
      • Microsoft Olympus BMC,
      • Kontron SMARC,
      • Novtech Meerkat96 (i.MX7),
      • 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 die Latin American Free Software Foundation gebildet
вариант völlig kostenloser Kernel 5.3 - Linux-libre 5.3-gnu, frei von Firmware- und Treiberelementen, die unfreie Komponenten oder Codeabschnitte enthalten, deren Umfang vom Hersteller begrenzt ist. In der neuen Version ist das Laden von Blobs in den Treibern qcom, hdcp drm, allegro-dvt und meson-vdec deaktiviert.
Aktualisierter Blob-Reinigungscode in den Treibern und Subsystemen amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, Soundtreiber für Skylake sowie in der Mikrocode-Dokumentation.

Source: opennet.ru

Kommentar hinzufügen