How to Test Network Throughput Using iperf3 Tool in Linux

iperf3 is a free open source, cross-platform command-line based program for performing real-time network throughput measurements. It is one of the powerful tools for testing the maximum achievable bandwidth in IP networks (supports IPv4 and IPv6).

Read Also: 16 Bandwidth Monitoring Tools to Analyze Network Usage in Linux

With iperf, you can tune several parameters associated with timing, buffers, and protocols such as TCP, UDP, SCTP. It comes in handy for network performance tuning operations.

In order to acquire maximum or rather improved network performance, you need to increase the throughput as well as the latency of your network’s receiving and sending capabilities. However, before you can go into actual tuning, you need to perform some tests to gather overall network performance statistics that will guide your tuning process.

Its results include time interval in seconds, data transferred, bandwidth (transfer rate), loss, and other useful network performance parameters. It is primarily intended to assist in tuning TCP connections over a particular path and this is what we will focus on in this guide.

Requirements:

  • Two networked computers which both have iperf3 installed.

How to Install iperf3 in Linux Systems

Before you start using iperf3, you need to install it on the two machines you will use for benchmarking. Since iperf3 is available in the official software repositories of most common Linux distributions, installing it should be easy, using a package manager as shown.

$ sudo apt install iperf3	#Debian/Ubuntu
$ sudo yum install iperf3	#RHEL/CentOS
$ sudo dnf install iperf3	#Fedora 22+ 

Once you have iperf3 installed on both machines, you can start testing network throughput.

How to Test Network Throughput Between Linux Servers

First connect to the remote machine which you will use as the server and fire up iperf3 in server mode using -s flag, it will listen on port 5201 by default.

You can specify the format (k, m, g for Kbits, Mbits, Gbits or K, M, G for KBytes, Mbytes, Gbytes) to report in, using the -f switch as shown.

$ iperf3 -s -f K 

If port 5201 is being used by another program on your server, you can specify a different port (e.g 3000) using the -p switch as shown.

$ iperf3 -s -p 3000

Optionally, you can run the server as a daemon, using the -D flag and write server messages to a log file, as follows.

$ iperf3 -s -D > iperf3log 

Then on your local machine which we will treat as the client (where the actual benchmarking takes place), run iperf3 in client mode using -c flag and specify the host on which the server is running on (either using its IP address or domain or hostname).

$ iperf3 -c 192.168.10.1 -f K

After about 18 to 20 seconds, the client should terminate and produce results indicating the average throughput for the benchmark, as shown in the following screenshot.

Test Network Throughput Between Servers
Test Network Throughput Between Servers

Important: From the benchmark results, as shown in the above screenshot, there is a variation in values from the server and client. But, you should always consider using the results obtained from the iperf client machine in every test you carry out.

How to Perform Advanced Network Test Throughput in Linux

There are a number of client-specific options for performing an advanced test, as explained below.

One of the important factors that determine the amount of data in the network a given time is the TCP window size – it is important in tuning TCP connections. You can set the window size/socket buffer size using the -w flag as shown.

$ iperf3 -c 192.168.10.1 -f K -w 500K	

To run it in reverse mode where the server sends and the client receives, add the -R switch.

$ iperf3 -c 192.168.10.1 -f K -w 500K -R	

To run a bi-directional test, meaning you measure bandwidth in both directions simultaneously, use the -d option.

$ iperf3 -c 192.168.10.1 -f K -w 500K -d

If you want to get server results in the client output, use the --get-server-output option.

$ iperf3 -c 192.168.10.1 -f K -w 500K -R --get-server-output
Get Server Network Results in Client
Get Server Network Results in Client

It is also possible to set the number of parallel client streams (two in this example), which run at the same time, using the -P options.

$ iperf3 -c 192.168.10.1 -f K -w 500K -P 2

For more information, see the iperf3 man page.

$ man iperf3

iperf3 Homepage: https://iperf.fr/

That’s all! Remember to always perform network performance tests before going for actual network performance tuning. iperf3 is a powerful tool, that comes in handy for running network throughput tests. Do you have any thoughts to share or questions to ask, use the comment form below.

If you liked this article, then do subscribe to email alerts for Linux tutorials. If you have any questions or doubts? do ask for help in the comments section.

If You Appreciate What We Do Here On TecMint, You Should Consider:

TecMint is the fastest growing and most trusted community site for any kind of Linux Articles, Guides and Books on the web. Millions of people visit TecMint! to search or browse the thousands of published articles available FREELY to all.

If you like what you are reading, please consider buying us a coffee ( or 2 ) as a token of appreciation.

Support Us

We are thankful for your never ending support.

11 thoughts on “How to Test Network Throughput Using iperf3 Tool in Linux”

  1. “You should write. For example test servers at https://iperf.cc
    6 Servers tested, all busy, giving up. Don’t update the article with this junk ;-)

    Reply
  2. typo errors — iperf 3. Should remove that space. Also, when using different port besides the default, you need to specify the port on the client-side also.

    Example:
    Server side iperf3 -s -p 8021
    Client side iperf3 -c 10.10.1.11 -p 8021 -f K

    Reply
  3. Problem with iperf3 is if I’m testing a connection with a temporary IP number (needed for the testing purpose) iperf would delete the temporary IP number as soon as I started it. So the test can never run.

    Reply
  4. Thanks for the article..

    I have one question the output of IPerf3 shows the amount of bandwidth. so how can we determine the throughput? since these two terms (bandwidth and throughput) are different.

    Regards

    Reply

Leave a Reply to jelabarre Cancel reply

Have a question or suggestion? Please leave a comment to start the discussion. Please keep in mind that all comments are moderated and your email address will NOT be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.