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

Как установить Iperf в CentOS 7

Хочу отметить, что в CentOS 7 и CentOS 8, придется делать слегка иначе. Производить инсталляцию я буду в последней версии CentOS 7, которую поставил ранее.

Начнем с установки Iperf2, для этого выполните команду:

yum install iperf

У вас должна выскочить ошибка

Failed to synchronize cache for repo ‘AppStream’, ignoring this repo. Failed to synchronize cache for repo ‘BaseOS’, ignoring this repo. Failed to synchronize cache for repo ‘extras’, ignoring this repo. No match for argument: iperf Error: Unable to find a match

Давайте посмотрим список репозиториев, делается это командой:

yum repolist

Как видим, список будет вот такой:

CentOS-7 — AppStream CentOS-7 — Base CentOS-7 — Extras

Напоминаю, что утилита Iperf является дополнительным пакетом, который не входит в основные репозитории, это прекрасно описано в Вики http://fedoraproject.org/wiki/EPEL. Дополнительные пакеты для Enterprise Linux (EPEL) — это одобренный сообществом репозиторий, который указан в вики CentOS в разделе «Доступные репозитории для Linux», в котором отмечается, что хотя репозитории сообщества не связаны с проектом CentOS, эти репозитории часто рекомендованы сообществом. Выполните команду:

ls /etc/yum.repos.d

Как видите в файле yum.repos.d прописаны подключенные репозитории, и тут не хватает репозитория epel-release.

Давайте установим epel-release, для этого выполните:

yum install epel-release

или командой

yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm -y

Пробуем теперь посмотреть список репозиториев в файле yum.repos.d и видим, что epel появился.

Произведем установку Iperf

yum install iperf

Все успешно выполнено. Конечно вам никто не запрещает подключить репозиторий от седьмой версии CentOS в восьмую, но они могут конфликтовать в будущем по зависимостям. Поэтому, если у вас CentOS 8, то я рекомендую сделать вот так.

Code Authors

The main authors of iPerf3 are (in alphabetical order): Jon Dugan, Seth Elliott, Bruce A. Mah, Jeff Poskanzer, Kaustubh Prabhu.
Additional code contributions have come from (also in alphabetical order): Mark Ashley, Aaron Brown, Aeneas Jaißle, Susant Sahani, Bruce Simpson, Brian Tierney.

iPerf3 contains some original code from iPerf2. The authors of iPerf2 are (in alphabetical order):
Jon Dugan, John Estabrook, Jim Ferbuson, Andrew Gallatin, Mark Gates, Kevin Gibbs,
Stephen Hemminger, Nathan Jones, Feng Qin, Gerrit Renker, Ajay Tirumala, Alex Warshavsky.

Acknowledgements for iPerf1: Thanks to Mark Gates (NLANR), Alex Warshavsky (NLANR) and Justin Pietsch (University of Washington)
who were responsible for the 1.1.x releases of Iperf.
For iPerf 1.7, we would like to thank Bill Cerveny (Internet2), Micheal Lambert (PSC), Dale Finkelson (UNL)
and Matthew Zekauskas (Internet2) for help in getting access to IPv6 networks / machines.
Special thanks to Matthew Zekauskas (Internet2) for helping out in the FreeBSD implementation.
Also, thanks to Kraemer Oliver (Sony) for providing an independent implementation of IPv6
version of Iperf, which provided a useful comparison for testing our features.

Thanks to ESnet for re-rolling iperf from the ground up. iPerf3 is a killer piece of software.

Thanks to
for hosting iPerf.fr.

Bug Report for iPerf3

