Dopo un anno e mezzo di sviluppo il rilascio del progetto , che sviluppa uno stack di rete ad alte prestazioni sullo spazio utente, basato su un framework e sullo stack TCP/IP di FreeBSD (F-Stack non è legato a FreeBSD e considera Linux come piattaforma primaria per l'uso). Il progetto è utilizzato in vari prodotti e servizi , dalla più grande compagnia di telecomunicazioni in Cina. Il codice è sotto licenza BSD. Supporta l'operatività su Linux e FreeBSD.
F-Stack consente di organizzare l'interazione di rete nelle applicazioni, utilizzando invece dello stack di rete del sistema operativo un proprio stack di rete, funzionante nello spazio utente e in contatto diretto con l'hardware di rete. edizioni specializzate di Nginx e Redis, adattate all'uso di F-Stack.
Per lo sviluppo delle applicazioni sia come Posix API standard (Socket, Epoll, Kqueue), che semplifica la portabilità delle applicazioni esistenti a F-Stack, sia un'interfaccia di programmazione proprietaria basata su coroutine (micro-thread), che facilita la creazione di applicazioni di rete e consente di evitare logiche complesse per l'elaborazione asincrona delle richieste. F-Stack fornisce anche strumenti per semplificare l'utilizzo in applicazioni con architettura multi-processo.
Per interagire con la scheda di rete, bypassando le interfacce del kernel del sistema operativo, viene utilizzato un framework (Data Plane Development Kit), che fornisce un insieme di librerie per l'operatività a basso livello con adattatori di rete, interazione in sistemi multithread, utilizzo di buffer circolari e grandi pagine di memoria («huge page»). L'uso di DPDK consente di ricevere e inviare pacchetti di rete con un numero minimo di cicli CPU (circa 80 cicli per pacchetto) e di sviluppare componenti ad alte prestazioni per lo stack di rete. La funzionalità del TCP/IP stack è stata estratta da FreeBSD 11.1 e resa disponibile come libreria indipendente dal sistema operativo.
F-Stack è posizionato come una soluzione da applicare per aumentare le prestazioni dei gestori di richieste di rete in situazioni in cui lo stack TCP/IP standard del kernel Linux diventa un collo di bottiglia e limita la scalabilità. L'uso di F-Stack offre ottimizzazioni significative e in alcune situazioni permette di aumentare enormemente il numero di piccole richieste elaborate.
L'aumento delle prestazioni viene ottenuto escludendo operazioni come la copia dei pacchetti di rete, la pianificazione dei thread, la gestione delle interruzioni e l'uso di chiamate di sistema. F-Stack consente di raggiungere il massimo della prestazione di rete possibile per la scheda di rete utilizzata. Ad esempio, le soluzioni basate su F-Stack hanno dimostrato la possibilità di gestire 10 milioni di connessioni parallele, 5 milioni di richieste al secondo e 1 milione di connessioni al secondo.
Nel nuovo rilascio:
- Supporto VLAN aggiunto;
- Consentita l'operatività in contenitori isolati basati su Docker;
- Implementati gli interfaccie ff_dup, ff_dup2, ff_ioctl_freebsd, ff_getsockopt_freebsd e ff_setsockopt_freebsd;
- È stato aggiunto il parametro «idle_sleep» per ridurre il carico sulla CPU in assenza di pacchetti in arrivo
- Supporto per la compilazione per architettura ARM64 aggiunto;
- Nella versione di Nginx adattata a F-Stack sono stati sostituiti i gestori getpeername, getsockname e shutdown;
- Transizione alla nuova versione DPDK 17.11.4 LTS completata;
- È stata aggiunta l'utilità per mostrare il traffico attuale gestito dalle applicazioni basate su F-Stack (simile a trafshow).
Piani futuri supporto IPv6, fornitura di API per i linguaggi Python, PHP e Go, supporto API Cyptodev (), utilizzo di zerocopy nell'invio dei pacchetti, supporto e possibilità di avvio come processo in background.
Fonte: opennet.ru
