Opublikowano stos sieciowy F-Stack 2.0 działający w przestrzeni użytkownika

Została wydana wersja projektu F-Stack 2.0, rozwijającego edycję stosu sieciowego FreeBSD, przystosowaną do pracy w przestrzeni użytkownika w formie biblioteki. Projekt został stworzony przez największą firmę telekomunikacyjną w Chinach, Tencent, i jest wykorzystywany w jej produktach i usługach. Kod napisany jest w języku C i rozpowszechniany na licencji BSD. Wspiera pracę w systemach Linux i FreeBSD. Projekt wspiera także wersje Nginx 1.28 i bazy danych Redis 6.2.6, przystosowane do korzystania z F-Stack, które wykazują wyższą wydajność niż standardowe kompilacje działające na systemowym stosie sieciowym.

F-Stack pozwala na wykorzystanie w aplikacjach własnego lokalnego stosu sieciowego, niezależnego od stosu sieciowego systemu operacyjnego, działającego w przestrzeni użytkownika i bezpośrednio współpracującego z urządzeniami sieciowymi. F-Stack jest pozycjonowany jako rozwiązanie, które zwiększa wydajność obsługi zapytań sieciowych w warunkach, gdy standardowy stos TCP/IP jądra Linux staje się wąskim gardłem i ogranicza skalowanie. Teoretycznie F-Stack pozwala osiągnąć maksymalną wydajność sieci, możliwą dla używanej karty sieciowej, a w niektórych sytuacjach pozwala na wielokrotne zwiększenie liczby obsługiwanych drobnych zapytań sieciowych.

Zwiększenie wydajności osiąga się poprzez wyeliminowanie takich operacji jak kopiowanie pakietów sieciowych, planowanie wątków, obsługa przerwań oraz wywołania systemowe. W celu interakcji z kartą sieciową, omijając interfejsy jądra systemu operacyjnego, stosowany jest framework DPDK (Data Plane Development Kit), rozwijający zestaw bibliotek do niskopoziomowej pracy z adapterami sieciowymi. DPDK pozwala na zminimalizowanie kosztów dodatkowych i zmieszczenie się w minimalnej liczbie cykli CPU przy odbieraniu lub wysyłaniu pakietów sieciowych.

Funkcjonalność stosu TCP/IP odpowiada stosowi sieciowemu FreeBSD 15 i została wydzielona z tego systemu operacyjnego do niezależnej biblioteki. Do rozwoju aplikacji można używać standardowego API POSIX (socket, epoll, kqueue) lub własnego interfejsu programistycznego opartego na mikrowątkach, który upraszcza tworzenie aplikacji sieciowych i pozwala na uniknięcie skomplikowanej logiki asynchronicznego przetwarzania zapytań. Możliwe jest korzystanie bez modyfikacji aplikacji ładując przez LD_PRELOAD.

Najbardziej zauważalne zmiany w nowej wersji:

  • Komponenty stosu sieciowego zostały zaktualizowane do stanu FreeBSD 15 (wcześniej używano FreeBSD 13).
  • Wprowadzono tryb wielowątkowy (thread_mode=1) w jednym procesie, uzupełniający wcześniej dostępny tryb wieloprocesowy.
  • Dodano lekki tryb pracy (primary_slim), w którym proces główny realizuje jedynie podstawowe zadania inicjalizacji i koordynacji, podczas gdy odbieranie pakietów i przetwarzanie kolejek odbioru/wysyłki (rx/tx) odbywa się tylko po stronie procesów podrzędnych.
  • Dodano wsparcie dla mechanizmu przyspieszenia sprzętowego.
    TSO (TCP Segmentation Offload) do przeniesienia na stronę karty sieciowej operacji łączenia pakietów, z możliwością powrotu do implementacji programowej. Ulepszono wsparcie dla TSO (TCP Segmentation Offload, przeniesienie na kartę sieciową przetwarzania segmentów pakietów) dla IPv6.
  • Dodano możliwość zmiany rozmiaru MTU (Maximum transmission unit) oraz wprowadzono wsparcie dla jumbo-ram.
  • Rozszerzone możliwości zarządzania sprzętowym przyspieszeniem obliczeń sum kontrolnych wysyłanych pakietów.
  • Dodano funkcję ff_zc_recv() do odbierania danych bez pośredniego buforowania (zero-copy). Przeprojektowano analogiczną funkcję ff_zc_send() do wysyłania. Ulepszono i uzupełniono. wsparciem IPv6 funkcję ff_rss_check().
  • Dodano opcję FF_KERNEL_COEXIST do współpracy z jądrowym stosie sieciowym.
  • Udostępniono możliwość zapisywania informacji o ruchu w pcap-dumpach z nanosekundową precyzją.
  • W config.ini dodano nowe parametry idle_loop_interval, extra_eal_args, drain_ring_size, reload_heartbeat_timeout_ms oraz reload_udp_idle_ms.
  • W specjalistycznej wersji nginx wprowadzono wsparcie dla ponownego ładowania konfiguracji i aktualizacji pliku binarnego bez przerywania połączeń (graceful_reload=1).

Źródło: opennet.ru

Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS - ProHoster