Iperf - измеряем пропускную способность опорной сети

Продолжим рассматривать тему измерения пропускной способности сети. Speedtest - это, конечно, хорошо, как-никак удобный интерфейс, визуально все понятно и доступно. Но мало функционала, к тому же дает погрешности. Поэтому для более детального тестирования использую утилиту iperf - мощный генератор UDP и TCP трафика. Функционал данной утилиты довольно богат. Но о возможностях - немного позже.

Итак, приступаем к установке. Iperf находится в /usr/ports/benchmarks/iperf/.

# cd /usr/ports/benchmarks/iperf/
# make install clean

Поддержку IPv6 отключаю, а вот поддержка тредов пригодится.

Options for iperf 2.0.4

[ ] IPV6     Enable support to IPv6
[X] THREADS  Enable threads support

Устанавливаем iperf на двух компьютерах, между которыми хотим протестировать пропускную способность. Схема тестирования следующая:

 

 

Самый простой вариант тестирования:

1. На сервере запускаем iperf с ключем "-s"

# iperf -s

------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 64.0 KByte (default)
------------------------------------------------------------

2. На клиенте выполняем запуск со следующими параметрами:

# iperf -c адресс_iperf-сервер

Это все :)

На протяжении 10 секунд между этими хостами будет ити обмен трафиком, потом чего соединение будет разорвано и будет выведена статистика:

# iperf -c muff.kiev.ua
------------------------------------------------------------
Client connecting to muff.kiev.ua, TCP port 5001
TCP window size: 32.5 KByte (default)
------------------------------------------------------------
[  3] local 193.227.x.x port 49825 connected with 195.3.159.250 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  90.5 MBytes  75.9 Mbits/sec

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

Пример:

# iperf -c muff.kiev.ua -t 25 -i 5 -u
------------------------------------------------------------
Client connecting to muff.kiev.ua, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size: 9.00 KByte (default)
------------------------------------------------------------
[  3] local 193.227.x.x port 58437 connected with 195.3.159.250 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 5.0 sec    630 KBytes  1.03 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  3]  5.0-10.0 sec    640 KBytes  1.05 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  3] 10.0-15.0 sec    639 KBytes  1.05 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  3] 15.0-20.0 sec    642 KBytes  1.05 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  3] 20.0-25.0 sec    642 KBytes  1.05 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-25.0 sec  3.12 MBytes  1.05 Mbits/sec
[  3] Sent 2225 datagrams
[  3] Server Report:
[ ID] Interval       Transfer     Bandwidth       Jitter   Lost/Total Datagrams
[  3]  0.0-25.0 sec  3.12 MBytes  1.05 Mbits/sec  0.159 ms    0/ 2224 (0%)
[  3]  0.0-25.0 sec  1 datagrams received out-of-order

Также есть возможность изменять длину пакета.

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

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

Пример:

# iperf -u -c muff.kiev.ua -l 100 -b 20k -t 20
------------------------------------------------------------
Client connecting to muff.kiev.ua, UDP port 5001
Sending 100 byte datagrams
UDP buffer size: 9.00 KByte (default)
------------------------------------------------------------
[  3] local 193.227.x.x port 52923 connected with 195.3.159.250 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-20.1 sec  48.9 KBytes  20.0 Kbits/sec
[  3] Sent 501 datagrams
[  3] Server Report:
[ ID] Interval       Transfer     Bandwidth       Jitter   Lost/Total Datagrams
[  3]  0.0-20.1 sec  48.9 KBytes  20.0 Kbits/sec  0.052 ms    0/  500 (0%)
[  3]  0.0-20.1 sec  1 datagrams received out-of-order

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

Можно также указать обьем трафика, который необходимо передать. Для этого используем ключ "-n size".

Пример:

# iperf -c muff.kiev.ua -n 500m -i 5s
------------------------------------------------------------
Client connecting to muff.kiev.ua, TCP port 5001
TCP window size: 64.5 KByte (default)
------------------------------------------------------------
[  3] local 193.227.x.x port 50571 connected with 195.3.159.250 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 5.0 sec  46.9 MBytes  78.6 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  3]  5.0-10.0 sec  46.4 MBytes  77.9 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  3] 10.0-15.0 sec  40.2 MBytes  67.5 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  3] 15.0-20.0 sec  46.6 MBytes  78.1 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  3] 20.0-25.0 sec  47.1 MBytes  79.1 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  3] 25.0-30.0 sec  43.2 MBytes  72.4 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  3] 30.0-35.0 sec  50.0 MBytes  83.9 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  3] 35.0-40.0 sec  47.2 MBytes  79.1 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  3] 40.0-45.0 sec  42.7 MBytes  71.6 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  3] 45.0-50.0 sec  43.9 MBytes  73.6 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  3] 50.0-55.0 sec  43.4 MBytes  72.8 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-55.2 sec    500 MBytes  75.9 Mbits/sec

И это только часть возможных опций! Более детально ознакомиться с возможностями iperf можно на страницах man-руководства. 

В итоге, как видим, iperf дает намного больше возможностей, нежели speedtest. Кстати, существует также версия для Windows-систем (утилита работает в командной строке).


Источник статьи