Продолжим рассматривать тему измерения пропускной способности сети. Speedtest - это, конечно, хорошо, как-никак удобный интерфейс, визуально все понятно и доступно. Но мало функционала, к тому же дает погрешности. Поэтому для более детального тестирования использую утилиту iperf - мощный генератор UDP и TCP трафика. Функционал данной утилиты довольно богат. Но о возможностях - немного позже.
Итак, приступаем к установке. Iperf находится в /usr/ports/benchmarks/iperf/.
# cd /usr/ports/benchmarks/iperf/ |
Поддержку IPv6 отключаю, а вот поддержка тредов пригодится.
Options for iperf 2.0.4 [ ] IPV6 Enable support to IPv6 [X] THREADS Enable threads support |
Устанавливаем iperf на двух компьютерах, между которыми хотим протестировать пропускную способность. Схема тестирования следующая:
Самый простой вариант тестирования:
1. На сервере запускаем iperf с ключем "-s"
# iperf -s ------------------------------------------------------------ |
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-систем (утилита работает в командной строке).