Come stimare il throughput TCP tra i server
Avete appena acquistato un server con un canale dedicato garantito a 1Gbit/s (o più) e siete delusi nello scoprire che i trasferimenti di file non sono così veloci come avevate previsto. Prima di scrivere all'assistenza tecnica e cercare problemi di rete, provate a valutare l'effettivo throughput TCP da un host all'altro.
I fattori più importanti per il successo del trasferimento di dati via TCP sono due:
- Dimensione della finestra TCP: è il numero di byte che una delle due parti accetta senza conferma;
- ritardo circolare di trasmissione-ricezione (latenza) - il tempo necessario per inviare un pacchetto e confermarne la consegna.
- La conoscenza di questi due elementi consente di calcolare la larghezza di banda massima che può essere condivisa tra due host, indipendentemente dalla larghezza di banda.
La formula per calcolare la larghezza di banda TCP
Throughput TCP (bit/s) = Dimensione della finestra TCP (bit) / Latenza di andata e ritorno (s)
Vediamo un semplice esempio. Disponiamo di un collegamento Ethernet gigabit tra i server con una latenza circolare di 30 ms. Dobbiamo inviare un file di grandi dimensioni da un server a un altro server via FTP. Quale larghezza di banda reale possiamo aspettarci?
Per prima cosa è necessario convertire la dimensione della finestra TCP da byte a bit. In questo caso, utilizzeremo la dimensione della finestra TCP standard di Windows di 64 KB = 65 536 B = 65 536 * 8 = 524 288 bit.
Quindi è necessario prendere la dimensione della finestra TCP in bit e dividerla per la latenza circolare del canale, espressa in secondi. Ai fini di questi calcoli, 30 ms diventano 0,030 s.
Massimo throughput TCP = 524.288 bit / 0,030 s = 17.476.266 bps = 17,4 Mbps
Nonostante la connessione Ethernet gigabit tra i due server, non ci si può aspettare più di 17 Mbit/s durante il trasferimento dei file.
Come possiamo rendere la rete più veloce? La risposta è ovvia: aumentare le dimensioni della finestra TCP e/o ridurre il ritardo del segnale.
Per negoziare una finestra TCP più grande è necessaria una configurazione manuale individuale di ciascun server. Questo, a sua volta, porta alla seguente domanda: qual è la dimensione ottimale della finestra TCP? Per scoprirlo, è necessario fare un calcolo inverso basato sulla larghezza di banda.
La formula per calcolare la dimensione ottimale della finestra TCP
Dimensione della finestra TCP (byte) = Dimensione della finestra TCP (bit) / 8 = Larghezza di banda (bit/s) * Latenza di andata e ritorno (s) / 8
Nell'esempio precedente, per un percorso Gigabit Ethernet tra server con una latenza circolare di 30 ms, si ottiene il seguente valore:
1.000.000.000 bit/s * 0,030 s = 30.000.000 bit / 8 = 3.750.000 byte.
In altre parole, se si configurano entrambi i server per una finestra TCP di 3.750 KB, la connessione FTP riempirà completamente la larghezza di banda e raggiungerà una larghezza di banda di 1 Gbit/s.
È necessario tenere presente che l'aumento della dimensione della finestra TCP presenta degli svantaggi.
In primo luogo, richiede una maggiore quantità di memoria per il buffer dei server, necessaria per memorizzare i dati non confermati nel caso in cui siano presenti.
In secondo luogo, un aumento della dimensione della finestra TCP può comportare un maggior numero di pacchetti persi, che a loro volta richiedono il reinvio di un'intera finestra. Questo può avere un impatto negativo sulle prestazioni. Per risolvere questo problema, lo stack TCP/IP del server può attivare l'opzione "riconoscimento selettivo", che è disattivata per impostazione predefinita.
Per risolvere il problema, è possibile collocare degli acceleratori WAN, ovvero dei pedali di accelerazione della rete globale, a entrambe le estremità della linea. Possono fare quanto segue:
- aprire una finestra TCP allargata
- fornire la possibilità di ottimizzare finemente il protocollo TCP (ad esempio, il riconoscimento selettivo solo tra i pedali del gas);
- non richiedono una configurazione speciale del server o una memoria buffer aggiuntiva;
- possono utilizzare funzioni speciali del livello applicativo del modello OSI (livello 7 - accesso ai servizi di rete) per ridurre il ritardo circolare.
Latenza
Volete ridurre il ritardo del segnale? Si può fare in linea di principio? Poiché non possiamo superare la velocità della luce, non possiamo influenzare il tempo che un segnale impiega a percorrere una certa distanza. Il modo migliore per ottimizzare un intero sistema è quello di installare un acceleratore WAN a ogni estremità della linea, che trasmetta i pacchetti TCP ricevuti al server locale, "ingannandolo" così sulla reale velocità di trasferimento dei dati. Invece di attendere una risposta in stallo dal server remoto, il server locale riceve un riscontro istantaneo dal pedale dell'acceleratore. In questo modo si evita di dover regolare la dimensione della finestra TCP sui server stessi. Una coppia di dispositivi WAAS utilizza una finestra TCP di dimensioni maggiori e conferme selettive sull'intero segmento di linea.
Inoltre, WAAS epura efficacemente un flusso TCP dai dati ridondanti, fornendo un livello di compressione estremamente elevato (compressione). Ogni pedale del gas ricorda i dati visualizzati in precedenza. Se un frammento duplicato si ripresenta, viene rimosso e sostituito da un minuscolo tag di 2 byte. Questo piccolo segno viene riconosciuto dal pedale del gas remoto, che inserisce il frammento di dati originale al suo posto prima di inviare il traffico al server locale.
Il risultato comprovato dell'ottimizzazione è una maggiore velocità di trasmissione tra i server senza alcuna messa a punto speciale del TCP sui server locali.
Formula per il calcolo del ritardo massimo consentito per un determinato throughput
Esempio. Su un sito tra due server remoti, è necessario garantire un throughput FTP di 10 Gbps utilizzando una finestra TCP di dimensioni standard (64KB). Qual è il ritardo massimo consentito per il segnale?
Latenza di andata e ritorno (ms) = dimensione della finestra TCP (bit) / larghezza di banda richiesta (bps)
524.288 bit / 10.000.000 bps = 52,4 microsecondi
Cosa fare?
Fondamentalmente, non è necessario aumentare la finestra TCP o installare dei booster WAN. Basta usare il multithreading per utilizzare il canale al 100% della sua larghezza di banda!