Почему двунаправленный iperf-запрос зависает на стороне сервера?

1983
Eldros

Чтобы диагностировать разницу в сетевом трафике между двумя местоположениями и нашим главным серверным центром, я использую 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 предложения «S я начал сервер Iperf на клиентской машине, а затем попытался сделать двунаправленный запрос от VM, и вот что у меня получился:

[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 и сервер, работающий с обеих сторон, подсказку о том, где может лежать проблема? У меня такое ощущение, что то, что я делаю, не должно быть стандартной процедурой ...

0
Что произойдет, если вы используете хост вместо гостевой виртуальной машины в качестве другого конца соединения? MariusMatutiae 8 лет назад 0
Вы имеете в виду использование виртуальной машины в качестве клиента iperf и бывшего клиента в качестве сервера? Я должен попробовать, я вернусь к вам. Eldros 8 лет назад 0
@MariusMatutiae попробовал это и добавил некоторую информацию Eldros 8 лет назад 0
Сообщение об ошибке `` сбой привязки: адрес уже используется` "означает, что вы не можете запустить клиент и сервер на одном компьютере. Правильный способ использования - запустить сервер на одном компьютере и клиент на другом компьютере с параметром `-d` (без параметра` -d` для сервера). Вы сказали, что один сервер является виртуальным: другой компьютер является хостом виртуального сервера? MariusMatutiae 8 лет назад 0
@MariusMatutiae: хосты находятся в разных местах, так как мы хотим проверить трафик между некоторыми из ваших сайтов и нашим главным серверным центром. Но, как я уже упоминал в моем последнем редактировании, проблема, похоже, связана с тем, что сервер запущен как демон, который изначально не был интуитивно понятным ... Eldros 8 лет назад 0

1 ответ на вопрос

0
Eldros

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

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

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

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

Я понял, что вместо того, чтобы пытаться заставить сервер работать как демон, большинство пользователей в моей ситуации, вероятно, будут довольны наличием работающего сервера и выполнением его без опции `-D`, поэтому я удалил содержание вопроса и сделал это ответ. Eldros 8 лет назад 0

Похожие вопросы