Dopo un anno e mezzo di sviluppo rilascio del progetto , che sviluppa uno stack di rete ad alte prestazioni funzionante nello spazio utente, basato su un framework e sullo stack TCP/IP di FreeBSD (F-Stack non è legato a FreeBSD e considera Linux come piattaforma principale per l'applicazione). Il progetto è utilizzato in vari prodotti e servizi , la più grande azienda di telecomunicazioni in Cina. Codice sotto licenza BSD. Supporta il funzionamento in Linux e FreeBSD.
F-Stack consente di organizzare l'interazione di rete nelle applicazioni, utilizzando invece dello stack di rete del sistema operativo il proprio stack di rete, funzionante nello spazio utente e che lavora direttamente con l'hardware di rete. editors specializzati di Nginx e Redis, adattati per utilizzare F-Stack.
Per lo sviluppo di applicazioni sia come Posix API standard (Socket, Epoll, Kqueue), semplificando la migrazione delle applicazioni esistenti su F-Stack, sia come interfaccia di programmazione personalizzata basata su coroutine (microthread), facilitando la creazione di applicazioni di rete e consentendo di evitare complessità nella logica di gestione asincrona delle richieste. F-Stack fornisce anche strumenti per semplificare l'uso in applicazioni con architettura multi-processo.
Per interagire con la scheda di rete, bypassando le interfacce del kernel del sistema operativo, viene utilizzato il framework (Data Plane Development Kit), che offre un set di librerie per operazioni di basso livello con adattatori di rete, interazione in sistemi multi-core, 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 dello stack di rete. La funzionalità dello stack TCP/IP è stata direttamente derivata da FreeBSD 11.1 ed isolata in una libreria indipendente dal sistema operativo.
F-Stack si presenta come una soluzione applicabile per migliorare le prestazioni dei gestori di richieste di rete, quando l'utilizzo dello stack TCP/IP standard del kernel Linux diventa un collo di bottiglia e limita la scalabilità. L'implementazione di F-Stack fornisce un'ottimizzazione tangibile e consente, in alcune situazioni, di aumentare drasticamente il numero di piccole richieste trattabili.
Il miglioramento delle prestazioni si ottiene escludendo operazioni come la copia dei pacchetti di rete, la pianificazione dei thread, la gestione delle interruzioni e l'uso delle chiamate di sistema. F-Stack consente di raggiungere il limite delle prestazioni di rete possibile con la scheda di rete utilizzata. Ad esempio, le soluzioni basate su F-Stack hanno dimostrato la capacità 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;
- È stata garantita la possibilità di funzionare in container isolati basati su Docker;
- Interfacce ff_dup, ff_dup2, ff_ioctl_freebsd, ff_getsockopt_freebsd e ff_setsockopt_freebsd implementate;
- Aggiunto il parametro "idle_sleep" per ridurre il carico sulla CPU in assenza di pacchetti in ingresso.
- Supporto per la compilazione per l'architettura ARM64 aggiunto;
- Nella versione di Nginx tradotta su F-Stack, i gestori getpeername, getsockname e shutdown sono stati sostituiti;
- Aggiornamento alla nuova versione DPDK 17.11.4 LTS completato;
- È stata aggiunta l'utilità per visualizzare il traffico attuale gestito dalle applicazioni basate su F-Stack (ricorda trafshow).
Nei piani futuri supporto IPv6, fornitura di API per linguaggi Python, PHP e Go, supporto API Cyptodev (), utilizzo di zerocopy per l'invio dei pacchetti, supporto e possibilità di avvio come processo in background.
Fonte: opennet.ru
