domingo, 14 de abril de 2013

IPERF no Monitoramento de Desempenho em Redes

Olá Pessoal.

O IOS da Cisco traz algumas ferramentas bem úteis para medir o desempenho de dispositivos de interconexão em infraestrutura de redes (switches, roteadores, etc), a exemplo do SLA-Monitor e do NetFlow. É igualmente importante a tarefa de monitoramento e avaliação do desempenho dos links das estações até os servidores da rede, para garantir que a vazão dimensionada para fins de acesso aos recursos dos servidores esteja realmente adequada.

É nesse contexto que uma ferramenta muito útil denominada Iperf se destaca pela sua simplicidade e principalmente por ser gratuita. O Iperf é um software livre que foi desenvolvido pelo National Laboratory for Applied Network Research (NLANR). Ele foi originalmente desenvolvido para fins de pesquisa com o intuito de testar a largura de banda (throughput) em links, ou seja, medir o desempenho de redes de computadores. O software não possui interface gráfica, sendo sua operação muito simples através da linha de comando. Também existe uma versão do Iperf em Java, denominada Jperf, que possui interface gráfica e que gera gráficos a partir das medidas realizadas. 

Em síntese a operação do Iperf se resume à sua execução entre duas máquinas, uma em modo servidor que ficará "ouvindo" as requisições e outra em modo cliente que ficará responsável por gerar tráfego para estressar a rede e extrair as medidas de desempenho.

Para exemplificar o uso dessa ferramenta vamos considerar o cenário ilustrado na figura abaixo que é bem simples e suficiente para a demonstração. Iremos executar o software em modo servidor na máquina File-Server (Windows Server 2008) para posteriormente executarmos o software em modo cliente em qualquer máquina, por exemplo um notebook executando Linux para fins de análise de desempenho. 


O leitor pode baixar o Iperf para Linux e Windows através da página oficial do projeto em http://sourceforge.net/projects/iperf/. A ferramenta é multiplataforma e o teste funciona normalmente entre estações Linux-Linux, Windows-Linux ou Windows-Windows. Para executar o software em modo servidor, basta digitar o seguinte comando:  

iperf -s


A partir desse momento a máquina estará ouvindo requisições TCP na porta 5001, onde o cliente posteriormente irá gerar tráfego para estressar o enlace entre cliente-servidor. Feito isso, a partir de outra máquina qualquer na rede que tenha alcançabilidade IP ao servidor, seja no contexto da mesma rede local ou mesmo atrás de roteadores, podemos executar o software em modo cliente com o seguinte comando: 

iperf -c 192.168.7.3

Por padrão o cliente irá gerar tráfego TCP na porta 5001 do servidor (192.168.7.3) durante 10 segundos. Reparem que no exemplo da figura abaixo utilizei alguns parâmetros opcionais para alterar o tempo padrão (de 10s para 15s) e também o intervalo de geração dos relatórios para registrar as medidas a cada 1s. Há vários outros parâmetros que você pode (e deve) explorar, então trago um resumo das principais opções: 

- s -> Execução em modo servidor na porta 5001
- c -> Execução em modo cliente, sendo necessário informar o IP do servidor
- b -> Define a banda a ser utilizada em bps (apenas para UDP)
- d -> Gera tráfego nos dois sentidos (por padrão o tráfego é sentido cliente->servidor)
- u -> Utiliza o UDP como protocolo de transporte
- f -> Define a unidade do relatório, que pode ser: Kbits, Mbits, KBytes, MBytes
- i -> Define o intervalo de tempo de registro do relatório de saída
- m -> Exibe na saía o tamanho máximo do MTU
- o -> Armazena a saída em arquivo externo, ex.: -o <nome-do-arquivo>
- p -> Altera a porta padrão de execução, ex.: iperf -s -p 2222
- P -> Somente em modo cliente, gera tráfego simulando vários clientes em paralelo
- t -> Define o tempo de duração dos testes, sendo o padrão 10 segundos  


No exemplo da figura anterior (que representa a saída do software cliente) a gente pode observar que durante o teste a largura de banda apresentou uma variação média entre 9Mbps e 15Mbps, cujo PÉSSIMO resultado é um indicativo de problema se o link entre o cliente e o servidor for de 100 Mbps ou 1 Gbps

No projeto de uma rede você sempre deve ter em mente que a vazão dos servidores deve ser suficientemente maior que a vazão das estações para que os recursos dos servidores possam ser simultaneamente utilizados por várias estações. Resultados ruins no teste com essa ferramenta podem demonstrar que o link do servidor está subdimensionado nos horários de pico em que existem múltiplas máquinas querendo acessar os recursos do servidor.

Outra opção muito útil é realizar a medição anterior utilizando o UDP como protocolo de tranpsorte. O interessante de fazê-lo é que também será medido o jitter do enlace, ou seja, a variação entre os tempos de latência fim-a-fim (atraso) na comunicação - uma importante métrica de desempenho para verificar a estabilidade (ou instabilidade) da rede.

