Статья

Измерение пропускной способности вашей Wi-Fi и Ethernet сети с помощью iPerf

Что такое iPerf?

IPerf это кроссплатформенная клиент-серверная утилита которая позволяет производить замеры пропускной способности каналов. Клиент-серверная утилита подразумевает под собой, что для проверки скорости между двумя устройствами необходимо будет запустить iperf на одном в режиме «сервер», а на другом в режиме «клиент». Скорость измеряется в направлении от клиента к серверу, т.е. если вы на своем компьютере запустили iperf в режиме «клиент», то результатом будет «исходящая» скорость. Чтобы измерить входящую, небоходимо поменять местами клиент и сервер, либо воспользоваться специальным ключем к команде запуска клиента (описание ключей ниже). Важно отметить, что генерирует трафик только клиентская часть.

Зачем так сложно, если есть speedtest?

Сервис speedtest.net — измеряет ширину вашего интернет канала до некого выбранного сервера. В случае когда вы хотите измерить производительность вашей локальной сети, этот вариант не подходит, так как данный сервис измеряет всю линию до определенного сервера, и узкое горлышко может быть на любом ее участке.

Установка

Официальный сайт iPerf -  http://software.es.net/iperf/, там есть только исходники, но в разделе Binary Distributions есть ссылка на отдельный сайт https://iperf.fr/, где можно скачать установочные пакеты и исполняемые файлы для всех поддерживаемых систем.

Iperf имеется в двух мажорных версиях - 2 и 3, лучше использовать последнюю. Версия 3 поддерживает все функции версии 2, за исключением двунаправленного теста (а надо ли оно?), подробно почитать о различиях между версиями можно на сайте

Для linux самый простой способ - установка из репозитория, запустив стандартную инсталляционную команду для вашего дистрибутива, например для debian/ubuntu это:

apt install iperf3

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

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

Для тестирования нам нужны два устройства с установленным iperf и канал между ними.

На одном из них (не важно на каком) запускаем сервер:

iperf3 -s

На втором запускаем клиент:

iperf3 -c <ip адрес сервера>

Начнется процесс измерения, по умолчанию длительностью 10 сек c выводом промежуточных итогов 1 раз в сек. В конце будет показан усредненный результат за все время измерения. 

Для увеличения длительности измерения, запускаем клиент добавив параметр -t <длительность в сек>

Для измерения в обратном направлении запускаем клиент добавив параметр -R

Примеры использования

Пример 1 - чистый Ethernet

Замер между стационарным ПК и моим файловым сервером, подключение проводной гигабит, через гигабитный свич:

Пример 2 - Ethernet - Wi-Fi

Но интересней измерить пропускную способность wi-fi сети. Лучшим способом для этого будет использование одного устройства подключенного проводом к вашему свичу/роутеру (например ПК/ноутбук с гигабитным портом или raspberry pi 3b+) и второго, подключенного по wi-fi (например ноутбук или смартфон).

В моем случае у роутера Xiaomi Mi Router3  проводные интерфейсы только 10/100BaseT, поэтому логично будет запустить сервер прям на роутере (иначе измерение упрется в скорость проводного интерфейса), на прошивке padavan установить iperf можно без проблем командой "opkg install iperf3", клиент на android смартфоне:

Пример 3 - Wi-Fi - Wi-Fi

Даже для android tv нашелся iperf, программа называется analiti, измерил скорость между приставкой Xiaomi MiBox3 и смартфоном через роутер:

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

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

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

Общие:

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

-f, --format [kmgKMG]  формат отчёта: 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 #[KMG][/#]  задать пропускную способность в бит/сек (по умолчанию без ограничений для TCP и 1 Мбит/сек. для UDP)

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

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

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

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

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

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

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

 -w, --window #[KMG]  размер 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  выводить результаты серверной части


Вернуться назад
Вернуться назад