È stato pubblicato lo stack di rete F-Stack 2.0, funzionante nello spazio utente

È stata rilasciata la versione 2.0 del progetto F-Stack, che sviluppa una modifica dello stack di rete FreeBSD, adattato per funzionare in modo isolato nello spazio utente sotto forma di libreria. Il progetto è stato creato dalla più grande azienda di telecomunicazioni in Cina, Tencent, ed è utilizzato nei suoi prodotti e servizi. Il codice è scritto in linguaggio C ed è distribuito con licenza BSD. È supportato il funzionamento su Linux e FreeBSD. Il progetto supporta anche le versioni di Nginx 1.28 e del database Redis 6.2.6, adattate per utilizzare F-Stack, che mostrano prestazioni superiori alle normali build funzionanti sopra lo stack di rete del sistema operativo.

F-Stack consente di utilizzare un proprio stack di rete locale nelle applicazioni, indipendente dallo stack di rete del sistema operativo, funzionante nello spazio utente e interagente direttamente con l'hardware di rete. F-Stack è posizionato come una soluzione per migliorare le prestazioni dei gestori di richieste di rete quando lo stack TCP/IP del kernel Linux diventa un collo di bottiglia e limita la scalabilità. Teoricamente, F-Stack può raggiungere il limite di prestazioni di rete possibile per la scheda di rete in uso e, in alcune situazioni, consente di aumentare drasticamente il numero di piccole richieste di rete elaborate.

Il miglioramento delle prestazioni si ottiene escludendo operazioni come la copia dei pacchetti di rete, la pianificazione dei thread, la gestione delle interruzioni e le chiamate di sistema. Per interagire con la scheda di rete, bypassando le interfacce del kernel del sistema operativo, viene utilizzato il framework DPDK (Data Plane Development Kit), che sviluppa un set di librerie per il lavoro a basso livello con gli adattatori di rete. DPDK consente di ridurre le spese generali e di rimanere nel numero minimo di cicli CPU durante la ricezione o l'invio di pacchetti di rete.

La funzionalità dello stack TCP/IP corrisponde allo stack di rete FreeBSD 15 ed è stata estratta da questo sistema operativo in una libreria indipendente. Per lo sviluppo di applicazioni è possibile utilizzare l'API POSIX standard (socket, epoll, kqueue) oppure la propria interfaccia software basata su micro-thread, che semplifica la creazione di applicazioni di rete e consente di evitare una logica complessa di gestione asincrona delle richieste. È possibile utilizzarlo con applicazioni non modificate caricandole tramite LD_PRELOAD.

Le modifiche più significative nella nuova versione:

  • I componenti dello stack di rete sono stati aggiornati allo stato di FreeBSD 15 (in precedenza si utilizzava FreeBSD 13).
  • È stata implementata una modalità di funzionamento multi-thread (thread_mode=1) in un singolo processo, che integra la modalità multi-processo precedentemente disponibile.
  • È stata aggiunta una modalità di lavoro leggera (primary_slim), in cui il processo principale esegue solo le attività di base di inizializzazione e coordinamento, mentre la ricezione dei pacchetti e l'elaborazione delle code di ricezione/trasmissione (rx/tx) avviene solo da parte dei processi secondari.
  • È stata aggiunta la supporto per il meccanismo di accelerazione hardware.
    TSO (TCP Segmentation Offload) per delegare alla scheda di rete le operazioni di unione dei pacchetti, con possibilità di ripiegare su un'implementazione software. È stato migliorato il supporto per TSO (TCP Segmentation Offload, delega alla scheda di rete per la gestione dei segmenti dei pacchetti) per IPv6.
  • È stata aggiunta la possibilità di modificare la dimensione dell'MTU (Maximum transmission unit) ed è stato implementato il supporto per jumbo frame.
  • Sono state ampliate le possibilità di gestione dell'accelerazione hardware per il calcolo delle somme di controllo dei pacchetti inviati.
  • È stata aggiunta la funzione ff_zc_recv() per ricevere dati senza buffering intermedio (zero-copy). È stata ripensata la funzione analoga ff_zc_send() per la trasmissione. Ottimizzata e ampliata. supporto IPv6 la funzione ff_rss_check().
  • È stata aggiunta l'opzione FF_KERNEL_COEXIST per lavorare insieme allo stack di rete del kernel.
  • È stata fornita la possibilità di salvare le informazioni sul traffico nei dump pcap con precisione nanosecondica.
  • Nel file config.ini sono stati aggiunti nuovi parametri idle_loop_interval, extra_eal_args, drain_ring_size, reload_heartbeat_timeout_ms e reload_udp_idle_ms.
  • Nella build specializzata di nginx è stata implementata la supporto per il riavvio della configurazione e l'aggiornamento del file binario senza interruzione delle connessioni (graceful_reload=1).

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS - ProHoster