Raport rozwoju FreeBSD za pierwszy kwartał 2020 roku

opublikowany raport z rozwoju projektu FreeBSD od stycznia do marca 2020. Wśród zmian możemy odnotować:

  • Zagadnienia ogólne i systemowe
    • Usunięto zestaw kompilatorów GCC z drzewa źródeł FreeBSD-CURRENT, a także nieużywane narzędzia gperf, gcov i gtc (kompilator drzewa urządzeń). Wszystkie platformy, które nie obsługują Clang, zostały przełączone na korzystanie z zewnętrznych narzędzi do kompilacji instalowanych z portów. System podstawowy dostarczał przestarzałą wersję GCC 4.2.1, a integracja nowszych wersji nie była możliwa ze względu na przejście z wersji 4.2.2 na licencję GPLv3, co uznano za nieodpowiednie dla podstawowych komponentów FreeBSD. Aktualne wersje GCC, w tym GCC 9, nadal można instalować z pakietów i portów.
    • Infrastruktura emulacji środowiska Linux (Linuxulator) dodała obsługę wywołania systemowego sendfile, trybu TCP_CORK (wymagany dla nginx) i flagi MAP_32BIT (rozwiązuje problem z uruchamianiem pakietów z Mono z Ubuntu Bionic). Rozwiązano problemy z rozpoznawaniem DNS podczas korzystania z glibc nowszego niż 2.30 (na przykład z CentOS 8).
      Infrastruktura ciągłej integracji zapewnia możliwość uruchamiania zadań LTP (Linux Testing Project) z systemem Linuxulator w celu testowania ulepszeń wprowadzonych w kodzie pod kątem obsługi systemu Linux. Około 400 testów kończy się niepowodzeniem i wymaga naprawy (niektóre błędy są spowodowane fałszywymi alarmami, niektóre wymagają trywialnych poprawek, ale są też inne, które wymagają dodania obsługi nowych wywołań systemowych, aby je naprawić). Wykonano prace mające na celu oczyszczenie kodu Linuxulatora i uproszczenie debugowania. Przygotowano poprawki z obsługą rozszerzonych atrybutów i wywołania systemowego fexecve, ale nie zostały one jeszcze sprawdzone.

    • Kontynuowane są spotkania grupy roboczej utworzonej w celu przeprowadzenia migracji kodów źródłowych ze scentralizowanego systemu kontroli źródeł Subversion do zdecentralizowanego systemu Git. W przygotowaniu jest raport z propozycjami migracji.
    • В rtld (linker środowiska uruchomieniowego) ulepszony tryb bezpośredniego wykonania („/libexec/ld-elf.so.1 {ścieżka} {argumenty}”).
    • Projekt fuzzingowego testowania jądra FreeBSD z wykorzystaniem systemu syzkaller cały czas się rozwija. W raportowanym okresie wyeliminowano problemy ze stosem sieciowym oraz kodem do pracy z tablicami deskryptorów plików zidentyfikowanymi za pomocą syzkallera. Po zdiagnozowaniu błędu do stosu SCTP dodano zmiany, aby ułatwić debugowanie. Do zestawu stress2 dodano reguły umożliwiające identyfikację możliwych regresji. Dodano obsługę testów rozmytych nowych wywołań systemowych, w tym wywołań podsystemu copy_file_range(), __realpathat() i Capsicum. Trwają prace nad pokryciem warstwy emulacji Linuksa testami fuzz. Przeanalizowaliśmy i wyeliminowaliśmy błędy odnotowane w najnowszych raportach Coverity Scan.
    • System ciągłej integracji przełączył się na wykonywanie wszystkich testów gałęzi głównych wyłącznie przy użyciu clang/lld. Podczas testowania RISC-V zapewnione jest utworzenie pełnego obrazu dysku na potrzeby uruchamiania testów w QEMU przy użyciu OpenSBI. Dodano nowe zadania do testowania obrazów i maszyn wirtualnych powerpc64 (FreeBSD-head-powerpc64-images, FreeBSD-head-powerpc64-testvm).
    • Trwają prace nad przeniesieniem zestawu testów Kyua z portów (devel/kyua) na system bazowy w celu rozwiązania problemów (pakiety instalują się bardzo wolno), które pojawiają się podczas korzystania z Kyua na nowych architekturach, dla których rozwój odbywa się przy użyciu emulatora lub FPGA. Integracja z systemem bazowym znacznie uprości testowanie platform wbudowanych i interfejsu z systemami ciągłej integracji.
    • Uruchomiono projekt mający na celu optymalizację wydajności sterownika mostu sieciowego if_bridge, który wykorzystuje pojedynczy muteks do blokowania danych wewnętrznych, co nie pozwala na osiągnięcie pożądanej wydajności na systemach z dużą liczbą środowisk więziennych lub maszyn wirtualnych zjednoczonych w jednej sieci. Na tym etapie do kodu dodano testy, które mają zapobiec występowaniu regresji podczas modernizacji pracy z zamkami. Rozważana jest możliwość wykorzystania ConcurrencyKit do zrównoleglenia procedur obsługi przesyłania danych (bridge_input(), Bridge_output(), Bridge_forward(), ...).
    • Dodano nowe wywołanie systemowe sigfastblock, aby umożliwić wątkowi określenie bloku pamięci dla szybkiej procedury obsługi sygnału w celu poprawy wydajności procedur obsługi wyjątków.
    • Jądro dodaje obsługę instrukcji atomowych LSE (Large System Extension) obsługiwanych przez systemy ARMv8.1. Instrukcje te są wymagane w celu poprawy wydajności podczas pracy na płytach Cavium ThunderX2 i AWS Graviton 2. Dodane zmiany wykrywają obsługę LSE i dynamicznie umożliwiają bazującą na nich implementację atomową. Podczas testów zastosowanie LSE pozwoliło skrócić czas procesora poświęcany na montaż jądra o 15%.
    • Przeprowadzono optymalizację wydajności i rozszerzono funkcjonalność narzędzia o pliki wykonywalne w formacie ELF.
      Dodano obsługę buforowania informacji debugowania DWARF, rozwiązano problemy w narzędziach elfcopy/objcopy, dodano przetwarzanie DW_AT_ranges,
      readelf implementuje możliwość dekodowania flag PROTMAX_DISABLE, STKGAP_DISABLE i WXNEEDED, a także Xen i GNU Build-ID.

  • bezpieczeństwo
    • Aby poprawić wydajność FreeBSD w środowiskach chmurowych Azure, trwają prace nad zapewnieniem obsługi mechanizmu HyperV Socket, który umożliwia wykorzystanie interfejsu gniazda do interakcji pomiędzy systemem gościa a środowiskiem hosta bez konieczności konfigurowania sieci.
    • Trwają prace nad zapewnieniem powtarzalnych kompilacji FreeBSD, dzięki którym można mieć pewność, że pliki wykonywalne komponentów systemu są skompilowane dokładnie z zadeklarowanych kodów źródłowych i nie zawierają zbędnych zmian.
    • Do narzędzia elfctl dodano możliwość kontroli włączenia dodatkowych mechanizmów zabezpieczeń (ASLR, PROT_MAX, szczelina stosu, mapowanie W+X) na poziomie poszczególnych procesów
  • Systemy pamięci i plików
    • Trwają prace nad wdrożeniem możliwości działania NFS po szyfrowanym kanale komunikacyjnym opartym na TLS 1.3, zamiast korzystania z protokołu Kerberos (tryb sec=krb5p), który ogranicza się do szyfrowania wyłącznie wiadomości RPC i jest zaimplementowany wyłącznie programowo. Nowa implementacja wykorzystuje dostarczany przez jądro stos TLS, aby umożliwić przyspieszenie sprzętowe. Kod NFS over TLS jest prawie gotowy do testów, ale nadal wymaga pracy w celu obsługi podpisanych certyfikatów klienta i dostosowania stosu TLS jądra do wysyłania danych NFS (łatki do odbioru są już gotowe).
  • Wsparcie sprzętowe
    • Trwają prace nad dodaniem obsługi chińskiego procesora x86 Hygon opartego na technologiach AMD;
    • Jako część CheriBSD, forka FreeBSD do badań architektury procesorów UKOCHANA (Capability Hardware Enhanced RISC Instrukcje), w dalszym ciągu wdrażana jest obsługa procesora ARM Morello, który będzie obsługiwał system kontroli dostępu do pamięci CHERI oparty na modelu bezpieczeństwa projektu Capsicum. Chip Morello planują wydanie w 2021 roku. Prace skupiają się obecnie na dodaniu obsługi platformy Arm Neoverse N1, na której działa Morello. Zaprezentowano początkowy port CheriBSD dla architektury RISC-V. Kontynuowany jest rozwój CheriBSD dla prototypu referencyjnego CHERI opartego na architekturze MIPS64.
    • Kontynuacja przenoszenia FreeBSD dla 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. Obecnie sterowniki QorIQ i LS1046A, GPIO, QorIQ LS10xx AHCI, VF610 I2C, Epson RX-8803 RTC, QorIQ LS10xx SDHCI są przygotowywane do przeniesienia do głównego składu FreeBSD.
    • Sterownik ena został zaktualizowany do wersji 2.1.1 z obsługą drugiej generacji kart sieciowych ENAv2 (Elastic Network Adapter) wykorzystywanych w infrastrukturze Elastic Compute Cloud (EC2) do organizowania komunikacji pomiędzy węzłami EC2 z szybkością do 25 Gb/s S. Przygotowywana jest aktualizacja do wersji ENA 2.2.0.
    • Kontynuowane są udoskonalenia portu FreeBSD dla platformy powerpc64. Nacisk położony jest na zapewnienie wysokiej jakości wydajności w systemach z procesorami IBM POWER8 i POWER9. W okresie sprawozdawczym FreeBSD-CURRENT został przeniesiony w celu korzystania z kompilatora LLVM/Clang 10.0 i linkera lld zamiast GCC. Domyślnie systemy powerpc64 korzystają z interfejsu ABI ELFv2, a obsługa interfejsu ABI ELFv1 została przerwana. FreeBSD-STABLE nadal posiada gcc 4.2.1. Rozwiązano problemy ze sterownikami virtio, aacraid i ixl. Na systemach powerpc64 możliwe jest uruchomienie QEMU bez obsługi Huge Pages.
    • Trwają prace nad wdrożeniem obsługi architektury RISC-V. W obecnej formie FreeBSD uruchamia się już pomyślnie na płycie SiFive Hifive Unleashed, dla której przygotowano sterowniki
      UART, SPI i PRCI, obsługuje oprogramowanie sprzętowe OpenSBI i SBI 0.2. W raportowanym okresie prace koncentrowały się na migracji z GCC do clang i lld.

  • Aplikacje i system portów
    • Kolekcja portów FreeBSD przekroczyła próg 39 tysięcy portów, liczba niezamkniętych PR nieznacznie przekracza 2400, z czego 640 PR nie zostało jeszcze posortowanych. W raportowanym okresie dokonano 8146 zmian u 173 deweloperów. Czterech nowych uczestników otrzymało uprawnienia komisarza (Loïc Bartoletti, Mikael Urankar, Kyle Evans, Lorenzo Salvadore). Dodano flagę USES=qca i usunięto flagę USES=zope (ze względu na niekompatybilność z Pythonem 3). Trwają prace nad usunięciem Pythona 2.7 z drzewa portów - wszystkie porty oparte na Pythonie 2 muszą zostać przeniesione do Pythona 3, w przeciwnym razie zostaną usunięte. Menedżer pakietów pkg został zaktualizowany do wersji 1.13.2.
    • Zaktualizowano komponenty stosu graficznego i porty powiązane z xorg.
      Serwer X.org został zaktualizowany do wersji 1.20.8 (poprzednio dostarczanej w gałęzi 1.18), co pozwoliło FreeBSD na domyślne używanie backendu udev/evdev do obsługi urządzeń wejściowych. Pakiet Mesa został domyślnie przełączony tak, aby korzystał z rozszerzenia DRI3 zamiast DRI2. Trwają prace nad utrzymaniem sterowników graficznych, stosu urządzeń wejściowych i komponentów drm-kmod (port umożliwiający działanie modułów amdgpu, i915 i radeon DRM, przy użyciu frameworku linuxkpi w celu zapewnienia kompatybilności z Direct Rendering Manager jądra Linuksa) aktualny.

    • Pulpit KDE Plasma, Frameworki KDE, Aplikacje KDE i Qt są na bieżąco aktualizowane do najnowszych wydań. Do portów dodana została nowa aplikacja kstars (atlas gwiazd).
    • Wykonano prace mające na celu wyeliminowanie regresywnych zmian w menedżerze okien xfwm4, które pojawiły się po aktualizacji Xfce do wersji 4.14 (na przykład artefakty pojawiały się podczas dekorowania okien).
    • Port Wine został zaktualizowany do wersji Wine 5.0 (poprzednio oferowana była wersja 4.0.3).
    • Począwszy od wersji 1.14, kompilator języka Go dodał oficjalną obsługę architektury ARM64 dla FreeBSD 12.0.
    • OpenSSH w systemie podstawowym został zaktualizowany do wersji 7.9p1.
    • Zaimplementowano bibliotekę sysctlmibinfo2 i umieszczono ją w portach (devel/libsysctlmibinfo2), udostępniając API umożliwiające dostęp do sysctl MIB i tłumaczenie nazw sysctl na identyfikatory obiektów (OID).
    • Wygenerowano aktualizację dystrybucji NomadBSD 1.3.1, który jest edycją FreeBSD przystosowaną do użytku jako przenośny komputer stacjonarny, który można uruchamiać z dysku USB. Środowisko graficzne oparte jest na menadżerze okien Otwierać pudełko. Służy do mocowania napędów DSBMD (obsługiwany jest montaż CD9660, FAT, HFS+, NTFS, Ext2/3/4), aby skonfigurować sieć bezprzewodową - Wifimgri kontrolować głośność - DSBMikser.
    • Zaczęła się pracować w sprawie napisania kompletnej dokumentacji dla menadżera środowiska więziennego puszka. Przygotowywana jest do wydania wersja Pot 0.11.0, która będzie zawierała narzędzia do zarządzania stosem sieciowym.

Źródło: opennet.ru

Dodaj komentarz