Bericht über die Entwicklung des FreeBSD-Projekts von Januar bis März 2020. Zu den Änderungen gehört:
- Allgemeine und systembezogene Fragen
- Aus dem Quellbaum von FreeBSD-CURRENT wurde die Sammlung von GCC-Compilern sowie die ungenutzten Utilities gperf, gcov und gtc (Compiler devicetree) entfernt. Alle Plattformen, die Clang nicht unterstützen, wurden auf die Nutzung externer Build-Tools umgestellt, die aus Ports installiert werden. In dem Basissystem wurde eine veraltete Version von GCC 4.2.1 bereitgestellt, und die Integration neuerer Versionen war aufgrund des Wechsels von 4.2.2 zu GPLv3, die für die grundlegenden Komponenten von FreeBSD als unzulässig angesehen wurde, nicht möglich. Aktuelle GCC-Versionen, einschließlich GCC 9, können weiterhin wie gewohnt aus Paketen und Ports installiert werden.
- In der Infrastruktur des Linux-Umgebungsemulators (Linuxulator) wurde die Unterstützung für den Systemaufruf sendfile, den TCP_CORK-Modus (erforderlich für nginx) und das MAP_32BIT-Flag (löst ein Problem beim Starten von Paketen mit Mono aus Ubuntu Bionic) hinzugefügt. Probleme mit der DNS-Auflösung bei Verwendung von glibc neuer als 2.30 (z.B. aus CentOS 8) wurden behoben.
In der Infrastruktur der kontinuierlichen Integration wird die Ausführung von Aufgaben für das Linux Testing Project (LTP) mit Linuxulator zur Testung der Verbesserungen unterstützt, die im Code zur Unterstützung von Linux vorgenommen werden. Etwa 400 Tests schlagen fehl und benötigen eine Behebung (einige Fehler sind durch Fehlalarme verursacht, einige erfordern triviale Korrekturen, aber es gibt auch solche, deren Behebung das Hinzufügen von Unterstützung für neue Systemaufrufe erforderlich macht). Es wurde an der Bereinigung des Codes von Linuxulator und der Vereinfachung des Debuggings gearbeitet. Patches, die Unterstützung für erweiterte Attribute und den Systemaufruf fexecve bieten, wurden vorbereitet, sind aber noch nicht geprüft. - Die Sitzungen der Arbeitsgruppe, die zur Migration des Quellcodes aus dem zentralisierten Versionsverwaltungssystem Subversion in das dezentralisierte Git-System eingerichtet wurde, gehen weiterhin. Ein Bericht mit Vorschlägen zur Migration wird gerade erstellt.
- In (Laufzeitlinker) wurde der Modus der direkten Ausführung („/libexec/ld-elf.so.1 {Pfad} {Argumente}“) 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 für die Arbeit mit Dateideskriptor-Tabellen, die mithilfe von Syzkaller entdeckt wurden, behoben. Auf Grundlage der Fehlerdiagnose im SCTP-Stack wurden Änderungen vorgenommen, die das Debugging erleichtern. In das Stress2-Set wurden Regeln zur Auffindung möglicher Regressionen aufgenommen. Die Unterstützung für das Fuzzing-Testing neuer Systemaufrufe, einschließlich copy_file_range(), __realpathat() und Aufrufen des Capsicum-Subsystems, wurde hinzugefügt. Die Arbeit zur Abdeckung der Linux-Emulationsschicht mit Fuzzing-Tests wird fortgesetzt. Ein Review und die Behebung von Fehlern, die in den neuesten Coverity Scan-Berichten vermerkt waren, wurden durchgeführt.
- Im kontinuierlichen Integrationssystem wurde der Übergang zur Ausführung aller Tests des Head-Branches ausschließlich mit clang/lld vollzogen. Bei den Tests für RISC-V wurde die Erstellung eines vollständigen Disk-Images für die Ausführung von Tests in QEMU mit OpenSBI sichergestellt. Es wurden neue Aufgaben für die Testung von Images und virtuellen Maschinen powerpc64 (FreeBSD-head-powerpc64-images, FreeBSD-head-powerpc64-testvm) hinzugefügt.
- Es wird daran gearbeitet, das Kyua-Testset von den Ports (devel/kyua) in das Basissystem zu migrieren, um Probleme (Pakete werden sehr langsam installiert) zu lösen, die bei der Verwendung von Kyua auf neuen Architekturen auftreten, deren Entwicklung unter Verwendung von Emulatoren oder FPGAs erfolgt. Die Integration in das Basissystem wird das Testen von Embedded-Plattformen erheblich erleichtern und die Anbindung an Continuous Integration-Systeme vereinfachen.
- Ein Projekt zur Optimierung der Leistung des Treibers für Netzwerkbrücken wurde gestartet. , das einen Mutex zur Sperrung interner Daten verwendet, was die gewünschte Leistung auf Systemen mit vielen Jail-Umgebungen oder virtuellen Maschinen, die in einem Netzwerk zusammengefasst sind, beeinträchtigt. In dieser Phase wurden Tests in den Code eingefügt, um Regressionen während der Modernisierung der Sperrhandhabung zu verhindern. Die Möglichkeit, ConcurrencyKit zu verwenden, um die Datenübertragungs-Handler (bridge_input(), bridge_output(), bridge_forward(), …) zu parallelisieren, wird geprüft.
- Ein neuer Systemaufruf sigfastblock wurde hinzugefügt, der es einem Thread ermöglicht, einen Speicherblock für schnelle Signalhandler zu bestimmen, um die Leistung der Ausnahmebehandler zu verbessern.
- Der Kernel unterstützt jetzt atomare LSE-Befehle (Large System Extension), die von ARMv8.1-Systemen unterstützt werden. Diese Befehle sind notwendig, um die Leistung auf Cavium ThunderX2- und AWS Graviton 2-Plattformen zu steigern. Die hinzugefügten Änderungen bestimmen die Unterstützung von LSE und aktivieren dynamisch die Implementierung von atomaren Operationen basierend auf diesen. Bei Tests führte die Nutzung von LSE zu einer 15%igen Reduzierung der Prozessorzeit, die während der Kernkompilierung verbraucht wurde.
- Die Leistung wurde optimiert und die Funktionalität der Tools für ausführbare Dateien im ELF-Format erweitert.
Die Unterstützung für das Caching von Debug-Informationen im DWARF-Format wurde hinzugefügt, Probleme in den Utilities elfcopy/objcopy wurden behoben, und die Verarbeitung von DW_AT_ranges hinzugefügt.
In readelf wurde die Möglichkeit implementiert, die Flags PROTMAX_DISABLE, STKGAP_DISABLE und WXNEEDED sowie Xen und GNU Build-ID zu decodieren.
- Sicherheit
- Um die Leistung von FreeBSD in Cloud-Umgebungen von Azure zu verbessern, wird an der Unterstützung des HyperV Socket-Mechanismus gearbeitet, der die Verwendung von Socket-Schnittstellen für die Interaktion des Gastbetriebssystems mit der Host-Umgebung ohne Netzwerkkonfiguration ermöglicht.
- Es wird an der Sicherstellung von reproduzierbaren Builds von FreeBSD gearbeitet, die gewährleisten, dass die ausführbaren Dateien der Systemkomponenten genau aus den angegebenen Quelltexten erstellt werden und keine unerwünschten Änderungen enthalten.
- In das Tool elfctl wurde die Möglichkeit integriert, zusätzliche Schutzmechanismen (ASLR, PROT_MAX, Stack-Gap, W+X-Mapping) auf der Ebene einzelner Prozesse zu aktivieren.
- Speichersysteme und Dateisysteme
- Es wird an der Möglichkeit gearbeitet, NFS über einen verschlüsselten Kommunikationskanal auf Basis von TLS 1.3 zu betreiben, anstelle der Verwendung von Kerberos (Modus sec=krb5p), das nur die Verschlüsselung von RPC-Nachrichten beschränkt und nur softwareseitig implementiert wird. Die neue Implementierung nutzt den vom Kern bereitgestellten TLS-Stack, der Hardwarebeschleunigung ermöglicht. Der NFS-Code über TLS ist fast bereit für Tests, benötigt jedoch noch Arbeit zur Unterstützung signierter Client-Zertifikate und zur Anpassung des TLS-Stacks des Kernels für die Übertragung von NFS-Daten (Patches zum Empfang sind bereits fertig).
- Hardware-Unterstützung
- Es wird an der Unterstützung chinesischer x86-CPUs Hygon auf Basis von AMD-Technologien gearbeitet;
- Im Rahmen von CheriBSD, einem Fork von FreeBSD für die Forschungs-Prozessorarchitektur (Capability Hardware Enhanced RISC Instructions), wird die Unterstützung für den ARM Morello-Prozessor weiter vorangetrieben, der ein speicherschutzbasiertes Zugriffskontrollsystem CHERI unterstützen wird, gemäß dem Schutzmodell des Capsicum-Projekts. Der Morello-Chip wurde 2021 veröffentlicht. Derzeit konzentriert sich die Arbeit auf die Hinzufügung der Unterstützung für die Arm Neoverse N1-Plattform, die der Grundlage von Morello zugrunde liegt. Es wurde ein erster Port von CheriBSD für die RISC-V-Architektur vorgestellt. Die Entwicklung von CheriBSD für den Referenzprototyp CHERI auf Basis der MIPS64-Architektur wird fortgesetzt.
- Die Portierung von FreeBSD für das 64-Bit SoC NXP LS1046A mit dem ARMv8 Cortex-A72-Prozessor, der über eine integrierte Netzwerkbeschleunigung, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 und USB 3.0 verfügt, wurde fortgesetzt. Derzeit werden Treiber für QorIQ und LS1046A, GPIO, QorIQ LS10xx AHCI, VF610 I2C, Epson RX-8803 RTC und QorIQ LS10xx SDHCI vorbereitet, um in die Hauptversion von FreeBSD aufgenommen zu werden.
- Bis zur Version 2.1.1 wurde der ena-Treiber mit Unterstützung für die zweite Generation von Elastic Network Adaptern ENAv2 (Elastic Network Adapter), die in der Elastic Compute Cloud (EC2)-Infrastruktur verwendet werden, um die Kommunikation zwischen EC2-Knoten mit Geschwindigkeiten von bis zu 25 Gb/s zu organisieren, aktualisiert. Ein Update auf ENA 2.2.0 wird vorbereitet.
- Die Verbesserung des FreeBSD-Ports für die powerpc64-Plattform wird fortgesetzt. Der Schwerpunkt liegt auf der Gewährleistung einer hochwertigen Leistung auf Systemen mit IBM POWER8- und POWER9-Prozessoren. Im Berichtszeitraum wurde FreeBSD-CURRENT auf die Verwendung des LLVM/Clang 10.0 Compilers und des lld Linkers anstelle von GCC umgestellt. Standardmäßig wird für powerpc64-Systeme die ELFv2 ABI verwendet, während die Unterstützung für ELFv1 ABI eingestellt wurde. In FreeBSD-STABLE bleibt vorerst gcc 4.2.1 erhalten. Probleme mit den Treibern virtio, aacraid und ixl wurden gelöst. Auf powerpc64-Systemen wurde die Möglichkeit geschaffen, QEMU ohne Unterstützung für Huge Pages zu starten.
- Die Arbeit zur Umsetzung der Unterstützung der RISC-V-Architektur wird fortgesetzt. In der aktuellen Version lädt FreeBSD bereits erfolgreich auf der SiFive Hifive Unleashed-Platine, für die Treiber vorbereitet wurden.
UART, SPI und PRCI unterstützen das OpenSBI-Firmware und SBI 0.2. Im Berichtszeitraum lag der Fokus auf der Migration von GCC zu clang und lld.
- Anwendungen und Ports
- Die Sammlung der FreeBSD-Ports hat die Grenze von 39.000 Ports überschritten. Die Anzahl der offenen PRs liegt etwas über 2.400, von denen 640 PRs noch nicht bearbeitet sind. Im Berichtszeitraum wurden 8.146 Änderungen von 173 Entwicklern vorgenommen. Vier neue Teilnehmer (Loïc Bartoletti, Mikael Urankar, Kyle Evans, Lorenzo Salvadore) haben Commit-Rechte erhalten. Das Flag USES=qca wurde hinzugefügt und das Flag USES=zope wurde entfernt (aufgrund von Inkompatibilitäten mit Python 3). Es wird an der Entfernung von Python 2.7 aus dem Ports-Baum gearbeitet – alle von Python 2 abhängigen Ports müssen auf Python 3 portiert oder werden entfernt. Der Paketmanager pkg wurde auf die Version 1.13.2 aktualisiert.
- Die Komponenten des Grafikstapels und die damit verbundenen Ports, die sich auf xorg beziehen, wurden aktualisiert.
Der X.org-Server wurde auf Version 1.20.8 aktualisiert (zuvor wurde die Version 1.18 geliefert), was es ermöglicht, FreeBSD standardmäßig auf den udev/evdev-Backend für die Verarbeitung von Eingabegeräten umzustellen. Das Mesa-Paket wurde standardmäßig so konfiguriert, dass es die DRI3-Erweiterung anstelle von DRI2 verwendet. Es wird an der Aktualisierung der Grafiktreiber, des Eingabestack und der drm-kmod-Komponenten gearbeitet (Port, der den Betrieb der DRM-Module amdgpu, i915 und radeon durch Verwendung des linuxkpi-Frameworks für die Kompatibilität mit dem Direct Rendering Manager des Linux-Kernels unterstützt). - Der KDE Plasma Desktop, die KDE Frameworks, die KDE Anwendungen und Qt stehen auf dem neuesten Stand und wurden auf die aktuellsten Versionen aktualisiert. Im Ports-Bereich wurde eine neue Anwendung, kstars (Sternenatlas), hinzugefügt.
- Es wurden Arbeiten zur Behebung regressiver Änderungen im Fenstermanager xfwm4 durchgeführt, die nach dem Update auf Xfce 4.14 aufgetreten sind (z. B. traten Artefakte beim Dekorieren von Fenstern auf).
- Der Port mit Wine wurde auf die Version Wine 5.0 aktualisiert (zuvor war 4.0.3 verfügbar).
- Seit Version 1.14 unterstützt der Go-Compiler offiziell die ARM64-Architektur für FreeBSD 12.0.
- OpenSSH im Basissystem wurde auf die Version 7.9p1 aktualisiert.
- Die Bibliothek sysctlmibinfo2 wurde implementiert und in den Ports (devel/libsysctlmibinfo2) veröffentlicht. Sie bietet eine API für den Zugriff auf die sysctl MIB und übersetzt sysctl-Namen in Objektidentifikatoren (OID).
- Ein Update für die Distribution ist erstellt worden , eine FreeBSD-Edition, die für den Einsatz als tragbarer Desktop konzipiert ist und von einem USB-Stick geladen werden kann. Die grafische Umgebung basiert auf dem Fenstermanager . Zum Mounten von Speichern wird verwendet (unterstützt das Mounten von CD9660, FAT, HFS+, NTFS, Ext2/3/4), zur Konfiguration des WLANs — , und zur Lautstärkeregelung — .
- Gestartet zur Erstellung umfassender Dokumentation für den Jail-Management-Manager. . Die Veröffentlichung von pot 0.11.0 steht bevor, in der Verwaltungstools für den Netzwerk-Stack bereitgestellt werden.
Quelle: opennet.ru
