Назад | Перейти на главную страницу

Подходит ли iperf для измерения производительности сети?

Мы исследуем проблемы с производительностью в одном из развертываний нашего программного обеспечения между нашими серверами приложений (Windows) и нашими экземплярами Redis (Linux).

На канале со скоростью 10 Гбит / с отдельные TCP-соединения, по-видимому, могут достигать только 10 Мбит / с. Открытие нескольких TCP-соединений позволяет нам достичь более высокой полосы пропускания. UDP, похоже, не подвержен этим ограничениям и достигает полной скорости соединения. Это заставляет нас подозревать, что какое-то сетевое устройство (брандмауэр, прокси?) Внутри сети вызывает эти различия в пропускной способности.

Мы сделали эти измерения, используя iperf (та же версия) на серверах Windows и Linux.

Наша сетевая группа, однако, полностью отвергает этот результат на основании того факта, что «iperf официально не поддерживается в Windows, и поэтому результатам нельзя доверять». В то же время они отрицают возможность предоставления альтернативного инструмента для проведения этих измерений и заявляют, что «сеть в порядке».

Итак, мой вопрос: может iperf надежно ли использоваться для измерения производительности TCP и UDP между серверами Windows и Linux? Если нет, какой инструмент вы бы порекомендовали?

iperf отлично поддерживается в Windows, по крайней мере, с 2005 года. Сейчас у вас даже есть разные версии для iperf3 в Windows: Доступны 32-битные, 64-битные и даже версии UWP.

Как только у вас будет такая же версия (и под версией я подразумеваю сборку, например, v3.1.3) iperf3 как на клиенте, так и на сервере, вы можете протестировать скорость 10 Гбит / с, выполнив следующие действия:


Сервер

iperf3 -s

Должен появиться такой вывод:

------------------------ 
Server listening on 5201
------------------------

Клиент

iperf3 -P XX -c $server_ip

Куда:

  • «P XX» обозначает количество параллельных потоков.
  • "$ server_ip" вышеуказанный IP-адрес сервера

Это должно вывести что-то вроде:

[SUM] 0.00-10.00 sec 10.9 GBytes 9.30 Gbits/sec   sender 
[SUM] 0.00-10.00 sec 10.8 GBytes 9.28 Gbits/sec   receiver

Если вы не можете этого избежать, вы можете попробовать поиграть с размером окна TCP. Вы можете изменить его на стороне клиента с помощью -w XXu флаг, где XX это размер и ты блок (k, m).

Другой способ проверить пропускную способность сети - обслуживать http-файл с одного из концов и использовать какой-либо инструмент загрузки, который позволяет выполнять параллельные потоки (wget, filezilla или почти все диспетчеры загрузки). Или запустить тестовый инструмент, но я бы остался с iperf, который обычно является инструментом по умолчанию для работы (почти) для всех.

Можно использовать iperf, мне интересно, какие параметры вы использовали, когда сообщалось о 10 Мбит / с.

Еще один полезный инструмент - Netpipe (доступен в репозиториях Linux), а для Windows я бы рекомендовал использовать версию Java, доступную Вот:

Информация о том, как запустить Netpipe, есть Вот доступный.

Мы можем помочь вам определить проблему с доступом к Redis. Какого поставщика сети вы используете?