Тестирование виртуальных машин Linux
Используйте SockPerf для тестирования виртуальных машин.
Установите SockPerf на виртуальных машинах
Выполните приведенные ниже команды на виртуальных машинах Linux (отправителе и получателе), чтобы подготовить их к использованию SockPerf.
Bash -all
Из командной строки bash (предполагается, что Git установлен)
Выполняется медленнее, может занять несколько минут
Команда make install выполняется быстро
Запустите SockPerf на виртуальных машинах
Клиент — предполагается, что IP-адрес сервера — 10.0.0.4
Примечание
В частности, анализ трассировки сбора пакетов (Wireshark/Network Monitor), полученных параллельно от клиента и сервера во время этих тестов, поможет проанализировать снижение производительности. Эти трассировки могут включать потери пакетов, высокую задержку, размер MTU. фрагментация, окно TCP 0, фрагменты неупорядоченного кода и т. д.
Синтаксис и опции 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.
Здесь приведен базовый перечень опций, хотя существуют и другие, которые можно вывести на экран с помощью соответствующей команды.
Версии iperf: iperf2 и iperf3
Утилита Iperf является кроссплатформенной и не требует установки, достаточно скопировать и запустить ее на двух устройствах, пропускную способность сети между которыми нужно оценить. Iperf работает в режиме клиент-сервер. На первом компьютере утилита Iperf запускается в режиме сервера (ожидает трафик от клиента). На втором компьютере Iperf запускается в режиме клиента, начинает генерировать TCP/UDP трафик и выполнять измерение максимальной скорости передачи данных.
На текущий момент есть две независимые ветки iperf, развивающиеся параллельно: iperf2 и iperf3. По большому счету эти две версии iperf совместимы между собой, но используют разные порты по умолчанию. В iperf1/2 это 5001, в iperf3 – 5201.
- iperf2 нужно использовать для параллельных потоков, двунаправленных тестов, а также эта версия официально поддерживается в Windows
- В iperf3 лучше реализовано высокоскоростное тестирование UDP. Код iper3 значительно меньше и лучше оптимизирован.
Остальные отличия не настолько существенны, чтобы специально использовать определенную версию (даже опции запуска у них совпадают). В этой статье мы будем использовать iperf3.
Как проверить скорость Wi-Fi соединения
Проверить скорость Wi-Fi рекомендуется с помощью 2 компьютеров (ноутбуков), подключенных между собой по беспроводной сети. Интернет в этом случае вообще не нужен, так как передача данных будет осуществляться только между ПК (но все данные передаются через роутер).
Самый простой вариант: выполнить копирование файла размером более 1 гигабайта с одного компьютера на другой. Проводник Windows при этом отображает усредненную скорость копирования – это и будет заявленная пропускная способность WiFi одновременно на два потребителя (если её умножить на 2, то получится фактическая скорость ВайФай для одного потребителя).
Почему не следует использовать смартфоны для определения скорости доступа? Потому что у них прием WiFi часто ограничен в 20 – 40 Мбит/с. Встроенный в них накопитель с большей скоростью не записывает данные (исключение – флагманы, у которых устанавливают мощную начинку).
Пример 1
Сервер:
iperf -s ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 85.3 KByte (default) ------------------------------------------------------------
Клиент:
iperf -c 95.169.186.76 ------------------------------------------------------------ Client connecting to 95.169.186.76, TCP port 5001 TCP window size: 16.0 KByte (default) ------------------------------------------------------------ local 77.72.128.66 port 38250 connected with 95.169.186.76 port 5001 Interval Transfer Bandwidth 0.0-10.0 sec 96.3 MBytes 80.5 Mbits/sec
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
Рассмотрим некоторые команды запросов к серверу для проверки скорости соединения.
Использование UDP
iperf3 -c 192.168.0.15 -u
* сам сервер не нужно запускать в UDP-режиме, так как он принимает любые запросы.
Альтернативные порты
Для этого необходимо сначала запустить сервер на нужном порту:
iperf3 -s -p 443
* кстати, можно запустить несколько процессов iperf одновременно, которые будут слушать на разных портах.
* стоит не забывать по настройки брандмауэра. В данном примере понадобиться ввести команды firewall-cmd —permanent —add-port=443/tcp и firewall-cmd —reload.
Теперь можно запускать клиента:
iperf3 -c 192.168.0.15 -p 443
Проверка скорости в течение 30 секунд с интервалами по 2 секунды
iperf3 -c 192.168.0.15 -t 30 -i 2
Несколько параллельных запросов
iperf3 -c 192.168.0.15 -P 3
Отправляем на проверку 3 Гб данных
iperf3 -c 192.168.0.15 -n 3G
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.
Использование
Параметры запуска iperf везде одинаковы, поэтому конкретные действия по запуску на всех возможных системах расписывать не буду.
Для тестирования нам нужны два устройства с установленным iperf и канал между ними.
На одном из них (не важно на каком) запускаем сервер:
На втором запускаем клиент:
Начнется процесс измерения, по умолчанию длительностью 10 сек c выводом промежуточных итогов 1 раз в сек. В конце будет показан усредненный результат за все время измерения.
Для увеличения длительности измерения, запускаем клиент добавив параметр -t
Для измерения в обратном направлении запускаем клиент добавив параметр -R
Все ключи запуска 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
Проверка с помощью утилит
Можно проверять пропускную способность канала с помощью стандартных утилит. Этот метод хорошо подойдет, если Вам надо примерно оценить качество связи между двумя компьютерами.
Для этого подойдет кросс-платформенная утилита iperf. На одном компьютере запускается сервер с помощью команды «iperf –s», после этого, на другом компьютере запускается клиент «iperf –c server_ip». Утилита проводит тестирование и выводит результаты: время в секундах с момента начала тестирования, количество переданных байт, скорость передачи.
Сейчас актуальна 3-я версия. Если Вы пользователь Windows, то скачиваем утилиту и запускаем из командной строки. На одном компьютере сервер «iperf3.exe –s». На втором клиент. Вот так выглядит лог вывода, если не задавать дополнительных опций:
С помощью ключей можно настроить протокол передачи (TCP/UDP, а в 3-ей версии и SCTP). Можно провести тестирование не только передачи данных от клиента к серверу, но и в обоих направлениях. Есть возможность выбора портов, на которых будет запускаться сервер.
Недостаток такого тестирования – это в первую очередь то, что тестирование проводится на 4 уровне модели OSI, то есть фиксируются только данные, переданные по TCP/UDP, без учета ip заголовков и управляющих пакетов. Оператор связи, в свою очередь, обычно гарантирует пропускную способность канала связи, включая IP заголовки.
Так как выполняется такое тестирование с использованием компьютера, то в любой момент может запуститься какое-нибудь приложение или служба и повлиять на результаты тестирования.
Виды и версии 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 активно (хотя и независимо) разрабатываются. Я рекомендуем ознакомиться с обоими инструментами и использовать те функции, которые лучше всего соответствуют вашим потребностям.
Установка
Iperf имеется в двух мажорных версиях — 2 и 3, лучше использовать последнюю. Версия 3 поддерживает все функции версии 2, за исключением двунаправленного теста (а надо ли оно?), подробно почитать о различиях между версиями можно на сайте
Для windows скачиваем версию в соответствии с разрядностью вашей системы, распаковываем содержимое архива в папку, в которую потом будет удобно переходить в командной строке, например C:iperf
Для android имеется два варианта доступные в play market: Magic Iperf и пакет сетевых утилит HE.NET Network Tools (обе программы имеют в своем составе iperf версии 2 и 3)
Для iOS HE.NET Network Tools (в составе iperf версии 2 и 3)
Для macOS также имеются исполняемые файлы, скачиваем там же
Для любителей Docker также есть образ на dockerhub — networkstatic/iperf3
Инсталляция iPerf
В большинстве случаев достаточно установить серверную часть приложения локально на «местный» сервер или удаленно на виртуальную машину, а затем подключиться к ней практически с любого компьютера, находящегося в общей ИТ-инфраструктуре. Программа бесплатная, имеет версии под платформы Linux и Windows.
Последние версии дистрибутивов доступны по адресам:
- Linux, Unix – https://github.com/esnet/iperf/releases
- Windows – https://sourceforge.net/projects/iperf2/files/
Инсталляция в Ubuntu и Debian осуществляется командой:
$ sudo apt install iperf3
В операционных системах CentOS и Fedora она выглядит иначе:
$ sudo dnf install iperf3
Перед первым запуском рекомендуется принудительно открыть необходимые порты в брандмауэре, чтобы утилита наверняка заработала. По умолчанию протоколы TCP и UDP используют порт 5201. Выполняется открытие командой:
$ firewall-cmd --permanent --add-port=5201/tcp $ firewall-cmd --permanent --add-port=5201/udp $ firewall-cmd –reload
Работать с программой придется в консоли, но особых затруднений это не вызывает, потому что синтаксис и перечень команд относительно просты. Например, запуск серверной части выполняется командой:
$ iperf –s
На экране появится сообщение Server listening on 5201. Оно означает, что сервер ждет запросов от клиентов (программа остается активной вплоть до перезагрузки операционной системы).
Клиентская часть, если речь идет о рабочих местах на Linux, работает аналогичным образом. Запускаемый файл всего один, различаются только префиксы и параметры вроде IP-адреса.
$ iperf -c 192.168.0.100
В приведенном примере программа будет обращаться к серверу, доступному по IP 192.168.0.100. После буквы -s или -c допускается ввод дополнительных команд, уточняющих задачу и позволяющих сохранить результаты в текстовом файле или вручную указать нестандартный порт.
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 | Localization | Data center | Hosting | Speed | Port | IP version | Contact |
---|---|---|---|---|---|---|---|
iperf.par2.as49434.net | FranceÎle-de-France | DC Harmony Hosting | 40 Gbit/s | 9200 TCP/UDPto9240 TCP/UDP | IPv4 and IPv6 | @g_marsot | |
paris.testdebit.infolille.testdebit.infolyon.testdebit.infoaix-marseille.testdebit.infobordeaux.testdebit.info | France ParisFrance LilleFrance LyonFrance Aix-en-ProvenceFrance Bordeaux | Data centersBouyguesTelecom | 10 Gbit/s10 Gbit/s10 Gbit/s10 Gbit/s10 Gbit/s | 9200 TCP/UDPto9240 TCP/UDP | IPv4 and IPv6 | @lafibreinfo | |
speed.as208196.net | FranceÎle-de-France | Moji1Nanterre | 10 Gbit/s | 5200 TCP/UDPto5209 TCP/UDP | IPv4 or IPv6 | @DorianGaliana | |
ping.online.netping6.online.netping-90ms.online.netping6-90ms.online.net | FranceÎle-de-France | ScalewayVitry DC3 | 10 Gbit/s | 5200 TCP/UDPto5209 TCP/UDP | IPv4 or IPv6 | ||
speedtest.serverius.net(Port 5002: add -p 5002) | Netherlands | Serveriusdata center | 10 Gbit/s | 5002 TCP/UDP | IPv4 and IPv6 | @serveriusbv | |
ch.iperf.014.fr | SwitzerlandZurich | HostHatchdata center | 1 Gbit/s | 18815 TCP/UDPto18820 TCP/UDP | IPv4 only | @014_fr | |
iperf.eenet.ee | Estonia | EENet Tartu | 5201 TCP/UDP | IPv4 only | @EENet_HITSA | ||
iperf.astra.in.ua | UkraineLviv | Astra Lviv | 10 Gbit/s | 5201 TCP/UDPto5206 TCP/UDP | IPv4 and IPv6 | noc@astra.in.ua | |
iperf.volia.net | Ukraine | Volia Kiev | 5201 TCP/UDP | IPv4 only | @voliaofficial | ||
iPerf3 server | Localization | Data center | Hosting | Speed | Port | IP version | Contact |
speedtest.uztelecom.uz | UzbekistanTashkent | Infosystems | 10 Gbit/s | 5200 TCP/UDPto5209 TCP/UDP | IPv4 and IPv6 | @KhurshidSuyunov | |
iperf.it-north.net | Kazakhstan | Petropavl | 1 Gbit/s | 5200 TCP/UDPto5209 TCP/UDP | IPv4 only | Brauninger A.F. | |
iperf.biznetnetworks.com | Indonesia | Biznet — MidplazaCimanggis | 1 Gbit/s | 5201 TCPto5203 TCP | IPv4 and IPv6 | Biznet Networks | |
iPerf3 server | Localization | Data center | Hosting | Speed | Port | IP version | Contact |
speedtest-iperf-akl.vetta.online | New ZealandAuckland | Vetta OnlineAuckland | 10 Gbit/s | 5200 TCPto 5209 TCP | IPv4 only | contact | |
iPerf3 server | Localization | Data center | Hosting | Speed | Port | IP version | Contact |
iperf.scottlinux.com | USACalifornia | HurricaneFremont 2 | 1 Gbit/s | 5201 TCP/UDP | IPv4 and IPv6 | @scottlinux | |
iperf.he.net | USACalifornia | HurricaneFremont 1 | 5201 TCP/UDP | IPv4 and IPv6 | HE forums |
To add / remove a public iPerf3 server, please report them to @lafibreinfo
Общие рекомендации
Ниже приведены общие рекомендации по использованию TTCP для измерения пропускной способности IP-пути.
Для получения значимых результатов узлы, на которых работает TTCP, должны иметь достаточно процессорной мощности относительно скорости канала. Это применимо, если скорость канала равна 45 кбит/с, а узлами являются простаивающий сервер доступа AS5300 и компьютер 700 МГц. Это неприменимо, если каналом является сеть 100baseT, а один из узлов — маршрутизатор 2600.
Cisco IOS воспринимает данные, поступающие с маршрутизаторов, иначе, чем данные, передаваемые через маршрутизатор. Несмотря на то, что в этом примере сжатие MPPC было согласовано на проверяемом канале, передаваемые маршрутизатором данные не сжимались программно, в отличие от данных, передаваемых компьютером. Поэтому пропускная способность восходящего канала была значительно выше пропускной способности нисходящего канала. При проверке производительности каналов с высокими пропускными способностями всегда следует проверять данные, передаваемые через маршрутизаторы
Для IP-путей с большим продуктом задержки в полосе пропускания * важно использовать размер TCP-окна, достаточный для заполнения канала. При использовании модемных каналов достаточно наличие окна, равного 4 КБ
Можно увеличить размер окна TCP в IOS с помощью команды ip tcp window-size. Обратитесь к соответствующей документации для систем с ОС, отличной от Cisco IOS.
Другим простым способом проверки пропускной способности модемного канала является использование программного средства с открытым исходным текстом Through-Putter . Установите это программное средство на веб-сервере за серверами доступа и попытайтесь открыть программное средство Java в браузере на клиентских компьютерах Windows. Затем можно быстро определить скорость передачи данных по модемному подключению. Эта программа проверки пропускной способности модемного канала является программным средством с открытым исходным текстом и не поддерживается Центром технической поддержки Cisco. Инструкции по установке и использованию см. в файле Readme, который предоставлен вместе с программным средством.
Основные возможности Iperf3
iperf3 — это полностью обновленная программа, не имеющая ничего общего с iperf2, поскольку они несовместимы друг с другом. iperf3 наследует лучшее от iperf2 и включает новые функции, позволяющие без проблем выполнять измерения на мультигигабитных скоростях. Для каждого теста, который мы проводим, он будет информировать нас о пропускной способности загрузки и выгрузки, потере пакетов и других параметрах.
Что касается протоколов TCP и SCTP, он может измерять пропускную способность, сообщать размер MTU (максимальный размер передаваемого сигнала) и MSS (максимальный размер сегмента), кроме того, он также поддерживает настройку размера окна TCP через сокет. буфер. Что касается UDP, клиент может создавать различные потоки данных UDP, позволяет измерять потерю пакетов, джиттер (дрожание задержки) и даже поддерживает многоадресную рассылку. Клиент позволяет устанавливать несколько одновременных подключений к серверу, кроме того, сервер может принимать несколько одновременных подключений из нескольких разных источников. Конечно, мы можем запустить его в течение определенного времени или определить определенный объем данных для отправки.
Другими важными особенностями iperf3 являются возможность периодически показывать состояние подключения, текущую пропускную способность, джиттер, потерю пакетов и т. Д. Мы также можем заставить сервер iperf работать как демон в операционной системе. Другие новые функции включают возможность игнорирования TCP Slowstart из самого протокола TCP, установку полосы пропускания для UDP или TCP, установку метки потока для IPv6, настройку алгоритма управления перегрузкой и возможность получения всей информации в формате JSON, и мы даже можем проводить тесты чтения и записи прямо на жесткий диск.
Эта новая программа iperf3 лицензирована BSD, что означает, что она является кроссплатформенной и с открытым исходным кодом, она совместима с Windows, Linux, Android, MacOS X, FreeBSD, OpenBSD, NetBSD, VxWorks, операционные системы Solaris и многие другие.
Iperf – утилита для тестирования пропускной способности сети.
Наткнулся на интересную статью про утилитку для тестирования пропускной способности сети. Имеется одно приложение, крайне зависимое от всё этой фигни, и каким то образом надо протестить и найти слабое место. Для начала просто опубликую статью, а потом сам напишу небольшой обзор, с тестом. Понеслась.
Как поступить, если необходимо произвести нагрузочное тестирование канала связи, маршрутизатора и при этом остаться при своих деньгах? Не знаете? Спросите меня :). Выход есть.
Заходим на сайт http://dast.nlanr.net/projects/Iperf/ (для линуксоидов http://www.netperf.org/) и скачиваем утилиту iperf (для Linux качаем netperf). Сразу замечу, что обе утилиты используют один и тот же протокол связи, и поэтому вполне возможно запустив сервер под Linux, генерировать трафик клиентом под Windows.
Внимание! Утилита работает под Windows 2000 и выше. Возможно, она запустится и под NT, но достоверных сведений об этом не обнаружено, а сам я не проверял ввиду отсутствия доступа к последней
В комплект утилиты входит документация, в которой расписаны ключики для запуска исполняемого файла. Всё довольно подробно, поэтому я здесь расскажу о примерах использования 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).
Взято с берлоги инженера
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 может обрабатывать только одно подключение одновременно на порту. Поэтому, в условиях публичного использования необходим его запуск на множестве портов одновременно.
В официальной документации это предлагается делать скриптом:
#!/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. Для публичного сервера лучше создать побольше.