Wersja FreeBSD 13.0

Dwa i pół roku po powstaniu gałęzi 12.x zaprezentowano wydanie FreeBSD 13.0, które jest przygotowane dla architektur amd64, i386, powerpc, powerpc64, powerpc64le, powerpcspe, armv6, armv7, aarch64 i riscv64. Dodatkowo wygenerowano obrazy dla systemów wirtualizacyjnych (QCOW2, VHD, VMDK, raw) oraz środowisk chmurowych Amazon EC2, Google Compute Engine i Vagrant.

Główne innowacje:

  • Dokonano przejścia na ujednoliconą linuksową implementację systemu plików ZFS z projektu OpenZFS. Wśród funkcji, które stały się dostępne we FreeBSD po przejściu na OpenZFS: rozszerzony system kwot, szyfrowanie zbiorów danych, oddzielny wybór klas alokacji bloków (klas alokacji), wykorzystanie instrukcji procesora wektorowego w celu przyspieszenia implementacji RAIDZ i sumy kontrolnej obliczenia, wsparcie dla algorytmu kompresji ZSTD, tryb multihost (MMP, Multi Modifier Protection), ulepszona instrumentacja linii poleceń, naprawia wiele błędów związanych z warunkami wyścigu i blokowaniem.
  • Port dla architektury ARM64 (AArch64) został przeniesiony na pierwszy poziom wsparcia (Tier 1), który wspierany jest przez zespoły odpowiedzialne za eliminowanie podatności, przygotowywanie wydań i utrzymanie portów. Pierwszy poziom wsparcia obejmuje tworzenie zestawów instalacyjnych, aktualizacji binarnych i gotowych pakietów, a także zapewnienie gwarancji rozwiązania konkretnych problemów i utrzymania niezmienionego ABI dla środowiska użytkownika i jądra (z wyjątkiem niektórych podsystemów).
  • Architektura i386 została przeniesiona na drugi poziom obsługi platformy (Tier 2), na którym będzie kontynuowane tworzenie zestawów instalacyjnych, aktualizacji binarnych i gotowych pakietów, ale nie gwarantuje to rozwiązania konkretnych problemów. Domyślny typ procesora (CPUTYPE) dla architektury i386 został zmieniony z 486 na 686 (w razie potrzeby zestawy dla i486 i i586 można tworzyć niezależnie).
  • Komponenty clang, lld, lldb, compilator-rt, llvm, libunwind i libc++ zostały zaktualizowane do wersji 11.
  • Rozwój został przeniesiony ze scentralizowanego systemu kontroli źródła Subversion do zdecentralizowanego systemu Git.
  • System bazowy został oczyszczony z aplikacji rozpowszechnianych na licencji GPL. Binutils 2.17 i gcc 4.2.1 zostały usunięte z drzewa źródłowego, a wszystkie obsługiwane architektury zostały przeniesione do zestawu narzędzi LLVM/clang. W zestawie znajdują się licencjonowane przez BSD wersje narzędzi grep i dtc (Device Tree Compiler), które zastępują wersje objęte licencją GPL. Usunięto proces automatycznego montowania amd, którego funkcjonalność jest teraz realizowana poprzez autofs. Narzędzie ctm zostało usunięte i zamiast tego zaleca się używanie portu misc/ctm.
  • Stos routingu został przepisany, aby uwzględnić obsługę obiektów następnego skoku, które przechowują dane o stanie używane do przekazywania pakietu do żądanego miejsca docelowego. Dodano możliwość podłączenia własnych algorytmów wyszukiwania tras. Dodano algorytmy wyszukiwania tras z DPDK (Data Plane Development Kit) librte, pozwalające zoptymalizować pracę z bardzo dużymi tablicami routingu. W przypadku żądań proxyarp używany jest interfejs fib. Dodano możliwość zmiany numeru fib na bieżąco poprzez sysctl net.fibs. Zaimplementowano obsługę tras tymczasowych dla IPv4 i IPv6 (z ustawionym czasem życia).
  • Obsługa routingu wielościeżkowego została przepisana i stała się bardziej skalowalna, w przypadku której czas wyszukiwania nie zależy od rozmiaru listy (O(1)). Nowa implementacja Multipath jest teraz powiązana z parametrem jądra ROUTE_MPATH, który zastąpił RADIX_MPATH i jest domyślnie włączony. Do zarządzania obsługą wielu ścieżek proponuje się sysctl net.route.multipath.
  • Struktura kryptograficzna zaimplementowana na poziomie jądra została przeprojektowana, dodając obsługę nowoczesnych algorytmów kryptograficznych i upraszczając interfejs korzystania z szyfrowania w sterownikach i innych komponentach jądra. Usunięto przestarzałe algorytmy ARC4, Blowfish, CAST128, DES, DES, MD5-HMAC i Skipjack. Protokoły IPsec i Kerberos nie obsługują już algorytmów przestarzałych w dokumentach RFC 8221 i RFC 6649/8429, w tym 3DES. Usunięto wcześniej ogłoszone przestarzałe algorytmy w podsystemie szyfrowania dysku geli i cryptodev.
  • Jądro GENERIC obejmuje obsługę sterowników aesni i armv8crypto w celu przyspieszenia szyfrowania dysków w oparciu o geli przy użyciu instrukcji AES-NI dla architektur amd64/i386 i AES-XTS dla ARM64.
  • Dodano sterownik qat dla akceleratorów kryptograficznych Intel QuickAssist (QAT) i sterownik ossl z implementacją przyspieszonych procedur szyfrowania oprogramowania z OpenSSL, zoptymalizowanych przy użyciu kodu języka asemblerowego. Sterownik armv8crypto dodaje obsługę AES-XTS i AES-GCM przy użyciu odpowiednich instrukcji dla procesorów ARMv8.
  • Dodano implementację TLS (kTLS) działającą na poziomie jądra FreeBSD, która pozwala na znaczny wzrost wydajności szyfrowania dla gniazd TCP. Obsługiwane wersje TLS od 1.0 do 1.3. Do szyfrowania używane są sterowniki kryptograficzne jądra obsługujące AES-CBC lub AES-GCM. Używanie kTLS w przestrzeni użytkownika wymaga przebudowania OpenSSL z opcją WITH_OPENSSL_KTLS.
  • Dodano nowy typ buforów sieciowych, mbuf (bufor danych sieciowych), który może reprezentować wiele niezamapowanych stron pamięci fizycznej w jednym buforze, co poprawia wydajność wywołania sendfile(2) poprzez zmniejszenie rozmiaru list mbuf w buforach gniazd.
  • Stos TCP integruje obsługę algorytmu proporcjonalnej redukcji intensywności wysyłania pakietów (Proportional Rate Reduction, RFC 6937), co pozwala na szybkie przywrócenie optymalnych parametrów przepływu po chwilowych problemach z transmisją danych. Aby wyłączyć PRR, udostępniono sysctl net.inet.tcp.do_prr.
  • Rozszerzono możliwości hypervisora ​​Bhyve: Dodano obsługę udostępniania plików za pomocą VirtIO-9p (VirtFS). Zaimplementowano możliwość pracy z migawkami maszyn wirtualnych. Dodano obsługę urządzeń PCI HDAudio i dodatkowych portów szeregowych COM3 i COM4. Usunięto przestarzałe modele urządzeń bvmconsole i bvmdebug. Poprawiona stabilność klientów VNC, w tym aplikacji do udostępniania ekranu macOS.
  • Sterowniki VirtIO dodały obsługę specyfikacji VirtIO V1, co poprawiło kompatybilność gości FreeBSD z różnymi emulatorami i hypervisorami.
  • W przypadku procesów podłączonych do środowisk więziennych zapewniona jest konwersja powiązań procesora (zestaw procesora początkowo powiązany z procesem zostanie zastąpiony z uwzględnieniem procesora więzienia i ustawionych ograniczeń).
  • Dodano możliwość budowania systemu bazowego FreeBSD w środowiskach opartych na innych systemach operacyjnych. Konieczność budowania na innych systemach operacyjnych wynika z chęci wykorzystania narzędzi ciągłej integracji opartych na systemie Linux lub macOS do testowania FreeBSD.
  • Zaproponowano nowy stos MMC/SD, oparty na frameworku CAM i umożliwiający podłączenie urządzeń wyposażonych w interfejs 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.
  • Poprawiono wydajność warstwy w celu zapewnienia zgodności z systemem Linux. Pliki DTS (Device Tree Sources) są synchronizowane z jądrem Linux 5.8.
  • Dodano obsługę NFSv4.2 (RFC-7862) i zaimplementowano możliwość obsługi NFS poprzez szyfrowany kanał komunikacyjny oparty na TLS 1.3, zamiast korzystania z protokołu Kerberos (tryb sec=krb5p), który ograniczał się do szyfrowania tylko wiadomości RPC i został zaimplementowany tylko w oprogramowaniu.
  • Usunięto przestarzałą wersję debuggera GDB, który był wcześniej zainstalowany w katalogu /usr/libexec i używany w narzędziu Crashinfo. Zamiast preinstalowanego GDB, w celu uzyskania szczegółowych informacji o przyczynach awarii, sugeruje się teraz zainstalowanie najnowszej wersji GDB z portów lub pakietów. Zakończono obsługę debugowania procesów poprzez procfs. Dodano sterownik netgdb, umożliwiający dostęp do debugera jądra przez sieć.
  • Funkcja unsafe gets została usunięta z libc (począwszy od standardu C11, funkcja ta została wyłączona ze specyfikacji) i dostosowano porty, które nadal korzystają z tej funkcji. Usunięto funkcje cap_random (należy użyć getrandom).
  • Dodano nowe wywołanie systemowe copy_file_range, kompatybilne z implementacją z jądra Linuksa i pozwalające przyspieszyć kopiowanie danych z jednego pliku do drugiego poprzez wykonanie operacji tylko po stronie jądra, bez uprzedniego wczytywania danych do pamięci procesu. Wywołanie systemowe jest również wykorzystywane w serwerze NFSv4.2 do wykonywania operacji kopiowania lokalnie na serwerze (bez przesyłania do klienta).
  • Asynchroniczny silnik we/wy POSIX AIO wprowadza obsługę funkcji wektorowych. W szczególności dodano wywołania systemowe aio_writev i aio_readv, umożliwiające implementację wektorowych odpowiedników funkcji aio_read i aio_write.
  • Wycofano komponenty przestrzeni użytkownika, aby obsługiwały format pliku wykonywalnego a.out w systemach o architekturze i386. Narzędzie elf2aout zostało usunięte.
  • Narzędzia ping i ping6 zostały połączone. Do polecenia ping dodano możliwość ustawiania parametrów jakości usług (QoS) poprzez IP DSCP i Ethernet PCP.
  • Narzędzie freebsd-update pokazuje teraz postęp pobierania pliku i dodaje polecenia opensready i showconfig w celu sprawdzenia dostępności aktualizacji i pokazania konfiguracji.
  • Wiele pracy włożono w poprawę obsługi systemów NUMA (Non-Uniform Memory Access).
  • Zaktualizowane sterowniki graficzne i komponenty stosu graficznego. Rozwiązano problemy z działaniem środowisk opartych na protokole Wayland.
  • Dodano podsystem podświetlenia do tworzenia sterowników sterujących podświetleniem. Dodano sterownik podświetlenia pwm do sterowania podświetleniem Pinebooka i Pinebooka Pro.
  • Obsługa protokołu SCTP zawarta jest w osobnym module sctp.ko, który w jądrze GENERIC jest domyślnie wyłączony.
  • W przypadku urządzeń wejściowych zaproponowano nowy sterownik usbhid, który wykorzystuje framework hid do współpracy z urządzeniami USB HID zamiast sterowników ukbd, ums i uhid.
  • Sterownik cpufreq obsługuje technologię Intel Speed ​​Shift.
  • Dodano obsługę nowych płyt opartych na 64-bitowych procesorach ARMv8, w tym układów SoC Broadcom BCM5871X i NXP LS1046A.
  • Dla architektury AMD64 zaimplementowano obsługę 57-bitowych adresów wirtualnych (LA57). Dodano obsługę chińskiego procesora x86 Hygon Dhyana opartego na technologiach AMD.
  • Port dla architektury powerpc64 został przełączony tak, aby korzystał z LLVM i ELFv2 ABI (pliki binarne z poprzednich wersji FreeBSD nie będą mogły być używane we FreeBSD 13). Sterowniki virtio, ixl, mrsas, aacraid, cpld zostały przeniesione dla powerpc64.
  • Sterowniki dla starszych adapterów Ethernet zostały usunięte:
    • bm(4) BMAC
    • cs(4) Półprzewodnik kryształowy CS8900/CS8920
    • de(4) DEC DC21x4x
    • wyd(4) NE-2000 i WD-80×3
    • odc.(4) 3Com Etherlink III (3c5x9) ISA
    • np.(4) Intel EtherExpress Pro/10 i Pro/10+
    • fe(4) Fujitsu MB86960A/MB86965A
    • hme(4) Firma Sun Microelectronics STP2002-STQ
    • pcn(4) AMD PCnet
    • sf(4) Gwiezdny Ogień
    • sn(4) SMC 91Cxx
    • tl(4) ThunderLAN firmy Texas Instruments
    • tx(4) SMC 83c17x
    • txp(4) 3Com 3XP Typhoon/Sidewinder (3CR990)
    • vx(4) 3Com EtherLink III / Fast EtherLink III (3c59x) PCI
    • wb(4) Winbond W89C840F
    • xe(4) Xircom PCMCIA
  • Usunięto sterowniki ubsec (akceleratory kryptograficzne Broadcom BCM58xx), ufm (tunery FM z interfejsem USB), ctau (Cronix Tau), cx (Cronix Sigma) i vpo (port równoległy SCSI).

Źródło: opennet.ru

Dodaj komentarz