Raport z postępu prac FreeBSD za drugi kwartał 2019 r
opublikowany raport z rozwoju projektu FreeBSD od kwietnia do czerwca 2019. Wśród zmian możemy odnotować:
Zagadnienia ogólne i systemowe
Zespół Core zdecydował się powołać grupę roboczą w celu zbadania możliwości przeniesienia kodu źródłowego ze scentralizowanego systemu kontroli źródła Subversion do zdecentralizowanego systemu Git.
Przeprowadzono testy rozmyte jądra FreeBSD przy użyciu systemu syzkaler oraz poprawiono szereg zidentyfikowanych błędów. Dodano warstwę do fuzzowania testów bibliotek pod kątem kompatybilności ze środowiskiem 32-bitowym w systemach z jądrem 64-bitowym. Zaimplementowano możliwość uruchamiania syzkallera na maszynach wirtualnych opartych na bhyve. W kolejnym etapie planowane jest rozszerzenie zakresu testów wywołań systemowych, użycie narzędzia sanityzującego LLVM do sprawdzenia jądra, użycie netdump do zapisywania zrzutów jądra podczas awarii podczas testów fuzzingu itp.
Rozpoczęto prace nad aktualizacją implementacji zlib na poziomie jądra. Aby zapewnić dostęp jądra do kodu zlib, nazwę katalogu contrib/zlib zmieniono na sys/contrib/zlib, a nazwę pliku nagłówkowego crc.h również zmieniono, aby uniknąć konfliktu z zlib/crc.h. Wyczyszczono starszy kod zależny od zlib i inflate. Następnie planowane jest zapewnienie możliwości jednoczesnego budowania jądra ze starym i nowym zlib w celu stopniowego przenoszenia do nowej wersji funkcji korzystających z kompresji;
Zaktualizowano infrastrukturę emulacji środowiska Linux (Linuxulator). Zwiększona obsługa narzędzi do debugowania systemu Linux, takich jak narzędzie strace. Do portów dodano pakiet linux-c7-strace, którego można używać do śledzenia plików wykonywalnych Linuksa zamiast standardowych narzędzi truss i ktrace, które nie potrafią jeszcze dekodować niektórych flag i struktur specyficznych dla Linuksa. Dodatkowo dodano pakiet linux-ltp z plikami wykonywalnymi Linux Test Project i rozwiązano problemy ze zgodnością z plikami wykonywalnymi powiązanymi z nowymi wersjami glibc;
Implementacja opóźnionych operacji unieważniania w mechanizmie pmap została przeniesiona na wykorzystanie algorytmu przetwarzania kolejek działającego bez blokad, co umożliwiło rozwiązanie problemów skalowalności przy wykonywaniu dużej liczby równoległych operacji odmapowania;
Zmieniono mechanizm blokowania vnode podczas wykonywania wywołań systemowych rodziny execve(), co umożliwiło osiągnięcie zwiększonej wydajności przy jednoczesnym wykonywaniu execve() dla tego samego pliku (na przykład podczas wykonywania operacji asemblera z równoległością uruchomienia kompilatora);
bezpieczeństwo
Hiperwizor bhyve w dalszym ciągu udoskonala obsługę migracji na żywo środowisk gościa z jednego hosta na drugi oraz funkcję Zapisz/Przywróć, która umożliwia zamrożenie systemu-gościa, zapisanie stanu do pliku, a następnie wznowienie wykonywania.
Dzięki wykorzystaniu biblioteki libvdsk firma bhyve dodała obsługę obrazów dysków w formacie QCOW2. Wymaga instalacji do działania specjalnie zmodyfikowany wersja bhyve, która została przekonwertowana tak, aby korzystała z procedur obsługi operacji na plikach opartych na libvdsk. W okresie sprawozdawczym biblioteka libvdsk przeprowadziła także prace mające na celu uproszczenie integracji obsługi nowych formatów, poprawę wydajności odczytu i zapisu oraz dodanie obsługi funkcji Copy-On-Write. Z pozostałych zadań odnotowuje się integrację libvdsk z główną strukturą bhyve;
W portach dodano system zbierania informacji o ruchu drogowym Maltrail, który umożliwia tworzenie pułapek na złośliwe żądania sieciowe (sprawdzane są adresy IP i domeny z czarnych list) oraz wysyłanie informacji o wykrytej aktywności do centralnego serwera w celu późniejszego blokowania lub analizy prób ataków;
Do portów dodano platformy służące do wykrywania ataków, analizowania logów i monitorowania integralności plików Łaz (widelec Ossec ze wsparciem integracji z Stos ELK);
Podsystem sieciowy
Sterownik ena został zaktualizowany w celu obsługi drugiej generacji kart sieciowych ENAv2 (Elastic Network Adapter) używanych w infrastrukturze Elastic Compute Cloud (EC2) w celu organizowania komunikacji pomiędzy węzłami EC2 z szybkością do 25 Gb/s. Do sterownika ena dodano obsługę NETMAP.
FreeBSD HEAD przyjmuje nowy stos MMC/SD, oparty na frameworku CAM i umożliwiający podłączenie urządzeń z interfejsem SDIO (Secure Digital I/O). Na przykład SDIO jest wykorzystywane w modułach WiFi i Bluetooth wielu płyt, takich jak Raspberry Pi 3. Nowy stos umożliwia także wykorzystanie interfejsu CAM do wysyłania poleceń SD z aplikacji w przestrzeni użytkownika, co umożliwia tworzenie urządzeń sterowniki działające na poziomie użytkownika. Rozpoczęto prace nad stworzeniem sterowników dla układów bezprzewodowych Broadcom pracujących w trybie FullMAC (po stronie chipa działa on na pozór własnego systemu operacyjnego z implementacjami stosu bezprzewodowego 802.11);
Trwają prace nad wdrożeniem NFSv4.2 (RFC-7862) dla FreeBSD. Nowa wersja NFS dodaje obsługę funkcji posix_fadvise, posix_fallocate, trybów SEEKHOLE/SEEKDATA w lseek oraz operację lokalnego kopiowania części pliku na serwerze (bez przesyłania do klienta).
FreeBSD zapewnia obecnie podstawową obsługę operacji LayoutError, IOAdvise, Allocate i Copy. Pozostaje tylko zaimplementować operację Seek wymaganą do użycia lseek(SEEKHOLE/SEEKDATA) w systemie NFS. We FreeBSD 4.2 planowana jest obsługa NFSv13;
Systemy pamięci i plików
Projekt przeróbki sterownika dla podsystemu FUSE (File system in USErspace), który umożliwia tworzenie implementacji systemów plików w przestrzeni użytkownika, dobiega końca. Oryginalnie dostarczony sterownik jest nieaktualny i zawiera wiele błędów. W ramach projektu modernizacji sterowników zaimplementowano obsługę protokołu FUSE 7.23 (wcześniej obsługiwana była wersja 7.8 wydana 11 lat temu), dodano kod sprawdzający uprawnienia dostępu po stronie jądra („-o default_permissions”), wywołania metody Dodano VOP_MKNOD, VOP_BMAP i VOP_ADVLOCK, możliwość przerywania operacji FUSE, dodano obsługę nienazwanych potoków i gniazd unixowych w bezpiecznikach, możliwość użycia kqueue dla /dev/fuse, umożliwiono aktualizację parametrów montowania poprzez „mount -u”, dodano obsługę dla eksportu bezpieczników przez NFS, zaimplementowano rozliczanie RLIMIT_FSIZE, dodano flagi FOPEN_KEEP_CACHE i FUSE_ASYNC_READ, dokonano znaczących optymalizacji wydajności i poprawiono organizację buforowania;
Do kodu pagera wymiany dodano obsługę operacji BIO_DELETE, która pozwala na użycie polecenia TRIM podczas usuwania bloków z dysków SSD w celu zwiększenia ich żywotności.
Wsparcie sprzętowe
Trwają prace nad wdrożeniem obsługi ARM64 SoC Broadcom BCM5871X z procesorami ARMv8 Cortex-A57, przeznaczonej do zastosowania w routerach, bramach i pamięciach sieciowych. W raportowanym okresie poprawiono obsługę wewnętrznych i zewnętrznych magistral iProc PCIe, dodano obsługę BNXT Ethernet oraz trwają prace nad wykorzystaniem wbudowanego silnika kryptograficznego do akceleracji protokołu IPsec. Integracja kodu z gałęzią HEAD przewidywana jest w drugiej połowie roku;
Rozpoczęto prace nad obsługą 64-bitowego SoC NXP LS1046A opartego na procesorze ARMv8 Cortex-A72 ze zintegrowanym silnikiem akceleracji przetwarzania pakietów sieciowych, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 i USB 3.0. Zaimplementowano już obsługę platformy bazowej (multi-user SMP) oraz SATA 3.0. Obsługa USB 3.0, SD/MMC i I2C jest w fazie rozwoju. W planach jest obsługa Ethernetu, GPIO i QSPI. Zakończenie prac i włączenie do oddziału HEAD przewidywane jest na IV kwartał 4 roku.
Zaktualizowano sterowniki mlx5en i mlx5ib dla adapterów Mellanox ConnectX-4 [Lx], ConnectX-5 [Ex] i ConnectX-6 [Dx] Ethernet i InfiniBand. Dodano obsługę adapterów Mellanox Socket Direct (ConnectX-6), umożliwiając przepustowość do 200 Gb/s na magistrali PCIe Gen 3.0. Dla wielordzeniowych układów BlueField dodano obsługę sterownika RShim. do portów dodano pakiet mstflint z zestawem narzędzi diagnostycznych dla adapterów Mellanox;
Aplikacje i system portów
Zaktualizowano komponenty stosu grafiki. Sterownik drm.ko (Direct Rendering Manager) został przeniesiony z jądra Linuksa 5.0. Ten sterownik jest uważany za eksperymentalny i został dodany do drzewa portów jako grafika/drm-devel-kmod. Ponieważ sterownik wykorzystuje zaktualizowaną strukturę KPI systemu Linux, aby był kompatybilny z API DRM jądra Linux, do działania wymagany jest FreeBSD CURRENT. Sterownik vboxvideo.ko drm dla wirtualnego procesora graficznego VirtualBox również został przeniesiony z Linuksa. Pakiet Mesa został zaktualizowany do wersji 18.3.2 i przełączony na używanie LLVM z portu devel/llvm80 zamiast devel/llvm60.
Drzewo portów FreeBSD przekroczyło 37000 2146 portów, liczba niezakończonych PR pozostaje na poziomie 7837. W okresie sprawozdawczym wprowadzono 172 zmian u 5.7 programistów. Trzej nowi uczestnicy otrzymali prawa sprawcy. Wśród znaczących aktualizacji wersji w portach znajdują się: MySQL 3.6, Python 2.5, Ruby 4.8, Samba 1.0, Julia 68.0, Firefox 75.0.3770.100, Chromium 3.6. Wszystkie porty Go zostały przekonwertowane tak, aby korzystały z flagi „USES=go”. Dodano flagę „USES=cabal” do menedżera pakietów Cabal używanego dla kodu Haskell. Włączony jest tryb ścisłej ochrony stosu. Domyślna wersja Pythona to 2.7 zamiast XNUMX.
Wydanie narzędzia zostało przygotowane nsysctl 1.0, który oferuje analogię do /sbin/sysctl, który używa libxo wyników i zapewnia rozszerzony zestaw opcji. Nsysctl można wykorzystać do wizualnego monitorowania stanu wartości sysctl i prezentowania informacji o obiektach w ustrukturyzowanej formie. Możliwe jest wyjście w formatach XML, JSON i HTML;