Pomiar wydajności TCP i UDP w sieci za pomocą Iperf
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:
- 40G/100G Tuning (fasterdata.es.net)
- iperf3 at 40Gbps and above (fasterdata.es.net)
- Network Tuning and Performance: a simple guide to enhancing network speeds (calomel.org)
Odnośniki
Autor: Christoph Mitasch