Para realizar a medição via UDP, basta adicionar o parâmetro "-u"  no servidor (iperf -s -u) e cliente (iperf -c 192.168.0.1 -u). Há outros parâmetros e caso vocês queiram conhecer mais detalhes da ferramenta, recomendo a leitura da documentação técnica disponibilizada na página oficial do projeto. Espero que esse artigo seja útil no dia-a-dia de vocês, usem e abusem da ferramenta.

Abraço.

Samuel.

14 comentários:

  1. Excelente já utilizei a ferramenta! Muito bom o artigo.

    ResponderExcluir
  2. Ótimo artigo, obrigado, estava apenas observando que alguns autores como Forouzan e Michal A. Gallo, diz que largura de banda é o que temos de capacidade total do link, e throughput (vazão) é o que realmente sai do link que deve ser menor ou igual a largura de banda.

    ResponderExcluir
    Respostas
    1. Conceitualmente essa definição está perfeitamente correta! As ferramentas de teste que estressam o link têm por objetivo gerar tráfego até atingir o limite REAL do link - que normalmente não é exatamente o limite nominal.

      Abraço.

      Excluir
  3. "No projeto de uma rede você sempre deve ter em mente que a vazão dos servidores deve ser suficientemente maior que a vazão das estações para que os recursos dos servidores possam ser simultaneamente utilizados por várias estações" - Professor, quando você relata isso, poderia ser um dimensionamento tipo: Link do servidor em GB e das estações em MB, nesse caso, teríamos uma rede extra só para os servers correto?

    Aproveitando essa pergunda, existe algum calculo de dimensionamento para essas tarefas? No exemplo acima, como poderia ficar esse dimensionamento?

    Sugestão, poderia fazer um curso desses tópicos em um curso de fundamentos de redes, que seria pré-requesitos para os que já tem no seu EAD, e explorar essas tools e outras como o iperf, iptraf, wireshar, entres outras, e outros simuladores!

    Parabéns pelo blos e artigos!! Estou visualizando todos sem correria! :-)

    ResponderExcluir
    Respostas
    1. A definição desses limiares depende totalmente do perfil do ambiente e envolve tanto os equipamentos da infraestrutura (incluindo os links), como também o uso que é feito das aplicações. Ou seja, não basta simplesmente manter as estações operando a 100Mbps e os servidores a 1 ou 2 Gbps simplesmente para garantir que o servidor tenha mais vazão para atender várias estações simultaneamente. É necessário saber o uso que as estações no nível de acesso fazem dos serviços nos servidores para dimensionar sua vazão!

      Já recebi várias sugestões para fazer um curso nesses moldes, mas gravar as aulas consome muito tempo e ultimamente estou envolvido em vários projetos que não me permitem fazê-lo.

      Abraço.

      Excluir
  4. Professor Samuel, você mencionou "É necessário saber o uso que as estações no nível de acesso fazem dos serviços nos servidores para dimensionar sua vazão!"

    Poderia explicar essa oração com um caso prático, ficou meio abstrato pra mim ainda essa dúvica!

    Exite alguma ferramenta que posso dimensionar essa questão, já que o gargalo já posso usar IPERF!

    Pensei q só aumentar o meio de transmissão do servidor já resolvia a questão de múltiplas conexão dos clientes!

    Grato pelo feedback!!

    ResponderExcluir
    Respostas
    1. Com qual frequência uma determinada estação faz requisições aos servidores (isoladamente)? Todas essas requisições implicam em quanto de uso de banda ao longo do tempo?

      Aumentar a capacidade de transmissão do link do servidor melhora o desempenho, sem dúvidas, mas a questão é: Aumentar para quanto? O objetivo de mapear as máquinas de acesso é justamente conseguir constuir um modelo determinístico!

      Quanto mais estações existirem, então mais máquinas têm que ser atendidas pelo(s) servidor(es). Quanto mais conexões cada estação faz individualmente ao(s) servidor(es), então mais conexões têm que ser atendidas. Atender às máquinas e suas conexões requer banda.

      Excluir
  5. Muito grato pela resposta, clara e objetiva!! Vc usa algum software para dimensionar essas requisições/banda isoladamente para um cliente ao servirdor? Existe?

    Abs

    ResponderExcluir
    Respostas
    1. Há vários softwares de monitoramento que fazem essa tarefa, seja através do SNMP ou através de processos locais. No contexto específico de uma infraestrutura baseada em equipamentos Cisco (switches e roteadores), o NetFlow é MUITO útil para esse fim. Através dele você consegue classificar o tráfego em fluxos, ou seja, é possível visualizar especificamente o fluxo relacionado a um determinado sistema em execução em algum servidor.

      Abraço.

      Excluir
  6. Boa noite. Ótimo artigo. Tenho uma pergunta: posso utilizar o IPerf para verificar a qualidade da minha PLACA DE REDE e não a rede em si. Obrigado.

    ResponderExcluir
    Respostas
    1. O objetivo do IPERF é gerar tráfego para "estressar" a sua rede e determinar a vazão efetivamente disponível em algum enlace. O propósito da aplicação não é verificar a qualidade de uma interface de rede isoladamente...

      Excluir
  7. Ótima explicação. Tenho a mesma duvida sobre o QoS em redes WiFi

    ResponderExcluir
  8. Boa Explicação, me ajudou muito :)

    ResponderExcluir