- (iperf/ntttcp) Microsoft не рукомендует использование iperf3 на Windows в пользу использования ntttcp (в первую очередь)/ctstraffic – iperf3 оффициально на винде не поддерживается (в отличии от второй версии), он обычно использует прослойку в виде cygwin и нестандартные вызовы сетевого стека – первое может накладывать задержку, второе не эмулирует реальные приложения. Если этих недостатков недостаточно и надо использовать – надо качать актуальную версию для windows, а не ту, которая на iperf.fr.
https://techcommunity.microsoft.com/t5/networking-blog/three-reasons-why-you-should-not-use-iperf3-on-windows/ba-p/4117876
James Kehr here with the Microsoft Commercial Support – Windows Networking team. This article will explain why you should not use iPerf3 on Windows for synthetic network benchmarking and testing. Followed by a brief explanation of why you should use ntttcp and ctsTraffic instead.
- установка на linux описана тут, на win тут (как ни странно актуально)
- запуск iperf3 с привязкой процесса по affinity и выводом в json
# Run iperf3 test with affinity set
iperf3 --json --port $port --bind "$bind_address" --affinity $i,$i --interval 10 --client "$server_address" --time 30 --len 16384 > /tmp/iperf_output_$i.json &
- Intel в своем benchmark тесте docker default network VS docker network with Open vSwitch + DPDK создает нагрузку по трафику iperf3 :), а системную нагрузку по cpu/memory с помощью stress (сравнение под системной нагрузкой)
Безусловно средство не идеально и местами глючит (особенно мобильная версия), но есть мифы о совсем “дикой плохости” iperf от разных вендоров (привет, Ixia и прочие), немного развенчаю:
- тест можно запустить более чем на 20 минут (проверял два часа с нагрузкой 700мбит – полет успешный)
- и на клиенте и на сервере (без разницы будет reverse тест или прямой) требуются относительно небольшие ресурсы CPU ~ 10-30% CPU (intel i3/7) на гигабит однопоточного TCP трафика (проверял)
- у iperf безусловно есть погрешность т.к. средство измерения не аппаратное, но она не 20% (не проверял, мнение)
IPERF есть и для Windows, Linux и даже Iphone/android (от афигенских bgp.he, правда по практике использования – мобильные аппы не огонь). В том числе третья версия. Развитие эволюционное – первая самая старая, третья самая новая. Базовые опции одинаковые между версиями, опции одинаковые между OS (десктопными). Может использоваться как простая Bandwidth тестилка.
По умолчанию IPERF проверяет только исходящую скорость т.к. метод проверки это генерация клиентом трафика и отброс его сервером! Для замера входящей скорости нужно использовать опцию -R на клиенте (самое простое) или разворачивать сервер на проверяемой машине или использовать DUAL режим теста.
Iperf test raffic way is from client to server.
To perform an iperf test the user must establish both a server (to discard traffic) and a client (to generate traffic)
-R, Reverse test mode – Server sends, client receives
-d, dualtest – Run iPerf in dual testing mode. This will cause the server to connect back to the client on the port specified in the -L option (or defaults to the port the client connected to the server on). This is done immediately therefore running the tests simultaneously. If you want an alternating test try -r.
Все опции есть в help файле в папке с программой, ниже популярные.
-q - маркировка трафика клиента/сервера iperf указанным значением QoS DSCP
-u, udp - use UDP rather than TCP
-sctp - use SCTP rather than TCP (FreeBSD and Linux)
-P, --parallel – количество потоков (parallel n). Самая нужная опция. Отличия с ней и без нее могут быть сильные.
number of parallel client threads to run
-b, --bitrate - ограничение по полосе для каждого потока.
Set target bitrate to n bits/sec (default 1 Mbit/sec for UDP, unlimited for TCP/SCTP). If there are multiple streams (-P flag), the throughput limit is applied separately to each stream.
This throughput limit is implemented internally inside iperf3, and is available on all platforms.
-d --dualtest Do a bidirectional test simultaneously
-r --tradeoff Do a bidirectional test individually
-w – размер TCP окна. TCP window size (socket buffer size). 64.0 KByte (default)
-p – номер порта (port n). По умолчанию 5001, ground.corbina.net так же отвечает на 50000 (лучше на него).
set server port to listen on/connect to to n (default 5001)
-t – время (time) которое будет проводится проверка. Default = 10sec. Для объективности можно задать больше.time in seconds to transmit for (default 10 secs)
-с – идентификатор что программа запущена в режиме CLIENTrun in client mode, connecting to <host>-s – идентификатор что программа запущена в режиме SERVERrun in server mode
Простейший кейс – запуск в пять потоков между двумя подключенными напрямую/через роутер пк.
Стенд для тестирования представлял из себя два ноутбука, с установленной программой iPerf3. Методика испытания – достаточно проста. iPerf3 запускался в режиме передачи пакетов по протоколу TCP. Использовалось 5 потоков.
Сервера для проверки исходящей скорости:
- eltel.net 217.170.67.78
- ground.corbina.net 21.78.91 (глючит на дефолтный порт, лучше на 50000)
Сервера и клиенты для проверки как исходящей, так и входящей скорости:
- где настроишь (нужно поставить/включить)
Клиент
CLI
iperf3 -c 192.168.100.34 – запускаем проверку исходяшей скорости на 10 секунд с максимальной скоростью
PS C:\iperf-3.1.3-win32> .\iperf3.exe -c 192.168.100.34
Connecting to host 192.168.100.34, port 5201
[ 4] local 192.168.100.42 port 49916 connected to 192.168.100.34 port 5201
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.00 sec 64.4 MBytes 540 Mbits/sec
[ 4] 1.00-2.00 sec 71.9 MBytes 603 Mbits/sec
[ 4] 2.00-3.00 sec 73.5 MBytes 616 Mbits/sec
[ 4] 3.00-4.00 sec 72.3 MBytes 606 Mbits/sec
[ 4] 4.00-5.00 sec 78.9 MBytes 662 Mbits/sec
[ 4] 5.00-6.00 sec 80.5 MBytes 676 Mbits/sec
[ 4] 6.00-7.00 sec 80.0 MBytes 671 Mbits/sec
[ 4] 7.00-8.00 sec 74.0 MBytes 620 Mbits/sec
[ 4] 8.00-9.00 sec 71.4 MBytes 599 Mbits/sec
[ 4] 9.00-10.00 sec 74.3 MBytes 623 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-10.00 sec 741 MBytes 622 Mbits/sec sender
[ 4] 0.00-10.00 sec 741 MBytes 622 Mbits/sec receiver
iperf Done.
iperf3 -c 192.168.100.34 -R – запускаем проверку входящей скорости на 10 секунд с максимальной скоростью
PS C:\iperf-3.1.3-win64> .\iperf3.exe -c 192.168.100.42 -R
Connecting to host 192.168.100.42, port 5201
Reverse mode, remote host 192.168.100.42 is sending
[ 4] local 192.168.100.34 port 64004 connected to 192.168.100.42 port 5201
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.00 sec 71.6 MBytes 601 Mbits/sec
[ 4] 1.00-2.00 sec 70.0 MBytes 587 Mbits/sec
[ 4] 2.00-3.00 sec 70.6 MBytes 593 Mbits/sec
[ 4] 3.00-4.00 sec 69.8 MBytes 586 Mbits/sec
[ 4] 4.00-5.00 sec 70.6 MBytes 592 Mbits/sec
[ 4] 5.00-6.00 sec 71.8 MBytes 602 Mbits/sec
[ 4] 6.00-7.00 sec 73.0 MBytes 612 Mbits/sec
[ 4] 7.00-8.00 sec 72.5 MBytes 608 Mbits/sec
[ 4] 8.00-9.00 sec 74.5 MBytes 624 Mbits/sec
[ 4] 9.00-10.00 sec 70.7 MBytes 594 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-10.00 sec 715 MBytes 600 Mbits/sec sender
[ 4] 0.00-10.00 sec 715 MBytes 600 Mbits/sec receiver
iperf Done.
iperf3 -c <server> -n 100m|1G – запускаем отправку 100 мегабайтного/1 гигабайтного файла.
PS C:\iperf-3.1.3-win64> .\iperf3.exe -c weril.me -n 100m
Connecting to host weril.me, port 5201
[ 4] local 192.168.100.34 port 63290 connected to 80.87.194.88 port 5201
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.00 sec 11.2 MBytes 94.3 Mbits/sec
[ 4] 1.00-2.00 sec 11.0 MBytes 92.2 Mbits/sec
[ 4] 2.00-3.00 sec 11.2 MBytes 94.4 Mbits/sec
[ 4] 3.00-4.00 sec 11.0 MBytes 92.4 Mbits/sec
[ 4] 4.00-5.00 sec 10.0 MBytes 83.7 Mbits/sec
[ 4] 5.00-6.00 sec 10.9 MBytes 91.3 Mbits/sec
[ 4] 6.00-7.00 sec 10.9 MBytes 91.3 Mbits/sec
[ 4] 7.00-8.00 sec 10.9 MBytes 91.2 Mbits/sec
[ 4] 8.00-9.00 sec 11.0 MBytes 92.3 Mbits/sec
[ 4] 9.00-9.17 sec 1.88 MBytes 92.5 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-9.17 sec 100 MBytes 91.5 Mbits/sec sender
[ 4] 0.00-9.17 sec 99.9 MBytes 91.3 Mbits/sec receiver
iperf Done.
iperf3 -c <server> -P 5 –t 60 – запускаем клиентский тест в 5 потоков на минуту.
C:\iperf\iperf-2.0.5-cygwin>iperf -c ground.corbina.net -P 5 –t 60
------------------------------------------------------------
Client connecting to ground.corbina.net, TCP port 5001
TCP window size: 64.0 KByte (default)
------------------------------------------------------------
[ 7] local 127.0.0.1 port 58684 connected with 85.21.78.91 port 5001 – с какого локального IP:PORT на какой IP:PORT
[ 6] local 127.0.0.1 port 58682 connected with 85.21.78.91 port 5001
[ 3] local 127.0.0.1 port 58676 connected with 85.21.78.91 port 5001
[ 4] local 127.0.0.1 port 58677 connected with 85.21.78.91 port 5001
[ 5] local 127.0.0.1 port 58680 connected with 85.21.78.91 port 5001
[ ID] Interval Transfer Bandwidth
[ 5] 0.0-10.0 sec 130 MBytes 18.1 Mbits/sec – скоростьодногопотока
[ 7] 0.0-10.1 sec 132 MBytes 18.5 Mbits/sec
[ 6] 0.0-10.1 sec 132 MBytes 18.4 Mbits/sec
[ 4] 0.0-10.1 sec 128 MBytes 17.9 Mbits/sec
[ 3] 0.0-10.1 sec 130 MBytes 18.1 Mbits/sec
[SUM] 0.0-10.1 sec 652 MBytes 91.0 Mbits/sec – 91 мб в 5 (–P 5) потоков
Mobile
Лучше указывать интервал побольше (до 60 сек) – чтобы получать саммари по передаче данных, а не предварительные результаты в какие-то короткие интервалы (саммари по всем в результате на клиенте нету – косяк).
60 сек интервал + 100m Bytes – как мне кажется оптимально.
Если интервал секунда выглядит вот так.
Сервер
http://www.colobridge.net/wiki/сети/измерение_скорости_доступа_к_серверу_с_помощью_iperf
Установка на Centos
sudo yum install iperf3
sudo firewall-cmd --permanent --zone=public --add-port=5201/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
Запуск
iperf3 –s –D – поднять IPERF сервер как демон
$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 128 KByte (default)
------------------------------------------------------------
[ 4] local 195.14.50.246 port 5001 connected with 95.31.137.237 port 51466
[ 5] local 195.14.50.246 port 5001 connected with 95.31.137.237 port 51469
[ 6] local 195.14.50.246 port 5001 connected with 95.31.137.237 port 51470
[ 7] local 195.14.50.246 port 5001 connected with 95.31.137.237 port 51471
[ 8] local 195.14.50.246 port 5001 connected with 95.31.137.237 port 51473
[ ID] Interval Transfer Bandwidth
[ 6] 0.0-10.5 sec 6.62 MBytes 5.31 Mbits/sec
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-10.7 sec 7.00 MBytes 5.47 Mbits/sec
[ ID] Interval Transfer Bandwidth
[ 5] 0.0-11.0 sec 2.75 MBytes 2.09 Mbits/sec
[ ID] Interval Transfer Bandwidth
[ 8] 0.0-11.4 sec 2.75 MBytes 2.03 Mbits/sec
[ ID] Interval Transfer Bandwidth
[ 7] 0.0-12.5 sec 3.12 MBytes 2.09 Mbits/sec
[SUM] 0.0-12.5 sec 22.2 MBytes 14.9 Mbits/sec