Jak testujesz prędkość sieci między dwoma urządzeniami?


168

Mam sieć Gigabit skonfigurowaną w moim domu i kilka urządzeń opartych na Ubuntu. Z całkowitej ciekawości chciałbym sprawdzić prędkość między dwoma polami. Nie mam żadnych problemów z prędkością ani niczym, tak naprawdę to ciekawy jest tylko maniak we mnie. A może wyniki dadzą mi znać, jeśli jest miejsce na ulepszenia lub że mam coś źle skonfigurowanego.

Jak więc poprawnie przetestować prędkość sieci między urządzeniami Ubuntu?

Odpowiedzi:


271

Używam iperf. Jest to ustawienie serwera klienta, polegające na tym, że uruchamiasz go w trybie serwera na jednym końcu i łączysz się z nim z innego komputera po drugiej stronie sieci.

Jedna z obu maszyn działa:

sudo apt-get install iperf

Uruchomimy iperfserwer na jednym z komputerów:

iperf -s

A następnie na drugim komputerze powiedz, iperfaby połączyć się jako klient:

iperf -c <address of other computer>

Na komputerze klienckim zobaczysz coś takiego:

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

Oczywiście, jeśli używasz zapory na serwerze, musisz zezwolić na połączenia na porcie 5001 lub zmienić port za pomocą -pflagi.


Możesz zrobić prawie to samo z zwykłym starym nc(netcat), jeśli masz taką skłonność. Na komputerze serwera:

nc -vvlnp 12345 >/dev/null

A rura może klient gigabyte zer przez ddnad nctunelem.

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

Jako 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

Czas jest podany przez, ddale powinien być wystarczająco dokładny, ponieważ może wydać tylko tak szybko, jak potoczy to rura. Jeśli nie jesteś z tego zadowolony, możesz zakończyć całą timerozmowę.

Pamiętaj, że wynik jest w mega bajtów więc pomnożyć przez 8, aby uzyskać mega bitów -per sekundę prędkości. Powyższa wersja demonstracyjna działa z prędkością 944 Mb / s.


Człowieku, masz wszystkie odpowiedzi na moje pytania! Najwyraźniej moja sieć nie jest skonfigurowana, a twój transfer ma tylko 714 MB i przepustowość 598 Mb / s. Dunno może przyjrzeć się temu w przyszłości. Dzięki.
Jacob Schoen

Szczerze mówiąc, drugie pudełko jest tylko jeden przełącznik (i 20 metrów cat5e) od siebie i nie ma zatorów. 600 Mb / s jest nadal dość szybkie.
Oli

To świetnie, ale nie mam dostępu root do serwera.
Geoff,

Spróbuj -P 10. Mój wynik z pojedynczym połączeniem jest podobny do jschoens, ale przy 3+ połączeniach równoległych konsekwentnie przesuwa 920 Mb / s.
wujj123456

1
@CMCDragonkai Prawdopodobnie nie powinieneś testować zasobów, które nie są twoje. Ciężkie testy przepustowości mogą mieć wpływ na stabilność krótkoterminową.
Oli

22

To samo co zalecenie Oli dla iperf. Chcę tylko dodać kilka punktów:

  1. Istnieją również klienci Windows, którzy umożliwiają testowanie na różnych platformach.
  2. -t <seconds>zmienia długość testu. zmienia liczbę jednoczesnych połączeń. Na przykład, testuj 10 połączeń razem przez 30 sekund i daje zagregowane wyniki wraz z 10 oddzielnymi prędkościami połączeń.-P <n>iperf -c [target IP] -P 10 -t 30
  3. Nie potrzebujesz sudo. Możesz po prostu pobrać plik binarny ze strony http://iperf.fr/ . To powinno działać. Pobierz go wget, zrób z niego chmod, a możesz bezpośrednio uruchomić plik binarny. Działa idealnie.

Odkryłem, że przy ustawieniach domyślnych szybkość pojedynczego połączenia zmienia się dość mocno. Jednak przy połączeniach równoległych 3+ wyniki są bardziej spójne na moim przełączniku gigabajtowym. (konsekwentnie @ 910-920 Mb / s)


8

Za pomocą tego skryptu możesz łatwo przetestować szybkość połączenia między twoim komputerem a jakimś zdalnym hostem. Przykład użycia:

$ scp-speed-test.sh user@remote_host 80000
  • user@remote_host jest hostem docelowym (musisz mieć dostęp ssh do tego hosta)
  • 80000to przybliżony rozmiar pliku testowego (w kbs), który zostanie odebrany na zdalnym hoście. Nie jest to argument obowiązkowy.

4
To wydaje się sprawdzać szybkość aplikacji SCP, która będzie niższa niż test na niższej warstwie. Na przykład nc używa L4. Oczywiście jest to świetne, jeśli bardziej zależy ci na szybkości SCP.
sudo

