В тесте пропускной способности TCP WLAN iperf несколько параллельных потоков дадут мне более высокую пропускную способность, чем 1 поток. Я попытался увеличить размер окна TCP, но я все еще не могу достичь максимальной пропускной способности только с 1 потоком. Есть ли что-то еще на уровне TCP, препятствующее использованию полной пропускной способности канала?
12
Ответы:
По моему опыту, если вы видите значительно отличающиеся результаты между 1 потоком TCP и несколькими потоками TCP, проблема обычно заключается в потере пакета; поэтому «что-то еще» на уровне TCP - это повторная передача (из-за потери пакетов нижнего уровня).
Пример, который я подготовил, чтобы показать, как потеря пакетов влияет на пропускную способность одного потока ...
Это таблица, которая суммирует результаты 60-секундного
iperf
теста между клиентом и сервером ... вы можете увидеть небольшое изменение результатов iperf от дрожания RTT (то есть более высокое стандартное отклонение RTT); тем не менее, наиболее существенная разница возникла, когда я смоделировал 2% потерь, оставив клиентский сетевой адаптер. 172.16.1.56 и 172.16.1.80 - это один и тот же ноутбук (работает под управлением Ubuntu). Сервер 172.16.1.5, на котором запущен Debian. Я использовал netem на проводной сетевой плате клиента для симуляции потери пакетов ...РЕДАКТИРОВАТЬ для комментариев комментариев :
Большинство реализаций TCP уменьшают свое окно перегрузки при обнаружении потери пакетов. Поскольку мы используем netem для принудительной 2% -ной потери пакетов от клиента к серверу, некоторые данные клиента удаляются . Чистый эффект netem в этом примере - средняя скорость передачи одного потока 730 Мбит / с. Добавление нескольких потоков означает, что отдельные потоки TCP могут работать вместе для насыщения канала.
да
Я не могу ответить на этот вопрос без дополнительных экспериментов, но для ссылок 1GE у меня никогда не возникало проблем с насыщением ссылки 5 параллельными потоками. Чтобы дать вам представление о масштабируемости TCP, серверы linux могут обрабатывать более 1500 одновременных сокетов TCP при правильных обстоятельствах. Это еще одно SO-обсуждение, которое имеет отношение к масштабированию параллельных сокетов TCP, но, на мой взгляд, все, что выше 20 параллельных сокетов, будет излишним, если вы просто пытаетесь насытить ссылку.
Я не использовал
iperf -w
, поэтому я думаю, что есть недоразумение. Поскольку у вас так много вопросов по поводу случая Wi-Fi, я включил график Wireshark для пропускной способности TCP для случая Wi-Fi с одним TCP.Тестовые данные
Я также включаю необработанные тестовые данные, если вы хотите посмотреть, как я измерил эти вещи ...
802.11g, 1 поток TCP
802.11g, 5 потоков TCP
1000BaseT, 1 поток, потеря 0,0%
1000BaseT, 5 потоков, потеря 0,0%
1000BaseT, 1 Streams, потеря 2,0%
1000BaseT, 5 потоков, потеря 2,0%
Удалить симуляцию потери пакетов
источник
Вот расчет для максимальной пропускной способности одного потока TCP.
Таким образом, у вас есть узкое место, и латентность играет большую роль.
источник
Вероятно, это связано с несколькими процессами против одного процесса. с iperf 2.0.9 это можно проверить через -P 2 на клиенте. Это разветвляет два потока вместо одного. Большинство современных процессоров имеют несколько ядер, поэтому использование нескольких потоков позволит использовать их.
источник