Release des Linux-Kernels 5.3

Nach zwei Monaten der Entwicklung stellte Linus Torvalds den Release des Kernels Linux 5.3. Zu den bemerkenswertesten Änderungen gehören die Unterstützung von AMD Navi GPUs, den Zhaoxi-Prozessoren und der Intel Speed Select Energiesteuerungstechnik, die Möglichkeit, umwait-Anweisungen zum Warten ohne Schleifen zu verwenden,
einen interaktiven Modus namens ‘utilization clamping’ für asymmetrische CPUs, den Systemaufruf pidfd_open, die Nutzung von IPv4-Adressen aus dem Subnetz 0.0.0.0/8, die Möglichkeit für hardwarebeschleunigtes nftables, HDR-Unterstützung im DRM-Subsystem und die Integration des Hypervisors ACRN.

In Ankündigung lesen) Der neue Release von Linus erinnerte alle Entwickler an die wichtigste Regel bei der Kernel-Entwicklung – die Unveränderlichkeit des Verhaltens für Komponenten im Benutzerraum zu bewahren. Änderungen im Kernel dürfen die bereits funktionierenden Anwendungen in keiner Weise beeinträchtigen oder zu Regressionen auf der Benutzeroberfläche führen. Dabei kann eine Verhaltensänderung nicht nur durch ABI-Änderungen, das Entfernen veralteter Codes oder das Auftreten von Fehlern verursacht werden, sondern auch indirekt die korrekte Funktion nützlicher Verbesserungen beeinflussen. Zur Veranschaulichung wurde eine nützliche Optimierung abgelehnt Im Ext4-Code wird die Anzahl der Zugriffe auf das Speichermedium durch das Deaktivieren des vorzeitigen Lesens der Inode-Tabelle bei kleinen Ein- / Ausgabever requests reduziert.

Die Optimierung führte dazu, dass die Entropie für den Zufallszahlengenerator getrandom() aufgrund der verringerten Festplattenaktivität langsamer angesammelt wird. In bestimmten Konfigurationen konnten unter bestimmten Umständen Verzögerungen beim Booten auftreten, bis der Entropie-Pool gefüllt war. Da die Optimierung tatsächlich nützlich ist, gab es unter den Entwicklern eine Diskussion, in der vorgeschlagen wurde, das Problem durch die Standard-Deaktivierung des blockierenden Modus für den Aufruf von getrandom() zu beheben, mit der Hinzufügung eines optionalen Flags zum Warten auf Entropie. Eine solche Änderung würde jedoch die Qualität der Zufallszahlen in der Anfangsphase des Bootvorgangs beeinträchtigen.

In die neue Version wurden 15.794 Korrekturen von 1.974 Entwicklern übernommen.
Die Patch-Größe beträgt 92 MB (Änderungen betreffen 13.986 Dateien, es wurden 258.419 Codezeilen hinzugefügt,
599.137 Zeilen wurden entfernt). Etwa 39 % aller Änderungen in 5.3
stehen im Zusammenhang mit Gerätetreibern, etwa 12 % der Änderungen haben
Beziehung zu hardwarearchitekturspezifischen Code-Updates, 11%
verknüpft mit dem Netzwerk-Stack, 3% – Dateisystemen und 3% mit interne
Subsystemen des Kernels.

