Sono in esecuzione le misurazioni iperf
tra due server, collegate tramite collegamento 10Gbit. Sto cercando di correlare la dimensione massima della finestra che osservo con i parametri di configurazione del sistema.Dimensioni della finestra di ricezione TCP superiori a net.core.rmem_max
In particolare, ho osservato che la dimensione massima della finestra è 3 MiB. Tuttavia, non riesco a trovare i valori corrispondenti nei file di sistema.
Eseguendo sysctl -a
Ottengo i seguenti valori:
net.ipv4.tcp_rmem = 4096 87380 6291456
net.core.rmem_max = 212992
Il primo valore ci dice che la dimensione massima finestra del ricevitore è di 6 MiB. Tuttavia, TCP tende ad allocare il doppio della dimensione richiesta, quindi la dimensione massima della finestra del ricevitore dovrebbe essere 3 MiB, esattamente come l'ho misurata. Da man tcp
:
noti che TCP effettivamente alloca due volte la dimensione del buffer richiesto nel setsockopt (2) chiamata, e quindi una getsockopt successivo (2) chiamata non restituirà la stessa dimensione del buffer come richiesto nella setockopt (2) chiamata. TCP utilizza lo spazio aggiuntivo per scopi amministrativi e strutture interne del kernel, ei valori del file/proc riflettono le dimensioni maggiori rispetto alle finestre TCP effettive.
Tuttavia, il secondo valore, net.core.rmem_max
, indica che la dimensione massima della finestra del destinatario non può essere superiore a 208 KiB. E questo dovrebbe essere il limite rigido, secondo man tcp
:
tcp_rmem max: la dimensione massima del buffer di ricezione utilizzato da ogni socket TCP. Questo valore non sostituisce il numero globale
net.core.rmem_max
. Questo non viene utilizzato per limitare la dimensione del buffer di ricezione dichiarato utilizzando SO_RCVBUF su un socket.
Quindi, come mai viene visualizzata una dimensione massima della finestra maggiore di quella specificata in net.core.rmem_max
?
NB: Ho anche calcolato il prodotto Latenza larghezza banda: window_size = Bandwidth x RTT
che è di circa 3 MiB (10 Gbps @ 2 msec RTT), verificando quindi la mia cattura del traffico.
ho iniziato una taglia per scoprire se 'man tcp' è veramente sbagliato. – nh2