Bolo vydané F-Stack 2.0, ktorý vyvíja edíciu sieťového zásobníka FreeBSD prispôsobenú pre izolovanú prácu v užívateľskom priestore v podobe knižnice. Projekt bol vytvorený najväčšou telekomunikačnou spoločnosťou v Číne Tencent a používa sa v jej produktoch a službách. Kód je napísaný v jazyku C a distribuuje sa pod licenciou BSD. Podporuje prácu v Linuxe a FreeBSD. Projekt tiež podporuje preložené verzie Nginx 1.28 a databázového systému Redis 6.2.6, ktoré demonštrujú výkon vyšší ako obvyklé zostavy fungujúce nad systémovým sieťovým zásobníkom.
F-Stack umožňuje aplikáciám využívať vlastný lokálny sieťový zásobník, nezávislý od sieťového zásobníka operačného systému, fungujúci v užívateľskom priestore a priamo pracujúci so sieťovým hardvérom. F-Stack je pozicionovaný ako riešenie, ktoré umožňuje zvýšiť výkon spracovateľov sieťových požiadaviek za podmienok, keď štandardný TCP/IP zásobník jadra Linuxu sa stáva úzkym miestom a obmedzuje škálovateľnosť. Teoreticky F-Stack umožňuje dosiahnuť strop sieťového výkonu, ktorý je možný pre použitú sieťovú kartu, a v niektorých situáciách umožňuje niekoľkonásobne zvýšiť počet spracovávaných drobných sieťových požiadaviek.
Zvýšenie výkonu sa dosahuje vylúčením operácií ako kopírovanie sieťových paketov, plánovanie vlákien, spracovanie prerušenia a prístup k systémovým volaniam. Na interakciu so sieťovou kartou, obchádzajúci rozhrania jadra operačného systému, sa používa framework DPDK (Data Plane Development Kit), ktorý vyvíja súbor knižníc pre nízkoúrovňovú prácu so sieťovými adaptérmi. DPDK umožňuje znížiť režijné náklady a dostať sa na minimum CPU cyklov pri prijímaní alebo odosielaní sieťových paketov.
Funkcionalita TCP/IP zásobníka zodpovedá sieťovému zásobníku FreeBSD 15 a bola vyčlenená z tejto operačnej sústavy do nezávislej knižnice. Na vývoj aplikácií je možné využiť štandardné API POSIX (socket, epoll, kqueue) alebo vlastné programové rozhranie založené na mikrotokoch, ktoré uľahčuje vytváranie sieťových aplikácií a umožňuje obísť zložitú logiku asymetrickej správy požiadaviek. Možné je používanie s nemodifikovanými aplikáciami za nahrávania cez LD_PRELOAD.
Najvýraznejšie zmeny v novej verzii:
- Komponenty sieťového zásobníka boli aktualizované na stav FreeBSD 15 (predtým bol použitý FreeBSD 13).
- Implementovaný režim viacvláknovej práce (thread_mode=1) v jednom procese, ktorý dopĺňa predtým dostupný režim viacprocesový.
- Pridaný ľahký režim práce (primary_slim), pri ktorom hlavný proces vykonáva iba základné úlohy iniciácie a koordinácie práce, zatiaľ čo prijímanie paketov a spracovanie front prijímania/odosielania (rx/tx) sa vykonáva iba na strane podprocesov.
- Pridaná podpora mechanizmu hardvérovej akcelerácie.
TSO (TCP Segmentation Offload) pre prevod operácií zlúčenia paketov na sieťovú kartu, s možnosťou návratu na softvérovú implementáciu. Zlepšená podpora TSO (TCP Segmentation Offload, presun na sieťovú kartu spracovania segmentov paketov) pre IPv6. - Pridaná možnosť zmeny veľkosti MTU (Maximum transmission unit) a implementovaná podpora jumbo rámcov.
- Rozšírené možnosti správy hardvérovej akcelerácie výpočtu kontrolných súm odosielaných paketov.
- Pridaná funkcia ff_zc_recv() na prijímanie údajov bez medziúložiska (zero-copy). Prepracovaná podobná funkcia ff_zc_send() na odosielanie. Optimalizovaná a doplnená. podporou IPv6. funkcia ff_rss_check().
- Pridaná možnosť FF_KERNEL_COEXIST na spoločnú prevádzku so sieťovým zásobníkom jadra.
- Poskytnutá možnosť uchovania informácií o prevádzke v pcap dások pomocou nanosekundovej presnosti.
- Do config.ini boli pridané nové parametre idle_loop_interval, extra_eal_args, drain_ring_size, reload_heartbeat_timeout_ms a reload_udp_idle_ms.
- Vo špecializovanej zostave nginx bola implementovaná podpora opätovného načítania konfigurácie a aktualizácie binárneho súboru bez prerušenia spojení (graceful_reload=1).
Zdroj: opennet.ru
