Iperf — the ultimate speed test tool for tcp, udp and sctptest the limits of your network + internet neutrality test

IPERF Comparison with JPerf

Fresh JPerf 2.0.2 installation from Google Code was used for comparison with IPERF for Windows. There is a confusion right from the beginning: don’t think you use iPerf 2.0.2! That’s JPerf 2.0.2, which in turn uses iPerf 1.7.0 from year 2003 — please go to /bin folder and check yourself, or click the screenshot below.

Let’s configure moderate traffic: 5 UDP streams of 5 Mbps each, to my default gateway — DSL router, where it will be dropped. Apparently each stream runs only ~3.3 Mbps not 5 Mbps as requested! Run Windows Task Manager as an independent arbiter — it shows total bandwidth of 16 Mbps, not requested 25 Mbps. It shows the problem as well: CPU load goes 100%! Obviously JPerf consumes all CPU cycles so can’t run requested 25 Mbps of traffic — what about 1G?

Let’s run IPERF for Windows with the same 5 UDP streams of 5 Mbps each. IPERF Charts displays per stream traffic of exactly 5 Mbps, with total traffic 25 Mbps, as requested. Task Manager confirms the same 25 Mbps of total traffic. Also Task Manager and IPERF show, that CPU load is negligible during IPERF test. It gives enough room to run much heavier bandwidth tests. All that was achieved by recent win32 update of original linux iPerf 2.0.5 code and compilation in Visual Studio 2013.

There is no QoS on Windows in JPerf (iPerf 1.7.0 — ‘Type of Service’), because Microsoft QoS code is different from linux code.

Comparative results are summarised below and on this screenshot, click it to enlarge:

Apparently, high CPU load is produced not by JPerf code itself, but by iPerf 1.7.0. Try to run it without UI in command line with the same parameters — still CPU 100%:

Conclusion:
— JPerf 2.0.2 is unusable in default package, because of high CPU usage by outdated iPerf 1.7.0 from year 2003
— JPerf does not show CPU usage on the same chart like IPERF for Windows does, which is vital for modern high-bandwidth tests
— JPerf User Interface can be used if iperf.exe is replaced with newer binary, for example command-line version of IPERF for Windows (it works!)
— JPerf ‘Type of Service’ doesn’t work the way how QoS shoud work in Windows — DSCP set in IPERF for Windows
— JPerf User Interface has less controls compare to IPERF for Windows, and doesn’t have TestHistory drop-down list — which is very handy feature
— JPerf Chart doesn’t display total but only per stream values
    It can not move charts left and right with a mouse
    can not stretch/compress vertical axes with a mouse
    does not have Full Time History mode in addition to Sliding Time Window
    can not turn On/Off individual charts and axis
    can not provide screenshots or HTML reports

Copyright

iperf, Copyright (c) 2014-2021, The Regents of the University of
California, through Lawrence Berkeley National Laboratory (subject
to receipt of any required approvals from the U.S. Dept. of
Energy). All rights reserved.

If you have questions about your rights to use or distribute this
software, please contact Berkeley Lab’s Technology Transfer
Department at TTD@lbl.gov.

NOTICE. This software is owned by the U.S. Department of Energy.
As such, the U.S. Government has been granted for itself and others
acting on its behalf a paid-up, nonexclusive, irrevocable,
worldwide license in the Software to reproduce, prepare derivative
works, and perform publicly and display publicly. Beginning five
(5) years after the date permission to assert copyright is obtained
from the U.S. Department of Energy, and subject to any subsequent
five (5) year renewals, the U.S. Government is granted for itself
and others acting on its behalf a paid-up, nonexclusive,
irrevocable, worldwide license in the Software to reproduce,
prepare derivative works, distribute copies to the public, perform
publicly and display publicly, and to permit others to do so.

This code is distributed under a BSD style license, see the LICENSE
file for complete information.

Known Issues¶

