A avut loc lansarea proiectului F-Stack 2.0, care dezvoltă o variantă a stivei de rețea FreeBSD, adaptată pentru a funcționa separat în spațiul utilizatorului sub formă de bibliotecă. Proiectul a fost creat de cea mai mare companie de telecomunicații din China, Tencent, și este utilizat în produsele și serviciile sale. Codul este scris în limbajul C și este distribuit sub licența BSD. Se suportă funcționarea pe Linux și FreeBSD. Proiectul include, de asemenea, versiuni traduse pentru utilizarea F-Stack cu Nginx 1.28 și baza de date Redis 6.2.6, demonstrând performanțe superioare față de versiunile obișnuite care funcționează deasupra stivei de rețea a sistemului.
F-Stack permite utilizarea unei stive de rețea locale proprii în aplicații, independentă de stiva de rețea a sistemului de operare, funcționând în spațiul utilizatorului și lucrând direct cu echipamentele de rețea. F-Stack este poziționat ca o soluție care îmbunătățește performanța gestionatorilor de cereri de rețea în condițiile în care stiva TCP/IP standard a nucleului Linux devine un punct de blocaj și limitează scalarea. Teoretic, F-Stack permite atingerea limitelor de performanță a rețelei, posibile pentru placa de rețea utilizată, și în anumite situații oferă posibilitatea de a crește semnificativ numărul de cereri de rețea minime tratate.
Îmbunătățirea performanței se realizează prin eliminarea unor operațiuni, cum ar fi copierea pachetelor de rețea, planificarea firelor, gestionarea întreruperilor și apelurile de sistem. Pentru interacțiunea cu placa de rețea, ocolind interfețele nucleului sistemului de operare, se folosește cadrul DPDK (Data Plane Development Kit), care dezvoltă un set de biblioteci pentru lucrul la un nivel foarte scăzut cu adaptoarele de rețea. DPDK permite reducerea overhead-ului și se încadrează în numărul minim de cicluri CPU la primirea sau trimiterea pachetelor de rețea.
Funcționalitatea stivei TCP/IP corespunde stivei de rețea FreeBSD 15 și a fost separată din acest sistem de operare într-o bibliotecă independentă. Pentru dezvoltarea aplicațiilor, se poate folosi API-ul standard POSIX (socket, epoll, kqueue) sau propria interfață de programare bazată pe micro-threads, care simplifică crearea aplicațiilor de rețea și permite evitarea logicii complexe de procesare asincronă a cererilor. Este posibilă utilizarea cu aplicații nemodificate prin încărcare via LD_PRELOAD.
Cele mai notabile schimbări din noua versiune:
- Componentele stivei de rețea au fost actualizate la versiunea FreeBSD 15 (anterior se folosea FreeBSD 13).
- A fost implementat un mod de lucru multi-thread (thread_mode=1) într-un singur proces, care completează modul multi-proces anterior disponibil.
- A fost adăugat un mod de lucru lejer (primary_slim), în care procesul principal îndeplinește doar sarcinile de bază de initializare și coordonare, iar primirea pachetelor și procesarea cozii de primire/transfer (rx/tx) se realizează doar pe partea proceselor fiice.
- A fost adăugată suportul pentru mecanismul de accelerare hardware.
TSO (TCP Segmentation Offload) pentru externalizarea pe partea plăcii de rețea a operațiunilor de combinare a pachetelor, cu posibilitatea de revenire la implementarea software. Suportul pentru TSO (TCP Segmentation Offload, externalizarea pe placa de rețea a procesării segmentelor de pachete) a fost îmbunătățit pentru IPv6. - A fost adăugată posibilitatea de a modifica dimensiunea MTU (Maximum Transmission Unit) și implementarea suportului pentru jumbo frames.
- Au fost extinse capacitățile de gestionare a accelerării hardware pentru calcularea sumelor de control ale pachetelor trimise.
- A fost adăugată funcția ff_zc_recv() pentru primirea datelor fără bufferizare intermediară (zero-copy). Funcția similară ff_zc_send() pentru trimitere a fost reproiectată. A fost optimizată și completată. suport pentru IPv6 funcția ff_rss_check().
- A fost adăugată opțiunea FF_KERNEL_COEXIST pentru a lucra împreună cu stiva de rețea a nucleului.
- A fost oferită posibilitatea de a salva informații despre trafic în dump-uri pcap cu precizie în nanosecunde.
- În config.ini au fost adăugate noi parametrii idle_loop_interval, extra_eal_args, drain_ring_size, reload_heartbeat_timeout_ms și reload_udp_idle_ms.
- În versiunea specifică a nginx s-a implementat suport pentru reîncărcarea configurației și actualizarea fișierului binar fără a întrerupe conexiunile (graceful_reload=1).
Sursa: opennet.ro
