Mostrando postagens com marcador SLA. Mostrar todas as postagens
Mostrando postagens com marcador SLA. Mostrar todas as postagens

sábado, 4 de maio de 2013

Interpretação dos Resultados do Ping

Olá Pessoal.

Esse é mais um artigo que escrevo atendendo a pedido dos leitores do blog. Existem várias ferramentas de monitoramento de redes no mercado, sendo que todas elas, de alguma forma, retornam algumas métricas importantes de desempenho em redes, tais como: vazão em bps, latência (atraso), jitter (variação da latência no tempo), etc. A mais comum de todas essas ferramentas e que certamente faz parte da vida cotidiana de TODO profissional de redes é o "bom e velho" ping - presente em praticamente todas as caixas e sistemas operacionais!

Apesar de parecer simples, o ping vai MUITO além de simplesmente confirmar se há comunicação com um host remoto qualquer - ele também traz alguns valores importantes para determinar o desempenho de uma rede. Para cada linha de resposta echo-reply do ICMP (protocolo utilizado por trás do ping) ele traz o valor do atraso fim-a-fim na comunicação (latência), conforme pode ser observado no primeiro destaque em vermelho da figura abaixo.

Também ao final da sequência de respostas ele traz um resumo estatístico com os valores mais baixo, médio e alto da latência nos parâmetros rtt min/avg/max. Ele ainda mostra qual foi a porcentagem de perda de pacotes que, normalmente, não deve exceder 2%. Valores de perda de pacotes acima de 5% são indicativos de que está havendo algum problema na rede, que pode ser desde o cabeamento até a aplicação em si! É importante destacar que no Linux ele calcula o jitter (parâmetro denominado mdev no ping). Essas informações podem ser observadas no segundo destaque em vermelho da figura abaixo.


Não existe um valor único de latência que seja referência para todas as redes, por isso estarei mostrando alguns valores referenciais aceitáveis para algumas das tecnologias mais comuns que são: (1) Rede Local, (2) Internet via TV a Cabo, (3) xDSL, (4) Dial-Up e (5) Links de Longa Distância Privativo.

1) Em redes locais cabeadas a comunicação deve ter excelente desempenho, haja vista a proximidade entre os dispositivos e a boa qualidade da infraestrutura de cabeamento de propriedade da empresa. É esperado que a latência em redes locais não ultrapasse 10ms (recomendado) ou é tolerável até 30ms (não recomendado). Quanto mais dispositivos intermediários existirem entre duas máquinas, naturalmente maior será essa latência porque cada dispositivo intermediário terá algum mecanismos de tratamento dos quadros;

2) Um valor ideal de latência para links de Internet via Cable Modem seria algo entre 30ms e 50ms. No entanto a arquitetura da rede é compartilhada através de barramentos nas vizinhanças e a rede tende a sofrer mais com instabilidade em momentos de muito acesso, o que pode implicar em latências maiores que 100ms; 

3) A latência ideal para a tecnologia xDSL seria algo em torno de 70ms. O que acontece é que essa tecnologia é muito popular porque aproveita a infraestrutura de cabeamento da rede telefônica, motivo pelo qual muitas operadoras acabam vendendo mais conexões do que suas centrais suportam. Essa situação pode implicar em latências de 100ms ou mais, o que é comum de acontecer no Brasil;

4) A conexão discada naturalmente é aquela que apresenta pior desempenho porque utiliza a rede pública de telefonia comutada (PSTN) através da modulação do sinal digital do computador em sinal analógico (audio), ou seja, simplificando, conversão dos dados em som. Por isso a latência dessa tecnologia pode facilmente ser bem superior a 250ms;

5) Os links de longa distância privativos mais profissionais, ou seja, aqueles normalmente utilizados pelas empresas devem apresentar excelente desempenho. Normalmente os contratos desses links têm cláusulas de SLA em que a operadora se compromete a entregar uma qualidade mínima com base em parêmetos pré-definidos. Normalmente esses links também não devem exceder 10ms (recomendado), mas pode ser tolerável latência de até 20ms ou 30ms (dependendo do contrato); 

Lembrem-se de que essas informações são referenciais, ou seja, nenhum desses valores deve ser aceito como REGRA! Há outros fatores que vão interferir diretamente na latência, principalmente quando pensamos em links de longa distância. Por exemplo, em situação ideal o sinal percorre um cabo metálico a aproximados 200.000 km/s (quase 2/3 da velocidade da luz). Isso quer dizer que você terá resultados diferentes na sua empresa se pingar um servidor localizado no Brasil e outro na China! ;-) Por isso antes de verificar o desempenho da rede é necessário estabelecer os critérios que serão utilizados para fazê-lo, criando uma metodologia homogênea que não interfira nos resultados!

