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;

Źródło: opennet.ru

Dodaj komentarz