Bericht über die Entwicklung des FreeBSD-Projekts von Januar bis März 2020. Zu den Änderungen gehören:
- Allgemeine und systembezogene Fragen
- Aus dem Quelltext von FreeBSD-CURRENT wurde eine Sammlung von GCC-Compilern sowie die ungenutzten Utilities gperf, gcov und gtc (Device Tree Compiler) entfernt. Alle Plattformen, die Clang nicht unterstützen, wurden auf die Verwendung externer Build-Tools umgestellt, die aus Ports installiert werden. In dem Basissystem wurde eine veraltete Version von GCC 4.2.1 mitgeliefert, und die Integration neuerer Versionen war aufgrund des Wechsels von 4.2.2 zu GPLv3, der als unzulässig für die Basiskomponenten von FreeBSD angesehen wurde, nicht möglich. Aktuelle Versionen von GCC, einschließlich GCC 9, können wie gewohnt aus Paketen und Ports installiert werden.
- In der Infrastruktur zur Emulation der Linux-Umgebung (Linuxulator) wurde die Unterstützung für den Systemaufruf sendfile, den TCP_CORK-Modus (erforderlich für nginx) und das FLAG MAP_32BIT (löst das Problem beim Ausführen von Paketen mit Mono aus Ubuntu Bionic) hinzugefügt. Probleme mit der DNS-Resolution bei der Verwendung von glibc neuerer Version als 2.30 (z. B. aus CentOS 8) wurden behoben.
In der Infrastruktur der kontinuierlichen Integration wurde der Start von Aufgaben für LTP (Linux Testing Project) unter Linuxulator zur Prüfung der Verbesserungen, die im Code zur Unterstützung von Linux vorgenommen wurden, ermöglicht. Etwa 400 Tests schlagen fehl und benötigen Korrekturen (einige Fehler resultieren aus Fehlalarmen, andere erfordern triviale Korrekturen, aber es gibt auch solche, für deren Behebung die Unterstützung neuer Systemaufrufe hinzugefügt werden muss). Es wurde an der Codebereinigung des Linuxulators und an der Vereinfachung der Fehlersuche gearbeitet. Patches mit Unterstützung für erweiterte Attribute und den Systemaufruf fexecve wurden vorbereitet, aber noch nicht überprüft. - Die Sitzungen der Arbeitsgruppe, die mit der Migration der Quelltexte von dem zentralisierten Versionsverwaltungssystem Subversion zu dem dezentralisierten System Git beauftragt wurde, dauern an. Der Bericht mit Vorschlägen zur Migration befindet sich in der Vorbereitung.
- Im (Laufzeit-Linker) der Modus für die direkte Ausführung („/libexec/ld-elf.so.1 {Pfad} {Argumente}“) wurde verbessert.
- Das Projekt zur Fuzzing-Testung des FreeBSD-Kernels mit dem Syzkaller-System entwickelt sich weiter. Im Berichtszeitraum wurden Probleme im Netzwerk-Stack und im Code zur Bearbeitung von Dateideskriptoren, die mithilfe von Syzkaller identifiziert wurden, behoben. Aufgrund der Fehlerdiagnose wurden Änderungen am SCTP-Stack hinzugefügt, die die Fehlersuche vereinfachen. In das stress2-Set wurden Regeln zur Identifizierung möglicher Regressionen aufgenommen. Die Unterstützung für Fuzzing-Tests neuer Systemaufrufe, einschließlich copy_file_range(), __realpathat() und Aufrufen des Capsicum-Subsystems, wurde hinzugefügt. Die Arbeiten zur Abdeckung des Linux-Emulationsschichts durch Fuzzing-Tests werden fortgesetzt. Es wurde eine Analyse und Behebung von Fehlern aus den aktuellen Coverity Scan-Berichten durchgeführt.
- Im System der kontinuierlichen Integration wurde der Übergang zum Ausführen aller Tests im Head-Branch nur mit clang/lld vollzogen. Beim Testen für RISC-V wurde die vollständige Erstellung eines Festplattensatzes für die Ausführung von Tests in QEMU unter Verwendung von OpenSBI sichergestellt. Neue Aufgaben zum Testen von Images und virtuellen Maschinen für powerpc64 (FreeBSD-head-powerpc64-images, FreeBSD-head-powerpc64-testvm) wurden hinzugefügt.
- Es wird daran gearbeitet, das Kyua-Testset von den Ports (devel/kyua) in das Basissystem zu transferieren, um Probleme (Pakete werden sehr langsam installiert) zu lösen, die beim Einsatz von Kyua auf neuen Architekturen auftreten, für die die Entwicklung unter Verwendung eines Emulators oder FPGA erfolgt. Die Integration in das Basissystem wird das Testen eingebetteter Plattformen erheblich vereinfachen und die Anbindung an Systeme der kontinuierlichen Integration erleichtern.
- Ein Projekt zur Optimierung der Leistung des Netzwerkbrückentreibers wurde gestartet. , der einen Mutex zur Sperrung interner Daten verwendet, was verhindert, dass die gewünschte Leistung auf Systemen mit einer großen Anzahl von Jail-Umgebungen oder virtuellen Maschinen, die in einem Netzwerk zusammengefasst sind, erreicht wird. In diesem Stadium wurden Tests in den Code aufgenommen, um Regressionen im Prozess der Modernisierung von Sperren zu vermeiden. Es wird die Möglichkeit der Verwendung von ConcurrencyKit zur Parallelisierung der Datenübertragungs-Handler (bridge_input(), bridge_output(), bridge_forward(), …) erwogen.
- Ein neuer Systemaufruf sigfastblock wurde hinzugefügt, der es einem Thread ermöglicht, einen Speicherblock für einen schnellen Signalhandler zu bestimmen, um die Leistung der Ausnahme-Handler zu steigern.
- Im Kernel wurde die Unterstützung für atomare LSE-Instruktionen (Large System Extension) hinzugefügt, die von ARMv8.1-Systemen unterstützt werden. Diese Instruktionen sind notwendig, um die Leistung auf Cavium ThunderX2- und AWS Graviton 2-Boards zu verbessern. Die hinzugefügten Änderungen bestimmen das Vorhandensein der LSE-Unterstützung und aktivieren dynamisch die Implementierung von atomic basierend auf diesen. Bei den Tests konnte mit der Nutzung von LSE die Prozessorzeit, die für das Kernel-Build benötigt wird, um 15 % gesenkt werden.
- Die Leistung wurde optimiert und die Funktionalität des Werkzeugs für ELF-kompatible ausführbare Dateien erweitert.
Die Unterstützung für das Caching von Debug-Informationen im DWARF-Format wurde hinzugefügt, Probleme in den Tools elfcopy/objcopy wurden behoben, und die Verarbeitung von DW_AT_ranges wurde hinzugefügt.
In readelf wurde die Möglichkeit zur Dekodierung der Flags PROTMAX_DISABLE, STKGAP_DISABLE und WXNEEDED sowie Xen- und GNU Build-ID implementiert.
- Sicherheit
- Zur Verbesserung der FreeBSD-Leistung in Azure-Cloud-Umgebungen wird an der Unterstützung des HyperV Socket-Mechanismus gearbeitet, der es ermöglicht, einen Socket-Interface für die Interaktion des Gastsystems mit der Host-Umgebung ohne Netzwerkkonfiguration zu nutzen.
- Es wird an der Gewährleistung reproduzierbarer Builds von FreeBSD gearbeitet, die sicherstellen, dass die ausführbaren Dateien der Systemkomponenten genau aus den angegebenen Quelltexten erstellt werden und keine unerwünschten Änderungen enthalten.
- Das Tool elfctl wurde mit der Möglichkeit ausgestattet, zusätzliche Schutzmechanismen (ASLR, PROT_MAX, Stack-Gap, W+X-Mapping) auf Einzelprozess-Ebene zu steuern.
- Speichersysteme und Dateisysteme
- Es wird an der Implementierung der Möglichkeit gearbeitet, NFS über einen verschlüsselten Kommunikationskanal auf Basis von TLS 1.3 zu betreiben, anstelle von Kerberos (Modus sec=krb5p), das nur die Verschlüsselung von RPC-Nachrichten unterstützt und nur softwareseitig implementiert wird. Die neue Implementierung nutzt den von Kernel bereitgestellten TLS-Stack, der Hardwarebeschleunigungsmöglichkeiten ermöglicht. Der Code für NFS über TLS ist fast bereit für Tests, benötigt jedoch noch Arbeiten zur Unterstützung von signierten Client-Zertifikaten und zur Anpassung des Kernel-TLS-Stacks für die Übertragung von NFS-Daten (Patches für den Empfang sind bereits fertiggestellt).
- Hardwareunterstützung
- Es wird an der Unterstützung chinesischer x86-CPUs von Hygon auf Basis von AMD-Technologien gearbeitet;
- Im Rahmen von CheriBSD, einem Abzweig von FreeBSD für die Forschungsprozessarchitektur (Capability Hardware Enhanced RISC Instructions) setzt die Implementierung der Unterstützung des ARM Morello-Prozessors fort, der das CHERI-basierte Speicherzugriffsverwaltungssystem unterstützt, das auf dem Schutzmodell des Capsicum-Projekts basiert. Der Morello-Chip soll 2021 veröffentlicht werden. Derzeit liegt der Fokus auf der Hinzufügung der Unterstützung für die Arm Neoverse N1-Plattform, die der Grundlage von Morello dient. Ein erster Port von CheriBSD für die RISC-V-Architektur wurde vorgestellt. Die Entwicklung von CheriBSD für den Referenzprototyp CHERI auf MIPS64-Architektur geht weiter.
- Die Portierung von FreeBSD für den 64-Bit SoC NXP LS1046A, basierend auf dem ARMv8 Cortex-A72-Prozessor mit integriertem Netzwerkpaketbeschleuniger, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 und USB 3.0, wurde fortgesetzt. Derzeit werden Treiber für QorIQ und LS1046A, GPIO, QorIQ LS10xx AHCI, VF610 I2C, Epson RX-8803 RTC, QorIQ LS10xx SDHCI für die Überführung in den Hauptzweig von FreeBSD vorbereitet.
- In der Version 2.1.1 wurde der Treiber ena mit Unterstützung für die zweite Generation der ENAv2 (Elastic Network Adapter)-Netzwerkadapter aktualisiert, die in der Elastic Compute Cloud (EC2)-Infrastruktur verwendet werden, um eine Verbindung zwischen EC2-Knoten mit Geschwindigkeiten von bis zu 25 Gb/s herzustellen. Ein Update auf ENA 2.2.0 wird vorbereitet.
- Die Verbesserung des FreeBSD-Parks für die powerpc64-Plattform wird fortgesetzt. Der Schwerpunkt liegt darauf, eine qualitativ hochwertige Leistung auf Systemen mit IBM POWER8- und POWER9-Prozessoren zu gewährleisten. Im Berichtszeitraum wurde FreeBSD-CURRENT auf den LLVM/Clang 10.0-Compiler und lld als Linker anstelle von GCC umgestellt. Standardmäßig wird für powerpc64-Systeme das ELFv2 ABI verwendet, während die Unterstützung für ELFv1 ABI eingestellt wurde. In FreeBSD-STABLE bleibt vorerst gcc 4.2.1. Probleme mit den Treibern virtio, aacraid und ixl wurden behoben. Auf powerpc64-Systemen wurde die Möglichkeit geschaffen, QEMU ohne Unterstützung für Huge Pages auszuführen.
- Die Arbeiten an der Unterstützung der RISC-V-Architektur werden fortgesetzt. In der aktuellen Version wird FreeBSD bereits erfolgreich auf der SiFive Hifive Unleashed-Platine geladen, für die Treiber vorbereitet wurden.
UART, SPI und PRCI, unterstützt die OpenSBI-Firmware und SBI 0.2. Im Berichtszeitraum lag der Fokus auf der Migration von GCC zu clang und lld.
- Anwendungen und Ports-System
- Die Sammlung der Ports von FreeBSD hat die Grenze von 39.000 Ports überschritten, die Anzahl der offenen PRs liegt etwas über 2400, von denen 640 PRs noch nicht bearbeitet sind. Im Berichtszeitraum wurden 8146 Änderungen von 173 Entwicklern vorgenommen. Vier neue Teilnehmer (Loïc Bartoletti, Mikael Urankar, Kyle Evans, Lorenzo Salvadore) erhielten Commit-Rechte. Das Flag USES=qca wurde hinzugefügt und das Flag USES=zope wurde entfernt (wegen Inkompatibilität mit Python 3). Es wird daran gearbeitet, Python 2.7 aus dem Ports-Baum zu entfernen – alle Ports, die an Python 2 gebunden sind, müssen auf Python 3 portiert werden oder werden entfernt. Der Paketmanager pkg wurde auf Version 1.13.2 aktualisiert.
- Die Komponenten des Grafikstapels und die mit xorg verbundenen Ports wurden aktualisiert.
Der X.org-Server wurde auf Version 1.20.8 aktualisiert (zuvor wurde die Version 1.18 bereitgestellt), was es ermöglicht hat, FreeBSD standardmäßig auf die Verwendung des Backends udev/evdev zur Verarbeitung von Eingabegeräten umzustellen. Das Paket Mesa wurde standardmäßig auf die Verwendung der DRI3-Erweiterung anstelle von DRI2 umgestellt. Es wird daran gearbeitet, die Grafiktreiber, den Stack der Eingabegeräte und die Komponenten drm-kmod aktuell zu halten (ein Port, der die Funktionalität der DRM-Module amdgpu, i915 und radeon bereitstellt, unter Verwendung des Frameworks linuxkpi für die Kompatibilität mit dem Direct Rendering Manager des Linux-Kernels). - Der Desktop KDE Plasma, KDE Frameworks, KDE Applications und Qt wurden aktuell gehalten und auf die neuesten Versionen aktualisiert. Ein neues App kstars (Sternenatlas) wurde in die Ports aufgenommen.
- Es wurden Arbeiten zur Behebung von regressiven Änderungen im Fenstermanager xfwm4 durchgeführt, die nach dem Update von Xfce auf Version 4.14 aufgetreten sind (z. B. es traten Artefakte bei der Dekoration von Fenstern auf).
- Der Wine-Port wurde auf die Version Wine 5.0 aktualisiert (zuvor wurde 4.0.3 angeboten).
- Seit Version 1.14 bietet der Go-Compiler offizielle Unterstützung für die Architektur ARM64 für FreeBSD 12.0.
- OpenSSH im Basissystem wurde auf Version 7.9p1 aktualisiert.
- Die Bibliothek sysctlmibinfo2 wurde implementiert und in den Ports (devel/libsysctlmibinfo2) bereitgestellt, die eine API für den Zugriff auf die sysctl MIB bereitstellt und die Übersetzung von sysctl-Namen in Objekt-IDs (OID) durchführt.
- Ein Update des Distributionspakets wurde vorbereitet. , das eine Edition von FreeBSD darstellt, die für den Einsatz als tragbarer Desktop, der von einem USB-Stick gebootet werden kann, angepasst wurde. Die grafische Umgebung basiert auf dem Fenstermanager . Zum Mounten von Speichermedien wird (CD9660, FAT, HFS+, NTFS, Ext2/3/4 wird unterstützt), zur Einrichtung eines drahtlosen Netzwerks — , und zur Steuerung der Lautstärke — .
- Die an der Erstellung umfassender Dokumentation für den Jail-Management-Manager . Es wird an der Veröffentlichung von pot 0.11.0 gearbeitet, das Möglichkeiten zur Verwaltung des Netzwerk-Stacks bieten wird.
Quelle: opennet.ru
