Iperf - утилита для тестирования пропускной способности сети.
В своей статье “Сравнение производительности маршрутизаторов доступа” мы вскользь останавливались на методике тестирования пропускной способности. Там для генерации тестового трафика использовался 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).
Остаётся только пожелать вам удачного тестирования. За другими бесплатными прогаммами заходите на страничку Бесплатные программы, которые мы выбираем
Рекомендуйте на news2.ru
Занесите в del.icio.us
Читайте также:
8. Сети
Анализ безопасности сети
Бесплатные программы, которые мы выбираем
Бесплатные программы для Windows
Май 10th, 2006 at 10:05
[…] Iperf - главный инструмент сетевых дел мастера. На днях версия перевалила за 2.0! Функциональность растёт, исправляются ошибки. Подробности - на сайте. […]
Май 11th, 2006 at 13:12
Для включения установки 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.
==========
Удачи…
Май 11th, 2006 at 13:38
Спасибо! Будем пробовать.
Сентябрь 1st, 2007 at 0:05
> 5. Quit Registry Editor, and then restart the computer.
Ага, щаззз, 30 раз тебе ребутом по интерфейсу…. In RealTime ПЛИЗ !!!
Ноябрь 27th, 2007 at 10:45
Реестр винды редко позволяет изменять параметры реестра в реалтайм ибо работает с зеркалом реестра и большинство изменений в значимых параметрах принимает к сведению после ребута.
Декабрь 10th, 2007 at 12:26
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
Как понять, какая строчка отвечает за исходящий тарфик, а какая за вход. по отношению к клиенту?
Декабрь 10th, 2007 at 12:37
Если мне память не изменяет, то по-умолчанию сервер слушает 5001 порт. То есть в данном случае строчка 1864 будет про исходящий трафик, а 1840 - про входящий (для хоста 192.168.17.198)