1
Ma problemy: ten skrypt zapisuje i odczytuje plik na dysk - jest wolniejszy od pamięci RAM, więc może być sztucznym spowolnieniem. Wysyła również tylko zera, jeśli są skompresowane, co jest dużym sztucznym przyspieszeniem. Jeśli chcesz mieć pseudolosowe dane, nie używaj /dev/random(może blokować) luburandom (sugerują to komentarze linków) mogą być również bardzo powolne, zamiast tego używaj dm-crypt (zobacz FAQ 2.19 cryptsetup Jak mogę wyczyścić urządzenie krypto- stopień losowości? ) może z plikiem w pamięci RAM.
Xen2050

4

Jeśli chcesz przetestować Ethernet LAN na niższym poziomie, możesz użyć Etherate, który jest bezpłatnym narzędziem do testowania interfejsu Linux CLI Ethernet:

https://github.com/jwbensley/Etherate

Rzucanie go w miksie, ponieważ narzędzia takie jak iPerf (które są bardzo dobre!) Działają przez IP i TCP lub UDP. Testy Etherate bezpośrednio przez warstwę Ethernet / OSI 2.


2

Poniższe polecenie nie wymaga dodatkowych pakietów, ale dostęp przez SSH:

ssh username@myserver.example.com 'dd if=/dev/zero bs=1GB count=3 2>/dev/null' | dd of=/dev/null status=progress

Przykładowe dane wyjściowe:

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

Polecenie drukuje atrapę pliku 3GB (1000 ^ 3 bajtów) pełnego zer na standardowe wyjście na zdalnym serwerze, który jest drukowany (przesyłany) przez SSH do standardowego serwera lokalnego, a następnie lokalnie przesyłany do /dev/null(tzn. Ignorowany). Możesz nawet zobaczyć postęp testu podczas jego wykonywania.

Z pewnością nie tak precyzyjne jak inne narzędzia, ale moim przypadkiem użycia było debugowanie procesu tworzenia kopii zapasowej, w którym chciałem sprawdzić, czy problem dotyczy prędkości sieci bez instalowania dodatkowych pakietów.


1

Istnieją również inne ładne narzędzia wiersza polecenia do testowania przepustowości między dwoma hostami:

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

2
Czym różnią się one od siebie i od iperf? Czy działają tak samo, co robią? nuttcp jest w Debianie i najwyraźniej „nuttcp jest oparty na nttcp, co z kolei było ulepszeniem przez kogoś z Silicon Graphics (SGI) na oryginalnym ttcp, napisanym przez Mike'a Muussa w BRL przed grudniem 1984 r., aby porównać wydajność Stosy TCP przez UC Berkeley i BBN, aby pomóc DARPA w podjęciu decyzji, którą wersję umieścić w pierwszym wydaniu BSD Unix. ”
Xen2050,

0

jak wskazałem w moim komentarzu, najlepsza odpowiedź, że to rozwiązanie nie jest wystarczająco dobre, ponieważ klient / serwer nie jest zoptymalizowany do ... zmniejszania każdej prędkości

moje rozwiązanie:

zrób ramdysk po obu stronach (dlatego nie jesteś ograniczony szybkością przechowywania i sugeruję, abyś zrobił je z ramfami, a nie tmpfs, więc nie będą się zamieniać ... po prostu uważaj, aby nie zostawić przynajmniej 512 MB wolnej pamięci w przypadku systemu jest to WYMAGANE, jeśli masz Gigabit Ethernet, przy tej prędkości nawet dyski SSD mogą spowolnić) zainstalować apache na serwerze, a następnie utworzyć łącze do ramdysku, utworzyć kilka dużych plików na ramdysku (100M-1G, można je utworzyć za pomocą dd z / dev / random lub copy, jeśli masz go pod ręką), a następnie przejdź do strony klienta i pobierz je (także na ramdysku tej strony) za pomocą zaawansowanego programu do pobierania, użyłem lftp

no cóż, różnica była duża, od 75 Mb / s zgłoszonych przez iperf i 9,5 M / s netcat

do 11,18 M / s z moim rozwiązaniem:

1591129421 bytes transferred in 136 seconds (11.18M/s)

9,5 M * 8 = 76 Mb / s; jest dość blisko 75 Mb / s
Fusca Software

-4

Łatwo podłącz komputer do pierwszego urządzenia, podłącz drugie urządzenie do pierwszego urządzenia. Następnie pinguj z komputera pierwsze pole, zapisz wynik, ping drugie pole i wykonaj odejmowanie.


10
Pokazuje opóźnienie sieci, które jest tylko jedną częścią prędkości. Na przykład połączenie 3G mojego telefonu ma ogromne opóźnienie (100–300 ms), ale nadal może zarządzać przepustowością 5 Mb / s.
Oli

Nie moja wina, że ​​zapytał o szybkość, ale chciał przepustowości.
Nyamiou The Galeanthrope

1
Opóźnienie to czas reakcji, a nie szybkość.
wullxz,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.