Bericht über die Entwicklung des FreeBSD-Projekts von April bis Juni 2019. Zu den Änderungen gehört:
- Allgemeine und systembezogene Fragen
- Das Kernteam hat beschlossen, eine Arbeitsgruppe zu gründen, die die Möglichkeit untersucht, die Quelltexte aus dem zentralisierten Versionskontrollsystem Subversion in das dezentrale System Git zu übertragen.
- Es wurde ein Fuzzing-Test des FreeBSD-Kernels mit Hilfe des Systems durchgeführt und eine Reihe von dabei festgestellten Fehlern wurden behoben. Es wurde eine Schnittstelle für das Fuzzing-Testing von Bibliotheken hinzugefügt, um die Kompatibilität mit 32-Bit-Umgebungen auf 64-Bit-Kernsystemen zu gewährleisten. Die Möglichkeit, syzkaller in virtuellen Maschinen basierend auf bhyve auszuführen, wurde implementiert. In der nächsten Phase ist geplant, den Testbereich für Systemaufrufe zu erweitern, den LLVM-Sanitizer zur Überprüfung des Kernels zu verwenden, netdump für die Speicherung von Kernel-Dumps während Abstürzen beim Fuzzing-Testing zu nutzen usw.
- Die Arbeit an der Aktualisierung der zlib-Implementierung auf Kernel-Ebene hat begonnen. Um dem Kernel den Zugriff auf den zlib-Code zu ermöglichen, wurde das Verzeichnis contrib/zlib in sys/contrib/zlib umbenannt, ebenso wurde die Header-Datei crc.h umbenannt, um Konflikte mit zlib/crc.h zu vermeiden. Veralteter Code, der von zlib und inflate abhängt, wurde bereinigt. Zukünftig ist geplant, die Möglichkeit zu schaffen, den Kernel gleichzeitig mit der alten und der neuen zlib zu kompilieren, um schrittweise auf die neue Version von Funktionen, die Kompression verwenden, umzusteigen;
- Die Infrastruktur zur Emulation der Linux-Umgebung (Linuxulator) wurde aktualisiert. Die Unterstützung von Debugging-Tools für Linux, wie z.B. dem Tool strace, wurde erweitert. Im Ports wurde das Paket linux-c7-strace hinzugefügt, das zur Tracing von ausführbaren Linux-Dateien anstelle der standardmäßigen Tools truss und ktrace verwendet werden kann, die derzeit einige Linux-spezifische Flags und Strukturen nicht decodieren können. Darüber hinaus wurde das Paket linux-ltp mit ausführbaren Dateien des Linux Test Project hinzugefügt und Kompatibilitätsprobleme mit ausführbaren Dateien, die mit neueren Versionen von glibc erstellt wurden, wurden gelöst;
- Die Implementierung von verzögerten Invaliderungsoperationen für Bindungen an physische Speicherseiten (delayed invalidation) im pmap-Mechanismus wurde auf die Verwendung eines lockfreien Warteschlangenverarbeitungsalgorithmus umgestellt, was die Probleme mit der Skalierbarkeit bei der Durchführung einer großen Anzahl paralleler unmap-Operationen beseitigt hat.
- Der Mechanismus zur Sperrung von Vnodes während der Ausführung von Systemaufrufen der Familie execve() wurde geändert, was die Effizienz bei der gleichzeitigen Ausführung von execve() für dieselbe Datei verbessert hat (z. B. bei der Durchführung von Build-Vorgängen mit parallelisierten Compilerstarts);
- Sicherheit
- Im Hypervisor bhyve wurde die Unterstützung für Live-Migration von Gastumgebungen von einem Host auf einen anderen und die Funktionalität Save/Restore weiter verbessert, die es ermöglicht, das Gastsystem einzufrieren und den Status in einer Datei zu speichern, um die Ausführung später fortzusetzen.
- Durch die Verwendung der Bibliothek libvdsk wurde in bhyve die Unterstützung für Disk-Images im QCOW2-Format hinzugefügt. Für den Betrieb ist die Installation erforderlich
Version von bhyve, die auf die Verwendung von Dateihandhabern auf Basis von libvdsk umgestellt wurde. Im Berichtszeitraum wurden auch Arbeiten an libvdsk durchgeführt, um die Integration neuer Formate zu erleichtern, die Lese- und Schreibgeschwindigkeit zu verbessern und die Unterstützung für Copy-On-Write hinzuzufügen. Zu den verbleibenden Aufgaben zählt die Integration von libvdsk in den Hauptbestand von bhyve; - In den Ports wurde ein System zur Sammlung von Informationen über den Datenverkehr hinzugefügt
, das es ermöglicht, Fallen für bösartige Netzwerkabfragen zu erstellen (IP und Domains aus schwarzen Listen werden überprüft) und Informationen über die entdeckte Aktivität an einen zentralen Server zu senden, um nachfolgende Blockierungen oder Analysen von Angriffen durchzuführen; - In den Ports wurde eine Plattform zur Erkennung von Angriffen, Analyse von Protokollen und Überwachung der Dateiintegrität hinzugefügt (Fork von Ossec mit Unterstützung für die Integration mit );
- Netzwerksubsystem
- Der Treiber ena wurde aktualisiert und unterstützt die zweite Generation von Netzwerkadaptern ENAv2 (Elastic Network Adapter), die in der Elastic Compute Cloud (EC2) Infrastruktur verwendet wird, um die Verbindung zwischen EC2-Knoten mit Geschwindigkeiten von bis zu 25 Gb/s zu organisieren. Der Treiber ena hat Unterstützung für NETMAP erhalten.
- In FreeBSD HEAD wurde ein neuer MMC/SD-Stack eingeführt, der auf dem CAM-Framework basiert und die Verbindung von Geräten mit dem SDIO-Interface (Secure Digital I/O) ermöglicht. Beispielsweise wird SDIO in WiFi- und Bluetooth-Modulen vieler Platinen, wie dem Raspberry Pi 3, verwendet. Der neue Stack ermöglicht auch die Nutzung des CAM-Interfaces, um SD-Kommandos aus Anwendungen im Benutzerspeicher zu senden, was die Erstellung von Gerätetreibern auf Benutzerebene ermöglicht. Die Arbeit an Treibern für Broadcom-Wireless-Chips, die im FullMAC-Modus arbeiten (eine Art eigenes Betriebssystem läuft auf dem Chip mit der Implementierung seines eigenen drahtlosen 802.11-Stacks), hat begonnen.
- Es 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 sowie die Modi SEEKHOLE/SEEKDATA in lseek und die operationale lokale Kopie von Teilen einer Datei auf dem Server (ohne Übertragung an den Client).
Derzeit ist in FreeBSD bereits eine grundlegende Unterstützung für die Operationen LayoutError, IOAdvise, Allocate und Copy implementiert. Es bleibt die Implementierung der Seek-Operation aus, die für die Verwendung von lseek(SEEKHOLE/SEEKDATA) mit NFS erforderlich ist. Die Unterstützung von NFSv4.2 ist für FreeBSD 13 geplant.
- Speichersysteme und Dateisysteme
- Das Projekt zur Überarbeitung des FUSE (File system in USErspace)-Treiber ist fast abgeschlossen, das die Umsetzung von Dateisystemen im Benutzerspeicher ermöglicht. Der ursprünglich gelieferte Treiber ist veraltet und enthält viele Fehler. Im Rahmen des Treiber-Modernisierungsprojekts wurde die Unterstützung des FUSE-Protokolls 7.23 implementiert (zuvor wurde Version 7.8, die vor 11 Jahren veröffentlicht wurde, unterstützt), es wurde Code zur Überprüfung der Zugriffsrechte auf der Kernel-Ebene hinzugefügt („-o default_permissions“), es wurden Aufrufe zu VOP_MKNOD, VOP_BMAP und VOP_ADVLOCK hinzugefügt, die Möglichkeit zur Unterbrechung von FUSE-Operationen wurde bereitgestellt, Unterstützung für unbenannte Pipes und Unix-Sockets in fusefs wurde hinzugefügt, die Nutzung von kqueue für /dev/fuse wurde ermöglicht, die Aktualisierung der Mount-Parameter über „mount -u“ wurde zugelassen, es wurde die Unterstützung für den Export von fusefs über NFS implementiert, die Berücksichtigung von RLIMIT_FSIZE wurde realisiert, die Flags FOPEN_KEEP_CACHE und FUSE_ASYNC_READ wurden hinzugefügt, erhebliche Leistungsoptimierungen wurden vorgenommen und die Cache-Organisation wurde verbessert.
- Im Code des Seitenaufrufs für den Swap-Pager wurde die Unterstützung für die BIO_DELETE-Operation hinzugefügt, die es ermöglicht, den TRIM-Befehl beim Löschen von Blöcken von SSD-Laufwerken zu verwenden, um deren Lebensdauer zu verlängern.
- Hardwareunterstützung
- Die Arbeit an der Implementierung der Unterstützung für ARM64 SoC Broadcom BCM5871X mit ARMv8 Cortex-A57-Prozessoren, die für Router, Gateways und Netzwerkspeicher eingesetzt werden sollen, wurde fortgesetzt. Im Berichtszeitraum wurde die Unterstützung interner und externer iProc PCIe-Busse verbessert, die Unterstützung für BNXT Ethernet hinzugefügt und es wird an der Nutzung des integrierten Kryptomoduls zur Beschleunigung von IPsec gearbeitet. Die Integration des Codes in den HEAD-Zweig wird im zweiten Halbjahr erwartet;
- Die Arbeit an der Unterstützung des 64-Bit SoC NXP LS1046A auf Basis des ARMv8 Cortex-A72-Prozessors mit integriertem Beschleunigungsmotor für Datenpaketanalyse, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 und USB 3.0 hat begonnen. Die Unterstützung der Basisplattform (Multi-User SMP) und von SATA 3.0 ist bereits implementiert. Die Unterstützung für USB 3.0, SD/MMC und I2C ist in der Entwicklung. Geplant ist die Unterstützung von Ethernet, GPIO und QSPI. Der Abschluss der Arbeiten und die Aufnahme in den HEAD-Zweig wird im 4. Quartal 2019 erwartet.
- Die Treiber mlx5en und mlx5ib für Ethernet- und InfiniBand-Adapter von Mellanox ConnectX-4 [Lx], ConnectX-5 [Ex] und ConnectX-6 [Dx] wurden aktualisiert. Die Unterstützung für Mellanox Socket Direct-Adapter (ConnectX-6), die eine Bandbreite von bis zu 200 Gb/s über die PCIe Gen 3.0-Bus ermöglichen, wurde hinzugefügt. Für die Mehrkernchips "BlueField" wurde die Treiberunterstützung RShim hinzugefügt. Im Ports-Bereich wurde das Paket mstflint mit einer Reihe von Diagnosetools für Mellanox-Adapter ergänzt;
- Anwendungen und Ports-System
- Die Komponenten des Grafikkernels wurden aktualisiert. Der Treiber drm.ko (Direct Rendering Manager) aus dem Linux-Kernel 5.0 wurde portiert. Dieser Treiber wird als experimentell betrachtet und wurde in die Port-Datenbank als graphics/drm-devel-kmod aufgenommen. Da der Treiber das aktualisierte Framework Linux KPI zur Kompatibilität mit der DRM-API des Linux-Kernels verwendet, wird FreeBSD CURRENT benötigt. Aus Linux wurde auch der drm-Treiber vboxvideo.ko für die virtuelle GPU VirtualBox portiert. Das Paket Mesa wurde auf die Version 18.3.2 aktualisiert und auf die Nutzung von LLVM aus dem Port devel/llvm80 statt devel/llvm60 umgestellt.
- Der Ports-Baum von FreeBSD hat die Marke von 37000 Ports überschritten, die Anzahl der offenen PRs liegt bei 2146. Im Berichtszeitraum wurden 7837 Änderungen von 172 Entwicklern eingebracht. Drei neue Mitglieder haben Commit-Rechte erhalten. Zu den bemerkenswerten Versionsaktualisierungen in den Ports zählen: MySQL 5.7, Python 3.6, Ruby 2.5, Samba 4.8, Julia 1.0, Firefox 68.0 und Chromium 75.0.3770.100. Alle Ports in Go wurden auf die Verwendung des Flags „USES=go“ umgestellt. Das Flag „USES=cabal“ wurde für den Paketmanager Cabal, der für Haskell-Code verwendet wird, hinzugefügt. Der strenge Stack-Schutzmodus wurde aktiviert. Standardmäßig wird die Version Python 3.6 anstelle von 2.7 angeboten.
- Die Veröffentlichung des Dienstprogramms , das ähnlich wie \/sbin\/sysctl funktioniert und für die Ausgabe verwendet und eine erweiterte Reihe von Optionen bietet. Nsysctl kann zur anschaulichen Überwachung des Status von sysctl-Werten und zur strukturierten Bereitstellung von Informationen über Objekte eingesetzt werden. Ausgaben sind in den Formaten XML, JSON und HTML möglich;
Quelle: opennet.ru