Outro detalhe importante é que vejo as pessoas testando a velocidade da conexão de Internet em casa e sempre muito preocupadas com a tal largura de banda ou taxa de transmissão (em bps), no entanto tão importante quanto a largura de banda é a latência. Por exemplo, vamos pensar na seguinte situação:

Cenário 1: Ana contratou uma Internet xDSL de 25M
- Teste de Desempenho: Taxa de Transmissão de 19M; Latência de 190ms;

Cenário 2: Beto contratou Internet Cable de 10M
- Teste de Desempenho: Taxa de Transmissão de 8M; Latência de 60ms;

Na sua opinião qual dos dois cenários é melhor?
A resposta correta é: Cenário 2

Acontece que mesmo a Ana tendo mais largura de banda para acessar mais informação, o estado do link está MUITO pior do que o do Beto que possui menos da metade da largura de banda. No entanto, o retorno das requisições de Beto será muito mais rápido do que da Ana. É isso que explica porque um link de 2M na empresa em que você trabalha tende a ter desempenho muito melhor do que a Internet de 10M da sua casa!!! As latências dos links de longa distância privativos são muito menores do que as latências das conexões residencias!  

Compreenderam? Espero que sim... 

O jitter, por exemplo, é uma métrica extremamente importante para ambientes que possuem aplicações multimídia de "tempo real", como voz e vídeo. Os administradores de ambientes que possuem essas aplicações devem sempre estar atentos não somente à latência que representa o atraso na entrega dos pacotes, mas principalmente ao jitter. A latência mostra o desempenho real da rede naquele exato momento, enquanto que o jitter mostra seu comportamento ao longo do tempo, ou seja, define o grau de estabilidade da rede.

Pegando o exemplo do ping da figura acima que apresenta jitter de 15ms, esse seria um valor alto para uma rede local cabeada (ethernet), mas é um valor comum em redes sem fio pela própria natureza mutável do ambiente. Lembrem-se que as comunicações sem fio estão sujeitas a interferência de vários fatores externos, por isso o sinal tende a oscilar com maior frequência - o que as faz mais instáveis do que as redes cabeadas.

Uma evidência prática de que o jitter é ainda mais prejudicial para aplicações multimídia do que a própria latência é que normalmente o recurso comumente utilizado para minimizar o efeito do jitter consiste na utilização de buffers (pequenas memórias eletrônicas) nos dispositivos para armazenar os pacotes e, somente então, entregá-los "sem" jitter ao usuário, conforme pode ser observado na figura abaixo.


O problema é que essa "solução" implica no aumento da latência, o que mostra a preferência pelo aumento na latência se houver diminuição do jitter. Obviamente que o alinhamento dessas duas métricas (latência e jitter) acaba sendo um exercício de balança e o bom senso é fundamental para assegurar o bom desempenho das aplicações. De nada adianta eliminar totalmente o jitter se a latência ficar muito alta. O valor ideal do jitter vai variar em função da latência do link.

Por exemplo, no contexto de um link de longa distância xDSL (acesso à Internet) que tem em média de 50ms a 100ms, um jitter de até 15ms ou 30ms pode ser aceitável. Por outro lado, no contexto de uma rede local em que a latência máxima é 10ms, esses valores seriam inaceitáveis - principalmente se existirem aplicações multimídia de "tempo real".

A gente costuma utilizar como medidas de referência para latência em aplicações multimídia o limite de até 150ms para bom desempenho (recomendado) e valores entre 151ms até 400ms para desempenho tolerável (não recomendado), sendo que qualquer valor acima de 400ms é INACEITÁVEL!!!


Quem diria que uma ferramenta tão simples quanto o ping seria na realidade tão poderosa, não é mesmo? ;-) Esse é um dos motivos de eu sempre dizer aos meus alunos que na área de networking é crucial entrender os fundamentos por trás da tencologias, muito mais até do que saber operacionalizar. O ideal é "casar" as duas coisas: fundamento e prática!

Espero que esse artigo seja útil não apenas no dia-a-dia de vocês, mas principalmente no sentido de "abrir a mente" para a necessidade do profissional dessa área conhecer os fundamentos daquilo que está operacionalizando!

Abraço.

Samuel.

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.