6

Я использую Iperf на двух виртуальных машинах, и при использовании TCP я нахожу производительность следующим образом:

notroot @ ubuntu: ~ $ iperf -s
------------------------------------------------------------
Сервер прослушивает TCP-порт 5001 Размер окна TCP: 85,3 КБ (по умолчанию)
------------------------------------------------------------
[4] локальный порт 5001 192.168.1.29, соединенный с портом 52478 192.168.1.13
[ID] Интервал передачи
[4] 0,0-10,0 с 2,22 ГБайт 1,90 Гбит / с

UDP с другой стороны ужасен:

notroot @ ubuntu: ~ $ iperf -s -u
------------------------------------------------------------
Сервер прослушивает UDP-порт 5001
Получение 1470 байт дейтаграмм
Размер буфера UDP: 208 КБ (по умолчанию)
------------------------------------------------------------
[3] локальный порт 5001 192.168.1.29, соединенный с портом 33775 192.168.1.13
[ID] Интервал передачи пропускной способности Jitter Lost/Total Datagrams
[3] 0,0-10,0 с 1,25 МБайт 1,05 Мбит / с 0,284 мс 0/893 (0%)

Я читал эту статью

Вопросы:

  1. Что вы думаете о результатах?
  2. Как я могу манипулировать размером дейтаграммы в случае фрагментации? Тем не менее, я могу подтвердить, что клиент Iperf отправляет 1470-байтовые дейтаграммы.

Благодарю.

3 ответа3

34

iPerf использует тест по умолчанию 1 Мбит / с для тестов UDP. Используйте флаг -b на клиенте iperf, чтобы указать пропускную способность UDP, которую вы хотите передать, например,

iperf -c 10.79.175.219 -u -f m -b 100M
1

Как ответил Ник, iPerf по умолчанию использует 1 Мбит / с для UDP.

Чтобы использовать ту же пропускную способность, что и TCP, при выполнении теста UDP, просто укажите флаг -b со значением 0 .

iperf3 --udp -b 0 -f m -c <server ip>

сформировать документацию,

-b, --bandwidth # [KMG] [/#]
целевая пропускная способность в битах /сек

(0 для неограниченного)

(по умолчанию 1 Мбит /с для UDP, без ограничений для TCP)

(необязательный слеш и количество пакетов для пакетного режима)

-f в приведенной выше команде укажите тип форматирования (m если для MBits),

-f, --format [kmgKMG] формат для отчета: Кбит, Мбит, КБ, МБ

-5

После цитаты из ответа на serverfault.com

Каждый кадр проходит через несколько буферов: буфер приложения, буфер протокола, буфер интерфейса программного обеспечения и буфер аппаратного интерфейса. Когда вы начнете нагружать стек, отправляя высокоскоростные данные, вы будете заполнять эти буферы и либо блокировать, либо терять данные. У вас также есть стратегии своевременности и опроса, которые могут повлиять на вашу производительность. Например, используя больший буфер и реже опрашивая, вы можете получить гораздо лучшую производительность, жертвуя задержкой.

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

Обратите внимание, что отправка высокоскоростных данных по UDP обычно плохая идея, если вы не реализуете свой собственный контроль перегрузки. TCP защищает вашу сеть от перегрузок. Используйте UDP, если у вас есть небольшие объемы данных или требования к своевременности.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .