Back to Home Back to Archive

Iperf3 & WiFiPerf

While Ookla (speedtest.net) is a great resource when out on public networks, I'd recommend having something on your LAN for more consistent and thorough results. Personally, I'm an Android user (mobile/tablet), OSX (Macbook Air laptop) & Linux (desktop). Many of my coworkers are iOS (iPhone/iPad) users and I like the capability of having people in the field run tests and provide feedback. Multi-platform support is key for a tool like this.
I've been an Iperf2 user for years, but it's been out of development for quite some time, so figured it was time to move on to Iperf3. Theirs also some handy GUI's available for Iperf3, as detailed below.

Here is a brief step-by-step on how to set up the server (Debian) and clients (Android,iOS,OSX,Windows,Linux).

Server

Get the source for the correct version of iperf (Iperf 3.0-BETA4) from https://github.com/cpaasch/iperf3, and extract. Make sure you download the correct version.
$ wget https://github.com/cpaasch/iperf3/archive/3.0-BETA4.zip
$ unzip 3.0-BETA4.zip
Build & install:
$ cd iperf3-3.0-BETA4
$ ./configure
$ make
$ make install
Note, you may need to install additional packages if not already on the system. Just watch the output of 'configure' for errors...they are usually self explanatory. If installing on Ubuntu, you'll need to install uuid-dev (sudo apt-get install uuid-dev)
Once installed, verify you've got the correct version with "iperf3 -v". It should output the following:
$ iperf3 -v
iperf version 3.0-BETA4 (2 Aug 2010)
If you're familiar with iperf2, many of the command-line switches are the same. For a list of the different options, just run iperf3 without any switches. Run IPerf3 in server mode with:
$ iperf3 -s

Clients

CLI clients (for OSX or Windows) are at http://accessagility.com/products/wifiperf.html
GUI versions exist for OSX, Android & iOS...in their respective App Stores; also available at the accessagility link.
For Linux, just compile (as noted above). All CLI clients can be run in "client" or "server" mode. For a quick test from Windows, OSX or Linux CLI run:
$ iperf3 -c <server_ip> -i1
Connecting to host <server_ip>, port 5201
[ 4] local 10.81.76.49 port 50569 connected to <server_ip> port 5201
[ ID] Interval        Transfer        Bandwidth
[ 4] 0.00-1.02 sec 5.12 MBytes 42.3 Mbits/sec
You can see the results on stdout (ie on your terminal), at 1 second intervals ("-i" option). Again, to see the different options available just run iperf3 wihtout any switches.
Note: If using OSX CLI version, I'd recommend copying the downloaded binary to /usr/local/bin/, so you can simply type "iperf3...."

Features

Some features I like about iperf3:
  • the server will, by default, only run a test with a single client at a time. If you try to run two tests simultaneously, you'll see a message like the following:
error: The server is busy running a test. try again later.
That's from an OSX client.
This was not available in iperf2 (unless you use something like bwctl).  I like this because once deployed, with many using the service at once, you would get inconsistent results if uplink from "server" is saturated. Note, you can run multiple streams in parallel (see "-P" option)
  • Another example, using a "reverse" test (from server to client):
iperf3 -c <server_ip> -i1 -R
This can be really useful when testing WiFi. This was not possible with IPerf2 (without extra work). Having asymetric throughput issues could tell you a lot.

Final notes

  • I like the mobile clients' ability to be run in either server or client mode, at the push of a button. Useful for a "phone-to-phone" test, as an example. I can also appreciate the graphs, and historical data (BSSID, SSID etc.) that is kept in the GUI versions.
  • "iperf3 -D" (Daemon mode) not available in this version of iperf3. It will certainly be available in the 3.0.1 version, and once Accessagility updates their software, I'd recommend switching to that version on your server as well (make uninstall before building new version).
For now, send the "server" to the background, so it doesn't quit when you end your session. One way would be:
iperf3 -s &
  • I'd like to see a "stats interval" of 1 second on the Android app. (similar to a "-i1" switch on CLI client). Hopefully that's on the roadmap.
  • It's extremely lightweight and can be put on a small-form factor pc (ie Rasberry PI). Here's mine, hooked up to an AP.
Note: Rasberry PI interface limited by USB buss speed (!>100Mb/s)

Watch Zaib Kaleem's presentation on this subject, including more use-cases, from the WLPC conference at http://vimeo.com/88462948