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.