Чтобы диагностировать разницу в сетевом трафике между двумя местоположениями и нашим главным серверным центром, я использую iperf для регистрации скорости трафика с помощью следующей команды:

iperf -c <server ip> -F 500MB_Test_File.zip -n 500M -y C

После того, как я заметил различия между скоростью загрузки и загрузки, я хотел использовать опцию -d и наткнулся на странное поведение: хотя передача происходила в направлении от клиента к серверу, в другом направлении она зависала и, похоже, не зависала. Вот тест, который я сделал, который показывает, что он не связан с тем, что я использую файл в качестве источника для передачи данных:

$ iperf -c <server IP> -d -i 1
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to <server ip>, TCP port 5001
TCP window size:  153 KByte (default)
------------------------------------------------------------
[  5] local <local ip> port 35144 connected with <server ip> port 5001
[  4] local <local ip> port 5001 connected with <server ip> port 39967
[ ID] Interval       Transfer     Bandwidth
[  5]  0.0- 1.0 sec  9.75 MBytes  81.8 Mbits/sec
[  4]  0.0- 1.0 sec  10.7 MBytes  89.3 Mbits/sec
[  5]  1.0- 2.0 sec  10.9 MBytes  91.2 Mbits/sec
[  4]  1.0- 2.0 sec  10.9 MBytes  91.3 Mbits/sec
[  5]  2.0- 3.0 sec  11.0 MBytes  92.3 Mbits/sec
[  4]  2.0- 3.0 sec  10.9 MBytes  91.4 Mbits/sec
[  5]  3.0- 4.0 sec  11.0 MBytes  92.3 Mbits/sec
[  4]  3.0- 4.0 sec  10.9 MBytes  91.4 Mbits/sec
[  5]  4.0- 5.0 sec  11.0 MBytes  92.3 Mbits/sec
[  4]  4.0- 5.0 sec  10.9 MBytes  91.4 Mbits/sec
[  5]  5.0- 6.0 sec  11.0 MBytes  92.3 Mbits/sec
[  4]  5.0- 6.0 sec  10.9 MBytes  91.4 Mbits/sec
[  5]  6.0- 7.0 sec  10.9 MBytes  91.2 Mbits/sec
[  4]  6.0- 7.0 sec  10.9 MBytes  91.4 Mbits/sec
[  5]  7.0- 8.0 sec  11.2 MBytes  94.4 Mbits/sec
[  4]  7.0- 8.0 sec  10.9 MBytes  91.4 Mbits/sec
[  5]  8.0- 9.0 sec  11.1 MBytes  93.3 Mbits/sec
[  5]  9.0-10.0 sec  11.1 MBytes  93.3 Mbits/sec
[  5]  0.0-10.0 sec   109 MBytes  91.4 Mbits/sec
^C^C

Я использую iperf 2.0.5. И клиенты, и сервер являются компьютерами Linux, а сервер виртуален.

РЕДАКТИРОВАТЬ

Следуя предложению MariusMatutiae , я запустил сервер iperf на клиентском компьютере, а затем попытался сделать двунаправленный запрос от виртуальной машины, и вот что я получил:

[host@centos ~]$ iperf -c <client_id> -d -i 1
bind failed: Address already in use
------------------------------------------------------------
Client connecting to <client_id>, TCP port 5001
TCP window size: 19.3 KByte (default)
------------------------------------------------------------
[  4] local <server_id> port 40175 connected with <client_id> port 5001
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0- 1.0 sec  11.6 MBytes  97.5 Mbits/sec
[  4]  1.0- 2.0 sec  9.50 MBytes  79.7 Mbits/sec
[  4]  2.0- 3.0 sec  10.6 MBytes  89.1 Mbits/sec
[  4]  3.0- 4.0 sec  11.0 MBytes  92.3 Mbits/sec
[  4]  4.0- 5.0 sec  11.0 MBytes  92.3 Mbits/sec
[  4]  5.0- 6.0 sec  10.9 MBytes  91.2 Mbits/sec
[  4]  6.0- 7.0 sec  11.0 MBytes  92.3 Mbits/sec
[  4]  7.0- 8.0 sec  10.8 MBytes  90.2 Mbits/sec
[  4]  8.0- 9.0 sec  8.38 MBytes  70.3 Mbits/sec
[  4]  9.0-10.0 sec  9.75 MBytes  81.8 Mbits/sec
[  4]  0.0-10.0 sec   105 MBytes  87.8 Mbits/sec
[host@centos ~]$

Я думал, отлично, команда останавливается сама по себе, но я получаю результаты только в одном направлении. До тех пор, пока я не посмотрел на машину, где я запустил сервер iPerf на этот раз, и увидел это:

$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local <client_ip> port 5001 connected with <server_ip> port 40179
------------------------------------------------------------
Client connecting to <server_ip>, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[  6] local <client_ip> port 36243 connected with <server_ip> port 5001
[ ID] Interval       Transfer     Bandwidth
[  6]  0.0-10.0 sec  45.4 MBytes  38.0 Mbits/sec
[  4]  0.0-10.2 sec  64.2 MBytes  52.8 Mbits/sec

Это заставило меня задуматься о том, что, возможно, мне нужно запустить сервер в качестве демона по обе стороны соединения, чтобы двунаправленная команда работала, и действительно, я получил аналогичные результаты, только выводя производительность на одной стороне транзакции, но как таковую У меня нет никакого способа получить данные о производительности с другой стороны: я запустил демон iperf с -D > iperflog но журнал, похоже, не заполнен ...

Предполагается ли так, что iperf должен быть запущен на обеих машинах для выполнения двунаправленного запроса? Не bind failed: Address already in use которое я получаю, когда запускаю клиент iperf, и на обеих сторонах работает сервер, чтобы понять, в чем проблема? У меня такое ощущение, что то, что я делаю, не должно быть стандартной процедурой ...

1 ответ1

0

Как я и подозревал, Мариус подтвердил, что клиент и сервер не могут работать на одной машине. Поэтому я подождал подходящего времени, чтобы убить демона, чтобы он не работал одновременно с клиентом, запустил сервер только с -s на хосте (который находится в совершенно другом месте, как просил Мариус), запустил двунаправленный запрос на ВМ и запрос прошел (Мысль момента: "Что за ...").

А потом до меня дошло, проблема возникает только в том случае, если сервер запущен как демон.

Я подтвердил свою гипотезу, протестировав сервер как демон, а не демон, а также поменялся ролями машин.

Сводка: если вы хотите использовать двунаправленные запросы, не запускайте сервер как демон.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .