Iperf - программа для тестирования пропускной способности каналов передачи данных.
Для windows можно скачать отсюда.
Для linux или freebsd можно установить из пакетов.
iperf может тестировать полосы, загружая их tcp или udp-пакетами. Тестирование tcp-пакетами по-умолчанию.
Пусть стоит задача проверить максимально доступную полосу на данный момент. Запускается на одной стороне сервер:
Наиболее интересное и используемое тестирование - тестирование udp-пакетами, которое позволяет посылать данные с определенной скоростью и в итоге получить информацию о потерях, джиттере.
Запускается сервер:
время тестирования - 300 секунд ( -t 300 );
полоса тестирования - 1Мбит/с ( -b 1M );
тест провести в обоих направлениях ( -d ).
Запускается клиент:
Вывод на сервере. Видно, что сервер в ответ инициирует отправку пакетов в сторону клиента на 5001 порт:
Чтобы не возникла путаница, каждый тест характеризуется собственным уникальным идентификатором (ID). Анализируя вывод на сервере можно отметить, что сервером ([ 4] local 10.0.0.1 port 5001) было получено [ 4] без ошибок (0%) 25511 пакетов. В то же время сервер отправил на [ 3] 10.0.0.2 port 5001 25510 пакетов и 0.035% из них было потеряно.
Если такой вывод сложен для восприятия, то можно применить опцию ( -r ) вместо ( -d ), чтобы каждое направление было протестировано последовательно.
Подобное тестирование удобно проводить при симметричных каналах. Если прямой и обратный канал отличаются, то необходимо поочередно запускать iperf в режиме сервера/клиента на каждой стороне, не используя опцию ( -d ).
Если сервер удаленный и работает на операционной системе *nix, то запускать iperf удобнее в эмуляторе терминала screen. В таком случае можно будет безболезненно отключиться от удаленной рабочей станции, где запускается сервер iperf, если период тестирования длительный.
Для windows можно скачать отсюда.
Для linux или freebsd можно установить из пакетов.
iperf может тестировать полосы, загружая их tcp или udp-пакетами. Тестирование tcp-пакетами по-умолчанию.
Пусть стоит задача проверить максимально доступную полосу на данный момент. Запускается на одной стороне сервер:
$ iperf -sНа другой стороне запускается та же программа, но в режиме клиента:
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
c:\iperf -c 10.0.0.1На сервере отображается информация о тестировании:
------------------------------------------------------------
Client connecting to 10.0.0.1, TCP port 5001
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
[1904] local 10.0.0.2 port 1175 connected with 10.0.0.1 port 5001
[ ID] Interval Transfer Bandwidth
[1904] 0.0-10.0 sec 275 MBytes 230 Mbits/sec
4] local 10.0.0.1 port 5001 connected with 10.0.0.2 port 1175
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-10.0 sec 275 MBytes 232 Mbits/sec
Наиболее интересное и используемое тестирование - тестирование udp-пакетами, которое позволяет посылать данные с определенной скоростью и в итоге получить информацию о потерях, джиттере.
Запускается сервер:
$ iperf -u -sОпределяемся с параметрами тестирования:
------------------------------------------------------------
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size: 112 KByte (default)
------------------------------------------------------------
время тестирования - 300 секунд ( -t 300 );
полоса тестирования - 1Мбит/с ( -b 1M );
тест провести в обоих направлениях ( -d ).
Запускается клиент:
c:\iperf -u -c 10.0.0.1 -b 1M -d -t 300Если время тестирование очень длительное, то можно выводить промежуточные результаты каждые 30 секунд, например. ( -i 30 )
------------------------------------------------------------
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size: 8.00 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to 10.0.0.1, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size: 8.00 KByte (default)
------------------------------------------------------------
[1860] local 10.0.0.2 port 1772 connected with 10.0.0.1 port 5001
[1904] local 10.0.0.2 port 5001 connected with 10.0.0.1 port 48582
[ ID] Interval Transfer Bandwidth
[1860] 0.0-300.0 sec 35.8 MBytes 1000 Kbits/sec
[1860] Server Report:
[1860] 0.0-300.0 sec 35.8 MBytes 1000 Kbits/sec 0.905 ms 0/25511 (0%)
[1860] Sent 25511 datagrams
[1904] 0.0-300.0 sec 35.8 MBytes 1000 Kbits/sec 2.830 ms 8/25510 (0.031%)
[1904] 0.0-300.0 sec 1 datagrams received out-of-order
Вывод на сервере. Видно, что сервер в ответ инициирует отправку пакетов в сторону клиента на 5001 порт:
------------------------------------------------------------
Client connecting to 10.0.0.2, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size: 112 KByte (default)
------------------------------------------------------------
[ 3] local 10.0.0.1 port 48582 connected with 10.0.0.2 port 5001
[ 4] local 10.0.0.1 port 5001 connected with 10.0.0.2 port 1772
[ 4] 0.0-300.0 sec 35.8 MBytes 1000 Kbits/sec 0.906 ms 0/25511 (0%)
[ 3] 0.0-300.0 sec 35.8 MBytes 1000 Kbits/sec
[ 3] Sent 25511 datagrams
[ 3] Server Report:
[ 3] 0.0-300.0 sec 35.8 MBytes 1000 Kbits/sec 2.830 ms 9/25510 (0.035%)
[ 3] 0.0-300.0 sec 1 datagrams received out-of-order
Чтобы не возникла путаница, каждый тест характеризуется собственным уникальным идентификатором (ID). Анализируя вывод на сервере можно отметить, что сервером ([ 4] local 10.0.0.1 port 5001) было получено [ 4] без ошибок (0%) 25511 пакетов. В то же время сервер отправил на [ 3] 10.0.0.2 port 5001 25510 пакетов и 0.035% из них было потеряно.
Если такой вывод сложен для восприятия, то можно применить опцию ( -r ) вместо ( -d ), чтобы каждое направление было протестировано последовательно.
$ iperf -u -c 10.0.0.1 -t 300 -r
------------------------------------------------------------
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size: 107 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to 10.0.0.1, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size: 107 KByte (default)
------------------------------------------------------------
[ 4] local 10.0.0.2 port 45817 connected with 10.0.0.1 port 5001
[ 4] 0.0-300.0 sec 37.5 MBytes 1.05 Mbits/sec
[ 4] Sent 26751 datagrams
[ 4] Server Report:
[ 4] 0.0-300.0 sec 37.5 MBytes 1.05 Mbits/sec 0.011 ms 3/26751 (0.011%)
[ 3] local 10.0.0.2 port 5001 connected with 10.0.0.1 port 44086
[ 3] 0.0-300.0 sec 37.4 MBytes 1.05 Mbits/sec 0.920 ms 66/26751 (0.25%)
Подобное тестирование удобно проводить при симметричных каналах. Если прямой и обратный канал отличаются, то необходимо поочередно запускать iperf в режиме сервера/клиента на каждой стороне, не используя опцию ( -d ).
Если сервер удаленный и работает на операционной системе *nix, то запускать iperf удобнее в эмуляторе терминала screen. В таком случае можно будет безболезненно отключиться от удаленной рабочей станции, где запускается сервер iperf, если период тестирования длительный.
$ screen iperf -u -sЧтобы отключиться необходимо воспользоваться комбинацией клавиш Ctrl+a d. Посмотреть список доступных терминалов:
$ screen -listПодключиться к работающему терминалу:
There is a screen on:
1970.pts-2.host-laptop (15.07.2010 08:34:19) (Detached)
1 Socket in /var/run/screen/S-host.
$ screen -r 1970.pts-2.host-laptop