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

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

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

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

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

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

Пример: R на host0, S1, S2, S3 на host2, R получает на скорости 600 Мбит/с.

R на host0, S1 на host1, S2 на host2, S3 на host3, R получает на скорости 480 Мбит/с

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

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


person Marco    schedule 07.10.2009    source источник


Ответы (1)


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

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

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

person caf    schedule 08.10.2009
comment
Я не ожидал, что это будет проблемой, так как скорость отправки очень низкая. Я попробую тот же эксперимент в настройке, где нет конкуренции за коммутатор, чтобы увидеть, является ли это причиной. Большое спасибо за ваш ответ. - person Marco; 15.10.2009