După un an și jumătate de dezvoltare versiunea proiectului , care dezvoltă un stivă de rețea de înaltă performanță în spațiul utilizatorului, bazată pe cadru și stiva TCP/IP FreeBSD (F-Stack nu este legat de FreeBSD și consideră Linux ca platformă principală pentru implementare). Proiectul este utilizat în diverse produse și servicii , cea mai mare companie de telecomunicații din China. Codul este sub licența BSD. Suportă funcționarea în Linux și FreeBSD.
F-Stack permite organizarea interacțiunii de rețea în aplicații, aplicând în locul stivei de rețea a sistemului de operare propria stivă de rețea, care funcționează în spațiul utilizatorului și interacționează direct cu echipamentul de rețea. ediții specializate Nginx și Redis, adaptate pentru utilizarea cu F-Stack.
Pentru dezvoltarea aplicațiilor atât API-ul standard Posix (Socket, Epoll, Kqueue), care simplifică migrarea aplicațiilor existente la F-Stack, cât și propriul set de interfețe de programare bazate pe corutine (microfire), care facilitează crearea de aplicații de rețea și permite evitarea unei logici complexe pentru procesarea asincronă a cererilor. F-Stack oferă, de asemenea, instrumente pentru simplificarea utilizării în aplicații cu arhitectură multiprocesor.
Pentru interacțiunea cu placa de rețea, ocolind interfețele nucleului sistemului de operare, se folosește un cadru (Data Plane Development Kit), care oferă un set de biblioteci pentru lucrul de nivel redus cu adaptoare de rețea, interacțiuni în sisteme multicore, utilizarea buffer-elor circulare și a paginilor mari de memorie („huge page”). Utilizarea DPDK permite primirea și trimiterea de pachete de rețea cu o numără minimă de cicluri CPU (aproximativ 80 de cicluri pe pachet) și dezvoltarea de componente de rețea de înaltă performanță. Funcționalitatea stivei TCP/IP provine direct din FreeBSD 11.1 și a fost separată într-o bibliotecă independentă de sistemul de operare.
F-Stack este poziționat ca o soluție care poate fi utilizată pentru a îmbunătăți performanța procesării cererilor de rețea în condiții în care funcționarea stivei TCP/IP standard a nucleului Linux devine un punct de congestie și limitează scalabilitatea. În această situație, utilizarea F-Stack oferă o optimizare considerabilă și permite în anumite situații creșterea numărului de cereri mici procesate de mai multe ori.
Creșterea performanței se realizează prin excluderea unor operațiuni, cum ar fi copierea pachetelor de rețea, planificarea firelor de execuție, gestionarea întreruperilor și utilizarea apelurilor de sistem. F-Stack permite atingerea plafonului de performanță de rețea posibil pentru placa de rețea utilizată. De exemplu, soluțiile bazate pe F-Stack au demonstrat capacitatea de a gestiona 10 milioane de conexiuni paralele, 5 milioane de cereri pe secundă și 1 milion de conexiuni pe secundă.
În noua versiune:
- A fost adăugată suport pentru VLAN;
- S-a asigurat posibilitatea de funcționare în containere izolate bazate pe Docker;
- Au fost implementate interface-urile ff_dup, ff_dup2, ff_ioctl_freebsd, ff_getsockopt_freebsd și ff_setsockopt_freebsd;
- A fost adăugat parametrul „idle_sleep” pentru a reduce sarcina pe CPU în absența pachetelor de intrare.
- A fost adăugat suport pentru compilarea pe arhitectura ARM64;
- În ediția Nginx migrată la F-Stack, handler-urile getpeername, getsockname și shutdown au fost înlocuite;
- S-a făcut tranziția la noua versiune DPDK 17.11.4 LTS;
- Utilitarul a fost adăugat pentru a afișa traficul actual procesat de aplicațiile bazate pe F-Stack (asemănător cu trafshow).
Planuri pentru viitor suport IPv6, furnizarea de API-uri pentru limbajele Python, PHP și Go, suport pentru API-ul Cyptodev (), utilizarea zerocopy la trimiterea pachetelor, suport pentru și posibilitatea de a funcționa ca un proces de fundal.
Sursa: opennet.ro