The following problems are notable known issues, which are probably of
interest to a large fraction of users or have high impact for some
users, and for which issues have already been filed in the issue
tracker. These issues are either open (indicating no solution
currently exists) or closed with the notation that no further attempts
to solve the problem are currently being made:

  • The flag sometimes causes the iperf3 client to hang on OSX.
    (Issue #129)

  • When specifying the TCP buffer size using the flag on Linux,
    the Linux kernel automatically doubles the value passed in to
    compensate for overheads. (This can be observed by using
    iperf3’s flag.) However, CWND does not actually ramp up
    to the doubled value, but only to about 75% of the doubled
    value. Some part of this behavior is documented in the tcp(7)
    manual page.

  • Although the flag is documented as setting the (TCP) window
    size, it is also used to set the socket buffer size. This has been
    shown to be helpful with high-bitrate UDP tests.

  • On some platforms (observed on at least one version of Ubuntu
    Linux), it might be necessary to invoke manually after
    doing a before the executable can find
    its shared library. (Issue #153)

  • The results printed on the server side at the end of a test do not
    correctly reflect the client-side measurements. This is due to the
    ordering of computing and transferring results between the client
    and server. (Issue #293)

  • The server could have a very short measurement reporting interval at
    the end of a test (particularly a UDP test), containing few or no
    packets. This issue is due to an artifact of timing between the
    client and server. (Issue #278)

Emulating wide area network delays with Linux

NetEm (already enabled in the Linux kernel) provides Network Emulation functionality for testing protocols by emulating the properties of wide area networks.
To simulate an additional latency of 80 ms, just type sudo tc qdisc add dev eth0 root netem delay 80ms
It just adds a fixed amount of delay to all packets going out of the local Ethernet.
To stop the additional latency, just type sudo tc qdisc change dev eth0 root netem delay 0ms
Lines to add to the file /etc/rc.local before exit 0, to add 40ms of latency :

Note: If your network interface is not eth0, replace eth0 with the name of your network interface

Script pour héberger un serveur iPerf3 avec Linux (Ubuntu / Debian)

Краткое содержание

iPerf3 ne permet pas de multiples clients sur un serveur => il est nécessaire de lancer plusieurs processus iperf pour ne pas avoir le message iperf3: error – the server is busy running a test. try again laterScript bash restart_iperf.sh pour démarrer 10 serveurs iPerf3 (du port TCP 5200 au port TCP 5209) :

Lignes à ajouter au fichier /etc/rc.local avant exit 0, pour lancer iPerf3 automatiquement, lorsque vous démarrez le serveur.
le trafic UDP est bloqué avec iptables (IPv4) et ip6tables (IPv6) pour prévenir les attaques DDOS :

Lignes à ajouter à la crontab, pour redémarrer iPerf3 toutes les heures (Utilisez crontab -e pour modifier le crontab).
Le redémarrage régulier est nécessaire, car le processus peut se bloquer ou crasher.

GENERAL OPTIONS

-p, —port n

set server port to listen on/connect to to n (default 5201)
-f, —format

format to report: Kbits, Mbits, KBytes, MBytes
-i, —interval n

pause n seconds between periodic bandwidth reports;
default is 1, use 0 to disable
-F, —file name

client-side: read from the file and write to the network, instead
of using random data;
server-side: read from the network and write to the file, instead
of throwing the data away
-A, —affinity n/n,m

Set the CPU affinity, if possible (Linux and FreeBSD only).
On both the client and server you can set the local affinity by using
the n form of this argument (where n is a CPU number).
In addition, on the client side you can override the server’s
affinity for just that one test, using the n,m form of
argument.
Note that when using this feature, a process will only be bound
to a single CPU (as opposed to a set containing potentialy multiple
CPUs).
-B, —bind host

bind to a specific interface
-V, —verbose

give more detailed output
-J, —json

output in JSON format
—logfile file

send output to a log file.
—forceflush

force flushing output at every interval.
Used to avoid buffering when sending output to pipe.
-d, —debug

emit debugging output.
Primarily (perhaps exclusively) of use to developers.
-v, —version

show version information and quit
-h, —help

show a help synopsis

Примеры

Проще всего понять работу приложения на конкретном примере. Тогда станет понятно, что происходит в iperf. А также, что именно, как там измеряется. Для упрощения ситуации используем сервер с конкретным адресом, 192.168.0.101. Клиентский адрес может быть каким угодно. Начинаем с запуска серверного ПК.

Используем версию iperf3, но допускается и другая. Алгоритм действий следующий:

  1. Ввести «iperf3 –s». Чтобы определить единицы измерения скорости, задается команда «-f». Среди наиболее часто используемых – кило, мега, гигабиты. Обозначаются, соответственно, литерами «k», «m», «g». Доступны также кило, мега, гига и терабайты. Для них выбраны символы «K», «M», «G», «T». Сочетание «iperf3 -s -f K» означает отображение скорости в килобайтах.
  2. Настроить порт. В базовых установках задан порт 5201. Чтобы сменить адрес, используется команда «-p». Для перехода на другой порт нужно ввести «ipref3 -s -p 4000».
  3. Настроить брандмауэр. Для версии ufw набирается сочетание «sudo ufw allow 5201». Соответственно, для firewalld оно будет «sudo firewall-cmd —permanent —add-port=5201/tcp» (при TCP протоколе). Для UDP меняются последние 3 символа.
  4. Запуск в фоне. С этим справляется назначенная литера «-D». В таком случае данные записываются в архив. Что нужно сделать: «iperf3 -s -D —logfile /var/log/ipref.log».
  5. Проверка работы сервера. Проводится вводом «ss». Полностью команда выглядит так: «ss -tulpn | grep 5201».
  6. Назначение айпи. Для IPv4 ставим символ «4». Для IPv6 – «6». Задание конкретно подключаемых айпи производится командой «iperf3 -s -4 -D —logfile /var/log/ipref.log».

Не забываем, что продолжительность теста (в секундах) выставляется командой «-t». Пропускная способность выводится в разделе «Bitrate».

Команда «iperf3 -c 192.168.0.101 -f M -i 5 -t 30» означает, что сервер работает на адресе 192.168.0.101, выдавая промежуточные значения каждые 5 секунд. Общая длительность теста равна при этом 30 секундам. Кстати, iperf работает не только под Windows, но и с другими ОС. Но об этом поговорим в следующий раз.

Свой публичный сервер

Сервер iPerf может обрабатывать только одно подключение одновременно на порту. Поэтому, в условиях публичного использования необходим его запуск на множестве портов одновременно.

В официальной документации это предлагается делать скриптом:

#!/bin/dash
/bin/sleep 10
/usr/bin/killall iperf3
/bin/sleep 0.1
/usr/bin/killall -9 iperf3
/bin/sleep 0.1
if
then
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5200 -D >/dev/null 2>&1
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5201 -D >/dev/null 2>&1
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5202 -D >/dev/null 2>&1
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5203 -D >/dev/null 2>&1
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5204 -D >/dev/null 2>&1
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5205 -D >/dev/null 2>&1
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5206 -D >/dev/null 2>&1
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5207 -D >/dev/null 2>&1
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5208 -D >/dev/null 2>&1
  /usr/bin/sudo -u nobody /usr/bin/iperf3 -s -p 5209 -D >/dev/null 2>&1
fi

* пример данного скрипта будет работать не на всех системах. При его использовании необходимо внести в него корректировки.

Мы же настроим сервер при помощи systemd. Ранее мы уже создавали один юнит для запуска iperf. Повторяем процедуру с небольшими изменениями.

Создаем юнит со следующим содержимым:

vi /etc/systemd/system/iperfd5205.service

Description=iPerfService
After=network.target
 

Type=forking
PIDFile=/var/run/iperf3.5205.pid
ExecStart=-/bin/iperf3 -s -p 5205 -D -I /var/run/iperf3.5205.pid
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
 

WantedBy=multi-user.target

* если сравнить с ранее созданным юнитом, мы добавили запуск сервера на порту 5205.

Перезапускаем systemd:

systemctl daemon-reload

Разрешаем юнит и запускаем сервис:

systemctl enable iperfd5205

systemctl start iperfd5205

Повторяем шаги для других портов — создаем для каждого отдельный юнит в systemd. Для публичного сервера лучше создать побольше. 

Параметры конфигурации только для клиентов

Следующие аргументы могут быть введены после выполнения самой программы, а именно: «iperf3 -arguments» и порядок ввода аргументов не имеет значения. Эти аргументы можно использовать только в клиенте iperf3.

  • -c IP_address: запустить iperf в режиме клиента для подключения к серверу, мы должны сразу определить IP-адрес.
  • –Sctp — использовать этот протокол SCTP вместо TCP (по умолчанию).
  • -u: использовать протокол UDP вместо TCP (по умолчанию).
  • -b пропускная способность: позволяет определить пропускную способность в N бит / сек, по умолчанию она составляет 1 МБ / с для UDP и не ограничена для TCP. Если мы используем аргумент -P для отправки нескольких потоков данных, эта полоса пропускания применяется к каждому из них.
  • -t время: в секундах для передачи информации на максимальной скорости. По умолчанию это 10 секунд, но мы можем поставить то, что хотим.
  • -n число: количество данных для передачи, вместо времени (-t) мы используем данные.
  • -k пакетов: количество пакетов для передачи вместо использования времени (-t) или данных (-n).
  • -l (L в нижнем регистре): длина чтения или записи буфера.
  • -P число: количество одновременных потоков данных, рекомендуется ставить 5 и выше, чтобы выжать сеть по максимуму.
  • -R: трафик iperf обычно идет от клиента к серверу, если мы укажем этот аргумент, трафик будет идти от сервера к клиенту.
  • -w размер: указать размер окна TCP
  • -M mss: позволяет настроить TCP MSS
  • -N: настраивает опцию TCP без задержки.
  • -4: мы используем сети IPv4.
  • -6: мы используем сети IPv6.
  • -S: тип услуги для исходящих пакетов.
  • -L label: позволяет настроить метку потока для сетей IPv6.
  • -Z: использует метод нулевого копирования, значительно снижает загрузку ЦП программой.
  • -O секунд: пропустить первые X секунд теста, чтобы избежать проблем с медленным запуском TCP и предоставить нам измерение без всплеска в начале.
  • -T заголовок: позволяет помещать заголовок перед каждой строкой
  • -C алгоритм: позволяет настроить алгоритм перегрузки, только в Linux с iperf 3.0 и во FreeBSD с iperf 3.1

Ниже вы можете увидеть несколько примеров.

Мы можем запустить клиент iperf3 с очень интересными аргументами:

  • -c 192.168.1.10: работает в режиме клиента с указанным IP.
  • -P 50: мы отправляем всего 50 TCP-соединений
  • -p 5000: мы используем порт 5000, по умолчанию 5201
  • -fg: показываем скорость в Гбит / с
  • -t 5: запускаем тест на 5 секунд.

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

Change between iPerf 2.0, iPerf 3.0 and iPerf 3.1

  • iPerf2 features currently supported by iPerf3 :

    • TCP and UDP tests
    • Set port (-p)
    • Setting TCP options: No delay, MSS, etc.
    • Setting UDP bandwidth (-b)
    • Setting socket buffer size (-w)
    • Reporting intervals (-i)
    • Setting the iPerf buffer (-l)
    • Bind to specific interfaces (-B)
    • IPv6 tests (-6)
    • Number of bytes to transmit (-n)
    • Length of test (-t)
    • Parallel streams (-P)
    • Setting DSCP/TOS bit vectors (-S)
    • Change number output format (-f)
  • New Features in iPerf 3.0 :

    • Dynamic server (client/server parameter exchange) – Most server options from iPerf2 can now be dynamically set by the client
    • Client/server results exchange
    • A iPerf3 server accepts a single client simultaneously (multiple clients simultaneously for iPerf2)
    • iPerf API (libiperf) – Provides an easy way to use, customize and extend iPerf functionality
    • -R, Reverse test mode – Server sends, client receives
    • -O, —omit N : omit the first n seconds (to ignore TCP slowstart)
    • -b, —bandwidth n for TCP (only UDP for IPERF 2): Set target bandwidth to n bits/sec (default 1 Mbit/sec for UDP, unlimited for TCP).
    • -V, —verbose : more detailed output than before
    • -J, —json : output in JSON format
    • -Z, —zerocopy : use a ‘zero copy’ sendfile() method of sending data. This uses much less CPU.
    • -T, —title str : prefix every output line with this string
    • -F, —file name : xmit/recv the specified file
    • -A, —affinity n/n,m : set CPU affinity (cores are numbered from 0 — Linux and FreeBSD only)
    • -k, —blockcount # : number of blocks (packets) to transmit (instead of -t or -n)
    • -4, —version4 : only use IPv4
    • -6, —version6 : only use IPv6
    • -L, —flowlabel : set IPv6 flow label (Linux only)
    • -C, —linux-congestion : set congestion control algorithm (Linux and FreeBSD only) (-Z in iPerf2)
    • -d, —debug : emit debugging output. Primarily (perhaps exclusively) of use to developers.
    • -s, —server : iPerf2 can handle multiple client requests. iPerf3 will only allow one iperf connection at a time.
  • New Features in iPerf 3.1 :

    • -I, —pidfile file write a file with the process ID, most useful when running as a daemon.
    • —cport : Specify the client-side port.
    • —sctp use SCTP rather than TCP (Linux, FreeBSD and Solaris).
    • —udp-counters-64bit : Support very long-running UDP tests, which could cause a counter to overflow
    • —logfile file : send output to a log file.
  • iPerf2 Features Not Supported by iPerf3 :

    • Bidirectional testing (-d / -r)
    • Data transmitted from stdin (-I)
    • TTL : time-to-live, for multicast (-T)
    • Exclude C(connection) D(data) M(multicast) S(settings) V(server) reports (-x)
    • Report as a Comma-Separated Values (-y)
    • Compatibility mode allows for use with older version of iPerf (-C)

iPerf features

  • TCP and SCTP
    • Measure bandwidth
    • Report MSS/MTU size and observed read sizes.
    • Support for TCP window size via socket buffers.
  • UDP
    • Client can create UDP streams of specified bandwidth.
    • Measure packet loss
    • Measure delay jitter
    • Multicast capable
  • Cross-platform: Windows, Linux, Android, MacOS X, FreeBSD, OpenBSD, NetBSD, VxWorks, Solaris,…
  • Client and server can have multiple simultaneous connections (-P option).
  • Server handles multiple connections, rather than quitting after a single test.
  • Can run for specified time (-t option), rather than a set amount of data to transfer (-n or -k option).
  • Print periodic, intermediate bandwidth, jitter, and loss reports at specified intervals (-i option).
  • Run the server as a daemon (-D option)
  • Use representative streams to test out how link layer compression affects your achievable bandwidth (-F option).
  • A server accepts a single client simultaneously (iPerf3) multiple clients simultaneously (iPerf2)
  • New: Ignore TCP slowstart (-O option).
  • New: Set target bandwidth for UDP and (new) TCP (-b option).
  • New: Set IPv6 flow label (-L option)
  • New: Set congestion control algorithm (-C option)
  • New: Use SCTP rather than TCP (–sctp option)
  • New: Output in JSON format (-J option).
  • New: Disk read test (server: iperf3 -s / client: iperf3 -c testhost -i1 -F filename)
  • New: Disk write tests (server: iperf3 -s -F filename / client: iperf3 -c testhost -i1)

Виды и версии Iperf

Сама утилита работает по умолчанию в режиме командной строки, но у нее так же есть надстройка на Java, для графического интерфейса. Так же есть две независимых ветки у данного инструмента по тестированию сети. Первая ветка, это Iperf2, вторая Iperf3.

Какова история iperf3 и в чем разница между iperf2 и iperf3?

iperf2 был заброшен в конце 2000-х годов на версии 2.0.5, несмотря на некоторые известные ошибки и проблемы. Потратив некоторое время на решение проблем с iperf2, ESnet к 2010 году решила, что нужен новый, более простой инструмент, и приступила к разработке iperf3. Цель состояла в том, чтобы сделать инструмент как можно более простым, чтобы другие могли внести свой вклад в код. По этой причине было решено сделать инструмент однопоточным и не беспокоиться о обратной совместимости с iperf2.Многие запросы функций для iperf3 поступили из проекта perfSONAR ( http://www.perfsonar.net).

Затем в 2014 году Боб (Роберт) МакМахон из компании Broadcom возобновил разработку iperf2. Он исправил многие проблемы с iperf2 и добавил ряд новых функций, похожих на iperf3. iperf2.0.8, выпущенный в 2015 году, сделал iperf2 полезным инструментом. Текущее развитие iperf2 сосредоточено на использовании UDP для тестирования задержки, а также на широкой поддержке платформ.

На момент написания статьи (2019), iperf2 и iperf3 активно (хотя и независимо) разрабатываются. Я рекомендуем ознакомиться с обоими инструментами и использовать те функции, которые лучше всего соответствуют вашим потребностям.

How to perform a more recent installation of Iperf than the one included in Ubuntu / Debian / Mint ?

Tutorial for Debian / Ubuntu based distributions

Packages are manually installed via the dpkg command (Debian Package Management System). dpkg is the backend to commands like apt and aptitude, which in turn are the backend for GUI install apps like the Software Center and Synaptic.

— Ubuntu 64 bits / Debian 64 bits / Mint 64 bits

  1. sudo apt remove iperf3 libiperf0
  2. sudo apt install libsctp1
  3. wget https://iperf.fr/download/ubuntu/libiperf0_3.9-1_amd64.deb
  4. wget https://iperf.fr/download/ubuntu/iperf3_3.9-1_amd64.deb
  5. sudo dpkg -i libiperf0_3.9-1_amd64.deb iperf3_3.9-1_amd64.deb
  6. rm libiperf0_3.9-1_amd64.deb iperf3_3.9-1_amd64.deb

— Ubuntu 32 bits / Debian 32 bits / Mint 32 bits

  1. sudo apt remove iperf3 libiperf0
  2. sudo apt install libsctp1
  3. wget https://iperf.fr/download/ubuntu/libiperf0_3.9-1_i386.deb
  4. wget https://iperf.fr/download/ubuntu/iperf3_3.9-1_i386.deb
  5. sudo dpkg -i libiperf0_3.9-1_i386.deb iperf3_3.9-1_i386.deb
  6. rm libiperf0_3.9-1_i386.deb iperf3_3.9-1_i386.deb

— Remove iPerf :

  1. Remove the old version installed of iperf3 with «Ubuntu Software Center» or «Synaptic».
  2. Downoad iperf3 and libiperf0
    • Linux x86 64 bits : iperf3_3.1.3-1_amd64.deb + libiperf0_3.1.3-1_amd64.deb
    • Linux x86 32 bits : iperf3_3.1.3-1_i386.deb + libiperf0_3.1.3-1_i386.deb
  3. It is important to first install libiperf0 by double clicking on the file :
  4. You must then install iperf3 by double clicking on the file :

Синтаксис и опции

Применительно к синтаксису ПО iperf следует понимать, что клиентская и серверная части существуют независимо друг от друга. И значит, запускаются различными командами. Вот как нужно действовать применительно к каждой ситуации:

  • для сервера – $ iperf3 -s опции;
  • для клиента – $ iperf3 -c адрес_сервера опции;

Когда разобрались с запуском, можно переходить к командам, опциям программы. Их перечень обширен, но и здесь не так сложно вникнуть, если захотеть. Начнем с общих.

Ввод «-p» определяет порт для подключения. «-f» означает формат данных для отображения на дисплее. Доступны килобиты, мегабиты, килобайты, мегабайты в секунду. Остальные команды перечислены ниже:

  • «-i» означает интервал в демонстрации данных теста iperf;
  • «-F» задает использование информации из файла (а не генерации случайных показателей);
  • «-l» позволяет определить размер буфера (изначально установлено 8 килобайт);
  • «-m» отсылает к сегменту, его величине;
  • «-o» выводит результаты для записи в файл;
  • «-p» устанавливает порт привязки (5201 в пресете);
  • «-u» задает UDP сетевой протокол;
  • «-w» управляет размером окна;
  • «-B» привязывает к интерфейсу, хосту;
  • «-J» запускает переход к JSON-формату.

Это были базовые команды. Далее перейдем к серверным.

Опции для сервера

Данные действия предназначены для управления приложением ipref на серверном компьютере. Вот что приготовили разработчики:

  • «-s» задает работу в режиме сервера;
  • «-D» активирует фоновый запуск;
  • «-I» устанавливает путь сохранения PID-файла;
  • «-1» назначает однократное клиентское подключение с последующим выходом.

Не так много, как бы хотелось. Для режима «клиент» выбор побогаче.

Опции для клиента

Как уже известно, приложение iperf может работать в 2 базовых режимах. Вот что доступно для ПК клиента:

  • «—sctp» включает замену сетевого протокола TCP на SCTP;
  • «-u» переключает на протокол UDP;
  • «—connect-timeout» позволяет задать время начального подключения к серверу (измеряется в миллисекундах);
  • «-b» означает скорость, битрейт. В режиме TCP ничем не ограничен, для UDP протокола задан от 1 мегабита в секунду;
  • «-t» устанавливает время на прогонку теста. Измеряется в секундах. Изначально параметр задан в 10 секунд;
  • «-R» запускает реверс. То есть измерение производится не от клиента к серверному ПК, а в обратном направлении;
  • «-P» определяет число действующих потоков;
  • «-w» регулирует размеры окна TCP.

Кроме того, доступно принудительное переключение на настройки протокола IPv4 (ввести «-4»), IPv6 («-6»).

iPerf2 vs. iPerf3

The “ —bidir” option is very similar to the “ —dualtest” option of iPerf2. The difference is that in iPerf2, one socket is opened from the iPerf client to the server and one from the server to the client. In addition, the server measurements are not sent back to the client to print them in the console output.

iPerf2 dualtest client output:

netbeez $ ./iperf -c 172.31.0.121 —dualtest
————————————————————
Server listening on TCP port 5001
TCP window size: -1.00 Byte (default)
————————————————————
————————————————————
Client connecting to 172.31.0.121, TCP port 5001
TCP window size: 255 KByte (default)
————————————————————
local 172.31.0.25 port 39257 connected with 172.31.0.121 port 5001
local 172.31.0.25 port 5001 connected with 172.31.0.121 port 52532
Interval Transfer Bandwidth
0.0-10.0 sec 1.09 GBytes 932 Mbits/sec
0.0-10.0 sec 1.08 GBytes 927 Mbits/sec

1
2
3
4
5
6
7
8
9
10
11
12
13
14

netbeez$.iperf-c172.31.0.121—dualtest

————————————————————

Server listening on TCP port5001

TCP window size-1.00Byte(default)

————————————————————

————————————————————

Client connecting to172.31.0.121,TCP port5001

TCP window size255KByte(default)

————————————————————

5local172.31.0.25port39257connected with172.31.0.121port5001

4local172.31.0.25port5001connected with172.31.0.121port52532

IDInterval       Transfer     Bandwidth

50.0-10.0sec1.09GBytes932Mbitssec

40.0-10.0sec1.08GBytes927Mbitssec

iPerf2 dualtest server output:

netbeez$ ./iperf -s
————————————————————
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
————————————————————
local 172.31.0.121 port 5001 connected with 172.31.0.25 port 39257
————————————————————
Client connecting to 172.31.0.25, TCP port 5001
TCP window size: 544 KByte (default)
————————————————————
local 172.31.0.121 port 52532 connected with 172.31.0.25 port 5001
Interval Transfer Bandwidth
0.0-10.0 sec 1.08 GBytes 928 Mbits/sec
0.0-10.0 sec 1.09 GBytes 929 Mbits/sec

1
2
3
4
5
6
7
8
9
10
11
12
13
14

netbeez$.iperf-s

————————————————————

Server listening on TCP port5001

TCP window size85.3KByte(default)

————————————————————

4local172.31.0.121port5001connected with172.31.0.25port39257

————————————————————

Client connecting to172.31.0.25,TCP port5001

TCP window size544KByte(default)

————————————————————

6local172.31.0.121port52532connected with172.31.0.25port5001

IDInterval       Transfer     Bandwidth

60.0-10.0sec1.08GBytes928Mbitssec

40.0-10.0sec1.09GBytes929Mbitssec

All in all, the bidirectional tests between iPerf2 and iPerf3 are very similar. The only advantage of iPerf3 is that it doesn’t require a reverse route or port open to receive the traffic since both sockets are opened from the client to the server. That can be important if the iPerf client is behind a NAT and is not able to accept connections.

Multicast

To test multicast, run several servers with the bind option (-B, –bind) set
to the multicast group address. Run the client, connecting to the multicast
group
address and setting the TTL (-T, –ttl) as needed. Unlike normal TCP and
UDP tests, multicast servers may be started after the client. In that case,
datagrams sent before the server started show up as losses in the first periodic
report (61 datagrams on arno below).

Start multiple clients or servers as explained above, sending data to the same multicast server.
(If you have multiple servers listening on the multicast address, each of the servers will be getting the data)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector