Nach zwei Monaten Entwicklung stellte Linus Torvalds das Release des Linux-Kernels 5.17 vor. Zu den bemerkenswertesten Änderungen gehören: ein neues Leistungsmanagementsystem für AMD-Prozessoren, die Möglichkeit des rekursiven Mappings von Benutzer-IDs in Dateisystemen, Unterstützung für portable kompilierte BPF-Programme, die Umstellung des Pseudozufallszahlengenerators auf den BLAKE2s-Algorithmus, das RTLA-Tool zur Analyse der Ausführung in Echtzeit, ein neuer fscache-Backend für das Caching von Netzwerkdateisystemen sowie die Möglichkeit, Namen anonymen mmap-Operationen zuzuordnen.
In die neue Version wurden 14.203 Korrekturen von 1.995 Entwicklern übernommen, die Patchgröße beträgt 37 MB (die Änderungen betreffen 11.366 Dateien, 506.043 Codezeilen wurden hinzugefügt und 250.954 Zeilen entfernt). Etwa 44% der in 5.17 vorgenommenen Änderungen betreffen Gerätetreiber, rund 16% beziehen sich auf die Aktualisierung architekturspezifischen Codes, 15% sind mit dem Netzwerk-Stack verbunden, 4% mit Dateisystemen und 4% mit internen Kernsubsystemen.
Die Hauptneuerungen im Kernel 5.17:
- Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
- Die Möglichkeit des verschachtelten Mappings von Benutzer-IDs in eingebundenen Dateisystemen wurde realisiert, die verwendet wird, um Dateien eines bestimmten Benutzers auf einem externen gemounteten Datenträger einem anderen Benutzer im aktuellen System zuzuordnen. Die hinzugefügte Möglichkeit erlaubt es, das Mapping rekursiv über Dateisysteme zu verwenden, für die bereits ein Mapping besteht.
- Das Subsystem fscache, das für das Caching in lokalen Dateisystemen von über Netzwerkdateisysteme übertragenen Daten zuständig ist, wurde vollständig neu implementiert. Die neue Implementierung zeichnet sich durch eine deutliche Vereinfachung des Codes aus und ersetzt komplizierte Planungs- und Statusverfolgungsoperationen durch einfachere Mechanismen. Die Unterstützung des neuen fscache ist im CIFS-Dateisystem implementiert.
- Im Event-Tracking-System des Dateisystems fanotify wurde ein neuer Ereignistyp FAN_RENAME eingeführt, der es ermöglicht, die Umbenennung von Dateien oder Verzeichnissen in einem Schritt abzufangen (früher wurden dafür zwei separate Ereignisse FAN_MOVED_FROM und FAN_MOVED_TO verwendet).
- Im Btrfs-Dateisystem wurden die Protokollierungs- und fsync-Operationen für große Verzeichnisse optimiert, was durch das Kopieren von nur Indexschlüsseln und die Reduzierung des Volumens an protokollierten Metadaten erreicht wurde. Die Unterstützung der Indizierung und Suche nach der Größe der freien Speicherdaten hat die Verzögerungen um etwa 30% verringert und die Suchzeiten verkürzt. Das Unterbrechen von Defragmentierungsoperationen wurde ermöglicht. Es wurde die Möglichkeit eingeführt, Geräte beim Deaktivieren der Lastverteilung zwischen Speichergeräten hinzuzufügen, d.h. beim Einbinden eines Dateisystems mit der Option skip_balance.
- Ein neuer Syntax für das Einbinden von Ceph-Dateisystemen wurde vorgeschlagen, der bestehende Probleme im Zusammenhang mit der Bindung an IP-Adressen löst. Jetzt kann zur Bestimmung des Servers auch die Cluster-ID (FSID) verwendet werden: mount -t ceph user@fsid.fs_name=/[subdir] mnt -o mon_addr=monip1[:port][/monip2[:port]] IP-Adressen Das Ext4-Dateisystem wurde auf eine neue API für das Einbinden umgestellt, die die Phasen der Analyse von Einbindungsoptionen und der Einstellung des Superblocks trennt. Die Unterstützung der Einbindungsoptionen lazytime und nolazytime, die als vorübergehende Änderung eingeführt wurden, um die Umstellung von util-linux auf die Verwendung des Flags MS_LAZYTIME zu erleichtern, wurde eingestellt. Die Unterstützung zum Setzen und Lesen von Labels im Dateisystem wurde hinzugefügt (ioctl FS_IOC_GETFSLABEL und FS_IOC_SETFSLABEL).
- In NFSv4 wurde die Unterstützung für den Betrieb in Dateisystemen ohne Unterscheidung zwischen Groß- und Kleinschreibung in Dateinamen und Verzeichnisnamen hinzugefügt. In NFSv4.1+ wurde die Unterstützung für die Definition aggregierter Sitzungen (trunking) eingeführt.
- Ein Treiber für amd-pstate wurde hinzugefügt, der dynamisches Frequenzmanagement zur Erreichung optimaler Leistung ermöglicht. Der Treiber unterstützt CPUs und APUs von AMD ab der Zen 2-Generation, wurde in Zusammenarbeit mit Valve entwickelt und zielt darauf ab, die Effizienz des Energiemanagements zu steigern. Zur adaptiven Frequenzänderung wird der Mechanismus CPPC (Collaborative Processor Performance Control) verwendet, der eine präzisere Anpassung der Leistungskennzahlen ermöglicht (nicht auf drei Leistungsstufen beschränkt) und schneller auf Zustandsänderungen reagiert als zuvor verwendete P-State-Treiber auf Basis von ACPI (CPUFreq).
- Speicher und Systemdienste
- Im eBPF-Subsystem wurde der Handler bpf_loop() vorgeschlagen, der eine alternative Möglichkeit zur Organisation von Schleifen in eBPF-Programmen bietet, schneller und einfacher zu prüfen ist als der Verifier.
- Im eBPF-Subsystem wurde der Handler bpf_loop() vorgeschlagen, der einen alternativen Ansatz zur Organisation von Schleifen in eBPF-Programmen bietet, der schneller und einfacher für den Verifier zu überprüfen ist.
- Auf der Kernel-Ebene wurde der CO-RE-Mechanismus (Compile Once — Run Everywhere) implementiert, der es ermöglicht, eBPF-Programmcodes nur einmal zu kompilieren und einen speziellen universellen Loader zu verwenden, der das zu ladende Programm an den aktuellen Kernel und die BTF-Typen (BPF Type Format) anpasst.
- Es wurde die Möglichkeit eingeführt, Namen für Bereiche des privaten anonymen Speichers (über malloc zugewiesen) festzulegen, was das Debugging und die Optimierung des Speicherverbrauchs in Anwendungen erleichtern kann. Die Namen werden über prctl mit dem Flag PR_SET_VMA_ANON_NAME zugewiesen und erscheinen in /proc/pid/maps und /proc/pid/smaps in der Form „[anon:]“.
- Im Task-Scheduler wird die Verfolgung und Anzeige der Zeit, die Prozesse im Zustand des erzwungenen Leerlaufs (forced-idle) verbringen, berücksichtigt, um beispielsweise die Last bei Überhitzung des Prozessors zu verringern.
- Das Modul gpio-sim wurde hinzugefügt, das für die Simulation von GPIO-Chips zu Testzwecken vorgesehen ist.
- Dem Befehl „perf ftrace“ wurde der Unterbefehl „latency“ hinzugefügt, um Histogramme mit Informationen über Verzögerungen zu generieren.
- Ein Satz von „RTLA“-Dienstprogrammen wurde hinzugefügt, um die Arbeit im Echtzeitmodus zu analysieren. Dazu gehören Dienstprogramme wie osnoise (bestimmt den Einfluss des Betriebssystems auf die Ausführung einer Aufgabe) und timerlat (ändert die mit dem Timer verbundenen Verzögerungen).
- Die zweite Serie von Patches zur Umsetzung des Konzepts der Seitenfolios (page folios) wurde integriert, die den zusammengesetzten Seiten (compound pages) ähneln, aber eine verbesserte Semantik und eine klarere Arbeitsorganisation aufweisen. Die Verwendung von Folios ermöglicht eine schnellere Speicherverwaltung in bestimmten Teilsystemen des Kernels. In den vorgeschlagenen Patches wurde die Umstellung des Seiten-Caches auf die Verwendung von Folios abgeschlossen und die erste Unterstützung von Folios im XFS-Dateisystem hinzugefügt.
- Ein Build-Modus „make mod2noconfig“ wurde hinzugefügt, bei dem eine Konfiguration erstellt wird, die alle deaktivierten Teilsysteme in Form von Kernelmodulen zusammenfasst.
- Die Anforderungen an die Version von LLVM/Clang, die zum Kompilieren des Kernels verwendet werden kann, wurden erhöht. Für das Kompilieren wird nun mindestens die LLVM-Version 11 benötigt.
- Virtualisierung und Sicherheit
- Eine aktualisierte Implementierung des RDRAND-Zufallszahlengenerators wurde vorgeschlagen, die für die Funktionalität von /dev/random und /dev/urandom verantwortlich ist und durch den Übergang zur Verwendung der Hash-Funktion BLAKE2s anstelle von SHA1 für die Entropiemischoperationen bemerkenswert ist. Diese Änderung hat die Sicherheit des Zufallszahlengenerators verbessert, indem das problematische SHA1-Algorithmus entfernt wurde, und die erneute Verwendung des RNG-Initialisierungsvektors ausgeschlossen wurde. Da der BLAKE2s-Algorithmus SHA1 in der Leistung übertrifft, wirkt sich seine Anwendung auch positiv auf die Performance aus.
- Ein Schutz gegen Schwachstellen in Prozessoren wurde hinzugefügt, die durch spekulative Ausführung von Anweisungen nach bedingungslosen Sprungoperationen verursacht werden. Das Problem entsteht durch die spekulative Verarbeitung von Anweisungen, die im Speicher unmittelbar nach dem Sprungbefehl folgen (SLS, Straight Line Speculation). Um den Schutz zu aktivieren, ist eine Kompilierung mit der Testversion von GCC 12 erforderlich.
- Ein Mechanismus zur Verfolgung des Referenzzählungs (refcount, reference-count) wurde hinzugefügt, der darauf abzielt, die Anzahl der Fehler bei der Referenzzählung zu verringern, die zu einem Zugriff auf bereits freigegebenen Speicher führen. Der Mechanismus ist bisher auf das Netzwerk-Subsystem beschränkt, kann aber in Zukunft auch für andere Teile des Kernels angepasst werden.
- Erweiterte Überprüfungen neuer Einträge in der Seitentabelle eines Prozesses wurden implementiert, um bestimmte Arten von Beschädigungen zu erkennen und das System zu stoppen, um Angriffe im frühen Stadium zu blockieren.
- Es wurde die Möglichkeit hinzugefügt, Kernelmodule direkt vom Kernel selbst und nicht vom Benutzerraumbearbeiter zu entpacken, was es mit dem LSM-Modul LoadPin ermöglicht, sicherzustellen, dass Kernelmodule aus einem verifizierten Speichermedium in den Speicher geladen werden.
- Ein Build mit dem Flag „-Wcast-function-type“ wurde sichergestellt, das Warnungen über das Casting von Funktionszeigern auf inkompatible Typen ausgibt.
- Ein virtueller Host-Treiber pvUSB für den Hypervisor Xen wurde hinzugefügt, der den Zugriff auf USB-Geräte ermöglicht, die in Gastbetriebssysteme durchgereicht werden (ermöglicht es Gastbetriebssystemen, auf physische USB-Geräte zuzugreifen, die dem Gastbetriebssystem zugeordnet sind).
- Ein Modul wurde hinzugefügt, das über Wi-Fi mit dem IME-Subsystem (Intel Management Engine) interagiert, das in den meisten modernen Mainboards mit Intel-Prozessoren bereitgestellt wird und als separater Mikrokontroller implementiert ist, der unabhängig vom CPU arbeitet.
- Für die ARM64-Architektur wurde die Unterstützung für das Debugging-Tool KCSAN (Kernel Concurrency Sanitizer) implementiert, das zur dynamischen Erkennung von Race Conditions innerhalb des Kernels dient.
- Für 32-Bit-ARM-Systeme wurde die Möglichkeit hinzugefügt, den KFENCE-Mechanismus zur Erkennung von Speichermängeln zu verwenden.
- Der KVM-Hypervisor unterstützt jetzt die AMX (Advanced Matrix Extensions)-Befehle, die in den kommenden Intel Xeon Scalable-Serverprozessoren implementiert werden.
- Netzwerksubsystem
- Die Unterstützung für das Offloading von netzwerkbezogenen Aufgaben, die mit dem Verkehrsmanagement zusammenhängen, auf Netzwerkgeräte wurde hinzugefügt.
- Die Verwendung des MCTP (Management Component Transport Protocol) über serielle Schnittstellengeräte wurde ermöglicht. MCTP kann für die Interaktion zwischen Steuerbordcontrollern und zugehörigen Geräten (Host-Prozessoren, Peripheriegeräte usw.) verwendet werden.
- Der TCP-Stack wurde optimiert, zum Beispiel wurde eine verzögerte Freigabe von Socket-Puffern implementiert, um die Leistung von recvmsg-Aufrufen zu verbessern.
- Auf der Berechtigungsstufe CAP_NET_RAW ist es nun möglich, über die Funktion setsockopt die Modi SO_PRIORITY und SO_MARK zu setzen.
- Für IPv4 ist die Bindung von Raw-Sockets an nicht-lokale IP-Adressen unter Verwendung der Optionen IP_FREEBIND und IP_TRANSPARENT nun erlaubt.
- Der sysctl arp_missed_max wurde hinzugefügt, um die Schwelle für die Anzahl der Fehlschläge zu konfigurieren, nach denen die Netzwerkschnittstelle in den deaktivierten Zustand versetzt wird.
- Es gibt nun die Möglichkeit, separate sysctl-Werte min_pmtu und mtu_expires für Netzwerknamesräume zu konfigurieren.
- Das API ethtool hat die Möglichkeit zur Festlegung und Bestimmung der Größe von Eingangs- und Ausgangspacketen hinzugefügt.
- Im Netfilter wurde die Unterstützung für die Filterung von Transit-pppoe-Verkehr im Netzwerk-Bridge hinzugefügt.
- Im ksmbd-Modul zur Implementierung von Datei- Server, das das SMB3-Protokoll verwendet, wurde die Unterstützung für den Schlüsselaustausch hinzugefügt. Netzwerkport 445 wird für smbdirect verwendet, und die Unterstützung für den Parameter "smb2 max credit" wurde hinzugefügt.
- Ausrüstung
- Im drm (Direct Rendering Manager)-Subsystem und im i915-Treiber wurde die Unterstützung für Bildschirme hinzugefügt, die vertrauliche Informationen anzeigen, z.B. sind einige Laptops mit Bildschirmen ausgestattet, die über einen integrierten Modus für vertrauliches Surfen verfügen, der die Sicht von außen erschwert. Die hinzugefügten Änderungen ermöglichen den Anschluss spezialisierter Treiber für solche Bildschirme und die Verwaltung der vertraulichen Modi über die Festlegung von Eigenschaften in den herkömmlichen KMS-Treibern.
- Im amdgpu-Treiber wurde die Unterstützung der Debugging-Technologie STB (Smart Trace Buffer) für alle unterstützten AMD-GPUs hinzugefügt. STB erleichtert die Analyse von Abstürzen und das Auffinden von Fehlerquellen, indem Informationen über ausgeführte Funktionen vor dem letzten Absturz in einem speziellen Puffer gespeichert werden.
- Im i915-Treiber wurde die Unterstützung für Intel Raptor Lake S-Chips hinzugefügt, und die Unterstützung für die Grafiksubsysteme von Intel Alder Lake P-Chips wurde standardmäßig aktiviert. Es besteht die Möglichkeit, die Bildschirmbeleuchtung über das VESA DPCD-Interface zu steuern.
- In den fbcon/fbdev-Treibern wurde die Unterstützung für die hardwarebeschleunigte Bildlaufsteuerung in der Konsole wiederhergestellt.
- Die Integration von Änderungen zur Unterstützung von Apple M1-Chips wurde fortgesetzt. Es wurde die Möglichkeit zur Nutzung des simpledrm-Treibers auf Systemen mit dem Apple M1-Chip für die Ausgabe über den von der Firmware bereitgestellten Framebuffer implementiert.
- Die Unterstützung für ARM SoCs, Geräte und Boards wie Snapdragon 7c, 845 und 888 (Sony Xperia XZ2/XZ2C/XZ3, Xperia 1 III/5 III, Samsung J5, Microsoft Surface Duo 2), Mediatek MT6589 (Fairphone FP1), Mediatek MT8183 (Acer Chromebook 314), Mediatek MT7986a/b (verwendet in Wi-Fi-Routern), Broadcom BCM4908 (Netgear RAXE500), Qualcomm SDX65, Samsung Exynos7885, Renesas R-Car S4-8, TI J721s2, TI SPEAr320s, NXP i.MX8 ULP8, Aspeed AST2500/AST2600, Engicam i.Core STM32MP1, Allwinner Tanix TX6, Facebook Bletchley BMC, Goramo MultiLink, JOZ Access Point, Y Soft IOTA Crux/Crux+, t6000/t6001 MacBook Pro 14/16 wurde hinzugefügt.
- Die Unterstützung für ARM Cortex-M55- und Cortex-M33-Prozessoren wurde hinzugefügt.
- Die Unterstützung für Geräte auf der Basis der MIPS-CPUs: Linksys WRT320N v1, Netgear R6300 v1, Netgear WN2500RP v1/v2 wurde hinzugefügt.
- Die Unterstützung für den SoC StarFive JH7100 auf der Grundlage der RISC-V-Architektur wurde hinzugefügt.
- Der Treiber lenovo-yogabook-wmi wurde hinzugefügt, um die Tastaturbeleuchtung zu steuern und auf verschiedene Sensoren im Lenovo Yoga Book zuzugreifen.
- Der Treiber asus_wmi_sensors wurde hinzugefügt, um auf Sensoren zuzugreifen, die auf AMD Ryzen-basierten Motherboards wie Asus X370, X470, B450, B550 und X399 verwendet werden.
- Der Treiber x86-android-tablets wurde für Tablets auf der Basis der x86-Architektur hinzugefügt, die mit der Android-Plattform geliefert werden.
- Die Unterstützung für Touchscreens von TrekStor SurfTab duo W1 und für den digitalen Stift von Chuwi Hi10 Plus und Pro wurde hinzugefügt.
- In den Treibern für Tegra 20/30 SoCs wurde die Unterstützung für die Verwaltung von Energie und Spannung hinzugefügt. Die Möglichkeit, auf älteren 32-Bit-Geräten, die auf Tegra SoCs basieren, wie ASUS Prime TF201, Pad TF701T, Pad TF300T, Infinity TF700T, EeePad TF101 und Pad TF300TG zu booten, wurde gewährleistet.
- Treiber für industrielle Computer von Siemens wurden hinzugefügt.
- Die Unterstützung für LCD-Panels von Sony Tulip Truly NT35521, Vivax TPC-9150, Innolux G070Y2-T02, BOE BF060Y8M-AJ0, JDI R63452, Novatek NT35950, Wanchanglong W552946ABA und Team Source Display TST043015CMHX wurde hinzugefügt.
- Unterstützung für AMD Renoir ACP, Asahi Kasei Microdevices AKM4375, Intel-Systeme mit NAU8825/MAX98390, Mediatek MT8915, nVidia Tegra20 S/PDIF, Qualcomm ALC5682I-VS und Texas Instruments TLV320ADC3xxx hinzugefügt. Probleme mit Tegra194 HD-Audio wurden behoben. Unterstützung für HDA-Codecs CS35L41 wurde hinzugefügt. Verbesserung der Unterstützung von Audiosystemen für Lenovo- und HP-Laptops sowie für Gigabyte-Mutterkarten.
Quelle: opennet.ru
