Como você testa a velocidade da rede entre duas caixas?

168

Eu tenho uma rede gigabit configurada em minha casa e algumas caixas baseadas no Ubuntu. Por completa curiosidade, gostaria de verificar a velocidade entre as duas caixas. Eu não estou tendo nenhum problema com velocidade ou algo assim, é realmente apenas o nerd em mim que é curioso. Além disso, talvez os resultados me digam se há espaço para melhorias ou se tenho algo configurado incorretamente.

Então, como você testa corretamente a velocidade da rede entre as caixas do Ubuntu?

Jacob Schoen
fonte

Respostas:

272

Eu uso iperf. É uma organização do servidor cliente, na qual você o executa no modo de servidor em uma extremidade e se conecta a ele de outro computador do outro lado da rede.

Uma das duas máquinas é executada:

sudo apt-get install iperf

Iniciaremos um iperfservidor em uma das máquinas:

iperf -s

E então, no outro computador, diga iperfpara se conectar como cliente:

iperf -c <address of other computer>

Na máquina cliente, você verá algo assim:

oli@bert:~$ iperf -c tim
------------------------------------------------------------
Client connecting to tim, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.0.4 port 37248 connected with 192.168.0.5 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.04 GBytes    893 Mbits/sec

Obviamente, se você estiver executando um firewall na máquina do servidor, precisará permitir conexões na porta 5001 ou alterar a porta com o -psinalizador.


Você pode fazer praticamente a mesma coisa com o velho simples nc(netcat) se estiver inclinado a isso. Na máquina do servidor:

nc -vvlnp 12345 >/dev/null

Eo tubo cliente pode um gigabyte de zeros através ddsobre o nctúnel.

dd if=/dev/zero bs=1M count=1K | nc -vvn 10.10.0.2 12345

Como demod:

