How to use iperf3 tool to monitor network bandwidth in Linux

How to use iperf3 tool to monitor network bandwidth in Linux

How to use iperf3 tool to monitor network bandwidth in LinuxI have already written an article to check the network bandwidth speed using netperf available at below link
How to monitor network bandwidth in Linux using netperf

In this article I will guide you the steps to be used to monitor the available network bandwidth using iperf3.
One advantage here you have with iperf3 that it is a part of the Red Hat Vanilla DVD and you need not download any third party tool.

Below steps are validated on Red Hat Enterprise Linux 7

You can install the iperf3 using yum command assuming you have a valid repository or you can copy the rpm from the Red Hat DVD and install it manually

The latest version of the iperf source code is at https://github.com/esnet/iperf

With the below list of steps the iperf sets a large send and receive buffer size to maximise throughput, and performs a test for 60 seconds which should be long enough to fully exercise a network.

On Server (IP: 10.58.160.101)

# yum install iperf3
OR
# rpm -Uvh /home/deepak/iperf3-3.1.7-2.el7.x86_64.rpm
warning: /home/deepak/iperf3-3.1.7-2.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing...                ################################# [100%]
Updating / installing...
   1:iperf3-3.1.7-2.el7     ################################# [100%]
Explanation of the switches used:
 -i, --interval n
       pause n seconds between periodic bandwidth reports; default is 1, use 0 to disable
 -s, --server
       run in server mode
Run the below command on the server
server # iperf3 -i 10 -s
warning: this system does not seem to support IPv6 - trying IPv4
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 10.58.160.103, port 40614
[  5] local 10.58.160.101 port 5201 connected to 10.58.160.103 port 40616
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-10.00  sec  1.27 GBytes  1.09 Gbits/sec
[  5]  10.00-20.00  sec  1.27 GBytes  1.09 Gbits/sec
[  5]  20.00-30.00  sec  1.27 GBytes  1.09 Gbits/sec
[  5]  30.00-40.00  sec  1.27 GBytes  1.09 Gbits/sec
[  5]  40.00-50.00  sec  1.27 GBytes  1.09 Gbits/sec
[  5]  50.00-60.00  sec  1.27 GBytes  1.09 Gbits/sec
[  5]  60.00-60.04  sec  4.78 MBytes  1.04 Gbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-60.04  sec  0.00 Bytes  0.00 bits/sec                  sender
[  5]   0.00-60.04  sec  7.63 GBytes  1.09 Gbits/sec                  receiver
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.169.173.7, port 35190
[  5] local 192.169.173.5 port 5201 connected to 192.169.173.7 port 35192
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-10.00  sec  3.55 GBytes  3.05 Gbits/sec
[  5]  10.00-20.00  sec  3.59 GBytes  3.08 Gbits/sec
[  5]  20.00-30.00  sec  3.59 GBytes  3.08 Gbits/sec
[  5]  30.00-40.00  sec  3.59 GBytes  3.08 Gbits/sec
[  5]  40.00-50.00  sec  3.59 GBytes  3.08 Gbits/sec
[  5]  50.00-60.00  sec  3.59 GBytes  3.08 Gbits/sec
[  5]  60.00-60.04  sec  14.4 MBytes  3.14 Gbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-60.04  sec  0.00 Bytes  0.00 bits/sec                  sender
[  5]   0.00-60.04  sec  21.5 GBytes  3.07 Gbits/sec                  receiver
-----------------------------------------------------------
Server listening on 5201
By default the server will use TCP port 5201, if you intend to use some other port use "-p" switch
 -p, --port n
        set server port to listen on/connect to to n (default 5201)

On Client (192.169.173.7, 10.58.160.103)

# rpm -Uvh /tmp/iperf3-3.1.7-2.el7.x86_64.rpm
warning: /tmp/iperf3-3.1.7-2.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:iperf3-3.1.7-2.el7               ################################# [100%]
Explanation of the switches used:
-i, --interval n
      pause n seconds between periodic bandwidth reports; default is 1, use 0 to disable

-w, --window n[KM]
      window size / socket buffer size (this gets sent to the server and used on that side)

-t, --time n
      time in seconds to transmit for (default 10 secs)

-c, --client host
      run in client mode, connecting to the specified server

Run the below command wherein the IP with -c is the server IP (eth0)
client # iperf3 -i 10 -w 1M -t 60 -c 10.58.160.101
Connecting to host 10.58.160.101, port 5201
[  4] local 10.58.160.103 port 40616 connected to 10.58.160.101 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-10.00  sec  1.27 GBytes  1.09 Gbits/sec    0   2.30 MBytes
[  4]  10.00-20.00  sec  1.27 GBytes  1.09 Gbits/sec    0   2.30 MBytes
[  4]  20.00-30.00  sec  1.27 GBytes  1.09 Gbits/sec    0   2.30 MBytes
[  4]  30.00-40.00  sec  1.27 GBytes  1.09 Gbits/sec    0   2.30 MBytes
[  4]  40.00-50.00  sec  1.27 GBytes  1.09 Gbits/sec    0   2.30 MBytes
[  4]  50.00-60.00  sec  1.27 GBytes  1.09 Gbits/sec    0   2.30 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-60.00  sec  7.63 GBytes  1.09 Gbits/sec    0             sender
[  4]   0.00-60.00  sec  7.63 GBytes  1.09 Gbits/sec                  receiver

iperf Done.
Another attempt using a different interface (eth2)
client # iperf3 -i 10 -w 1M -t 60 -c 192.169.173.5
Connecting to host 192.169.173.5, port 5201
[  4] local 192.169.173.7 port 35192 connected to 192.169.173.5 port 5201

[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-10.00  sec  3.56 GBytes  3.06 Gbits/sec    0   2.10 MBytes
[  4]  10.00-20.00  sec  3.59 GBytes  3.08 Gbits/sec    0   2.10 MBytes
[  4]  20.00-30.00  sec  3.59 GBytes  3.08 Gbits/sec    0   2.10 MBytes
[  4]  30.00-40.00  sec  3.59 GBytes  3.08 Gbits/sec    0   2.10 MBytes
[  4]  40.00-50.00  sec  3.59 GBytes  3.08 Gbits/sec    0   2.10 MBytes
[  4]  50.00-60.00  sec  3.59 GBytes  3.08 Gbits/sec    0   2.10 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-60.00  sec  21.5 GBytes  3.08 Gbits/sec    0             sender
[  4]   0.00-60.00  sec  21.5 GBytes  3.08 Gbits/sec                  receiver

iperf Done.
Lets check the allowed bandwidth speed for each of this interface

The first attempt was done using eth0
# ethtool eth0 | grep Speed
        Speed: 1000Mb/s
The second attempt was done using eth2
# ethtool eth2 | grep Speed
        Speed: 3000Mb/s
So as we see the allowed bandwidth for eth0 was 1 Gb and we had a bandwidth speed of almost 1.09Gb/s

while for the other interface we had an allowed bandwidth of 3 Gb/s wherein the bandwidth throughput reached 3.08 Gb/s

I hope this article was useful.

Leave a Comment