il throughput aggregato di più connessioni (Linux)
-
20-09-2019 - |
Domanda
Perché le connessioni multiple dallo stesso host a raggiungere una maggiore velocità di connessioni multiple da diversi host?
Ho il sospetto che è qualcosa kernel-correlato (Linux), ma conferma di aiuterebbe molto.
Maggiori dettagli che ho 1 processo ricevente, chiamiamolo R. Si accetta connessioni in entrata e riceve i dati con select ().
Ho 3 processi mittente S1, S2, S3. Si collegano a R e inviare i dati ad un tasso fisso, cioè 200Mbit al secondo ciascuna.
Se S1, S2 e S3 sono sulla stessa macchina, ottengo risultati migliori che avendo ciascuno di loro su una macchina diversa. (R è in entrambi i casi su qualche altra macchina)
Esempio: R host0, S1, S2, S3 in host2, R riceve in 600Mbit / s
R su host0, S1 in host1, host2 S2, S3 sull'host3, R riceve in 480Mbit / s
Questo sembra contro-intuitivo per me, mi aspettavo il contrario in quanto nel secondo caso i mittenti non devono condividere la scheda di rete e il processore (Non che si aspettano processore o scheda di rete per essere i colli di bottiglia ...)
[I padroni di casa di cui sopra sono nodi di un cluster Linux con uno switch Gigabit full-duplex dedicato. Sono in esecuzione 2.6.24-24-generic (ultima Ubuntu credo)]
Soluzione
Questo è probabilmente perché quando i mittenti sono tutti su una macchina, i pacchetti in uscita sono tutti ben messi in coda e inviati one-at-a-tempo (proprio in virtù del fatto che sono tutti passa attraverso un NIC).
Mentre nel caso più mittenti, due macchine spesso inviare pacchetti allo stesso tempo, ed è poi fino allo switch di rete a coda loro. Questo si manifesterà al TCP trasmittente come latenza nervoso -. Volte un pacchetto viene commutato direttamente al ricevitore, altre volte dovrà attendere per uno o due pacchetti da altri mittenti all'interno delle code interruttore
Mi aspetto che il jitter di latenza da solo sarebbe sufficiente a battere più di tanto fuori la larghezza di banda - ricordare che per sostenere 200Mbps con le finestre TCP standard, è necessario un-tempo di roundtrip minimo di 2,6 ms, che è piuttosto stretto .