Iperf Speed Testing

From WIKI - ACD.net
Jump to: navigation, search

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.

Speed Test Software, Websites and Issues with Getting Accurate data

There are many types of speed test softwares, with varying degrees of accuracy. Additionally, there are speed testing websites, these websites are inherently innaccurate, and do not provide a scientific or reliable data for troubleshooting. While sometimes usesful, websites such as http://www.speedtest.net and http://speedtest.acd.net (which is part of the speedtest.net network of server) will not provide accurate speed results on many types of connections, including wifi, bonded T1 lines, and many EFM services. Although ACD participates in speedtesting websites such as speedtest.net thier usufullness is limited. These sites will not provide accurate speeds for services faster than 40-100mb/s.

ACD uses IPerf as the standard software for doing all 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) with a TCP window size of 127K.

iperf -c iperf.acd.net -P 10 -t 240 -w 130000

his command will run 10 parallel client threads over 240 seconds (4min) with a TCP window size of 127K - first upload then download test.

iperf -c iperf.acd.net -P 10 -t 240 -w 130000 -r

Servers on ACD.net's Network Configured for iperf

iperf.acd.net

Installing Iperf

Here is the best place to get the latest software: http://iperf.fr/

Download IPerf, unrar and install into c:\iperf\

For Windows XP and Windows 7, all you need to do is unzip the files and move them to your newly created iperf directory(folder).

Example: Create a new folder in your C Drive called iperf.

C:\iperf

Unzip the files and move them to C:\iperf.

Open a command prompt(Win>Run>cmd) and change directories(cd) to the C drive(c:\) under the iperf directory(c:\iperf)

Run Iperf and performing initial testing

Run your iperf testing:

  • iperf -c iperf.acd.net -P 10 -t 240
C:\Users\henry.joshua.ACDINTERNAL>cd c:\iperf

c:\iperf>iperf -c iperf.acd.net -P 10 -t 240
------------------------------------------------------------
Client connecting to iperf.acd.net, TCP port 5001
TCP window size: 64.0 KByte (default)
------------------------------------------------------------
[ 12] local 69.63.233.15 port 63169 connected with 69.63.226.198 port 5001
[ 11] local 69.63.233.15 port 63168 connected with 69.63.226.198 port 5001
[  9] local 69.63.233.15 port 63166 connected with 69.63.226.198 port 5001
[ 10] local 69.63.233.15 port 63167 connected with 69.63.226.198 port 5001
[  8] local 69.63.233.15 port 63165 connected with 69.63.226.198 port 5001
[  7] local 69.63.233.15 port 63164 connected with 69.63.226.198 port 5001
[  5] local 69.63.233.15 port 63162 connected with 69.63.226.198 port 5001
[  6] local 69.63.233.15 port 63163 connected with 69.63.226.198 port 5001
[  4] local 69.63.233.15 port 63161 connected with 69.63.226.198 port 5001
[  3] local 69.63.233.15 port 63160 connected with 69.63.226.198 port 5001

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 (iperf.acd.net), you do not need to install your own server. If you are planning on running your own server; the servers should not have a lot of other applications or software or active usage to get test results.

If you are going to run 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)

Complete List of Options/Arguments/Flags

This is a complete list of the arguments for testing with Iperf.

C:\iperf>iperf --help
Usage: iperf [-s|-c host] [options]
       iperf [-h|--help] [-v|--version]

Client/Server:
  -f, --format    [kmKM]   format to report: Kbits, Mbits, KBytes, MBytes
  -i, --interval  #        seconds between periodic bandwidth reports
  -l, --len       #[KM]    length of buffer to read or write (default 8 KB)
  -m, --print_mss          print TCP maximum segment size (MTU - TCP/IP header)
  -o, --output    <filename> output the report or error message to this specified file
  -p, --port      #        server port to listen on/connect to
  -u, --udp                use UDP rather than TCP
  -w, --window    #[KM]    TCP window size (socket buffer size)
  -B, --bind      <host>   bind to <host>, an interface or multicast address
  -C, --compatibility      for use with older versions does not sent extra msgs
  -M, --mss       #        set TCP maximum segment size (MTU - 40 bytes)
  -N, --nodelay            set TCP no delay, disabling Nagle's Algorithm
  -V, --IPv6Version        Set the domain to IPv6

Server specific:
  -s, --server             run in server mode
  -D, --daemon             run the server as a daemon
  -U, --single_udp         run in single threaded UDP mode
  -R, --remove             remove service in win32

Client specific:
  -b, --bandwidth #[KM]    for UDP, bandwidth to send at in bits/sec
                           (default 1 Mbit/sec, implies -u)
  -c, --client    <host>   run in client mode, connecting to <host>
  -d, --dualtest           Do a bidirectional test simultaneously
  -n, --num       #[KM]    number of bytes to transmit (instead of -t)
  -r, --tradeoff           Do a bidirectional test individually
  -t, --time      #        time in seconds to transmit for (default 10 secs)
  -F, --fileinput <name>   input the data to be transmitted from a file
  -I, --stdin              input the data to be transmitted from stdin
  -L, --listenport #       port to recieve bidirectional tests back on
  -P, --parallel  #        number of parallel client threads to run
  -T, --ttl       #        time-to-live, for multicast (default 1)
  -Z, --linux-congestion <algo>  set TCP congestion control algorithm (Linux only)

Miscellaneous:
  -x, --reportexclude [CDMSV]   exclude C(connection) D(data) M(multicast) S(settings) V(server) reports
  -y, --reportstyle C      report as a Comma-Separated Values
  -h, --help               print this message and quit
  -v, --version            print version information and quit

[KM] Indicates options that support a K or M suffix for kilo- or mega-

The TCP window size option can be set by the environment variable
TCP_WINDOW_SIZE. Most other options can be set by an environment variable
IPERF_<long option name>, such as IPERF_BANDWIDTH.
Personal tools
Namespaces

Variants
Actions
Navigation
Tools