Pomiar wydajności TCP i UDP w sieci za pomocą Iperf

Z Thomas-Krenn-Wiki
Przejdź do nawigacji Przejdź do wyszukiwania

Narzędzie iperf open source pozwala na pomiar maksymalnej przepustowości TCP i UDP w sieci. Jest alternatywą dla netperf[1].

Instalacja

Iperf jest zawarty w repozytoriach systemów Debian i Ubuntu. Oznacza to, że może zostać łatwo zainstalowany za pośrednictwem apt-get install iperf.

Dla systemów RHEL i CentOS pakiet IPerf dostępny jest w repozytorium EPEL. [2]

Alternatywnie może zostać pobrany kod źródłowy ze strony IPerf.[3]

Zastosowanie

Iperf funkcjonuje w systemie klient - serwer, oznacza to, że najpierw uruchamiany jest demon IPerf na serwerze i następnie łączy się z klientem IPerf. Zarówno serwer jak i klient zawarty jest w tym samym pakiecie. Podczas podawania adresu IP na kliencie należy zwrócić uwagę, żeby był to adres należący do interfejsu, który ma zostać przetestowany.

Pomiar wydajności TCP

W tym przypadku mierzona jest wydajność TCP na karcie sieciowej 1 GBit.

Server1:

[root@server1 ~]# iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 192.168.255.1 port 5001 connected with 192.168.255.2 port 39838
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  1.10 GBytes   941 Mbits/sec

Server2:

[root@server2 ~]# iperf -c 192.168.255.1
------------------------------------------------------------
Client connecting to 192.168.255.1, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.255.2 port 39838 connected with 192.168.255.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.10 GBytes   944 Mbits/sec


Pomiar wydajności UDP

Na tym samym systemie przeprowadzany jest pomiar wydajności UDP. W tym przypadku musi zostać dodatkowo podana wykorzystywana przepustowość (-b), domyślna wartość tutaj to 1 MBit/s.

Server1:

[root@server1 ~]# iperf -s -u
------------------------------------------------------------
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size:  126 KByte (default)
------------------------------------------------------------
[  3] local 192.168.255.1 port 5001 connected with 192.168.255.2 port 40612
[ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams
[  3]  0.0-10.0 sec   889 MBytes   746 Mbits/sec   0.065 ms  621/634707 (0.098%)
[  3]  0.0-10.0 sec  1 datagrams received out-of-order

Server2:

[root@server2 ~]# iperf -c 192.168.255.1 -u -b 1000M
------------------------------------------------------------
Client connecting to 192.168.255.1, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size:  126 KByte (default)
------------------------------------------------------------
[  3] local 192.168.255.2 port 40612 connected with 192.168.255.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec   890 MBytes   746 Mbits/sec
[  3] Sent 634708 datagrams
[  3] Server Report:
[  3]  0.0-10.0 sec   889 MBytes   746 Mbits/sec   0.065 ms  621/634707 (0.098%)
[  3]  0.0-10.0 sec  1 datagrams received out-of-order

Uwagi dotyczące testów 10G/40G

W przypadku testów z połączeniem 40 Gbit/s, możliwe jest, że pojedynczy rdzeń CPU może stać się wąskim gardłem. W tym przypadku zaleca się przeprowadzenie kilku równoległych testów na różnych portach.

Dodatkowe informacje na ten temat można znaleźć na poniższych stronach:

Odnośniki

  1. Netperf (www.netperf.org)
  2. Pakiet IPerf z repozytorium EPEL (download.fedora.redhat.com)
  3. IPerf (sourceforge.net)

Autor: Christoph Mitasch

Powiązane artykuły

Analiza ruchu sieciowego w Linuksie z mtr
Analiza sieci w Linuksie z traceroute