Как пользоваться iperf windows

Виды и версии 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 в CentOS 7 и 8

В CentOS 8 с установкой Iperf3 еще проще, так как это пакет является уже частью стандартных репозиториев, чтобы его поставить просто введите:

yum install iperf3

Если мы имеем дело с CentOS 7 и ниже, то нужно добавлять репозиторий epel-release

yum install epel-release

Открытие портов Iperf на CentOS

После того. как вы произвели инсталляцию пакета, вам необходимо открыть порты, которые будет слушать ваша служба при подключении к ней. Напоминаю, что порты по умолчанию у iperf и iperf3, это 5201. Для решения этой задачи мы выполним две команды:

firewall-cmd —permanent —add-port=5201/tcp

firewall-cmd —permanent —add-port=5201/udp

firewall-cmd —reload

Проверим слушает ли сервер входящие подключения по порту 5210, для этого выполните:

iperf3 -s

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

Для просмотра всех возможных параметров с описанием (на английском), достаточно запустить 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  выводить результаты серверной части

Iperf и windows.

Iperf не входит в стандартный дистрибутив windows, поэтому его надо скачать, например тут

Далее, необходимо поместить этот файл для удобства на диск С:

Если вы 2 раза кликните на то, что скачали, утилита запуститься и сразу «вылетит». Пользоваться ей надо следующим образом

  1. Зайдите в командную строку Пуск->выполнить->cmd или если Windows 10 в поиске необходимо набрать Cmd, он сам автоматически найдет то, что нам нужно.
  2. В открывшейся командной строке, надо перейти в папку, куда вы поместили скаченный iperf, в нашем случае она будет лежать на диске C:/, выполнив команду: cd c:/
  3. Чтобы запустить iperf, например, в режиме клиента, необходимо выполнить команду: iperf -c -t 30 -i 10, где -t — время теста, -i — интервал обновления данных теста

Как видим, исходящая скорость исходящая скорость до сервера x.x.x.201 в среднем 15 мегабит\сек

Iperf – утилита для тестирования пропускной способности сети.

Наткнулся на интересную статью про утилитку для тестирования пропускной способности сети. Имеется одно приложение, крайне зависимое от всё этой фигни, и каким то образом надо протестить и найти слабое место. Для начала просто опубликую статью, а потом сам напишу небольшой обзор, с тестом. Понеслась.

Как поступить, если необходимо произвести нагрузочное тестирование канала связи, маршрутизатора и при этом остаться при своих деньгах? Не знаете? Спросите меня :). Выход есть.
Заходим на сайт http://dast.nlanr.net/projects/Iperf/ (для линуксоидов http://www.netperf.org/) и скачиваем утилиту iperf (для Linux качаем netperf). Сразу замечу, что обе утилиты используют один и тот же протокол связи, и поэтому вполне возможно запустив сервер под Linux, генерировать трафик клиентом под Windows.

Внимание! Утилита работает под Windows 2000 и выше. Возможно, она запустится и под NT, но достоверных сведений об этом не обнаружено, а сам я не проверял ввиду отсутствия доступа к последней. В комплект утилиты входит документация, в которой расписаны ключики для запуска исполняемого файла

Всё довольно подробно, поэтому я здесь расскажу о примерах использования iperf и особенностях работы с ним

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

Прежде всего, нам необходимы два компьютера. Одини из них будет генерировать трафик, он называется клиентом, а другой – принимать пакеты и вести подсчёт статистики, он называется сервером. На обоих машинах запускается один и тот же исполняемый файл, но с разными ключами.

Теперь примеры.

Проверка на TCP трафике.

Сервер

Клиент

Здесь server_host – адрес машины, на которой запущен iperf в режиме сервера. Вот, собственно и всё. Сначала запускаем сервер, затем клиент, и в течение 10 секунд между ними будет идти трафик, после чего соединение будет разорвано и выведена статистика.

