Por que uma solicitação iperf bidirecional congela no servidor para o lado do cliente?

0

Para diagnosticar a diferença no tráfego de rede entre dois locais e nosso principal centro de servidores, estou usando o iperf para registrar a taxa de tráfego com o seguinte comando:

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

Depois de observar as disparidades entre o upload e a taxa de download, eu queria usar a opção -d e tropecei em um comportamento estranho: embora a transferência tenha passado do cliente para a direção do servidor, na outra direção ela congelou e não parece ser. Aqui está um teste que fiz, que mostra que ele não está conectado ao fato de eu estar usando um arquivo como fonte para a transferência de dados:

$ 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

Estou usando o iperf 2.0.5. Ambos os clientes e o servidor são máquinas linux, sendo o servidor virtual.

EDITAR

Depois de seguir a sugestão do MariusMatutiae , iniciei o servidor iperf na máquina cliente e tentei fazer a solicitação bidirecional da VM e aqui está o que eu recebi:

[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 ~]$

Eu pensei, ótimo, o comando para de si mesmo, mas eu só obtenho os resultados em uma direção. Isso é até que eu olhei para a máquina onde eu iniciei o servidor iPerf desta vez e vi isso:

$ 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

Isso me fez pensar que talvez eu precise iniciar um servidor como daemon em ambos os lados da conexão para que o comando bidirecional funcione e, de fato, obtive resultados semelhantes, apenas exibindo o desempenho em um lado da transação, mas como tal eu não tenho como obter os dados de performance do outro lado: eu iniciei o daemon iperf com -D > iperflog mas o log não parece estar preenchido ...

Supõe-se que seja assim, que um iperf deve estar rodando em ambas as máquinas para passar por uma solicitação bidirecional? A mensagem bind failed: Address already in use que recebo quando inicio um cliente iperf e um servidor está executando em ambos os lados uma pista de onde pode estar o problema? Tenho a sensação de que o que estou fazendo não deveria ser o procedimento padrão ...

    
por Eldros 17.12.2015 / 17:22

1 resposta

0

Como eu suspeitava e o Marius confirmou que o cliente e o servidor não podem ser executados na mesma máquina. Então eu esperei por um momento oportuno para matar o daemon para que ele não rodasse concorrentemente ao cliente, iniciei o servidor apenas com -s no host (que está em um local totalmente diferente, como Marius perguntou), iniciei o bidirecional pedido na VM e o pedido passou (Pensamento do momento: "O que ...").

E então me ocorreu, eu recebo o problema apenas se o servidor for iniciado como daemon.

Confirmei minha hipótese testando ambos com o servidor como um daemon e não como um daemon, bem como trocando o papel das máquinas.

Resumo: se você quiser usar solicitações bidirecionais, não inicie o servidor como um daemon.

    
por 21.12.2015 / 15:28

Tags