Iperf Speed Testing
Contents |
What it Is
Iperf is an industry standard tool for doing accurate speed testing. This tool is accurate and provides clear metrics to understand and use the performance metrics it produces. Iperf is open source code, and is publicly available. Please read carefully the information contained in this document, as modifications from the standards used may affect the results substantially.
- Iperf is the command line version.
- Jperf is a Graphical User Interface version that uses Iperf.
- Public Source Information about Iperf is located here: http://en.wikipedia.org/wiki/Iperf
- ACD's Iperf server is iperf.acd.net
Speed Test Software and Issues
There are many types of speed test softwares. Speed testing websites is inherently innaccurate due to the complex nature of Internet, and other processing interference issues. While sometimes usesful, websites such as www.speedtest.net and speedtest.acd.net will not provide accurate speed results on many types of connections, including wifi, bonded T1 lines, and many EFM services. In addtion these sites will not provide accurate speeds for services faster than 40-100mb/s.
ACD uses IPerf as the standard software for doing performance testing. For debugging purposes, ACD only uses Iperf. We do not rely upon random "speed test" websites for debugging purposes.
Changing variables within Iperf also change the performance results, often quite dramatically. Based upon our lab results, please provide us data with the Recommended Settings for Testing below. Data without the recommended settings and time stamps will generally not be taken into account for troubleshooting.
Recommended Settings for Testing
This command will run 10 parallel client threads over 240 seconds (4min).
iperf -c iperf.acd.net -P 10 -t 240
Servers on ACD.net's Network Configured for iperf
iperf.acd.net
Installing Iperf
Download IPerf, unrar and install into c:\iperf\
Getting Started
To begin using iperf, open up the command prompt and change to the iperf directory by typing cd c:\iperf.
Server Setup (Windows)
If you are testing to the ACD server, you do not need to install your own server.
To begin transmitting files between two locations, one machine must be designated the server, while the other must be the client. The command to designate one machine as the server is as follows:
iperf -s
The full command line at this point should read as follows:
C:\iperf>iperf -s ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 8.00 KByte (default)
This setup is useful for creating a temporary iperf server for an iperf client to test to. It does not, however, set up a persistent server that will be up and online automatically whenever the machine is.
Client Setup (Windows)
In order for the second machine to run in client mode, the following command will be entered into the command prompt:
iperf -c [server IP address -or- Hostname]
At this point the client will connect to the server and transfer a single file for the default period of 10 seconds.
C:\iperf>iperf -c 69.63.233.183 ------------------------------------------------------------ Client connecting to 69.63.233.183, TCP port 5001 TCP window size: 8.00 KByte (default) ------------------------------------------------------------ [1832] local 69.63.233.182 port 3716 connected with 69.63.233.183 port 5001 [ ID] Interval Transfer Bandwidth [1832] 0.0-10.0 sec 109 MBytes 91.7 Mbits/sec
Client Arguments
The iperf client supports a great deal of arguments that allow for the transfer to be customized in a number of ways. The following section covers these arguments in detail:
Using Single Arguments
Changing the duration of transfer:
To change the duration of the transfer from the default value of 10 seconds, the argument -t # can be added to the end of the client command, where # represents the duration in seconds.
C:\iperf>iperf -c iperf.acd.net -t 5
This argument would transfer data to the server for 5 seconds instead of the default 10 seconds.
Changing the interval rate:
The interval at which data is transferred to the server can be set by using the argument -i # where # represents the period in seconds for each interval.
C:\iperf>iperf -c 69.63.233.84 -i 2
This argument would transfer data to the server for 10 seconds (default), and display the data in intervals of 2 seconds (-i 2)
Transferring a specific file size:
To transfer a file via iperf based on a specific file size as opposed to a duration, the argument -n # is used, where # represents the file size in bytes. You can also use -n #M or -n #K to enter transfer size in Mbytes or Kbytes.
C:\iperf>iperf -c netflow01.acd.net -n 100000
Will display like:
------------------------------------------------------------ Client connecting to netflow01.acd.net, TCP port 5001 TCP window size: 8.00 KByte (default) ------------------------------------------------------------ [1908] local 69.63.233.190 port 3605 connected with 207.179.118.136 port 5001 [ ID] Interval Transfer Bandwidth [1908] 0.0- 0.0 sec 104 KBytes 54.5 Mbits/sec
And
C:\iperf>iperf -c netflow01.acd.net -n 100M
Will display like:
------------------------------------------------------------ Client connecting to netflow01.acd.net, TCP port 5001 TCP window size: 8.00 KByte (default) ------------------------------------------------------------ [1908] local 69.63.233.190 port 3614 connected with 207.179.118.136 port 5001 [ ID] Interval Transfer Bandwidth [1908] 0.0- 8.9 sec 100 MBytes 94.0 Mbits/sec
Bidirectional testing: Individually
To test both directions of the transfer, one direction at a time, the argument -r is used.
C:\iperf>iperf -c 69.63.233.182 -r
This argument will test in both directions in turn and will output something like this:
------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 8.00 KByte (default) ------------------------------------------------------------ ------------------------------------------------------------ Client connecting to 69.63.233.182, TCP port 5001 TCP window size: 8.00 KByte (default) ------------------------------------------------------------ [1852] local 69.63.233.190 port 3058 connected with 69.63.233.182 port 5001 [ ID] Interval Transfer Bandwidth [1852] 0.0-10.0 sec 110 MBytes 92.5 Mbits/sec [1944] local 69.63.233.190 port 5001 connected with 69.63.233.182 port 2828 [ ID] Interval Transfer Bandwidth [1944] 0.0-10.0 sec 81.9 MBytes 68.8 Mbits/sec
Bidirectional testing: Simultaneously
To test both directions of the transfer simultaneously, the argument -d is used.
C:\iperf>iperf -c netflow01.acd.net -d
Will output like:
------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 8.00 KByte (default) ------------------------------------------------------------ ------------------------------------------------------------ Client connecting to netflow01.acd.net, TCP port 5001 TCP window size: 8.00 KByte (default) ------------------------------------------------------------ [1848] local 69.89.110.216 port 2993 connected with 207.179.118.136 port 5001 [1816] local 69.89.110.216 port 5001 connected with 207.179.118.136 port 55020 [ ID] Interval Transfer Bandwidth [1848] 0.0-130.2 sec 848 KBytes 53.4 Kbits/sec [1816] 0.0-163.9 sec 3.13 MBytes 160 Kbits/sec
Running Multiple Parallel Connections
The argument -P # where # represents the number of parallel connections you want to run.
C:\iperf>iperf -c netflow01.acd.net -P 3
Will output like:
------------------------------------------------------------ Client connecting to netflow01.acd.net, TCP port 5001 TCP window size: 8.00 KByte (default) ------------------------------------------------------------ [1872] local 69.89.110.216 port 3065 connected with 207.179.118.136 port 5001 [1888] local 69.89.110.216 port 3064 connected with 207.179.118.136 port 5001 [1908] local 69.89.110.216 port 3063 connected with 207.179.118.136 port 5001 [ ID] Interval Transfer Bandwidth [1908] 0.0-130.4 sec 456 KBytes 28.6 Kbits/sec [1872] 0.0-130.4 sec 264 KBytes 16.6 Kbits/sec [1888] 0.0-130.9 sec 208 KBytes 13.0 Kbits/sec [SUM] 0.0-130.9 sec 928 KBytes 58.1 Kbits/sec
Displaying the results port by port followed by the [SUM] with totals for the entire transaction.
Choosing which port to connect to or listen on
To set which ports to use on the client side of iperf the argument -p and -L are utilized.
- When used by the client, the -p argument determines which port on the server to connect to using the format -p #' where # is a port number on the iperf server.
- The -L argument lets you select which port the client will listen on in the case of bidirectional testing using the format -L # where # is a port number on the client machine.
Using Multiple Arguments
It is possible to use iperf arguments together to have more control over the testing process and the results you receive in return. What follows are examples of some of the useful and possible combination of iperf arguments.
Using the interval and duration arguments together:
Changing both the duration of the transfer as well as the interval for the same test is as simple as adding both arguments to the command line:
C:\iperf>iperf -c 69.63.233.84 -i 2 -t 20 This argument would transfer data to the server for 20 seconds (-t 20), and display the data in intervals of 2 seconds (-i 2)