Совокупная пропускная способность нескольких соединений (Linux) - PullRequest
0 голосов
/ 07 октября 2009

Почему несколько соединений с одного хоста обеспечивают лучшую пропускную способность, чем несколько соединений с разных хостов?

Я подозреваю, что это что-то связанное с ядром (Linux), но подтверждение очень поможет.

Подробнее У меня есть 1 процесс получателя, назовем его R. Он принимает входящие соединения и получает данные, используя select ().

У меня есть 3 процесса отправителя S1, S2, S3. Они подключаются к R и отправляют данные с фиксированной скоростью, т. Е. 200 Мбит / с каждый.

Если S1, S2 и S3 находятся на одной машине, я получаю лучшие результаты, чем если бы каждая из них была на другой машине. (R в обоих случаях на другом компьютере)

Пример: R на хосте 0, S1, S2, S3 на хосте 2, R получает со скоростью 600 Мбит / с

R на хосте 0, S1 на хосте 1, S2 на хосте 2, S3 на хосте 3, R принимает со скоростью 480 Мбит / с

Для меня это выглядит нелогичным, я ожидал обратного, поскольку во втором случае отправители не должны совместно использовать сетевую карту и процессор (не ожидайте, что процессор или сетевая карта будут узкими местами ...) *

[Хосты выше - это узлы в кластере linux с выделенным полнодуплексным гигабитным коммутатором. Они работают под управлением 2.6.24-24 (последняя версия Ubuntu, я думаю)]

1 Ответ

2 голосов
/ 08 октября 2009

Вероятно, это связано с тем, что, когда все отправители находятся на одном компьютере, все исходящие пакеты аккуратно ставятся в очередь и отправляются по одному (просто в силу того факта, что все они проходят через один сетевой адаптер).

Принимая во внимание, что в случае нескольких отправителей две машины часто отправляют пакеты одновременно, и затем сетевой коммутатор ставит их в очередь. Это будет проявляться в отправляющем TCP в виде дремлющей задержки - иногда пакет будет напрямую переключаться на получателя, в других случаях ему придется ждать один или два пакета от других отправителей в очередях коммутатора.

Я ожидаю, что дрожание задержки само по себе будет достаточно, чтобы выбить из полосы пропускания столько, сколько нужно - помните, что для поддержки 200 Мбит / с со стандартными окнами TCP вам нужно минимальное время прохождения сигнала в 2,6 мс, что довольно мало .

...