Before submitting a bug report, try checking out the latest version of the code, and confirm that it’s not already fixed.
Then submit to the iPerf3 issue tracker on GitHub: https://github.com/esnet/iPerf/issues

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:

  • UDP performance: Some problems have been noticed with iPerf3 on the ESnet 100G testbed at high UDP rates (above 10Gbps). The symptom is that on any particular run of iPerf3 the receiver reports a loss rate of about 20%, regardless of the «-b« option used on the client side. This problem appears not to be iPerf3-specific, and may be due to the placement of the iPerf3 process on a CPU and its relation to the inbound NIC. In some cases this problem can be mitigated by an appropriate use of the CPU affinity («-A«) option. (Issue #55)
  • The «-Z« flag sometimes causes the iPerf3 client to hang on OSX. (Issue #129)
  • When specifying the TCP buffer size using the «-w« flag on Linux, the Linux kernel automatically doubles the value passed in to compensate for overheads. (This can be observed by using iPerf3’s «—debug« 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 manual page. (Issue #145)

Что умеет iperf?

Вообще, все написано в хелпе к данной утилите, но если кто-то любит читать на русском, то ключи ниже.

Общие: -f, —format, формат отчёта: Kbits, Mbits, KBytes, MBytes

-i, —interval n, пауза секунд между периодическими отчётами

-l, —len n, задёт длину на чтение/запись буфера (по умолчанию 8 KB)

-m, —print_mss, показать максимальный размер сегмента (MTU — TCP/IP в заголовке)

-o, —output , Запись отчёта в указанный файл

-p, —port n, задаёт порт к которому конектится или на котором вешать сервер (по умолчанию 5001)

-u, —udp, использовать UDP, а не TCP

-w, —window n, TCP размер окна (размер буфера сокета)

-B, —bind , привязки к хосту, интерфейсу или групповому адресу

-C, —compatibility, для использования с более старыми версиями не шлёт екстра сообщения

-M, —mss n, задать TCP максимальный размер сегмента (MTU — 40 байт)

-N, —nodelay, задать TCP без задержки, отключение алгоритма Нэгла

-v, —version, напечатать информацию о версии и выйти

-V, —IPv6Version, Использовать IPv6

-x, —reportexclude, исключить C(соединение), D(данные), M(Multicast) S(настройки) V(сервер) в отчетности

-y, —reportstyle C|c, если установлено в C или c Отчёт будет в результатах CSV (значения, разделенные запятыми)

Конкретные варианты SERVER -s, —server, запустить в режиме сервера

-U, —single_udp, работать в однопоточном режиме UDP

-D, —daemon, запустить сервер как демон

Конкретные варианты CLIENT -b, —bandwidth n, установить пропускную способность в бит/сек (по умолчанию 1 Мбит/сек.). Эта установка требует UDP (-u).

-c, —client , запустить в режиме клиента, при подключении к

-d, —dualtest, двунаправленный тест одновременно

-n, —num n, количество байт для передачи (вместо -t)

-r, —tradeoff, У двунаправленный тест индивидуально

-t, —time n, время передачи в секундах (по умолчанию 10 секунд)

-F, —fileinput , читать отсылаемый контент серверу из файла

-I, —stdin, самому писать что отдавать серверу

-L, —listenport n, порт клиента двунаправленный

-P, —parallel n, число параллельных потоков клиента для запуска

-T, —ttl n, время жизни, для multicast (по умолчанию 1)

iPerf является кроссплатформенным приложением и может быть установлен на любую популярную операционную систему. В данной инструкции будет рассмотрена установка сервера на Linux CentOS и клиента как на последнем, так и Microsoft Windows.

Tuning a UDP connection

iPerf creates a constant bit rate UDP stream. This is a very artificial stream, similar to voice communication but not much else.

You will want to adjust the datagram size (-l) to the size your application uses.

The server detects UDP datagram loss by ID numbers in the datagrams.
Usually a UDP datagram becomes several IP packets. Losing a single IP packet will lose the entire datagram.
To measure packet loss instead of datagram loss, make the datagrams small enough to fit into a single packet, using the -l option.
The default size of 1470 bytes works for ethernet. Out-of-order packets are also detected.
(Out-of-order packets cause some ambiguity in the lost packet count;
iPerf assumes they are not duplicate packets, so they are excluded from the lost packet count.)
Since TCP does not report loss to the user, I find UDP tests helpful to see packet loss along a path.

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)

Варианты применения iPerf в VoIP-телефонии

Нагрузочное тестирование сети

Предположим, что перед Вами возникла задача развернуть сервер VoIP-телефонии в офисе Вашей компании и ее удаленных филиалах. Вы хотите протестировать имеющуюся сетевую инфраструктуру под нагрузкой, дабы узнать, сможет ли она обеспечить стабильное качество обслуживания ваших абонентов при большом количестве звонков.

Для того чтобы обеспечить нагрузочное тестирование сети мы настроим iPerf на генерацию большого количества TCP-трафика, увеличив размер окна TCP до 32KB (по умолчанию размер окна 8KB) и зададим количество потоков равное 8 (имитация восьми одновременных звонков):

Со стороны сервера включим прослушивание на стандартном порту 5201:

iperf3 -s

Со стороны клиента:

iperf3 -c *server_ip* -P 8 -w 32768

где опция:

с — указывает, что данный хост является клиентом;

P определяет число потоков;

w указывает размер окна TCP в байтах.

Статистика нагрузочного тестирования пакетами TCP с увеличенным размером окна в 8 потоковом режиме

Следующий нагрузочный тест мы проведем, сгенерировав полосу UDP трафика 1Гбит/с одним потоком. Данный тест также позволит нам отследить количество потерь пакетов и сетевой джиттер.

 Со стороны клиента запускаем iPerf с параметрами:

iperf3 -c *server_ip* -u -b 1000M

где ключ:

с — указывает, что данный хост является клиентом;

u определяет протокол UDP;

b — максимальную полосу генерируемого трафика.

Статистика нагрузочного тестирования при отправке 1Гбит трафика

Эмуляция RTP-потока

Как известно, в технологии VoIP протокол SIP используется для лишь для установления сессий между устройствами, голосовые и видео данные передаются в RTP потоках. Отследить проблемы с потоком RTP, такие как, например, задержки при передаче голоса в результате некорректной настройки сетевого оборудования можно в том числе с помощью утилиты iPerf.

Проведем тест, симулирующий голосовой трафик по порту 5061:

Со стороны сервера:

iperf3 -s -p 5061

Со стороны клиента:

iperf3 -c *server_ip* -u -p 5061 -S 0xC0 -l 250

где опции:

с — указывает, что данный хост является клиентом;

u определяет протокол UDP;

p используемый порт 5061;

S определяет параметр DSCP/TOS (в формате Hex) — внутрисетевое тестирование;

l размер самой дейтаграммы.

Статистика тестирования при передаче трафика, аналогичного RDP-потоку

Эмуляция голосового трафика

Теперь с помощью iPerf мы проведем тест сети, моделируя поток голосовых данных в таком же двунаправленном потоке, как это делает наиболее распространенный и часто используемый в VoIP-сетях кодек G.711. Параметры голосового потока можно рассчитать с помощью калькулятора полосы нагрузки: VoIP Bandwidth Calculator.

            Наш поток RTP будет использовать битрейт 64кб/с с частотой отправки 50 пакетов в секунду.

Со стороны сервера:

iperf3 -s -p 5061

iperf -c *server_ip* -u -l 300 -b 67000 -d -S 0xC0 -fk -i 5 -p 5061

где ключи:

с — указывает, что данный хост является клиентом;

u — определяет протокол UDP;

l — указывает размер дейтаграммы;

b — битрейт передачи данных;

d — использование двунаправленного потока;

S — определяет параметр DSCP/TOS (в формате Hex) — внутрисетевое тестирование;

i — интервал отправки дейтаграмм;

p — используемый порт.

Тестирование с эмуляцией передачи голосового трафика

Логирование в процессе тестирования

Начиная с версии 3.1 iPerf позволяет производить запись результатов тестирования в текстовый файл. Также в версии 3.0 введена поддержка вывода в формате JSON. Использование данных опций позволяет производить множественные тесты с отслеживанием операций на каждом этапе тестирования.

Со стороны сервера:

iperf3 -s -p 5061

Со стороны клиента:

iperf -c *server_ip* -u -l 300 -b 67000 -p 5061 -J --logfile trace.json

где:

с — указывает, что данный хост является клиентом;

u — определяет протокол UDP;

l — указывает размер дейтаграммы;

b — битрейт передачи данных;

J — определяет вывод в формате JSON;

— logfile — указывает файл для записи вывода.

Лог выполнения теста мы можем видеть в файле trace.json

Лог-файл утилиты iPerf

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

Bug Report for iPerf3

Before submitting a bug report, try checking out the latest version of the code, and confirm that it’s not already fixed.
Then submit to the iPerf3 issue tracker on GitHub: https://github.com/esnet/iperf/issues

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:

  • UDP performance: Some problems have been noticed with iperf3 on the ESnet 100G testbed at high UDP rates (above 10Gbps). The symptom is that on any particular run of iperf3 the receiver reports a loss rate of about 20%, regardless of the «-b« option used on the client side. This problem appears not to be iperf3-specific, and may be due to the placement of the iperf3 process on a CPU and its relation to the inbound NIC. In some cases this problem can be mitigated by an appropriate use of the CPU affinity («-A«) option. (Issue #55)
  • Interval reports on high-loss networks: The way iperf3 is currently implemented, the sender write command will block until the entire block has been written. This means that it might take several seconds to send a full block if the network has high loss, and the interval reports will have widely varying interval times. A solution is being discussed, but in the meantime a work around is to try using a small block size, for example «-l 4K«. (Issue #125, a fix will be released in iperf 3.1)
  • The «-Z« flag sometimes causes the iperf3 client to hang on OSX. (Issue #129)
  • When specifying the TCP buffer size using the «-w« flag on Linux, the Linux kernel automatically doubles the value passed in to compensate for overheads. (This can be observed by using iperf3’s «—debug« 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. (Issue #145)

Установка iperf на CentOS 8

Ранее, я так же установил CentOS 8 в тестовой среде. Хочу отметить, что если вы попытаетесь добавить репозиторий epel-release командой:

yum install epel-release или yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm -y

То он успешно установится, но когда вы попытаетесь сделать поиск iperf по нему, то обнаружите, что восьмая ветка не содержит данной утилиты.

dnf repository-packages epel list | grep -i iperf

Как я и писал выше не желательно устанавливать epel 7 и 8 версии репозитория, я лично в такой ситуации просто выхожу подобным образом. Я открываю сайт https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/ и ищу нужный мне пакет, копирую на нужный мне прямую ссылку.

Далее я устанавливаю в CentOS 8 пакет wget, для этого выполняем:

yum install wget -y

Далее скачиваем пакет, ссылку на который мы заранее выяснили.

wget https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/i/iperf-2.0.13-1.el7.x86_64.rpm

Далее производим установку iperf2 в системе, через выполнение команды:

rpm -ivh iperf-2.0.13-1.el7.x86_64.rpm

Так же для CentOS 8 рекомендуется включить репозиторий PowerTools, поскольку пакеты EPEL могут зависеть от пакетов из него

dnf config-manager —set-enabled PowerTools

Tuning a TCP connection

bandwidth delay product

Note that many OSes and hosts have upper limits on the TCP window size.
These may be as low as 64 KB, or as high as several MB. iPerf tries to detect when these occur and give a warning that the actual and requested window sizes are
not equal (as below, though that is due to rounding in IRIX).
For more information on TCP window sizes, see the LaFibre.info.
Here is an example session, between node1 in Illinois and node2 in North Carolina. These are connected via the vBNS backbone and a 45 Mbit/sec DS3 link.
Notice we improve bandwidth performance by a factor of 3 using proper TCP window sizes.
Use the adaptive window sizes feature on platforms which allow setting window sizes in the granularity of bytes.

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)

Summary

iperf is a tool for active measurements of the maximum achievable
bandwidth on IP networks. It supports tuning of various parameters
related to timing, protocols, and buffers. For each test it reports
the measured throughput / bitrate, loss, and other parameters.

This version, sometimes referred to as iperf3, is a redesign of an
original version developed at NLANR/DAST. iperf3 is a new
implementation from scratch, with the goal of a smaller, simpler code
base, and a library version of the functionality that can be used in
other programs. iperf3 also has a number of features found in other tools
such as nuttcp and netperf, but were missing from the original iperf.
These include, for example, a zero-copy mode and optional JSON output.
Note that iperf3 is not backwards compatible with the original iperf.

Primary development for iperf3 takes place on CentOS Linux, FreeBSD,
and macOS. At this time, these are the only officially supported
platforms, however there have been some reports of success with
OpenBSD, NetBSD, Android, Solaris, and other Linux distributions.

iperf3 is principally developed by ESnet / Lawrence Berkeley National
Laboratory. It is released under a three-clause BSD license.

Source code and issue tracker: https://github.com/esnet/iperf

Виды и версии 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 активно (хотя и независимо) разрабатываются. Я рекомендуем ознакомиться с обоими инструментами и использовать те функции, которые лучше всего соответствуют вашим потребностям.

Клиентские запросы и проверка сервера

Напомню, что клиент может быть установлен на любую систему. Также, как в первом случае, выполняем установку клиента на другой компьютер в сети.

После можно сразу выполнить команду:

iperf3 -c 192.168.0.15

* где 192.168.0.15 — iPerf сервер.

На клиенте мы увидим что-то подобное:

local 192.168.0.20 port 47068 connected to 192.168.0.15 port 5201
Interval           Transfer     Bandwidth       Retr  Cwnd
  0.00-1.00   sec   104 MBytes   873 Mbits/sec   10    391 KBytes
  1.00-2.00   sec   110 MBytes   921 Mbits/sec    4    393 KBytes
  2.00-3.00   sec   111 MBytes   928 Mbits/sec    1    478 KBytes
  3.00-4.00   sec   104 MBytes   875 Mbits/sec    5    423 KBytes

* где:

  • 192.168.0.20 — адрес клиента
  • 192.168.0.15 — адрес сервера
  • ID — идентификатор запросов, нужен для ориентирования, если к серверу идет несколько обращений.
  • Interval — промежуток времени в секундах, на протяжении которого выполнялась передача данных.
  • Transfer — сколько было передано данных за интервал времени.
  • Bandwidth — средняя скорость передачи данных за интервал времени.
  • Retr — количество повторно отправленных TCP-сегментов.
  • Cwnd — одновременно переданных данных.

Описание всех параметров

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

В большинстве случаев вполне достаточно запуска c параметрами по умолчанию, как это указано выше в разделе «Использование», для тонкой настройки привожу описание всех параметров iPerf3:

Общие:

-p, —port #  установить порт для прослушивания/подключения (по умолчанию 5001 для iperf2 и 5201 для iperf3)

-f, —format   формат отчёта: Kbits, Mbits, KBytes, MBytes

-i, —interval #  пауза между периодическими отчётами, в секундах

-F, —file name указывает файл который будет передаваться в качестве нагрузки вместо псевдослучайной последовательности

-A, —affinity n/n,m  запуск с привязкой к конкретному ядру процессора (только для linux)

-B, —bind <host>  привязка к хосту, интерфейсу или групповому адресу

-V, —verbose  вывод подробной информации

-J, —json  вывод в JSON формате

—logfile f  вывод лога в файл

 -d, —debug  вывод дополнительной информации для отладки

 -v, —version  вывод версии

 -h, —help вывод списка параметров

Только для сервера:

 -s, —server  запуск в режиме сервера

 -D, —daemon  запуск в режиме сервера как процесс (демон)

 -I, —pidfile file  создать PID файл

 -1, —one-off  закрыть сервер после отработки одного подключения

Только для клиента:

 -c, —client <host> запуск в режиме клиента и подключиться к серверу по адресу <host>

 -u, —udp использовать UDP, вместо TCP

 -b, —bandwidth #  задать пропускную способность в бит/сек (по умолчанию без ограничений для TCP и 1 Мбит/сек. для UDP)

 -t, —time #  длительность измерения в секундах (по умолчанию 10 сек)

 -n, —bytes #  количество байт, после передачи которых остановить измерение (вместо длительности по времени -t)

 -k, —blockcount #  количество блоков (пакетов), после передачи которых остановить измерение (вместо длительности -t или объема -n)

 -l, —len #  размер буфера для записи/чтения (по умолчанию 128 KB для TCP и 8 KB для UDP)

 —cport <port>  задать локальный порт подключения (по умолчанию рандомный порт)

 -P, —parallel #  количество параллельных потоков

 -R, —reverse запуск в обратном направлении (сервер будет отправлять, клиент принимать

 -w, —window #  размер TCP window size / размер буфера

 -C, —congestion <algo> выбрать алгоритм управления перегрузками TCP (только Linux и FreeBSD)

 -M, —set-mss #  задать максимальный размера сегмента TCP/SCTP (MTU-40 байт)

 -N, —no-delay задать TCP без задержки (отключение алгоритма Нэйгла)

 -4, —version4  использовать только IPv4

 -6, —version6  использовать только IPv6

 -S, —tos N  задать «тип сервиса» IP

 -L, —flowlabel N  задать IPv6 flow label (только Linux)

 -Z, —zerocopy использовать «zero copy» метод передачи данных (меньше загрузка CPU)

 -O, —omit N  не учитывать измерение первых N секунд

 -T, —title str  префикс для каждой выводимой строки

 —get-server-output  выводить результаты серверной части

Public iPerf3 servers

iPerf3 servers will only allow one iPerf connection at a time. Multiple tests at the same time is not supported.
If a test is in progress, the following message is displayed: «iperf3: error — the server is busy running a test. try again later»

iPerf3 server Characteristics Localization Datacenter Hosting Speed Port IP version Contact
bouygues.iperf.fr Linux 4.10 FranceÎle-de-France Telehouse 2Paris Voltaire www.bouyguestelecom.fr 10 Gbit/s 5200 TCPto5209 TCP IPv4 and IPv6 @lafibreinfo
ping.online.netping6.online.netping-90ms.online.netping6-90ms.online.net IPv4 onlyIPv6 onlyIPv4 +90ms latencyIPv6 +90ms latency FranceÎle-de-France OnlineVitry DC3 www.online.net 10 Gbit/s 5200 TCP/UDPto5209 TCP/UDP IPv4 or IPv6
test.internetone.ch Linux 3.13 Switzerland InternetONE www.internet.one 10 Gbit/s 5200 TCPto5209 TCP IPv4 and IPv6 business atinternet.one
speedtest.serverius.net(Port 5002: add -p 5002) Netherlands Serveriusdatacenter https://serverius.net 10 Gbit/s 5002 TCP/UDP IPv4 and IPv6 @serveriusbv
iperf.eenet.ee Estonia EENet Tartu www.eenet.ee 5201 TCP/UDP IPv4 only @EENet_HITSA
iperf.volia.net Ukraine Volia Kiev http://volia.com 5201 TCP/UDP IPv4 only @voliaofficial
iPerf3 server Characteristics Localization Datacenter Hosting Speed Port IP version Contact
iperf.it-north.net Linux 3.16Debian 8 Kazakhstan Petropavl http://telecom.kz 1 Gbit/s 5200 TCP/UDPto5209 TCP/UDP IPv4 only Brauninger A.F.
iperf.biznetnetworks.com Linux 2.6.32CentOS 6 Indonesia Biznet — MidplazaCimanggis www.biznetnetworks.com 1 Gbit/s 5201 TCPto5203 TCP IPv4 and IPv6 Biznet Networks
iPerf3 server Characteristics Localization Datacenter Hosting Speed Port IP version Contact
iperf.scottlinux.com USACalifornia HurricaneFremont 2 https://scottlinux.com 1 Gbit/s 5201 TCP/UDP IPv4 and IPv6 @scottlinux
iperf.he.net USACalifornia HurricaneFremont 1 https://he.net 5201 TCP/UDP IPv4 and IPv6 HE forums

To add / remove a public iPerf3 server, please report them to vivien16@gueant.org

Основные отличия Iperf2 и Iperf3

Каждый из этих инструментов имеет несколько разные функции и немного другую архитектуру, поэтому не стоит ожидать, что какой-то один инструмент будет иметь все необходимое. Лучше быть знакомым с несколькими инструментами и использовать правильный инструмент для вашего конкретного случая использования. Одно ключевое отличие заключается в том, является ли инструмент однопоточным или многопоточным. Если вы хотите протестировать производительность параллельного потока, вы должны использовать многопоточный инструмент, такой как iperf2, хотя в iperf3 так же можно сделать костыль.

Обратите внимание, что по умолчанию Iperf3 официально не поддерживается в Windows, но это не означает, что он там не будет работать, могут быть нюансы и глюки

Обратите внимание, что все три из этих инструментов находятся в активной разработке, и список уникальных функций для данного инструмента, вероятно, со временем изменится. Исходя из моего опыта, я рекомендуем следующее:

  • Используйте iperf2 для параллельных потоков, двунаправленных тестов или тестов на базе MS Windows.
  • Используйте nuttcp или iperf3 для высокоскоростного тестирования UDP

Conducting a UDP speed test in iperf

Conducting a UDP speed test using iperf will provide you with a couple of more information about your network which will be very much useful in finding network bottlenecks.

As we discussed before, not only TCP window size but network parameter’s like the following also affects the throughput achieved during a connectionn.

  • Out of order delivery
  • Network Jitter
  • Packet loss out of total number of packets

For conduction an iperf udp test, you need to start the server with the -u option so that the UDP port 5001 is opened on the server side.

Now lets start the data transfer from the client side by sending UDP traffic.

In the above example, i have used -b option to specify the bandwidth to use(because by default iperf UDP only used 1Mbps, i will recommend using your full available bandwidth to get an idea)

-u options needs to be also used on the client side for specifying UDP traffic.

The ouput tells us the following information.

Bandwidth = 81.7Mbits/sec

Network jitter = 0.167 ms (network jitter is the deviation in time for periodic arrival of data gram’s. If you are doing the test with server’s on the other side of the globe, then you might see higher jitter values in iperf output.)

Out of Order = 1 datagram

Lost/Total =  49/69508

0.07 percent datagram loss is not at all significant, infact you can say that you got a nice network packet loss ratio.

VOIP require’s a very less datagram loss because its voice communication.  A high data gram loss can drop the call altogether. So UDP testing with iperf will be very much helpful if you have VOIP or other such critical applications on your infrastructure.

You can get all the option’s related to iperf with the following command.

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

Оцените статью
Рейтинг автора
5
Материал подготовил
Андрей Измаилов
Наш эксперт
Написано статей
116
Добавить комментарий