VelocidadeNo processo de criar uma rede local, escolhemos todos os elementos para conseguir o maior desempenho e capacidade de gestão sem que custe uma fortuna para o cliente. São escolhidos equipamentos com interfaces de alta velocidade, cabos de ligação que se correspondam com essas altas velocidades, comprovamos que não há outros elementos a introduzir ruído no ambiente, etc.

Depois de todo o equipamento físico estar no seu lugar, é o momento de testar que há conectividade entre equipamentos e que os parâmetros para a rede IP estão certos. Mas qual é a qualidade da ligação? Um método simples é a pura largura de banda, ver quantos megabits conseguimos transmitir pela cabo. Para isso existe a aplicação Iperf, uma ferramenta que mede a largura de banda máxima TCP, ao tempo que permite afinar diversos parâmetros TCP e UDP. Os resultados gerados incluem a largura de banda, jitter e perdas de pacotes.

A aplicação está disponível para Linux e para Windows e é executada a partir da linha de comandos, sem precisar de qualquer tipo de instalação nem privilégios. É necessário executar a aplicação no servidor com o comando “iperf -s”, e no cliente com o comando “iperf -c <endereço/nome do servidor>”. Por defeito o servidor usa a porta 5001, que deverá estar aberta na firewall, se houver alguma. Também é possível alterar esta porta para outra mais conveniente. Alguns parâmetros, tais como “-m”, não estão disponíveis em alguns sistemas operativos, mas no geral também não interferem no useo.

Por ex., executando o comando num servidor com:

C:\tools\iperf-2.0.5-2-win32>iperf.exe -s -w 1M
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 1.00 MByte
------------------------------------------------------------
...

No cliente, o comando seria:

C:\tools\iperf>iperf.exe -c sun -w 1M
------------------------------------------------------------
Client connecting to sun, TCP port 5001
TCP window size: 1.00 MByte
------------------------------------------------------------
[ 3] local 10.0.0.49 port 15538 connected with 10.0.0.10 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 967 MBytes 811 Mbits/sec

O parâmetro que maior impacto tem nas operações é o tamanho da janela TCP (-w).
Por defeito é 64KB, que achei pequeno. Estas são as velocidades observadas para distintos tamanhos de janela:

A partir daqui podem ser feitos todo o tipo de testes. Por ex., retirar o switch, ligando diretamente cliente e servidor, experimentar a trocar cabos de distintas categorias (CAT5, CAT5E, CAT6), etc. No ambiente onde foram realizados, e apesar de contar com um servidor com NIC 1GBE, portátil com NIC 1GBE, switch Gigabit, e cabo CAT5E a ligar tudo, a velocidade nunca atingiu o limite teórico, e ficou mais por volta dos 810Mbps.

A aplicação permite testar de forma simples e directa alguns mitos como o uso de Jumbo Frames para melhorar o desempenho da rede. Um simples teste mostrou quão irrelevante é este parâmetro:

C:\tools\iperf>iperf.exe -c sun -w 1M -M 9000
WARNING: attempt to set TCP maximum segment size to 9000, but got 8961
------------------------------------------------------------
Client connecting to sun, TCP port 5001
TCP window size: 1.00 MByte
------------------------------------------------------------
[ 3] local 10.0.0.49 port 15721 connected with 10.0.0.10 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 972 MBytes 815 Mbits/sec
C:\tools\iperf>iperf.exe -c sun -w 1M -M 1500
WARNING: attempt to set TCP maximum segment size to 1500, but got 1281
------------------------------------------------------------
Client connecting to sun, TCP port 5001
TCP window size: 1.00 MByte
------------------------------------------------------------
[ 3] local 10.0.0.49 port 15722 connected with 10.0.0.10 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 996 MBytes 835 Mbits/sec

Uma nota de alerta: como indica o artigo Does IPERF Tell White Lies?, os resultados de Iperf referem-se a dados úteis que podem ser transferidos (aqueles que realmente interessam ao utilizador), e não reportam os dados totais que realmente são usados. Para transferir um ficheiro, por ex. os conteúdos são divididos em pequenos blocos. A cada um destes blocos são associados outros dados “de gestão”, como são o protocolo usado, assinaturas para poder verificar a integridade dos dados na transmissão, os endereços de origem e destino, etc. Todos estes dados adicionais, acrescentam aos dados úteis. Portanto, a rede sempre estará a transferir mais bits que aqueles reportados. Na prática, este erro será uma pequena percentagem que não afecta o propósito das análises que queremos obter.

Em suma, Iperf é uma excelente ferramenta que nos permite quantificar diferentes cenários. Isto permite-nos avaliar o desempenho duma ligação ou determinar a solução com melhor desempenho. Não é a solução para tudo, possuir um switch com gestão no coração da rede permite-nos obter informações e elaborar diagnósticos que não é possível com esta simples aplicação.