В своей статье «Сравнение производительности маршрутизаторов доступа» мы вскользь останавливались на методике тестирования пропускной способности. Там для генерации тестового трафика использовался Smart Bits — штука, выполненная в железе, мощная и безумно дорогая.
А как поступить, если необходимо произвести нагрузочное тестирование канала связи, маршрутизатора и при этом остаться при своих деньгах? Не знаете? Спросите меня . Выход есть.
Заходим на сайт http://dast.nlanr.net/projects/Iperf/ (для линуксоидов http://www.netperf.org/) и скачиваем утилиту iperf (для Linux качаем netperf). Сразу замечу, что обе утилиты используют один и тот же протокол связи, и поэтому вполне возможно запустив сервер под Linux, генерировать трафик клиентом под Windows.
Внимание! Утилита работает под Windows 2000 и выше. Возможно, она запустится и под NT, но достоверных сведений об этом не обнаружено, а сам я не проверял ввиду отсутствия доступа к последней.
В комплект утилиты входит документация, в которой расписаны ключики для запуска исполняемого файла. Всё довольно подробно, поэтому я здесь расскажу о примерах использования iperf и особенностях работы с ним.
Прежде всего, нам необходимы два компьютера. Одини из них будет генерировать трафик, он называется клиентом, а другой — принимать пакеты и вести подсчёт статистики, он называется сервером. На обоих машинах запускается один и тот же исполняемый файл, но с разными ключами.
Теперь примеры.
Проверка на TCP трафике.
Сервер
iperf -s
Клиент
iperf -c server_host
Здесь server_host — адрес машины, на которой запущен iperf в режиме сервера. Вот, собственно и всё. Сначала запускаем сервер, затем клиент, и в течение 10 секунд между ними будет идти трафик, после чего соединение будет разорвано и выведена статистика.
Чтобы увеличить продолжительность соединения, необходимо добавить в строку запуска клиента параметр -t nsec, где nsec — продолжительность соединения в секундах.
Не менее полезным будет ключик -i nsec. Здесь nsec соответствует периоду (в секундах, естественно), через который будет выводиться статистика.
Проверка на UDP трафике.
Для запуска iperf в режиме UDP необходимо добавить и клиенту и серверу ключи -u.
Протокол UDP более «тупой», что даёт нам как некоторые преимущества, так и недостатки. Впрочем, для целей тестирования, недостатки опять-таки превращаются в преимущества.
Итак, что мы можем:
- менять длину передаваемых пакетов
- менять полосу передаваемого трафика
- работать на односторонних каналах
- использовать iperf без запуска сервера, если канал не сквозной, а необходимо просто генерировать заданный трафик для нагрузки
Для изменения длины пакета используется ключ -l length. Следует только помнить, что при length=0 реальная длина Ethernet-фрейма будет составлять 54 байта и делать в своих расчётах соответствующую поправку.
Для изменения полосы трафика используется ключ -b bandwidth. Параметр bandwidth выражается в битах в секунду и может содержать десятичную точку и суффиксы k и M, соответствующие приставкам кило- и мега-.
При работе на односторонних каналах следует помнить, что клиент в таких случаях статистику не отображает и при завершении сессии выводит сообщение об ошибке, которое можно с покойно проигнорировать.
Запуск нескольких потоков трафика.
Мы можем запустить несколько экземпляров клиентов и серверов на одной и той же машине. Для развязки трафика используется назначение разных портов при помощи параметра -p port его значение на клиенте и соответствую щем сервере должно быть одинаковым (по умолчанию, он имеет значение 5001).
Практика показала, что при запуске нескольких клиентов на одной машине, iperf захватывает практически все ресурсы ЦП, из-за чего в некоторых потоках возможно пропадание пакетов. Здесь, видимо, имеется некая ошибка в коде, вызывающая некорректную работу при context switching. Всё вышеуказанное справедливо для iperf. Netperf работает под Linux вполне корректно.
В файлах помощи вы найдёте ещё параметр -S, позволяющий устанавливать значение Type Of Servise (TOS) в IP заголовке. Вынужден вас разочаровать, под Windows это не работает. (Что характерно, я не смог установить это поле и в стандартном ping для Windows).
Остаётся только пожелать вам удачного тестирования. За другими бесплатными прогаммами заходите на страничку Бесплатные программы, которые мы выбираем
Для включения установки ToS в windows надо выполнить следующее:
—————
Follow these steps to enable the IP_TOS option for the Winsock setsockopt
function and the -v option for the ping utility on Windows 2000:
1. Start Registry Editor (Regedt32.exe).
2. Go to the following key:
HKEY_LOCAL_ MACHINE on Local
Machine\System\CurrentControlSet\Services\Tcpip\Parameters\
NOTE: The registry key is one path.
3. On the Edit menu, click Add Value, and then type DisableUserTOSSetting.
Click
REG_DWORD in the Data Type box, and then click OK.
4. Enter 0 in the prompt box.
5. Quit Registry Editor, and then restart the computer.
==========
Удачи…
11.05.2006 @ 13:12
Спасибо! Будем пробовать.
11.05.2006 @ 13:38
> 5. Quit Registry Editor, and then restart the computer.
Ага, щаззз, 30 раз тебе ребутом по интерфейсу…. In RealTime ПЛИЗ !!!
01.09.2007 @ 0:05
Реестр винды редко позволяет изменять параметры реестра в реалтайм ибо работает с зеркалом реестра и большинство изменений в значимых параметрах принимает к сведению после ребута.
27.11.2007 @ 10:45
iperf -c 192.168.17.195 -d
[1864] local 192.168.17.198 port 3991 connected with 192.168.17.195 port 5001
[1840] local 192.168.17.198 port 5001 connected with 192.168.17.195 port 3157
[ ID] Interval Transfer Bandwidth
[1840] 0.0-10.0 sec 69.5 MBytes 58.3 Mbits/sec
[1864] 0.0-10.0 sec 97.4 MBytes 81.6 Mbits/sec
Как понять, какая строчка отвечает за исходящий тарфик, а какая за вход. по отношению к клиенту?
10.12.2007 @ 12:26
Если мне память не изменяет, то по-умолчанию сервер слушает 5001 порт. То есть в данном случае строчка 1864 будет про исходящий трафик, а 1840 — про входящий (для хоста 192.168.17.198)
10.12.2007 @ 12:37
iperf -uc 192.168.0.1 -t10 — не генерит ничего, сразу ошибку выдает, можетя не то указал. Создал страничку на wiki страничку на wiki. Всем желающим — править.
31.07.2008 @ 9:52
Ключики должны быть записаны раздельно, то есть -uc должно быть как -u -c
Параметры тоже сливать с ключиками не рекомендуется -t10 будет -t 10
После этих исправлений должно наступить счастье
31.07.2008 @ 10:00
Спасибо за оперативность, но счастья, к сожалению, мне это не прибавило — не работат, тут же ошибку выдает.
31.07.2008 @ 10:07
Давайте подробный лог всего, что написано на экране, попробую разобраться.
31.07.2008 @ 10:38
Прошу прощения, не сказал, речь идет о бессерверном запуске.
[root@firewall ~]# iperf -u -c 192.168.0.112 -t 180
————————————————————
Client connecting to 192.168.0.112, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size: 126 KByte (default)
————————————————————
[ 3] local 192.168.0.254 port 32952 connected with 192.168.0.112 port 5001
write2 failed: Connection refused
read failed: Connection refused
[ 3] WARNING: did not receive ack of last datagram after 1 tries.
[ 3] 0.0- 0.0 sec 1.44 KBytes 1.03 Mbits/sec
[ 3] Sent 1 datagrams
Хост доступен (в один свич воткнуты, iptables выключен), уж очень бы хотелось разобраться с софтиной. А эту задачу ипользовать для замера канала до шлюза провайдера.
31.07.2008 @ 10:49
К сожалению, под руками сейчас нет Линукса, чтоб попробовать, на винде всё работает в одну сторону.
Есть одно подозрение. Посмотрите сразу после запуска программы arp таблицу на предмет наличия записи, соответствующей хосту назначения. Одна отправленная датаграмма дает право подозревать, что её там нет.
31.07.2008 @ 11:25
запись разумеется есть, я сразу после успешного пинга запускал. Попробовал под виндой 100Мбит/с, вообще впечатляющие результаты. Если я правильно понимаю проверить пропускную способность канала в бессерверном режиме нельзя?
C:\Documents and Settings\admin>c:\iperf.exe -u -c 192.168.0.52 -t 20
————————————————————
Client connecting to 192.168.0.52, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size: 8.00 KByte (default)
————————————————————
[1916] local 192.168.0.26 port 1341 connected with 192.168.0.52 port 5001
[ ID] Interval Transfer Bandwidth
[1916] 0.0-20.0 sec 2.50 MBytes 1.05 Mbits/sec
read failed: Connection reset by peer
31.07.2008 @ 11:42
В бессерверном режиме можно оценить пропускную способность канала (упал/не упал) или же при наличии счетчиков на самом тестируемом устройстве при отсутствии прочего трафика посчитать пакеты и, зная их размер, трафик.
Хотел бы предостеречь. Iperf в размере пакета не учитывает payload протоколов. То есть пакет с l 0 у него реально около 54 байт (точнее не помню) — ethernet и ip заголовки. Так что считать приходится самим, с поправками, от Iperf берется только количество пакетов.
Ещё на его работу весьма влияет переключение контекста задач ОС. То есть трафик идет далеко не равномерно. Примерно оценить канал можно, а вот точно померить — вряд ли.
Написан он довольно криво — если пакеты приходят не в той последовательности, что отправлены, он их не считает, ну и ещё есть там глюки по мелочи. Так что работать с ним нужно весьма осторожно.
31.07.2008 @ 12:14
А я голову сломал, когда снифером пакеты отлавливал. Вообщем поломали ты мое мировосприятие, предется искать «нормальный генератор», большое спасибо за открытые глаза.
31.07.2008 @ 12:39
«Нормальный генератор» по определению может быть только «железным», ибо там пакеты создаются либо аппаратным способом, либо программным под управлением ОС реального времени. Искать счастья под Linux или Windows бесполезно.
Даже Ixia, имея программные измеряторы трафика, делает под них специальные аппаратные модули. Про цены на них я здесь умолчу…
31.07.2008 @ 12:59
недоступен для скачивания iperf под виндовс, выложите плиз, у кого есть?
22.10.2008 @ 8:15
http://www.fileqube.com/file/QRDCeoeBU137121
22.10.2008 @ 11:41
Пока положил сюда:
http://beta.delta-z.com/files/iperf.zip
22.10.2008 @ 12:13
Уважаемые! подскажите плиз, как с помощью iperf можно оценить сеть строящуюся для N компов? я так понимаю, что на клиенте нужно запустить с параметром -P M, где M — число клиентов, так??
07.11.2008 @ 1:14
Боюсь, с iperf ничего путного не выйдет. По причине того, что у него многопотоковость плохо работает. Советую посмотреть в сторону пролановских продуктов.
07.11.2008 @ 12:57