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
Примеры использования
Вывести результаты в килобайтах:
$ 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