FreeBSD-Entwicklungsbericht für das erste Quartal 2020

Veröffentlicht Bericht über die Entwicklung des FreeBSD-Projekts von Januar bis März 2020. Unter den Änderungen können wir Folgendes feststellen:

  • Allgemeine und systemische Probleme
    • Der GCC-Compilersatz sowie die nicht verwendeten Dienstprogramme gperf, gcov und gtc (Devicetree-Compiler) wurden aus dem FreeBSD-CURRENT-Quellbaum entfernt. Alle Plattformen, die Clang nicht unterstützen, wurden auf die Verwendung externer Build-Tools umgestellt, die über Ports installiert werden. Das Basissystem lieferte eine veraltete Version von GCC 4.2.1 und die Integration neuerer Versionen war aufgrund der Umstellung von 4.2.2 auf die GPLv3-Lizenz, die für die FreeBSD-Basiskomponenten als ungeeignet galt, nicht möglich. Aktuelle Versionen von GCC, einschließlich GCC 9, können weiterhin über Pakete und Ports installiert werden.
    • Die Linux-Umgebungsemulationsinfrastruktur (Linuxulator) hat Unterstützung für den Sendfile-Systemaufruf, den TCP_CORK-Modus (erforderlich für Nginx) und das MAP_32BIT-Flag (behebt das Problem beim Starten von Paketen mit Mono von Ubuntu Bionic) hinzugefügt. Probleme mit der DNS-Auflösung bei der Verwendung von Glibc neuer als 2.30 (z. B. von CentOS 8) wurden behoben.
      Die kontinuierliche Integrationsinfrastruktur bietet die Möglichkeit, LTP-Jobs (Linux Testing Project) unter Linuxulator auszuführen, um Verbesserungen am Code zur Unterstützung von Linux zu testen. Ungefähr 400 Tests schlagen fehl und müssen behoben werden (einige Fehler werden durch Fehlalarme verursacht, einige erfordern triviale Korrekturen, aber es gibt andere, die zusätzliche Unterstützung für neue Systemaufrufe erfordern, um sie zu beheben). Es wurde daran gearbeitet, den Linuxulator-Code zu bereinigen und das Debuggen zu vereinfachen. Patches mit Unterstützung für erweiterte Attribute und den Systemaufruf fexecve wurden vorbereitet, aber noch nicht überprüft.

    • Die Sitzungen der Arbeitsgruppe zur Durchführung der Migration von Quellcodes vom zentralen Quellcodeverwaltungssystem Subversion zum dezentralen System Git werden fortgesetzt. Ein Bericht mit Migrationsvorschlägen ist in Vorbereitung.
    • В rtld (Laufzeitlinker) verbesserter direkter Ausführungsmodus („/libexec/ld-elf.so.1 {Pfad} {Argumente}“).
    • Das Projekt zum Fuzzing-Testen des FreeBSD-Kernels mithilfe des Syzkaller-Systems entwickelt sich weiter. Im Berichtszeitraum wurden Probleme im Netzwerk-Stack und Code für die Arbeit mit Dateideskriptortabellen behoben, die mithilfe von Syzkaller identifiziert wurden. Im Anschluss an die Fehlerdiagnose wurden Änderungen am SCTP-Stack vorgenommen, um das Debuggen zu erleichtern. Dem stress2-Satz wurden Regeln hinzugefügt, um mögliche Regressionen zu identifizieren. Unterstützung für Fuzz-Tests neuer Systemaufrufe hinzugefügt, einschließlich copy_file_range(), __realpathat() und Capsicum-Subsystemaufrufe. Die Arbeiten zur Abdeckung der Linux-Emulationsschicht mit Fuzz-Tests werden fortgesetzt. Wir haben die in den neuesten Coverity Scan-Berichten festgestellten Fehler analysiert und beseitigt.
    • Das kontinuierliche Integrationssystem ist dazu übergegangen, alle Head-Branch-Tests nur noch mit clang/lld auszuführen. Beim Testen auf RISC-V wird die Erstellung eines vollständigen Disk-Images für die Ausführung von Tests in QEMU mit OpenSBI sichergestellt. Neue Aufgaben zum Testen von Images und virtuellen Powerpc64-Maschinen hinzugefügt (FreeBSD-head-powerpc64-images, FreeBSD-head-powerpc64-testvm).
    • Derzeit wird daran gearbeitet, die Kyua-Testsuite von den Ports (devel/kyua) auf das Basissystem zu übertragen, um Probleme zu lösen (Pakete werden sehr langsam installiert), die bei der Verwendung von Kyua auf neuen Architekturen auftreten, deren Entwicklung mit einem Emulator oder durchgeführt wird FPGA. Durch die Integration in das Basissystem wird das Testen eingebetteter Plattformen und die Schnittstelle zu kontinuierlichen Integrationssystemen erheblich vereinfacht.
    • Es wurde ein Projekt gestartet, um die Leistung des Netzwerkbrückentreibers zu optimieren if_bridge, das einen einzigen Mutex verwendet, um interne Daten zu sperren, was es nicht ermöglicht, die gewünschte Leistung auf Systemen mit einer großen Anzahl von Jail-Umgebungen oder virtuellen Maschinen zu erreichen, die in einem Netzwerk vereint sind. Zu diesem Zeitpunkt wurden dem Code Tests hinzugefügt, um zu verhindern, dass es bei der Modernisierung der Arbeit mit Sperren zu Regressionen kommt. Die Möglichkeit, ConcurrencyKit zur Parallelisierung von Datenübertragungshandlern (bridge_input(),bridge_output(),bridge_forward(), ...) zu verwenden, wird in Betracht gezogen.
    • Es wurde ein neuer Sigfastblock-Systemaufruf hinzugefügt, der es einem Thread ermöglicht, einen Speicherblock für einen schnellen Signalhandler anzugeben, um die Leistung von Ausnahmehandlern zu verbessern.
    • Der Kernel fügt Unterstützung für atomare LSE-Anweisungen (Large System Extension) hinzu, die von ARMv8.1-Systemen unterstützt werden. Diese Anweisungen sind erforderlich, um die Leistung bei der Ausführung auf Cavium ThunderX2- und AWS Graviton 2-Boards zu verbessern. Die hinzugefügten Änderungen erkennen die LSE-Unterstützung und aktivieren dynamisch die darauf basierende atomare Implementierung. Während des Tests konnte durch den Einsatz von LSE die Prozessorzeit beim Zusammenstellen des Kernels um 15 % reduziert werden.
    • Es wurde eine Leistungsoptimierung durchgeführt und die Funktionalität des Toolkits für ausführbare Dateien im ELF-Format erweitert.
      Unterstützung für das Zwischenspeichern von DWARF-Debugging-Informationen hinzugefügt, Probleme in den Dienstprogrammen elfcopy/objcopy behoben, DW_AT_ranges-Verarbeitung hinzugefügt,
      readelf implementiert die Möglichkeit, die Flags PROTMAX_DISABLE, STKGAP_DISABLE und WXNEEDED sowie Xen und GNU Build-ID zu dekodieren.

  • Sicherheit
    • Um die Leistung von FreeBSD in Azure-Cloud-Umgebungen zu verbessern, wird an der Unterstützung des HyperV-Socket-Mechanismus gearbeitet, der die Verwendung einer Socket-Schnittstelle für die Interaktion zwischen dem Gastsystem und der Host-Umgebung ohne den Aufbau eines Netzwerks ermöglicht.
    • Derzeit wird an der Bereitstellung wiederholbarer Builds von FreeBSD gearbeitet, um sicherzustellen, dass die ausführbaren Dateien der Systemkomponenten exakt aus den deklarierten Quellcodes kompiliert werden und keine überflüssigen Änderungen enthalten.
    • Dem Dienstprogramm elfctl wurde die Möglichkeit hinzugefügt, die Einbindung zusätzlicher Schutzmechanismen (ASLR, PROT_MAX, Stack Gap, W+X-Mapping) auf der Ebene einzelner Prozesse zu steuern
  • Speicher- und Dateisysteme
    • Derzeit wird daran gearbeitet, die Fähigkeit von NFS zu implementieren, über einen verschlüsselten Kommunikationskanal basierend auf TLS 1.3 zu arbeiten, anstatt Kerberos (sec=krb5p-Modus) zu verwenden, der auf die Verschlüsselung nur von RPC-Nachrichten beschränkt ist und nur in Software implementiert ist. Die neue Implementierung nutzt den vom Kernel bereitgestellten TLS-Stack, um die Hardwarebeschleunigung zu ermöglichen. Der NFS-über-TLS-Code steht fast zum Testen bereit, erfordert jedoch noch Arbeiten zur Unterstützung signierter Client-Zertifikate und zur Anpassung des Kernel-TLS-Stacks zum Senden von NFS-Daten (Patches zum Empfangen sind bereits bereit).
  • Hardware-Unterstützung
    • Derzeit wird daran gearbeitet, Unterstützung für die chinesische x86-CPU Hygon basierend auf AMD-Technologien hinzuzufügen.
    • Als Teil von CheriBSD, einer Abzweigung von FreeBSD für Forschungsprozessorarchitekturen CHERI (Capability Hardware Enhanced RISC Instructions) wird weiterhin Unterstützung für den ARM-Morello-Prozessor implementiert, der das CHERI-Speicherzugriffskontrollsystem basierend auf dem Capsicum-Projektsicherheitsmodell unterstützen wird. Morello-Chip planen Veröffentlichung im Jahr 2021. Die Arbeit konzentriert sich derzeit darauf, Unterstützung für die Arm Neoverse N1-Plattform hinzuzufügen, die Morello antreibt. Eine erste Portierung von CheriBSD für die RISC-V-Architektur wurde vorgestellt. Die CheriBSD-Entwicklung für den CHERI-Referenzprototyp basierend auf der MIPS64-Architektur wird fortgesetzt.
    • Die FreeBSD-Portierung wird für den 64-Bit-SoC NXP LS1046A basierend auf dem ARMv8 Cortex-A72-Prozessor mit einer integrierten Beschleunigungs-Engine für die Netzwerkpaketverarbeitung, 10 Gbit Ethernet, PCIe 3.0, SATA 3.0 und USB 3.0 fortgesetzt. Derzeit werden die Treiber QorIQ und LS1046A, GPIO, QorIQ LS10xx AHCI, VF610 I2C, Epson RX-8803 RTC und QorIQ LS10xx SDHCI für die Übertragung auf die FreeBSD-Hauptkomposition vorbereitet.
    • Der ena-Treiber wurde auf Version 2.1.1 aktualisiert und unterstützt die zweite Generation von ENAv2-Netzwerkadaptern (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 Gbit/s zu organisieren. S. Ein Update auf ENA 2.2.0 ist in Vorbereitung.
    • Die Verbesserungen am FreeBSD-Port für die PowerPC64-Plattform werden fortgesetzt. Der Schwerpunkt liegt auf der Bereitstellung hochwertiger 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 verwenden PowerPC64-Systeme die ELFv2-ABI und die Unterstützung für die ELFv1-ABI wurde eingestellt. FreeBSD-STABLE verfügt immer noch über gcc 4.2.1. Probleme mit Virtio-, Aacraid- und IXL-Treibern wurden behoben. Auf PowerPC64-Systemen ist es möglich, QEMU ohne Huge Pages-Unterstützung auszuführen.
    • Es wird weiterhin an der Implementierung der Unterstützung für die RISC-V-Architektur gearbeitet. In seiner aktuellen Form bootet FreeBSD bereits erfolgreich auf dem SiFive Hifive Unleashed-Board, für das Treiber vorbereitet wurden
      UART, SPI und PRCI, unterstützt OpenSBI- und SBI 0.2-Firmware. Im Berichtszeitraum lag der Schwerpunkt der Arbeit auf der Migration von GCC zu Clang und LLD.

  • Anwendungen und Portsystem
    • Die FreeBSD-Ports-Sammlung hat die Schwelle von 39 Ports überschritten, die Zahl der nicht geschlossenen PRs liegt leicht über 2400, von denen 640 PRs noch nicht sortiert wurden. Im Berichtszeitraum wurden 8146 Änderungen von 173 Entwicklern vorgenommen. Vier neue Teilnehmer erhielten Committer-Rechte (Loïc Bartoletti, Mikael Urankar, Kyle Evans, Lorenzo Salvadore). Flag USES=qca hinzugefügt und Flag USES=zope entfernt (aufgrund der Inkompatibilität mit Python 3). Derzeit wird daran gearbeitet, Python 2.7 aus dem Ports-Baum zu entfernen. Alle auf Python 2 basierenden Ports müssen auf Python 3 portiert werden, andernfalls werden sie entfernt. Der pkg-Paketmanager wurde auf Version 1.13.2 aktualisiert.
    • Aktualisierte Grafik-Stack-Komponenten und xorg-bezogene Ports.
      Der X.org-Server wurde auf Version 1.20.8 aktualisiert (zuvor im 1.18-Zweig ausgeliefert), was es FreeBSD ermöglichte, standardmäßig das udev/evdev-Backend für die Handhabung von Eingabegeräten zu verwenden. Das Mesa-Paket wurde so umgestellt, dass es standardmäßig die DRI3-Erweiterung anstelle von DRI2 verwendet. Es wird daran gearbeitet, die Grafiktreiber, den Eingabegeräte-Stack und die drm-kmod-Komponenten (ein Port, der den Betrieb von amdgpu-, i915- und radeon-DRM-Modulen ermöglicht und das linuxkpi-Framework für die Kompatibilität mit dem Direct Rendering Manager des Linux-Kernels verwendet) beizubehalten. auf dem Laufenden.

    • Der KDE Plasma-Desktop, die KDE-Frameworks, KDE-Anwendungen und Qt werden auf dem neuesten Stand gehalten und auf die neuesten Versionen aktualisiert. Den Ports wurde eine neue Anwendung kstars (Sternatlas) hinzugefügt.
    • Es wurde daran gearbeitet, regressive Änderungen im xfwm4-Fenstermanager zu beseitigen, die nach der Aktualisierung von Xfce auf Version 4.14 auftraten (z. B. traten beim Dekorieren von Fenstern Artefakte auf).
    • Der Wine-Port wurde auf die Veröffentlichung von Wine 5.0 aktualisiert (zuvor wurde 4.0.3 angeboten).
    • Ab Version 1.14 fügte der Go-Sprachcompiler offizielle Unterstützung für die ARM64-Architektur für FreeBSD 12.0 hinzu.
    • OpenSSH auf dem Basissystem wurde auf Version 7.9p1 aktualisiert.
    • Die sysctlmibinfo2-Bibliothek wurde implementiert und in Ports (devel/libsysctlmibinfo2) platziert. Sie stellt eine API für den Zugriff auf die sysctl-MIB und die Übersetzung von sysctl-Namen in Objektkennungen (OIDs) bereit.
    • Ein Verteilungsupdate wurde generiert NomadBSD 1.3.1, eine Edition von FreeBSD, die für die Verwendung als tragbarer Desktop geeignet ist, der von einem USB-Laufwerk gestartet werden kann. Die grafische Umgebung basiert auf einem Fenstermanager Openbox. Wird zur Montage von Laufwerken verwendet DSBMD (Montage von CD9660, FAT, HFS+, NTFS, Ext2/3/4 wird unterstützt), um ein drahtloses Netzwerk zu konfigurieren - wifimgr, und um die Lautstärke zu regeln - DSBMixer.
    • Gestartet arbeiten beim Schreiben einer vollständigen Dokumentation für den Gefängnisumgebungsmanager können. Die Veröffentlichung von Pot 0.11.0 wird vorbereitet, der Tools zur Verwaltung des Netzwerk-Stacks enthalten wird.

Source: opennet.ru

Kommentar hinzufügen