FreeBSD Q2019 XNUMX Fortschrittsbericht

Veröffentlicht Bericht über die Entwicklung des FreeBSD-Projekts von April bis Juni 2019. Unter den Änderungen können wir Folgendes feststellen:

  • Allgemeine und systemische Probleme
    • Das Kernteam beschloss, eine Arbeitsgruppe zu gründen, um die Möglichkeit zu untersuchen, Quellcode vom zentralisierten Subversion-Quellcodeverwaltungssystem auf das dezentrale Git-System zu verschieben.
    • Fuzz-Tests des FreeBSD-Kernels mit dem System durchgeführt syzkaller und eine Reihe festgestellter Fehler wurden korrigiert. Eine Ebene zum Fuzzing-Testen von Bibliotheken auf Kompatibilität mit einer 32-Bit-Umgebung auf Systemen mit einem 64-Bit-Kernel hinzugefügt. Die Möglichkeit, Syzkaller in Bhyve-basierten virtuellen Maschinen auszuführen, wurde implementiert. In der nächsten Phase ist geplant, die Abdeckung von Systemaufruftests zu erweitern, den LLVM-Sanitizer zum Überprüfen des Kernels zu verwenden, Netdump zum Speichern von Kernel-Dumps bei Abstürzen während Fuzzing-Tests zu verwenden usw.
    • Die Arbeiten zur Aktualisierung der zlib-Implementierung auf Kernel-Ebene haben begonnen. Für den Kernel-Zugriff auf zlib-Code wurde das Verzeichnis contrib/zlib in sys/contrib/zlib umbenannt, und die Header-Datei crc.h wurde ebenfalls umbenannt, um Konflikte mit zlib/crc.h zu vermeiden. Bereinigter Legacy-Code, der von zlib und inflate abhing. Als nächstes ist geplant, die Möglichkeit bereitzustellen, den Kernel gleichzeitig mit der alten und neuen zlib zu erstellen, um Funktionen, die Komprimierung verwenden, schrittweise auf die neue Version zu übertragen;
    • Die Linux-Umgebungsemulationsinfrastruktur (Linuxulator) wurde aktualisiert. Verbesserte Unterstützung für Linux-Debugging-Tools wie das Strace-Dienstprogramm. Den Ports wurde das Paket linux-c7-strace hinzugefügt, mit dem ausführbare Linux-Dateien anstelle der Standarddienstprogramme truss und ktrace verfolgt werden können, die einige Linux-spezifische Flags und Strukturen noch nicht dekodieren können. Darüber hinaus wurde das Paket linux-ltp mit ausführbaren Dateien des Linux-Testprojekts hinzugefügt und Kompatibilitätsprobleme mit ausführbaren Dateien, die mit neuen Versionen von glibc verknüpft sind, wurden behoben.
    • Die Implementierung verzögerter Ungültigmachungsoperationen im pmap-Mechanismus wurde auf die Verwendung eines Warteschlangenverarbeitungsalgorithmus übertragen, der ohne Sperren arbeitet, was es ermöglichte, Skalierbarkeitsprobleme bei der Durchführung einer großen Anzahl paralleler Unmap-Operationen zu lösen;
    • Der Mechanismus zum Blockieren von vnode während der Ausführung von Systemaufrufen der execve()-Familie wurde geändert, wodurch eine höhere Effizienz bei gleichzeitiger Ausführung von execve() für dieselbe Datei erreicht werden konnte (z. B. bei der Durchführung von Assembly-Operationen mit Parallelisierung). des Compiler-Starts);
  • Sicherheit
    • Der Bhyve-Hypervisor verbessert weiterhin die Unterstützung für die Live-Migration von Gastumgebungen von einem Host auf einen anderen sowie die Funktion „Speichern/Wiederherstellen“, die es Ihnen ermöglicht, das Gastsystem einzufrieren, den Status in einer Datei zu speichern und dann die Ausführung fortzusetzen.
    • Durch die Verwendung der libvdsk-Bibliothek hat bhyve Unterstützung für Disk-Images im QCOW2-Format hinzugefügt. Für den Betrieb ist eine Installation erforderlich
      speziell modifiziert Version von bhyve, die konvertiert wurde, um auf libvdsk basierende Dateioperationshandler zu verwenden. Im Berichtszeitraum führte libvdsk außerdem Arbeiten durch, um die Integration der Unterstützung für neue Formate zu vereinfachen, die Lese- und Schreibleistung zu verbessern und Unterstützung für Copy-On-Write hinzuzufügen. Von den verbleibenden Aufgaben ist die Integration von libvdsk in die Hauptstruktur von Bhyve zu erwähnen;

    • Den Häfen wurde ein System zur Erfassung von Verkehrsinformationen hinzugefügt
      Maltrail, mit dem Sie Fallen für böswillige Netzwerkanfragen erstellen können (IPs und Domänen aus Blacklists werden überprüft) und Informationen über erkannte Aktivitäten an einen zentralen Server senden, um Angriffsversuche anschließend zu blockieren oder zu analysieren;

    • Den Ports wurden Plattformen zur Erkennung von Angriffen, zur Analyse von Protokollen und zur Überwachung der Dateiintegrität hinzugefügt Wazuh (Zweig von Ossec mit Unterstützung für die Integration mit ELK-Stapel);
  • Netzwerk-Subsystem
    • Der ena-Treiber wurde aktualisiert, um die zweite Generation von ENAv2-Netzwerkadaptern (Elastic Network Adapter) zu unterstützen, die in der Elastic Compute Cloud (EC2)-Infrastruktur verwendet werden, um die Kommunikation zwischen EC2-Knoten mit Geschwindigkeiten von bis zu 25 Gbit/s zu organisieren. Dem ena-Treiber wurde NETMAP-Unterstützung hinzugefügt.
    • FreeBSD HEAD übernimmt einen neuen MMC/SD-Stack, der auf dem CAM-Framework basiert und Ihnen den Anschluss von Geräten mit einer SDIO-Schnittstelle (Secure Digital I/O) ermöglicht. Beispielsweise wird SDIO in WiFi- und Bluetooth-Modulen für viele Boards wie dem Raspberry Pi 3 verwendet. Der neue Stack ermöglicht es auch, die CAM-Schnittstelle zum Senden von SD-Befehlen von Anwendungen im User Space zu verwenden, was die Erstellung von Geräten ermöglicht Treiber, die auf Benutzerebene arbeiten. Die Arbeit an der Entwicklung von Treibern für Broadcom-Wireless-Chips, die im FullMAC-Modus arbeiten, hat begonnen (auf der Chipseite läuft so etwas wie ein eigenes Betriebssystem mit Implementierungen seines 802.11-Wireless-Stacks);
    • Derzeit wird an der Implementierung von NFSv4.2 (RFC-7862) für FreeBSD gearbeitet. Die neue Version von NFS bietet Unterstützung für die Funktionen posix_fadvise, posix_fallocate, die Modi SEEKHOLE/SEEKDATA in lseek und den Betrieb des lokalen Kopierens von Teilen einer Datei auf dem Server (ohne Übertragung an den Client).

      FreeBSD bietet derzeit grundlegende Unterstützung für die Vorgänge LayoutError, IOAdvise, Allocate und Copy. Es bleibt nur noch die Implementierung der Seek-Operation, die für die Verwendung von lseek(SEEKHOLE/SEEKDATA) mit NFS erforderlich ist. NFSv4.2-Unterstützung ist für FreeBSD 13 geplant;

  • Speicher- und Dateisysteme
    • Das Projekt zur Überarbeitung des Treibers für das Subsystem FUSE (File system in USErspace), das die Erstellung von Implementierungen von Dateisystemen im Userspace ermöglicht, steht kurz vor dem Abschluss. Der ursprünglich mitgelieferte Treiber ist veraltet und enthält viele Fehler. Im Rahmen des Treibermodernisierungsprojekts wurde die Unterstützung für das FUSE 7.23-Protokoll implementiert (zuvor wurde die vor 7.8 Jahren veröffentlichte Version 11 unterstützt), Code zur Überprüfung der Zugriffsrechte auf der Kernelseite („-o default_permissions“) und Aufrufe hinzugefügt VOP_MKNOD, VOP_BMAP und VOP_ADVLOCK wurden hinzugefügt, die Möglichkeit, FUSE-Vorgänge zu unterbrechen, Unterstützung für unbenannte Pipes und Unix-Sockets in Fusefs hinzugefügt, die Möglichkeit, kqueue für /dev/fuse zu verwenden, ermöglichte das Aktualisieren von Mount-Parametern über „mount -u“, Unterstützung hinzugefügt für den Export von Fusefs über NFS wurde die RLIMIT_FSIZE-Abrechnung implementiert, FOPEN_KEEP_CACHE-Flags und FUSE_ASYNC_READ hinzugefügt, es wurden erhebliche Leistungsoptimierungen vorgenommen und die Caching-Organisation wurde verbessert;
    • Dem Swap-Pager-Code wurde Unterstützung für die Operation BIO_DELETE hinzugefügt, die es Ihnen ermöglicht, den TRIM-Befehl beim Entfernen von Blöcken von SSD-Laufwerken zu verwenden, um deren Lebensdauer zu erhöhen.
  • Hardware-Unterstützung
    • Es wird weiterhin an der Implementierung der Unterstützung für den ARM64-SoC Broadcom BCM5871X mit ARMv8-Cortex-A57-Prozessoren gearbeitet, der auf den Einsatz in Routern, Gateways und Netzwerkspeichern abzielt. Im Berichtszeitraum wurde die Unterstützung für interne und externe iProc-PCIe-Busse verbessert, Unterstützung für BNXT-Ethernet hinzugefügt und es wird daran gearbeitet, die integrierte Krypto-Engine zur Beschleunigung von IPsec zu nutzen. Die Integration des Codes in den HEAD-Zweig wird in der zweiten Jahreshälfte erwartet;
    • Die Arbeiten zur Unterstützung des 64-Bit-SoC NXP LS1046A auf Basis des ARMv8 Cortex-A72-Prozessors mit integrierter Beschleunigungs-Engine für die Netzwerkpaketverarbeitung, 10-Gbit-Ethernet, PCIe 3.0, SATA 3.0 und USB 3.0 haben begonnen. Die Unterstützung der Basisplattform (Multi-User-SMP) und SATA 3.0 ist bereits implementiert. Unterstützung für USB 3.0, SD/MMC und I2C ist in der Entwicklung. Die Pläne umfassen die Unterstützung von Ethernet, GPIO und QSPI. Der Abschluss der Arbeiten und die Aufnahme in die HEAD-Niederlassung werden im 4. Quartal 2019 erwartet.
    • Aktualisierte mlx5en- und mlx5ib-Treiber für Mellanox ConnectX-4 [Lx], ConnectX-5 [Ex] und ConnectX-6 [Dx] Ethernet- und InfiniBand-Adapter. Unterstützung für Mellanox Socket Direct (ConnectX-6)-Adapter hinzugefügt, was einen Durchsatz von bis zu 200 Gbit/s auf dem PCIe Gen 3.0-Bus ermöglicht. Für Multicore-BlueField-Chips wurde Unterstützung für den RShim-Treiber hinzugefügt. Den Ports wurde das mstflint-Paket mit einer Reihe von Diagnosedienstprogrammen für Mellanox-Adapter hinzugefügt.
  • Anwendungen und Portsystem
    • Die Komponenten des Grafikstapels wurden aktualisiert. Der drm.ko-Treiber (Direct Rendering Manager) wurde vom Linux 5.0-Kernel portiert. Dieser Treiber gilt als experimentell und wurde dem Ports-Baum als Graphics/drm-devel-kmod hinzugefügt. Da der Treiber das aktualisierte Linux-KPI-Framework verwendet, um mit der DRM-API des Linux-Kernels kompatibel zu sein, ist FreeBSD CURRENT für die Ausführung erforderlich. Der vboxvideo.ko-DRM-Treiber für die virtuelle VirtualBox-GPU wurde ebenfalls von Linux portiert. Das Mesa-Paket wurde auf Version 18.3.2 aktualisiert und auf die Verwendung von LLVM vom Port devel/llvm80 anstelle von devel/llvm60 umgestellt.
    • Der FreeBSD-Portsbaum hat 37000 Ports überschritten, die Zahl der nicht geschlossenen PRs liegt weiterhin bei 2146. Im Berichtszeitraum wurden 7837 Änderungen von 172 Entwicklern vorgenommen. Drei neue Teilnehmer erhielten Committerrechte. Zu den bedeutenden Versionsaktualisierungen in den Ports gehören: MySQL 5.7, Python 3.6, Ruby 2.5, Samba 4.8, Julia 1.0, Firefox 68.0, Chromium 75.0.3770.100. Alle Go-Ports wurden so konvertiert, dass sie das Flag „USES=go“ verwenden. Flag „USES=cabal“ zum Cabal-Paketmanager hinzugefügt, der für Haskell-Code verwendet wird. Der strikte Stapelschutzmodus ist aktiviert. Die Standardversion von Python ist 3.6 statt 2.7.
    • Die Utility-Version wurde vorbereitet nsysctl 1.0, das ein Analogon zu /sbin/sysctl bietet, das verwendet libxo für die Ausgabe und Bereitstellung eines erweiterten Satzes an Optionen. Nsysctl kann verwendet werden, um den Status von Sysctl-Werten visuell zu überwachen und Informationen zu Objekten in strukturierter Form darzustellen. Die Ausgabe in den Formaten XML, JSON und HTML ist möglich;

Source: opennet.ru

Kommentar hinzufügen