Чтобы увеличить продолжительность соединения, необходимо добавить в строку запуска клиента параметр -t nsec, где nsec – продолжительность соединения в секундах.

Не менее полезным будет ключик -i nsec. Здесь nsec соответствует периоду (в секундах, естественно), через который будет выводиться статистика.

Проверка на UDP трафике.

Для запуска iperf в режиме UDP необходимо добавить и клиенту и серверу ключи -u.

Протокол UDP более “тупой”, что даёт нам как некоторые преимущества, так и недостатки. Впрочем, для целей тестирования, недостатки опять-таки превращаются в преимущества.

Итак, что мы можем:

  • менять длину передаваемых пакетов
  • менять полосу передаваемого трафика
  • работать на односторонних каналах
  • использовать iperf без запуска сервера, если канал не сквозной, а необходимо просто генерировать заданный трафик для нагрузки

Для изменения длины пакета используется ключ -l length. Следует только помнить, что при length=0 реальная длина Ethernet-фрейма будет составлять 54 байта и делать в своих расчётах соответствующую поправку.

Для изменения полосы трафика используется ключ -b bandwidth. Параметр bandwidth выражается в битах в секунду и может содержать десятичную точку и суффиксы k и M, соответствующие приставкам кило- и мега-.

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

Запуск нескольких потоков трафика.

Мы можем запустить несколько экземпляров клиентов и серверов на одной и той же машине. Для развязки трафика используется назначение разных портов при помощи параметра -p port его значение на клиенте и соответствую щем сервере должно быть одинаковым (по умолчанию, он имеет значение 5001).

Практика показала, что при запуске нескольких клиентов на одной машине, iperf захватывает практически все ресурсы ЦП, из-за чего в некоторых потоках возможно пропадание пакетов. Здесь, видимо, имеется некая ошибка в коде, вызывающая некорректную работу при context switching. Всё вышеуказанное справедливо для iperf. Netperf работает под Linux вполне корректно.

В файлах помощи вы найдёте ещё параметр -S, позволяющий устанавливать значение Type Of Servise (TOS) в IP заголовке. Вынужден вас разочаровать, под Windows это не работает. (Что характерно, я не смог установить это поле и в стандартном ping для Windows).

Взято с берлоги инженера

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

Все ключи запуска iPerf

Общие для сервера и клиента:

Ключ Описание
-p Определить порт, на котором будет слушать сервер или отправлять запросы клиент
-f Формат отчетов — kmgKMG (Kbits, Mbits, KBytes, MBytes, …)
-i Задать интервал, в течение которого выполняется одна проверка
-F Указать файл, из которого будут взяты входные данные для запуска
-A Степень нагрузки на процессор
-B Указать, через какой сетевой интерфейс работать
-V Детализированные сообщения в консоли
-J Вывод в формате json
—logfile Весь вывод в отдельный лог-файл
-d Режим отладки (много сообщений)
-v Показать версию программы
-h Вызвать справку по работе с программой

Для сервера:

Ключ Описание
-s Запустить iPerf в режиме сервера
-D Запустить как демона (как службу)
-I Указать pid-файл
-1 Принять запрос от одного клиента и завершить работу

Для клиента:

Ключ Описание
-c Запустить iPerf в режиме клиента
-u Отправлять UDP-пакеты
-b Формат отчетов для bandwidth (средней скорости)
-t Количество секунд, в течение которых будет идти проверка скорости
-n Объем данных для проверки (применяется вместо времени -t)
-k Количество пакетов для проверки (вместо -t или -n)
-l Длина буфера записи/чтения
-P Число параллельных запросов
-R Обратный режим — сервер отправляет, клиент принимает
-w Размер сетевого окна
-C Установить алгоритм управления перегрузкой TCP
-M Задать максимальный размер MTU
-4 Работать только для IPv4
-6 Работать только для IPv6
-Z Использовать метод «нулевой копии» для отправки данных
-O Опустить первые n секунд
-T Задать префикс для каждой строки вывода