$ dd if=/dev/zero bs=1M count=1K | nc -vvn 10.10.0.2 12345
Connection to 10.10.0.2 12345 port [tcp/*] succeeded!
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 9.11995 s, 118 MB/s

O tempo é dado por, ddmas deve ser preciso o suficiente, pois só pode produzir com a rapidez que o tubo aguenta. Se você não estiver satisfeito com isso, poderá encerrar tudo em uma timeligação.

Lembre-se de que o resultado é em mega bytes, portanto multiplique por 8 para obter uma velocidade de mega bits por segundo. A demonstração acima está sendo executada em 944mbps.

Oli
fonte
Cara, você tem todas as respostas para minhas perguntas! Aparentemente, minha rede não está configurada e a sua apenas é transferida a 714 MBytes e largura de banda de 598 Mbits / s. Dunno pode investigar isso no futuro. Obrigado.
precisa
Para ser justo, a outra caixa fica a apenas uma chave (e a 20 metros de cat5e) de distância e não há congestionamento. 600mbps ainda é bem rápido.
Oli
Isso é ótimo, mas não tenho acesso root ao servidor.
Geoff
Tente -P 10. Meu resultado com conexão única é semelhante ao jschoens, mas com mais de 3 conexões paralelas, ele aumenta consistentemente 920Mbps.
Wujj123456
1
@CMCDragonkai Você provavelmente não deveria testar recursos que não são seus. Testes pesados ​​de largura de banda podem afetar a estabilidade a curto prazo.
Oli
22

O mesmo que a recomendação de Oli para o iperf. Só quero adicionar vários pontos:

  1. Também existem clientes Windows que permitem testar em várias plataformas.
  2. -t <seconds>altera a duração do teste. altera o número de conexões simultâneas. Por exemplo, testa 10 conexões juntas por 30 segundos e fornece resultados agregados, além de 10 velocidades de conexão separadas.-P <n>iperf -c [target IP] -P 10 -t 30
  3. Você não precisa do sudo. Você pode simplesmente baixar o binário em http://iperf.fr/ . Deveria funcionar. Faça o download com wget, torne-o executável com chmode você poderá executar diretamente o binário. Funciona perfeitamente.

Descobri que, usando as configurações padrão, a velocidade de conexão única flutua bastante. No entanto, com mais de 3 conexões paralelas, os resultados são mais consistentes no meu switch de gigabytes. (consistentemente @ 910-920Mbps)

wujj123456
fonte
8

Usando esse script, você pode testar facilmente a velocidade da conexão entre sua máquina e algum host remoto. Exemplo de uso:

$ scp-speed-test.sh user@remote_host 80000
  • user@remote_host é o seu host de destino (você deve ter acesso ssh a este host)
  • 80000é o tamanho aproximado do arquivo de teste (em kbs), que será recebido para o host remoto. Não é um argumento obrigatório.
VeLKerr
fonte
4
Isso parece testar a velocidade do aplicativo SCP, que será menor que um teste em uma camada inferior. Por exemplo, nc usa L4. Obviamente, isso é ótimo se você se importa mais com a velocidade do SCP.
sudo
1
Tem problemas: este script grava e lê um arquivo no disco - mais lento que o ram, por isso pode ser uma desaceleração artificial. Também só envia zeros, caso eles sejam compactados, é um grande aumento artificial. Se você quiser dados pseudo-aleatórios, não os utilize /dev/random(eles podem bloquear) ouurandom (os comentários do link sugeriram que eles) também podem ser muito lentos; em vez disso, use um dm-crypt (consulte a FAQ 2.19 do cryptsetup. Como posso limpar um dispositivo com criptografia? aleatoriedade de nota? ) talvez com um arquivo em ram.
Xen2050
4

Se você quiser testar sua LAN Ethernet em um nível mais baixo, use o Etherate, que é uma ferramenta gratuita de teste de Ethernet Linux CLI:

https://github.com/jwbensley/Etherate

Jogando tudo junto, como ferramentas como o iPerf (que são muito boas!) Operam sobre IP e TCP ou UDP. Testes de Etherate diretamente na camada 2 da Ethernet / OSI.

jwbensley
fonte
2

O comando abaixo não requer pacotes adicionais, mas o acesso SSH:

ssh [email protected] 'dd if=/dev/zero bs=1GB count=3 2>/dev/null' | dd of=/dev/null status=progress

Exemplo de saída:

2992238080 bytes (3.0 GB) copied, 27.010250 s, 111 MB/s
5859375+0 records in
5859375+0 records out
3000000000 bytes (3.0 GB) copied, 27.1943 s, 110 MB/s

O comando imprime um arquivo fictício de 3 GB (1000 ^ 3 bytes) cheio de zeros para stdout no servidor remoto, que é impresso (transferido) via SSH para stdout do servidor local e, em seguida, canalizado localmente /dev/null(ou seja, ignorado). Você pode até ver o progresso do teste enquanto o executa.

Certamente não é tão preciso quanto as outras ferramentas, mas meu caso de uso era depurar um processo de backup em que eu queria testar se a velocidade da rede era o problema sem instalar pacotes adicionais.

bm-bergmotte
fonte
1

Existem também algumas outras ferramentas interessantes de linha de comando para comparar a largura de banda entre dois hosts:

nuttcp

server$ nuttcp -S
client$ nuttcp -v -v -i1 1.1.1.1 ;# 1.1.1.1 is server's address

nepim

 server$ nepim
 client$ nepim -d -c 1.1.1.1 ;# 1.1.1.1 is server's address

goben

 server$ goben
 client$ goben -hosts 1.1.1.1 ;# 1.1.1.1 is server's address
Everton
fonte
2
Qual a diferença entre eles e o iperf? Eles funcionam da mesma forma, o que eles fazem? O nuttcp está no Debian e aparentemente "o nuttcp é baseado no nttcp, que por sua vez foi um aprimoramento de alguém da Silicon Graphics (SGI) no ttcp original, que foi escrito por Mike Muuss no BRL antes de dezembro de 1984, para comparar o desempenho de Pilhas TCP da UC Berkeley e BBN para ajudar a DARPA a decidir qual versão colocar na primeira versão do BSD Unix. "
Xen2050
0

como apontei no meu comentário na melhor resposta, essa solução não é boa o suficiente, porque o cliente / servidor não está otimizado para ... espremer toda velocidade

minha solução:

faça um ramdisk nos dois lados (portanto, você não está limitado pela velocidade de armazenamento e sugiro que você os tenha ramfs e não tmpfs, para que eles não sejam trocados ... apenas tome cuidado para não deixar pelo menos 512M de memória livre para o sistema, isso é NECESSÁRIO se você tiver giga ethernet; nessa velocidade, até os SSDs podem desacelerar) instale o apache no servidor, crie um link para o ramdisk, crie alguns arquivos grandes no ramdisk (100M-1G, você pode criá-los com dd em / dev / random ou copie se você tiver alguns em mãos), vá para o lado do cliente e faça o download (também no ramdisk desse lado) com um programa de download avançado, usei lftp

oh bem, a diferença foi grande, de 75mbps reportados pelo iperf e 9.5M / s netcat

para 11,18M / s com minha solução:

1591129421 bytes transferred in 136 seconds (11.18M/s)
O feiticeiro
fonte
9,5M * 8 = 76 mbps; está bem perto de 75 mbps
Fusca Software
-4

É fácil conectar seu computador na primeira caixa, conectar a outra caixa à primeira caixa. Em seguida, no computador, faça ping na primeira caixa e salve o resultado, ping na outra caixa e faça a subtração.

Nyamiou The Galeanthrope
fonte
10
Isso mostra a latência da rede, que é apenas uma parte da velocidade. Por exemplo, a conexão 3G do meu telefone tem uma latência enorme (100-300ms), mas ainda pode gerenciar uma taxa de transferência de 5mbps.
Oli
Não é minha culpa se ele pediu velocidade, mas queria taxa de transferência.
Nyamiou The Galeanthrope
1
Latência é tempo de reação, não velocidade.
wullxz