iperf в Debian - тест скорости сети

Утилита iperf используется для измерения пропускной способности сети. С помощью iperf можно тестировать пропускную способность как протокола TCP, так и протокола UDP. Для осуществления тестирования пользователь должен запустить как серверную часть (для приема и отбрасывания трафика), так и клиентскую (для генерирования трафика). Мы будем говорить об iperf версии 2 в Debian Linux.

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

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

Установка утилиты iperf в Debian

aptitude install iperf

Запуск серверной части

iperf -s

После выполнения команды сервер iperf будет слушать на всех сетевых интерфейсах на порте 5001.

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

iperf -s -D

Однако в таком случае, как было сказано выше, iperf будет слушать на всех интерфейсах. Лучшим решением будет запустить сервер на определенном адресе:

iperf -s -D -B ip.ad.dre.ss

Запуск клиентской части

iperf -c <host>

После выполнения этой команды iperf инициализирует соединение на указанный адрес (ip-адрес или доменное имя) на порт 5001 и начнется тестирование.

Протокол UDP

По умолчанию используется протокол TCP. Если вы хотите использовать протокол UDP, то необходимо добавить параметр -u:

iperf -u -s -D -B ip.ad.dre.ss

и

iperf -u -c <host>

Пример результата тестирования скорости сети

$ iperf -c 192.168.0.2 -t 60
————————————————————
Client connecting to 192.168.0.2, TCP port 5001
TCP window size:  129 KByte (default)
————————————————————
[  4] local 192.168.0.30 port 49333 connected with 192.168.0.2 port 5001
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-60.0 sec  1.36 GBytes   195 Mbits/sec

Общие параметры

-f, --format - задает в каких единицах будет выдан результат: килобиты (k), мегабиты (m), килобайты (K), мегабайты (M).
-i, --interval n - задает паузу в n секунд между периодическими сообщениями о пропускной способности.
-l, --len n[KM] - устанавливает длину буфера чтения/записи в n (по умолчанию, 8 килобайт).
-o, --output - вывести отчет или сообщение об ошибке в указанный файл.
-p, --port n - использовать порт n (по умолчанию, 5001) на сервере на котором слушать/к которому подключаться.
-u, --udp - использовать протокол UDP вместо TCP.
-w, --window n[KM] - размер TCP окна.
-B, --bind - привязка к хосту, интерфейсу или мультикастовому адресу.
-C, --compatibility - для совместимости с более старыми версиями.
-M, --mss n - задает максимальный размер сегмента TCP (MTU - 40 байт).
-N, --nodelay - включает TCP no delay (отключает алгоритм Нагла).
-v, --version - отобразить информацию о версии и выйти.
-V, --IPv6Version - использовать IPv6.
-x, --reportexclude - убрать часть информации из отчета: C(connection), D(data), M(multicast), S(settings), V(server).
-y, --reportstyle C|c - вывести данные в формате CSV.

Параметры, относящиеся к серверу

-s, --server - запустить в режиме сервера.
-U, --single_udp - запустить в однопоточном режиме UDP.
-D, --daemon - запустить сервер в качестве демона.

Параметры, относящиеся к клиенту

-b, --bandwidth n[KM] - установить целевую пропускную способность в n бит/сек (по умолчанию, 1 мегабит в секунду).Этот параметр требует, чтобы использовался UDP (-u).
-c, --client - запуск в режиме клиента с подключением к .
-d, --dualtest - провести тест передачи данных в обе стороны одновременно.
-n, --num n[KM] -количество байт для передачи во время теста скорости сети (вместо -t).
-r, --tradeoff - провести тест передачи данный в обе стороны по отдельности.
-t, --time n - время передачи данных в секундах (по умолчанию, 10 секунд).
-F, --fileinput - взять данные для передачи из файла.
-I, --stdin - взять данные для передачи со стандартного входа.
-L, --listenport n - порт для получения данных в случае двустороннего теста.
-P, --parallel n - количество параллельных клиентских процессов.
-T, --ttl n - время жизни, для мультикаста (по умолчанию, 1).
-Z, --linux-congestion - включить алгоритм TCP перегрузки (только Linux).

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

Вывести результаты в килобайтах:

$ iperf -c 192.168.0.2 -f K
------------------------------------------------------------
Client connecting to 192.168.0.2, TCP port 5001
TCP window size:  129 KByte (default)
------------------------------------------------------------
[  4] local 192.168.0.30 port 58252 connected with 192.168.0.2 port 5001
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  173440 KBytes  17315 KBytes/sec

Передавать данные в течение 20 секунд и отображать результаты теста скорости сети каждые 5 секунд:

$ iperf -c 192.168.0.2 -t 20 -i 5
------------------------------------------------------------
Client connecting to 192.168.0.2, TCP port 5001
TCP window size:  129 KByte (default)
------------------------------------------------------------
[  4] local 192.168.0.30 port 58319 connected with 192.168.0.2 port 5001
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0- 5.0 sec  94.2 MBytes   158 Mbits/sec
[  4]  5.0-10.0 sec  83.9 MBytes   141 Mbits/sec
[  4] 10.0-15.0 sec  83.9 MBytes   141 Mbits/sec
[  4] 15.0-20.0 sec  77.8 MBytes   130 Mbits/sec
[  4]  0.0-20.0 sec   340 MBytes   142 Mbits/sec

Использовать no delay и не отображать информацию о соединении, мультикасте, настройках:

$ iperf -c 192.168.0.2 -N -x CMS
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec   216 MBytes   182 Mbits/sec

Протестировать передачу данных в обе стороны одновременно, использовать no delay и запустить два клиентских процесса:

$ iperf -c 192.168.0.2 -N -d -P 2
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size:  128 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to 192.168.0.2, TCP port 5001
TCP window size:  129 KByte (default)
------------------------------------------------------------
[  5] local 192.168.0.30 port 58577 connected with 192.168.0.2 port 5001
[  6] local 192.168.0.30 port 58578 connected with 192.168.0.2 port 5001
[  7] local 192.168.0.30 port 5001 connected with 192.168.0.2 port 48344
[  8] local 192.168.0.30 port 5001 connected with 192.168.0.2 port 48345
[ ID] Interval       Transfer     Bandwidth
[  5]  0.0-10.0 sec  90.4 MBytes  75.5 Mbits/sec
[  6]  0.0-10.1 sec  90.8 MBytes  75.5 Mbits/sec
[SUM]  0.0-10.1 sec   181 MBytes   151 Mbits/sec
[  7]  0.0-10.2 sec  26.4 MBytes  21.7 Mbits/sec
[  8]  0.0-10.2 sec  21.4 MBytes  17.6 Mbits/sec
[SUM]  0.0-10.2 sec  47.8 MBytes  39.3 Mbits/sec

То же самое, но выдавать результат в формате CSV:

$ iperf -c 192.168.0.2 -N -d -P 2 -y c
20160117214333,192.168.0.30,58537,192.168.0.2,5001,6,0.0-10.0,109445120,87428886
20160117214333,192.168.0.30,58536,192.168.0.2,5001,5,0.0-10.0,109838336,87536140
20160117214333,192.168.0.30,0,192.168.0.2,5001,-1,0.0-10.0,219283456,174758906
20160117214340,192.168.0.30,5001,192.168.0.2,48340,8,0.0-10.1,132120576,104149743
20160117214340,192.168.0.30,5001,192.168.0.2,48342,7,0.0-10.2,122683392,96562651
20160117214340,192.168.0.30,0,192.168.0.2,0,-2,0.0-10.2,254803968,200553199
Сие опубликовал в день года в разделах benchmark, shell, iperf, network

Наверх