Po półtora roku prac rozwojowych wydanie projektu , rozwijający działający w przestrzeni użytkownika wysokowydajny stos sieciowy, oparty na frameworku i stosie TCP/IP FreeBSD (F-Stack nie jest związany z FreeBSD i jako główną platformę zastosowania rozważa Linux). Projekt jest używany w różnych produktach i usługach , największej w Chinach firmie telekomunikacyjnej. Kod na licencji BSD. Obsługiwana jest praca w Linux i FreeBSD.
F-Stack umożliwia organizację komunikacji sieciowej w aplikacjach, stosując zamiast stosu sieciowego systemu operacyjnego własny stos sieciowy, funkcjonujący w przestrzeni użytkownika i bezpośrednio współpracujący z urządzeniami sieciowymi. specjalizowane edycje Nginx i Redis, przetłumaczone na użycie F-Stack.
Do tworzenia aplikacji zarówno standardowy interfejs POSIX API (Socket, Epoll, Kqueue), uproszczający migrację istniejących aplikacji na F-Stack, jak i własny interfejs programowania oparty na współprogramach (mikropotokach), upraszczający tworzenie aplikacji sieciowych i pozwalający na ominięcie skomplikowanej logiki asynchronicznego przetwarzania żądań. F-Stack oferuje również narzędzia do uproszczenia zastosowania w aplikacjach z architekturą wieloprocesową.
Do bezpośredniej interakcji z kartą sieciową, omijając interfejsy rdzenia systemu operacyjnego, stosowany jest framework (Data Plane Development Kit), oferujący zestaw bibliotek do niskopoziomowej pracy z adapterami sieciowymi, interakcji w systemach wielordzeniowych, wykorzystania buforów pierścieniowych i dużych stron pamięci („huge page”). Użycie DPDK pozwala na odbieranie i wysyłanie pakietów sieciowych przy minimalnej liczbie cykli CPU (około 80 cykli na pakiet) oraz projektowanie wysoko wydajnych komponentów stosu sieciowego. Funkcjonalność stosu TCP/IP jest bezpośrednio zaczerpnięta z FreeBSD 11.1 i wydzielona do niezależnej od systemu operacyjnego biblioteki.
F-Stack jest pozycjonowany jako rozwiązanie, które można wykorzystać do zwiększenia wydajności przetwarzania zapytań sieciowych w sytuacjach, gdy standardowy stos TCP/IP jądra Linux staje się wąskim gardłem i ogranicza skalowanie. Zastosowanie F-Stack zapewnia znaczącą optymalizację i w niektórych sytuacjach pozwala na wielokrotne zwiększenie liczby przetwarzanych małych zapytań.
Zwiększenie wydajności osiągane jest poprzez wykluczenie takich operacji, jak kopiowanie pakietów sieciowych, planowanie wątków, obsługa przerwań oraz stosowanie wywołań systemowych. F-Stack pozwala osiągnąć maksymalny poziom wydajności sieciowej, możliwy dla używanej karty sieciowej. Na przykład, rozwiązania oparte na F-Stack wykazały możliwość obsługi 10 milionów równoległych połączeń, 5 milionów zapytań na sekundę i 1 miliona połączeń na sekundę.
W nowym wydaniu:
- Dodano wsparcie dla VLAN;
- Zapewniono możliwość pracy w izolowanych kontenerach opartych na Dockerze;
- Zrealizowane interfejsy ff_dup, ff_dup2, ff_ioctl_freebsd, ff_getsockopt_freebsd oraz ff_setsockopt_freebsd;
- Dodano parametr „idle_sleep” w celu zmniejszenia obciążenia CPU w sytuacji braku przychodzących pakietów
- Dodano wsparcie dla architektury ARM64;
- W przetłumaczonej na F-Stack edycji Nginx zastąpiono obsługę getpeername, getsockname i shutdown;
- Dokonano przejścia na nową wersję DPDK 17.11.4 LTS;
- Do zestawu dodano narzędzie do wyświetlania aktualnego ruchu przetwarzanego przez aplikacje oparte na F-Stack (podobne do trafshow).
W planach na przyszłość wsparcie dla IPv6, udostępnienie API dla języków Python, PHP i Go, wsparcie dla API Cyptodev (), wykorzystanie zerocopy przy wysyłaniu pakietów, wsparcie i możliwość uruchomienia w formie procesu w tle.
Źródło: opennet.ru