Также самый свежий список ключей можно получить командой:

man iperf3

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)

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

Следующие аргументы могут быть введены после выполнения самой программы, а именно: «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 с графическим пользовательским интерфейсом без необходимости вводить сложные команды и аргументы.

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

Версии программы для Windows используют те же команды, что и в iperf3 debian и других Linux-системах. К каждой опции будет приложено пояснение на русском языке, что позволит быстро понять, как пользоваться iperf. Как было сказано выше, iperf3 может быть запущена как:

  • клиентский вариант;
  • сервером.

Чтобы запустить программу в качестве сервера и использовать соответствующие опции с ключами используется следующая комбинация:

Сервер iperf3 запущен (с назначенным портом , на котором работает приложение. По умолчанию 5201).

Чтобы запустить клиент iperf3 windows , необходимо набрать в командной строке:

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

Перейдем к рассмотрению общих опций программы.

  • -p, —port – указывается порт, к которому необходимо подключиться (серверный порт);
  • -f, —format – определяем формат вывода данных. Популярные значения: k, m, g, t (Kbits, Mbits, KBytes, MBytes), но есть и другие варианты;
  • -i, —interval – временной интервал между выводами результатов теста;
  • -F, —file – применить данные, находящиеся в указанном файле, вместо генерирования случайных сведений;
  • -V, —verbose – вывод всей доступной информации по тесту;
  • -J, —json – вывод в формате JSON;
  • —logfile – включить логирование данных;
  • —forceflush – произвести очистку истории перед печатью на экране последующих тестовых результатов;
  • -v, —version – вывод использующейся версии утилиты.

Ниже укажем в нашем руководстве опции, доступные серверной части.

  • -D, —daemon – запуск сервера в фоне (опцию можно использовать и для клиента);
  • -I, —pidfile – путь, который будет использован, чтобы записать PID-файл процесса;
  • -1, —one-off – выполнить обработку одного клиентского подключения, после чего завершить работу и выйти.

При работе с клиентской частью применяется большее количество опций.

  • —sctp – применять SCTP в качестве альтернативы TCP;
  • -u, —udp – задействовать UDP вместо TCP;
  • —connect-timeout – задержка для первого соединения с серверной частью (мс);
  • -b, —bitrate – задать битрейт (при использовании UDP применяется по умолчанию 1 Мбит/с, для TCP показатель со старта не имеет ограничений);
  • -t, —time – отрезок времени для одного тестового этапа в секундах (по умолчанию параметр равен 10 с);
  • -R, —reverse – запуск обратного теста, когда пакеты данных направляются от серверной станции клиентской части;
  • -P – параметр позволяет задать, сколько потоков необходимо использовать;
  • -4, —version4 – поддерживать исключительно протокола IPv4;
  • -6, —version6 – применять только IPv6.

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

Copyright

iperf, Copyright (c) 2014-2019, 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.

Script to host a iPerf3 server with Linux (Ubuntu / Debian)

iPerf3 not allow multiple tests to a server => it is necessary to start several iPerf processes for not having the message iperf3: error — the server is busy running a test. try again later
Systemd script to start 41 iPerf3 server (port 9200 to port 9240).
sudo adduser iperf —disabled-login —gecos iperf
sudo nano /etc/systemd/system/iperf3-server@.service

The «Restart = always» allows to restart iperf3 after one hour (RuntimeMaxSec = 3600) to limit the cases of no response or when the iperf3 server has ended abruptly.

sudo systemctl daemon-reload
To activate iperf3 when the server starts up:
for p in $(seq 9200 9240); do sudo systemctl enable iperf3-server@$p ; done

sudo reboot

To view the status and logs of iPerf3 :sudo systemctl status iperf3-server@*
sudo journalctl -u iperf3-server@*

To disable iperf3 when starting the server :for p in $(seq 9200 9240); do sudo systemctl disable iperf3-server@$p ; done

How to Install iPerf on Windows?

You can download iPerf 3.1.3 for Windows from the following link https://iperf.fr/iperf-download.php. If you want to use the iPerf 2.0 – you can get it here. You do not need to install the tool, it is enough to download the iPerf archive and extract it to a local directory on the drive. There are only two files in the archive: and .

There are several iPerf GUI implementations for Windows. For example, Iperf3-Cygwin-GUI or jperf.

The jperf is written on Java (in order to run jperf, the Java VM must be installed on the computer). In addition to graphical form for the CLI interface, Jperf can build graphs bandwidth charts of the communication channel in real time.

To use it, just specify the iPerf server address and run the scan.

There is a separate iPerfAutomate module in the PowerShell Script Gallery that can be used to get network performance metrics from your PowerShell scripts. You can install the module with the command:

Установка ipref

Для начала утилиту iperf следует скачать. Она не входит в сборки Windows, не является частью ОС. Загружают iperf отдельно. Можно скачать здесь, предварительно выбрав требуемую разрядность ОС:

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

Алгоритм следующий:

Запустить Командную строку (в Windows 10 ввести «cmd» в поиске).

Ввести «cd c:/» (если утилита находится на данном диске).

Далее, для использования в качестве клиента, вводится сочетание: «iperf -c -t 30 -i 10». Здесь «t» задает время теста, а «i» – периодичность обновления данных.

Если будет архивный файл дистрибутива iperf, то его перед установкой потребуется распаковать. Иногда необходимо запускать утилиту под учетной записью Администратора. Список доступных команд появится после ввода «dir». Обязательно скачивается наиболее свежая версия ПО. Выбрать «двойку» или «тройку» iperf – решать самому пользователю.

How to use iperf

Once we have iperf, we need to learn how to use it. As we mentioned above, we need to run both server and client. The server will keep listening, accepting client connections. Thus, this is the first thing we need to do. Running the server is as simple as writing in the prompt ( stands for server). The first time you do that, on Windows, it will ask you network permission. Of course, flag the permissions and click Allow access.

Enable network access for iperf.

Once you enable the access, a simple message will appear on the prompt, telling you that the server is ready to accept connections. By default, iperf3 listens on port 5201.

The iperf server ready to accept connections.

Now, we will leave the server be. This server will accept all our connections. However, we will be able to tweak the tests and even pilot the server from the iperf client. That’s where the real deal is.

A simple speed test with iperf

Now, how to use iperf3 to run a simple speed test? You can simply use the command, of course replacing “<server IP>” with the IP of your server. However, we want to have a better test. Thus, we want to give TCP all the time it needs to expand the window size: better to run a test for some more seconds. We can do that with the option, followed by the number of seconds. This will tell iperf3 how long to run the test. Generally, one to two minutes are enough (just to show, we will use 5 seconds). Since our server is running on the same PC, the target IP will be localhost at , but that’s just the case of this demonstration.

If we want to know how to use iperf, we need to know how analyze the output. The standard output is a table with four columns. Furthermore, the last two rows of the table (after the dash line) represent the totals.

  • ID is the ID of the iperf operation
  • Interval is the time span  the row refers to
  • Transfer is the amount of data exchanged between client and server. In the end, speed test is about transferring files and measuring how long it took.
  • Bandwidth is the measured bandwidth

Why don’t we have a single total/summary row? Because we want to see the different performances between sending and receiving. In fact, on the far right of the summary rows, you will see sender and receiver bandwidth. In our case, the sender is the client so it means the upload speed. Instead, receiver means download speed. The two might not be always the same, in case of asymmetric bandwidth.

Other cool options

So far so good. In fact, you know how to use iperf by simply using the commands above. However, you may want to use some options to tweak the measurement at your liking. If you want to know all options, use . Here, we will see the most useful ones.

  • creates N parallel connections, useful to push links to their limit
  • runs in reverse mode: the server will send and the client will receive
  • indicate a limit bandwidth (for example 10k, 5mb, 1gb). The test won’t go much beyond this value, even if the link has higher capacity.
  • generates the output in JSON once the operation finishes, useful if you want to use iperf in scripts.

Try to experiment combining all the options you’d like together. You will achieve enterprise-grade professional bandwidth testing.

Автозапуск сервера (создание сервиса в systemd)

По умолчанию, программу нужно запускать вручную. Если мы хотим, чтобы сервер запускался автоматически и работал как служба systemd, выполняем инструкцию ниже.

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

vi /etc/systemd/system/iperfd.service

Description=iPerf Service
After=network.target

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

WantedBy=multi-user.target

* где 

  • Description — описание юнита;
  • After указывает на юнит, после которого может загружаться наш сервис; 
  • Type — тип службы;  
  • PIDFile — путь к pid файлу, в котором хранится номер процесса; 
  • ExecStart — команда, которую нужно выполнить при старте сервиса (в данном примере запускается iPerf в режиме сервера как демон и создает pid-файл);
  • ExecReload — команда для перезапуска службы; 
  • Restart=always — опция, позволяющая автоматически перезапускать сервис, если он перестанет работать;
  • опция WantedBy=multi-user.target позволяет установить для автозапуска службу в обычном многопользовательском режиме.

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

systemctl daemon-reload

Разрешаем созданный сервис:

systemctl enable iperfd

Запускаем его:

systemctl start iperfd

Проверяем:

systemctl status iperfd

Change between iPerf 2.0.6, iPerf 2.0.7 and iPerf 2.0.8

  • 2.0.6 change set (rjmcmahon@rjmcmahon.com) March 2014 :

    Increase the shared memory for report headers reducing mutex contention. Needed to increase performance. Minor code change that should be platform/os independent

  • 2.0.7 change set (rjmcmahon@rjmcmahon.com) August 2014 :

    • Linux only version which supports end/end latency (assumes clocks synched)
    • Support for smaller report interval (5 milliseconds or greater)
    • End/end latency with UDP (mean/min/max), display in milliseconds with resolution of microseconds
    • Socket read timeouts (server only) so iperf reports occur regardless of no received packets
    • Report timestamps now display millisecond resolution
    • Local bind supports port value using colon as delimeter (-B 10.10.10.1:60001)
    • Use linux realtime scheduler and packet level timestamps for improved latency accuracy
    • Suggest PTP on client and server to synch clocks to microsecond
    • Suggest a quality reference for the PTP grandmaster such as a GPS disciplined oscillator from companies like Spectracom
  • 2.0.8 change set (as of 12 january 2015) :

    • Fix portability, compile and test with Linux, Win10, Win7, WinXP, MacOS and Android
    • Client now requires -u for UDP (no longer defaults to UDP with -b)
    • Maintain legacy report formats
    • Support for -e to get enhanced reports
    • Support TCP rate limited streams (via the -b) using token bucket
    • Support packets per second (UDP) via pps as units, (e.g. -b 1000pps)
    • Display PPS in both client and server reports (UDP)
    • Support realtime scheduler as a command line option (—realtime or -z)
    • Improve client tx code path so actual tx offerred rate will converge to the -b value
    • Improve accuracy of microsecond delay calls (in platform independent manner)
    • (Use of Kalman filter to predict delay errors and adjust delays per predicted error)
    • Display target loop time in initial client header (UDP)
    • Fix final latency report sent from server to client (UDP)
    • Include standard deviation in latency output
    • Suppress unrealistic latency output (-/-/-/-)
    • Support SO_SNDTIMEO on send so socket write won’t block beyond -t (TCP)
    • Use clock_gettime if available (preferred over gettimeofday())
    • TCP write and error counts (TCP retries and CWND for linux)
    • TCP read count, TCP read histogram (8 bins)
    • Server will close the socket after -t seconds of no traffic

See also https://sourceforge.net/projects/iperf2/

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

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

Adblock
detector