Linux 5.1-Kernel-Release

Nach zwei Monaten Entwicklungszeit hat Linus Torvalds eingeführt Kernel-Release Linux 5.1. Zu den bemerkenswertesten Änderungen gehören: eine neue Schnittstelle für asynchrones I/O io_uring, die Möglichkeit, NVDIMM als RAM zu verwenden, Unterstützung für gemeinsam genutzten virtuellen Speicher in Nouveau, Unterstützung für skalierbare Überwachung sehr großer Dateisysteme über fanotify, die Möglichkeit, die Zstd-Komprimierung zu konfigurieren Levels in Btrfs, ein neuer Cpuidle-TEO-Handler, Implementierung von Systemaufrufen zur Lösung des 2038-Problems, die Möglichkeit, von Device-Mapper-Geräten ohne Initramfs zu booten, SafeSetID LSM-Modul, Unterstützung für kombinierte Live-Patches.

Haupt- Innovationen:

  • Festplattensubsystem, E/A und Dateisysteme
    • Eine neue Schnittstelle für asynchrone E/A implementiert - io_uring, das sich durch die Unterstützung von E/A-Abfragen und die Möglichkeit auszeichnet, mit oder ohne Pufferung zu arbeiten. Erinnern wir uns daran, dass der zuvor vorgeschlagene asynchrone E/A-Mechanismus „aio“ keine gepufferte E/A unterstützte, nur im O_DIRECT-Modus arbeiten konnte (ohne Pufferung und Umgehung des Caches), Probleme mit der Sperrung hatte, weil auf die Verfügbarkeit von Metadaten gewartet wurde, und verursachte hohe Gemeinkosten aufgrund des Kopierens von Daten in den Speicher.

      Innerhalb der API
      Die Entwickler von io_uring haben versucht, die Mängel der alten AIO-Schnittstelle zu beseitigen. Von Performance io_uring ist sehr nah dran SPDK und ist libaio deutlich voraus, wenn mit aktiviertem Polling gearbeitet wird. Für die Verwendung von io_uring in Endanwendungen, die im Benutzerbereich ausgeführt werden, wurde eine Bibliothek vorbereitet befreiend, das ein High-Level-Framework über die Kernel-Schnittstelle bereitstellt;

    • Im Ereignisverfolgungsmechanismus im FS fanotify() hinzugefügt Unterstützung für die Verfolgung von Superblock- und Strukturänderungssituationen Dirent (Ereignisse zum Erstellen, Löschen und Verschieben von Verzeichnissen). Die vorgestellten Funktionen helfen dabei, die Skalierbarkeitsprobleme zu lösen, die beim Erstellen einer rekursiven Änderungsverfolgung in sehr großen Dateisystemen mithilfe des Inotify-Mechanismus auftreten (Dirent-Änderungen konnten bisher nur über Inotify verfolgt werden, aber
      Die Leistung unter Bedingungen der rekursiven Verfolgung großer verschachtelter Verzeichnisse ließ zu wünschen übrig. Jetzt kann eine solche Überwachung effektiv durch fanotify erfolgen;

    • Auf dem Btrfs-Dateisystem hinzugefügt die Möglichkeit, die Komprimierungsstufe für den ZSTD-Algorithmus anzupassen, was als optimaler Kompromiss zwischen der schnellen, aber ineffektiven lz4 und der langsamen, aber guten Komprimierung xz angesehen werden kann. Analog dazu, wie es zuvor möglich war, die Komprimierungsstufe bei Verwendung von zlib festzulegen, wurde für zstd Unterstützung für die Mount-Option „-o compress=zstd:level“ hinzugefügt. Während des Tests ermöglichte die minimale erste Stufe eine 2.658-fache Datenkomprimierung mit einer Komprimierungsgeschwindigkeit von 438.47 MB/s, einer Dekomprimierungsgeschwindigkeit von 910.51 MB/s und einem Speicherverbrauch von 780 MB, und die maximale Stufe 15 lieferte eine 3.126-fache Datenkomprimierung, jedoch mit einer Komprimierung Geschwindigkeit von 37.30 MB/s. Entpacken 878.84 MB/s und Speicherverbrauch 2547 MB;
    • Hinzugefügt von die Möglichkeit, von einem Dateisystem zu booten, das sich auf dem Device-Mapper-Gerät befindet, ohne initramfs zu verwenden. Ab der aktuellen Kernel-Version können Device-Mapper-Geräte direkt während des Bootvorgangs verwendet werden, beispielsweise als Partition mit dem Root-Dateisystem. Die Partition wird über den Boot-Parameter „dm-mod.create“ konfiguriert. Zu den zum Laden zugelassenen Device-Mapper-Modulen gehören: „crypt“, „delay“, „linear“, „snapshot-origin“ und „verity“;
    • Dem auf Flash-Laufwerke ausgerichteten F2FS-Dateisystem wurde das Flag F2FS_NOCOW_FL hinzugefügt, mit dem Sie den Copy-on-Write-Modus für eine bestimmte Datei deaktivieren können.
    • Dateisystem aus dem Kernel entfernt Exofs, eine Variante von ext2, angepasst für die Arbeit mit OSD-Objektspeichern (Object-based Storage Device). Auch die Unterstützung des SCSI-Protokolls für solche Objektspeichergeräte wurde entfernt;
  • Virtualisierung und Sicherheit
    • Option PR_SPEC_DISABLE_NOEXEC zu prctl() hinzugefügt, um die spekulative Ausführung von Anweisungen für den ausgewählten Prozess zu steuern. Mit einer neuen Option können Sie die spekulative Ausführung für Prozesse selektiv deaktivieren, die potenziell von einem Spectre-Angriff angegriffen werden könnten. Die Sperre dauert bis zum ersten Aufruf von exec();
    • Implementiertes LSM-Modul SafeSetID, was es Systemdiensten ermöglicht, Benutzer sicher zu verwalten, ohne die Rechte zu erweitern (CAP_SETUID) und ohne Root-Rechte zu erlangen. Berechtigungen werden durch die Definition von Regeln in securityfs basierend auf einer Whitelist gültiger Bindungen (in der Form „UID1:UID2“) zugewiesen;
    • Es wurden Änderungen auf niedriger Ebene hinzugefügt, die für das stapelbasierte Laden von Sicherheitsmodulen (LSMs) erforderlich sind. Einführung der Kernel-Boot-Option „lsm“, um zu steuern, welche Module in welcher Reihenfolge geladen werden;
    • Dem Audit-Subsystem wurde Unterstützung für Dateinamensräume hinzugefügt.
    • Erweitert die Funktionen des GCC-Plugins structleak, mit dem Sie potenzielle Lecks von Speicherinhalten blockieren können. Die Initialisierung aller im Code verwendeten Variablen durch Referenzzugriff auf den Stapel wird bereitgestellt.
  • Netzwerk-Subsystem
    • Für Steckdosen umgesetzt neue Option „SO_BINDTOIFINDEX“ ähnlich
      „SO_BINDTODEVICE“, aber als Argument wird die Indexnummer der Netzwerkschnittstelle anstelle des Schnittstellennamens verwendet;

    • Der mac80211-Stack bietet die Möglichkeit, einem Gerät mehrere BSSIDs (MAC-Adressen) zuzuweisen. Im Rahmen eines Projekts zur Optimierung der WLAN-Leistung verfügt der mac80211-Stack über eine Airtime-Abrechnung und die Möglichkeit, die Airtime auf mehrere Stationen zu verteilen (beim Betrieb im Access-Point-Modus wird langsamen Wireless-Stationen weniger Übertragungszeit zugewiesen, anstatt die Zeit gleichmäßig auf alle zu verteilen). Stationen);
    • Mechanismus hinzugefügt "Devlink-Gesundheit", das Benachrichtigungen bereitstellt, wenn Probleme mit der Netzwerkschnittstelle auftreten;
  • Speicher- und Systemdienste
    • Umgesetzt sichere Signalübertragung, die die Wiederverwendung von PID ermöglicht. Wenn Sie beispielsweise kill zuvor aufrufen, kann es vorkommen, dass unmittelbar nach dem Senden eines Signals die Ziel-PID aufgrund der Prozessbeendigung freigegeben und von einem anderen Prozess belegt wird und das Signal schließlich an einen anderen Prozess weitergeleitet wird. Um solche Situationen zu vermeiden, wurde ein neuer Systemaufruf pidfd_send_signal hinzugefügt, der Dateideskriptoren von /proc/pid verwendet, um eine stabile Prozessbindung sicherzustellen. Selbst wenn die PID während der Systemaufrufverarbeitung wiederverwendet wird, ändert sich der Dateideskriptor nicht und kann sicher zum Senden eines Signals an den Prozess verwendet werden.
    • Hinzugefügt von die Möglichkeit, permanente Speichergeräte zu verwenden (z. B. Persistent-Memory). NVDIMM) als RAM. Bisher unterstützte der Kernel solche Geräte als Speichergeräte, mittlerweile können sie aber auch als zusätzlicher RAM genutzt werden. Die Funktion wird als Reaktion auf die Wünsche von Benutzern implementiert, die bereit sind, eine Leistungsverzögerung in Kauf zu nehmen und die native Linux-Kernel-Speicherverwaltungs-API anstelle der vorhandenen Speicherzuweisungssysteme für den Benutzerbereich zu verwenden, die auf mmap für den Dax ausgeführt werden Datei;
    • Ein neuer CPU-Leerlauf-Handler hinzugefügt (cpuidle, entscheidet, wann die CPU in tiefe Energiesparmodi versetzt werden kann; je tiefer der Modus, desto größer die Einsparungen, aber auch desto länger dauert es, den Modus zu verlassen) – TEO (Timer Events Oriented Governor). ). Bisher wurden zwei CPU-Handler vorgeschlagen – „Menü“ und „Ladder“, die sich in der Heuristik unterscheiden. Der „menu“-Handler hat bekannte Probleme beim Treffen heuristischer Entscheidungen. Um diese zu beseitigen, wurde beschlossen, einen neuen Handler vorzubereiten. TEO ist als Alternative zum „Menü“-Handler positioniert und ermöglicht eine höhere Leistung bei gleichbleibendem Stromverbrauch.
      Sie können den neuen Handler mit dem Boot-Parameter „cpuidle.governor=teo“ aktivieren;

    • Im Rahmen der Arbeiten zur Beseitigung Probleme des Jahres 2038, verursacht durch einen Überlauf vom 32-Bit-Typ time_t, umfasst Systemaufrufe, die 32-Bit-Zeitzähler für 64-Bit-Architekturen anbieten. Dadurch kann die 64-Bit-time_t-Struktur nun auf allen Architekturen verwendet werden. Ähnliche Änderungen wurden auch im Netzwerk-Subsystem für Optionen implementiert Zeitstempel Netzwerksteckdosen;
    • In das Hot-Patching-System für den Kern (Live-Patching) hinzugefügt „Atomic-Replace“-Funktion zum atomaren Anwenden einer Reihe von Änderungen auf eine einzelne Funktion. Mit dieser Funktion können Sie zusammenfassende Patches verteilen, die mehrere Änderungen gleichzeitig abdecken, anstatt Live-Patches schrittweise in einer streng definierten Reihenfolge anzuwenden, was ziemlich schwierig beizubehalten ist. Während zuvor jede nachfolgende Änderung auf dem Status der Funktion nach der letzten Änderung basieren musste, ist es jetzt möglich, mehrere Änderungen gleichzeitig zu verbreiten, die an einen Anfangsstatus gebunden sind (d. h. Betreuer können stattdessen einen konsolidierten Patch relativ zum Basiskernel verwalten). einer Kette von Patches, die voneinander abhängig sind);
    • Angekündigt Veraltete Unterstützung für das ausführbare Dateiformat a.out und
      ENTFERNT Code zum Generieren von Kerndateien im A.out-Format, der sich in einem verlassenen Zustand befindet. Das a.out-Format wird auf Linux-Systemen seit langem nicht mehr verwendet und die Generierung von a.out-Dateien wird von modernen Tools in Standard-Linux-Konfigurationen seit langem nicht mehr unterstützt. Darüber hinaus kann der Loader für a.out-Dateien vollständig im Benutzerbereich implementiert werden;

    • Dem BPF-Programmüberprüfungsmechanismus wurde die Möglichkeit hinzugefügt, nicht verwendeten Code zu identifizieren und zu entfernen. Der Kernel enthält außerdem Patches mit Spinlock-Unterstützung für das BPF-Subsystem, die zusätzliche Funktionen für die Verwaltung der parallelen Ausführung von BPF-Programmen bieten;
  • Ausrüstung
    • Im Nouveau-Stil hinzugefügt Unterstützung für heterogenes Speichermanagement, sodass CPU und GPU auf gemeinsame synchronisierte Speicherbereiche zugreifen können. Das Shared Virtual Memory System (SVM, Shared Virtual Memory) ist auf Basis des HMM-Subsystems (Heterogeneous Memory Management) implementiert, das den Einsatz von Geräten mit eigenen Speicherverwaltungseinheiten (MMU, Memory Management Unit) ermöglicht, auf die zugegriffen werden kann Haupterinnerung. Insbesondere können Sie mit HMM einen gemeinsamen Adressraum zwischen GPU und CPU organisieren, in dem die GPU auf den Hauptspeicher des Prozesses zugreifen kann. Die SVM-Unterstützung ist derzeit nur für GPUs der Pascal-Familie aktiviert, obwohl auch Volta- und Turing-GPUs unterstützt werden. Außerdem im Jugendstil hinzugefügt neues ioctl zur Steuerung der Migration von Prozessspeicherbereichen in den GPU-Speicher;
    • Im Intel DRM-Treiber für GPU Skylake und höher (gen9+) inbegriffen Standardmäßig verhindert der Fastboot-Modus unnötige Modusänderungen während des Bootens. Hinzugefügt neue Gerätekennungen basierend auf den Mikroarchitekturen Coffelake und Ice Lake. Für Coffelake-Chips hinzugefügt GVT-Unterstützung (GPU-Virtualisierung). Für virtuelle GPUs umgesetzt VFIO EDID-Unterstützung. Für LCD-Panels MIPI/DSI hinzugefügt Unterstützung für ACPI/PMIC-Elemente. Umgesetzt neue TV-Modi 1080p30/50/60 TV;
    • Unterstützung für Vega10/20 BACO GPU zum amdgpu-Treiber hinzugefügt. Vega 10/20-Energieverwaltung und Vega 10-Kühler-Steuertabellen implementiert. Neue PCI-Gerätekennungen für Picasso-GPUs hinzugefügt. Добавлен Schnittstelle zur Verwaltung planbarer Abhängigkeiten zur Vermeidung von Deadlocks;
    • Добавлен DRM/KMS-Treiber für Bildschirmbeschleuniger ARM Komeda (Mali D71);
    • Unterstützung für Toppoly TPG110, Sitronix ST7701, PDA 91-00156-A0, LeMaker BL035-RGB-002 3.5 und Kingdisplay kd097d04 Bildschirmpanels hinzugefügt;
    • Unterstützung für die Audio-Codecs Rockchip RK3328, Cirrus Logic CS4341 und CS35L36, MediaTek MT6358, Qualcomm WCD9335 und Ingenic JZ4725B sowie die Audioplattform Mediatek MT8183 hinzugefügt;
    • Unterstützung für NAND-Controller Flash STMicroelectronics FMC2, Amlogic Meson hinzugefügt;
    • Beschleunigerunterstützung für Habana-KI-Hardwaresysteme hinzugefügt;
    • Unterstützung für NXP ENETC-Gigabit-Ethernet-Controller und die drahtlosen Schnittstellen MediaTek MT7603E (PCIe) und MT76x8 hinzugefügt.

Gleichzeitig die Latin American Free Software Foundation gebildet
вариант völlig kostenloser Kernel 5.1 - Linux-libre 5.1-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 MT7603- und Goya-Treibern deaktiviert. Aktualisierter Blob-Reinigungscode in den Treibern und Subsystemen wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifiex, btmrvl, btmtk und touchscreen_dmi. Die Blob-Bereinigung im Lantiq XRX200-Firmware-Loader wurde aufgrund der Entfernung aus dem Kernel gestoppt.

Source: opennet.ru

Kommentar hinzufügen