Haupt Neuheiten:

  • Speicher und Systemdienste
    • Die Entwicklung der Funktionalität 'pidfd' wurde fortgesetzt, die hilft, Situationen mit der Wiederverwendung von PIDs zu verarbeiten (pidfd ist an einen bestimmten Prozess gebunden und bleibt unverändert, während die PID nach dem Abschluss des aktuellen Prozesses, der mit dieser PID assoziiert ist, an einen anderen Prozess gebunden werden kann). Zuvor wurde bereits im Kernel hinzugefügt
      der Systemaufruf pidfd_send_signal() und das FLAG CLONE_PIDFD im Aufruf clone(), das die Verwendung von pidfd in idfd_send_signal() ermöglicht. Bei der Verwendung des Aufrufs clone() mit dem FLAG CLONE_PIDFD können Probleme mit Dienstmanagern oder dem System zum erzwungenen Beenden von Prozessen auftreten, wenn der Speicher auf der Android-Plattform erschöpft ist. In diesem Fall wird der Aufruf fork() oder clone() ohne CLONE_PIDFD verwendet.

      Im Kernel 5.3 wurde der Systemaufruf pidfd_open(), der die Überprüfung von pidfd für jeden vorhandenen Prozess ermöglicht, der nicht über einen clone()-Aufruf mit dem CLONE_PIDFD-Flag erstellt wurde. Zudem wurde die Unterstützung für das Polling von pidfd über poll() und epoll() hinzugefügt, was es Prozessmanagern ermöglicht, das Beenden beliebiger Prozesse zu überwachen, ohne sich Sorgen über ein Rennen in Bezug auf die Zuweisung einer PID an einen neuen Prozess machen zu müssen. Der Mechanismus zur Benachrichtigung über die Beendigung eines Prozesses, der mit pidfd verbunden ist, ähnelt der Information über das Ende seines eigenen Kindprozesses;

    • Dem Job-Scheduler wurde Unterstützung für den Mechanismus zur Auslastungsbegrenzung hinzugefügt (Nutzungsbegrenzung), die es ermöglichen, Frequenzbereiche minimal oder maximal einzuhalten, je nach aktiven CPU-Aufgaben. Der vorgestellte Mechanismus beschleunigt Aufgaben, die direkt die Benutzererfahrung beeinflussen, indem diese Aufgaben mindestens an der unteren Grenze der „angeforderten“ Frequenz gestartet werden. Niedrigpriorisierte Aufgaben, die sich nicht auf die Benutzererfahrung auswirken, werden mit der oberen Grenze der „erlaubten“ Frequenz ausgeführt. Die Grenzwerte werden durch die Attribute sched_uclamp_util_min und sched_uclamp_util_max im Systemaufruf sched_setattr() festgelegt.
    • Unterstützung für Energiemanagement-Technologie hinzugefügt Intel Speed Select, die auf bestimmten Servern mit Intel Xeon-Prozessoren verfügbar ist. Diese Technologie ermöglicht es, Leistungs- und Bandbreiteneinstellungen für verschiedene CPU-Kerne zu konfigurieren, wodurch die Leistung für auf bestimmten Kernen ausgeführte Aufgaben priorisiert wird, zulasten der Leistung auf anderen Kernen;
    • Prozesse im Benutzerspeicher bereitgestellt wird. Die Möglichkeit, kurze Wartezeiten ohne den Einsatz von Schleifen durch den Befehl umwait zu realisieren. Dieser Befehl wird zusammen mit den Befehlen umonitor und tpause in den kommenden Intel 'Tremont' Chips verfügbar sein und ermöglicht energiesparende Verzögerungen, die die Leistung anderer Threads bei Nutzung von Hyper-Threading nicht beeinträchtigen.
    • Die RISC-V Architektur erhält Unterstützung für große Speicherseiten (huge pages).
    • Im Trace-Mechanismus 'kprobes' wurde die Möglichkeit hinzugefügt, Kernel-Pointer im Benutzerspeicher zu dereferenzieren, was beispielsweise zur Bewertung des Inhalts von Strukturen, die in Systemaufrufe übergeben werden, verwendet werden kann. Zudem wurde die Möglichkeit zur Einrichtung von Prüfpunkten während des Bootvorgangs hinzugefügt.
    • Die Konfigurationsdatei wurde um die OPTION PREEMPT_RT für den Betrieb im Echtzeitmodus erweitert. Der Code zur Unterstützung des Echtzeitmodus wurde jedoch noch nicht in den Kernel integriert, aber das Hinzufügen dieser Option ist ein gutes Zeichen, dass die jahrelange Saga um Integration in Quarantäne zu setzen. Realtime-Preempt-Patches ihrem Ende entgegengeht.
    • Der Systemaufruf clone3() wurde hinzugefügt. Er implementiert eine erweiterbare Version der Schnittstelle clone(), die eine größere Anzahl von Flags zulässt.
    • Ein bpf_send_signal() Handler wurde 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 Filtermechanismus hinzugefügt, der dem Administrator die Möglichkeit gibt, die zulässigen oder nicht zulässigen Ereignistypen für das Monitoring auf der Gastseite zu definieren.
    • Der Verifizierungsmechanismus für eBPF-Anwendungen wurde um die Fähigkeit erweitert, Programme mit Schleifen zu verarbeiten, solange die Ausführung der Schleife begrenzt ist und nicht zum Überschreiten des Limits für die maximale Anzahl von Anweisungen führen kann.
  • Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
    • Für das XFS-Dateisystem wurde die Möglichkeit der mehrstufigen Durchsuchung von Inodes implementiert (z. B. bei der Überprüfung von Quoten). Neue ioctl BULKSTAT und INUMBERS wurden hinzugefügt, die Zugriff auf Funktionen gewähren, die in der fünften Ausgabe des Dateiformats eingeführt wurden, wie das Erstellungsdatum des Inodes und die Möglichkeit, BULKSTAT- und INUMBERS-Parameter für jede AG (Allocation Group) festzulegen.
    • In Ext4 wurde Unterstützung für Leerräume in Verzeichnissen (nicht zugewiesene Blöcke).
      Die Verarbeitung wurde sichergestellt. Das Flag "i" (immutable) für geöffnete Dateien (Schreibschutz, wenn das Flag gesetzt wurde, während die Datei bereits geöffnet war);
    • Btrfs bietet die schnelle Implementierung von crc32c auf allen Architekturen;
    • Im CIFS wurde das Experimentalsymbol für die Unterstützung von smbdirect entfernt. In SMB3 wurde die Möglichkeit hinzugefügt, Kryptographie-Algorithmen im GCM-Modus zu verwenden. Eine neue Mount-Option wurde hinzugefügt, um Modi aus ACE (Access Control Entry) Einträgen zu extrahieren. Die Leistung des open()-Aufrufs wurde optimiert;
    • In F2FS wurde eine Option zur Einschränkung des Garbage Collectors im Modus checkpoint=disable hinzugefügt. Ein ioctl für das Entfernen von Blockbereichen aus F2FS wurde hinzugefügt, sodass die Größe der Partition dynamisch angepasst werden kann. Die Möglichkeit, Swap-Dateien in F2FS mit direktem I/O zu platzieren, wurde eingeführt. Unterstützt wird jetzt das Ankern von Dateien und die Allokation von Blöcken für solche Dateien;
    • Im Interface für asynchrones I/O io_uring wurde die Unterstützung für die asynchronen Operationen sendmsg() und recvmsg() hinzugefügt;
    • Im UBIFS-Dateisystem wurde die Unterstützung für die Kompression mit dem zstd-Algorithmus sowie die Möglichkeit zur Überprüfung signierter FS-Images hinzugefügt.
    • Im Ceph-Dateisystem wurde die Unterstützung für SELinux-Sicherheitslabels für Dateien eingeführt.
    • Für NFSv4 wurde eine neue Mount-Option „nconnect=“ implementiert, die die Anzahl der Verbindungen zum Server definiert. Der Datenverkehr zwischen diesen Verbindungen wird mittels Lastverteilung verteilt. Außerdem erstellt der NFSv4-Server jetzt ein Verzeichnis /proc/fs/nfsd/clients mit Informationen über die aktuellen Clients, einschließlich der Angaben zu den von ihnen geöffneten Dateien.
  • Virtualisierung und Sicherheit
    • Der Hypervisor für eingebettete Geräte wurde in den Kernel aufgenommen. ACRN, der mit Blick auf die Bereitschaft zur Ausführung von Echtzeitanwendungen und die Eignung für kritische Systeme entwickelt wurde. ACRN sorgt für minimale Overheads, gewährleistet geringe Latenzzeiten und angemessene Reaktionsfähigkeit bei der Interaktion mit der Hardware. Die Virtualisierung von CPU-Ressourcen, Eingabe/Ausgabe, Netzwerksubsystemen sowie Grafik- und Audiooperationen wird unterstützt. ACRN kann dazu verwendet werden, mehrere isolierte virtuelle Maschinen in elektronischen Steuergeräten, Armaturenbrettern, Informationssystemen für Automobile, Verbrauch IoT-Geräten und anderen eingebetteten Geräten zu betreiben;
    • Unter Linux-Benutzermodus ein der „Zeitreise“-Modus, der es ermöglicht, die Zeit in der virtuellen UML-Umgebung zu verlangsamen oder zu beschleunigen, um die Fehlersuche bei zeitabhängigem Code zu erleichtern. Zudem wurde die Option
      time-travel-start hinzugefügt, um die Systemuhr zu einem angegebenen Zeitpunkt im Epoch-Format zu starten;
    • Neue Optionen für die Kernel-Befehlszeile „init_on_alloc“ und „init_on_free“ wurden hinzugefügt. Bei Aktivierung kommt es zu einer Nullinitialisierung der zugewiesenen und freigegebenen Speicherbereiche (Auffüllung mit Nullen bei malloc und free). Dies erhöht die Sicherheit durch zusätzliche Initialisierungskosten.
    • Ein neuer Treiber wurde hinzugefügt. virtio-iommu , der die Implementierung eines paravirtualisierten Geräts ermöglicht, das IOMMU-Anfragen wie ATTACH, DETACH, MAP und UNMAP über den virtio-Transport ohne Emulation von Seitentabellen verarbeitet.
    • Ein neuer Treiber wurde hinzugefügt. virtio-pmem, das den Zugriff auf Speichergeräte ermöglicht, die im physikalischen Adressraum abgebildet sind, wie NVDIMM.
    • Es wurde die Möglichkeit implementiert, kryptografische Schlüssel an einen Benutzer- oder Netzwerk-Namespace zu binden (die Schlüssel sind außerhalb des gewählten Namespaces nicht verfügbar), sowie den Schutz der Schlüssel mittels ACL.
    • Im Kryptosystem hinzugefügt wurde die Unterstützung für einen sehr schnellen algorithmischen nicht-kryptografischen Hash xxhash, dessen Geschwindigkeit durch die Speicherleistung limitiert wird.
  • Netzwerksubsystem
    • Die Verarbeitung von IPv4-Adressen im Bereich 0.0.0.0/8, der zuvor nicht verfügbar war, wird sichergestellt. Die Einführung dieses Subnetzes die Konstruktion von Prozessoren, die zwanzig Mal leistungsfähiger sind als die aktuellen Flaggschiffmodelle. verteilt weitere 16 Millionen IPv4-Adressen;
    • In Netfilter für nftables hinzugefügt wird die Unterstützung von Hardware-Beschleunigungsmechanismen zur Paketfilterung durch die in Treiber eingearbeiteten Funktionen ermöglicht. Flow Block API. Auf die Netzwerkkarten können gesamte Regel tabellen mit allen Ketten ausgegliedert werden. Die Aktivierung erfolgt durch die Bindung des Flags NFT_TABLE_F_HW an die Tabelle. Es werden einfache Protokolldaten der Ebenen 3 und 4 unterstützt, Aktionen wie Annehmen/Ablehnen, Zuordnungen nach IP und Ports von Sender/Empfänger sowie Protokolltyp;
    • Hinzugefügt eingebauter Unterstützung für die Verfolgung von Verbindungen in Netzwerkschaltern, die keine emulierende Schicht br_netfilter erfordert;
    • In nf_tables hinzugefügt unterstützt das SYNPROXY-Modul, das eine ähnliche Funktionalität wie iptables wiederholt, und es wurde die Möglichkeit implementiert, in den Regeln nach bestimmten Optionen im IPv4-Header zu überprüfen;
    • Die Möglichkeit, BPF-Programme an die Systemaufrufe setsockopt() und getsockopt() anzuhängen, wurde hinzugefügt, was es ermöglicht, eigene Zugriffs-Handler an diesen Aufrufen anzubinden. Außerdem wurde ein neuer Hook eingeführt, mit dem ein BPF-Programm einmal pro RTT-Intervall (Round-Trip-Time, Ping-Zeit) aufgerufen werden kann;
    • Für IPv4 und IPv6 ein ein neuer Mechanismus zur Speicherung von Nexthop-Routingdaten, der auf die Skalierbarkeit der Routingtabellen abzielt. Tests haben gezeigt, dass bei Verwendung des neuen Systems das Laden von 743.000 Routen in den Kernel nur 4,3 Sekunden in Anspruch nahm;
    • Für Bluetooth wurde Funktionalität, die für die Unterstützung von LE-Ping erforderlich ist;
  • Ausrüstung
    • Hinzugefügt Unterstützung für x86-kompatible Prozessoren von Zhaoxin, die aus einem gemeinsamen Projekt von VIA Technologies und der Stadt Shanghai hervorgegangen sind. Die CPU-Familie ZX basiert auf der x86-64 Isaiah-Architektur, die die Technologien weiterentwickelt; VIA Centaur;
    • Im DRM-System (Direct Rendering Manager) sowie in den Grafiktreibern amdgpu und i915 wurde die Unterstützung für das Parsen, die Verarbeitung und das Senden von HDR-Metadaten (High Dynamic Range) über den HDMI-Anschluss hinzugefügt, wodurch HDR-Monitore und Displays genutzt werden können, die erweiterte Helligkeitsbereiche anzeigen können.
    • Im amdgpu-Treiber wurde die erste Unterstützung für die AMD NAVI GPU (RX5700) hinzugefügt, die einen Basis-Treiber, Code zur Interaktion mit Displays (DCN2), sowie Unterstützung für GFX und Berechnungen (GFX10) umfasst.
      SDMA 5 (System DMA0), Energiemanagement und Multimedia-Encoder/Decoder (VCN2). Im amdgpu wurde außerdem die Unterstützung für Vega12- und Vega20-Grafikkarten verbessert, bei denen zusätzliche Funktionen für das Speichermanagement und den Energieverbrauch hinzugefügt wurden.
    • Im amdkfd-Treiber (für diskrete GPUs wie Fiji, Tonga, Polaris) wurde die Unterstützung für VegaM-Grafikkarten hinzugefügt.
    • Im DRM-Treiber für Intel-Grafikkarten für Icelake-Chips wurde ein neuer mehrsegmentiger Gamma-Korrekturmodus eingeführt. implementiert. Es wurde die Möglichkeit hinzugefügt, über DisplayPort im YCbCr4:2:0-Format auszugeben. Neue Firmware wurde hinzugefügt für SKL, BXT, KBL, GLK und ICL. Es wurde die Möglichkeit zur Deaktivierung der Bildschirmstromversorgung im asynchronen Modus implementiert. GuC für SKL, BXT, KBL, GLK und ICL. Es wurde die Möglichkeit zur asynchronen Ausschaltung des Bildschirmstroms implementiert. Hinzugefügt Unterstützung für die Erhaltung und Wiederherstellung des Render-Kontexts für Ironlake-Chips (Gen5) und Gen4 (Broadwater - Cantiga), was es ermöglicht, den Zustand der GPU aus dem Benutzerspeicher wiederherzustellen, wenn von einer Batch-Operation zur nächsten gewechselt wird;
    • Im Nouveau-Treiber wurde die Identifizierung des NVIDIA Turing TU116 Chipsatzes hinzugefügt;
    • Erweiterte Funktionen des DRM/KMS-Treibers für ARM Komeda Bildschirmoperationen (Mali D71), hinzugefügt Unterstützung für Skalierung, Schichten teilen/vereinen, Rotation, verzögerte Aufzeichnung, AFBC, SMMU und Farbformatkodierung Y0L2, P010, YUV420_8/10BIT;
    • Im MSM-Treiber wurde die Unterstützung der A540 Serie GPU Adreno eingeführt, die in Qualcomm-Prozessoren verwendet wird, sowie die Unterstützung des DSI-Controllers MSM8998 für Snapdragon 835;
    • Treiber für Samsung S6E63M0 LCD-Panels, Armadeus ST0700, EDT ETM0430G0DH6, OSD101T2045-53TS,
      Evervision VGG804821, FriendlyELEC HD702E, KOE tx14d24vm1bpa, TFC S9700RTWV43TR-01B, EDT ET035012DM6 und VXT VL050-8048NT-C01 hinzugefügt;
    • Hinzugefügt Treiber zur Aktivierung von Beschleunigungsfunktionen für die Dekodierung
      von Video, die in SoC Amlogic Meson verfügbar sind;
    • Im v3d-Treiber (für die Broadcom Video Core V GPU, die im Raspberry Pi verwendet wird) wurde Unterstützung für eine Dispatcher-Funktion für Compute-Shader hinzugefügt;
    • Hinzugefügt Treiber für SPI-Tastaturen und Trackpads, die in modernen Modellen von Apple MacBook und MacBook Pro verwendet werden;
    • Hinzugefügt zusätzlicher Schutz für ioctl-Aufrufe im Zusammenhang mit dem Floppy-Treiber, wobei der Treiber als nicht mehr unterstützt gekennzeichnet ist;
      („verwaist“), was bedeutet, dass die Tests eingestellt wurden. Der Treiber bleibt vorerst im Kernel, aber seine korrekte Funktion wird nicht garantiert. Der Treiber gilt als veraltet, da es schwierig ist, funktionierende Hardware für seine Tests zu finden – alle aktuellen externen Speicher nutzen in der Regel USB-Schnittstellen.
    • Hinzugefügt cpufreq-Treiber für Raspberry Pi-Platinen, der eine dynamische Steuerung der Prozessorgeschwindigkeit ermöglicht;
    • 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 für folgende Platinen hinzugefügt:
      • Purism 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 der Lateinamerikanische Freie Software-Fonds die
Variante ist gut gelungen. vollständig freies Kernel 5.3Linux-libre 5.3-gnu, bereinigt von Firmware- und Treiberelementen, die nicht freie Komponenten oder Codeabschnitte enthalten, deren Verwendung durch den Hersteller eingeschränkt ist. In der neuen Version wurde das Laden von Blobs in den Treibern qcom, hdcp drm, allegro-dvt und meson-vdec deaktiviert.
Der Blob-Reinigungs-Code in den Treibern und Subsystemen amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, dem Audiotreiber für Skylake sowie in der Mikrokodierungsdokumentation wurde aktualisiert.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster