How to test Network Throughput using iperf January 21, 2011
Posted by Tournas Dimitrios in Linux.trackback
iperf is a network performance measurement tool that measures the TCP /UDP throughput of the network . In data transmission , throughput is the amount of data transferred successfully over a link from one end to another in a given period of time , it is usually expressed in bits per second (bps) .
iperf has a client and server functionality , and can measure the throughput between the two ends , either unidirectional or bi-directional . It allows the user to set various parameters that can be used for testing a network , or alternately for optimizing or tuning a network .
It is capable of generating traffic using TCP and UDP. The TCP and UDP tests are useful for performing the following kinds of tests:
- Latency (response time or RTT): can be measured with the Ping utility.
- Jitter: can be measured with an Iperf UDP test
- Datagram loss: can again, be measured with an Iperf UDP test.
- Throughput tests are done using the Iperf TCP tests.
Bandwidth vs Throughput
Bandwidth : Refers how fast a device can send data over a single communication channel .
Throughput: Refers how fast a device is actually sending data over the communication channel.
There are two versions of Iperf being maintained, Iperf 2.x and Iperf3. The latest version is a new implementation from scratch, with the goal of a smaller, simpler code base, and a library version of the functionality that can be used in other programs. iperf3 is not backwards compatible with iperf2.x . My favorite CentOs 5.x repository EPEL provides only the old version (ver 2) , but it is adequate to demonstrate the functionality of this utility . Just istall it : yum install iperf
Quick Howto
Here is the iperf quick howto to get started:
- Run the Iperf Server in a machine with -s
- Run the Iperf client in another machine using -c and the IP Address of the Iperf Server
- Finish, you will get your result
I never buy ready-made ethernet cables for my SOHO needs , so iperf is an excellent way to test my ethernet cables under heavy work loads .
| Client and Server options | ||
|---|---|---|
| Command line option | Description | |
| -f, –format [bkmaBKMA] | A letter specifying the format to print bandwidth numbers in. Supported formats are ‘b’ = bits/sec ‘B’ = Bytes/sec ‘k’ = Kbits/sec ‘K’ = KBytes/sec ‘m’ = Mbits/sec ‘M’ = MBytes/sec ‘g’ = Gbits/sec ‘G’ = GBytes/sec ‘a’ = adaptive bits/sec ‘A’ = adaptive Bytes/sec The adaptive formats choose between kilo- and mega- as appropriate. Fields other than bandwidth always print bytes, but otherwise follow the requested format. Default is ‘a’. |
|
| -i, --interval | Sets the interval time in seconds between periodic bandwidth, jitter, and loss reports. If non-zero, a report is made every interval seconds of the bandwidth since the last report. If zero, no periodic reports are printed. Default is zero. | |
| -p, --port | The server port for the server to listen on and the client to connect to. This should be the same in both client and server. Default is 5001, the same as ttcp. | |
| -u, --udp | Use UDP rather than TCP. See also the -b option. | |
| -w, --window | Sets the socket buffer sizes to the specified value. For TCP, this sets the TCP window size. For UDP it is just the buffer which datagrams are received in, and so limits the largest receivable datagram size. | |
| Server specific options | ||
| Command line option | Description | |
| -s, --server | Run Iperf in server mode. | |
| -D (from v1.2 or higher) | Run the server as a daemon (Unix platforms) On Win32 platforms where services are available, Iperf will start running as a service. |
|
| -R (only for Windows, from v1.2 or higher) | Remove the Iperf service (if it’s running). | |
| -o (only for Windows, from v1.2 or higher) | Redirect output to given file. | |
| -c, --client host | If Iperf is in server mode, then specifying a host with -c will limit the connections that Iperf will accept to the host specified. Does not work well for UDP. | |
| Client specific options | ||
| Command line option | Description | |
| -c, --client host | Run Iperf in client mode, connecting to an Iperf server running on host. | |
| -d, --dualtest | Run Iperf in dual testing mode. This will cause the server to connect back to the client on the port specified in the -L option (or defaults to the port the client connected to the server on). This is done immediately therefore running the tests simultaneously. If you want an alternating test try -r. | |
| -t, --time | The time in seconds to transmit for. Iperf normally works by repeatedly sending an array of len bytes for time seconds. Default is 10 seconds. See also the -l and -n options. | |
| -L, --listenport | This specifies the port that the server will connect back to the client on. It defaults to the port used to connect to the server from the client. | |
| -n, --num | The number of buffers to transmit. Normally, Iperf sends for 10 seconds. The -n option overrides this and sends an array of len bytes num times, no matter how long that takes. See also the -l and -t options. | |
| -T, --ttl | The time-to-live for outgoing multicast packets. This is essentially the number of router hops to go through, and is also used for scoping. Default is 1, link-local. | |
All these options and more are mentioned in a file ” /usr/share/doc/iperf-xxx/index.html” copy this file to your web server’s root directory and read it with your browser or open a browser and type :
file:///usr/share/doc/iperf-2.0.5/index.html
Developers in the community have also created a GUI for Iperf called Jperf, which is a Java based GUI that allows you to save settings, and more easily make changes to your settings. For information on Iperf head on over to the Wiki page, or their page over at SourceForge.
Links :
- iperf3 site at Google Code
- Iperf site at SourceForge
- Download Iperf for Windows here and Jperf here
- Iperf used to measure 70km Wi-Fi link (PDF)
| Run the server as a daemon (Unix platforms) On Win32 platforms where services are available, Iperf will start running as a service. |


Linux >>> 

Thank you, this is what i’m looking for because i need to find out what speed that i got from my ISP. Speedtest seems not too accurate to test throughput. I found iperf is more accurate.