Суммарная пропускная способность нескольких соединений (Linux)

StackOverflow https://stackoverflow.com/questions/1530404

Вопрос

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

Я подозреваю, что это связано с ядром (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)]

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top