Мы исследуем проблемы с производительностью в одном из развертываний нашего программного обеспечения между нашими серверами приложений (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
Куда:
Это должно вывести что-то вроде:
[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. Какого поставщика сети вы используете?