Measure Wireless Throughput Using iPerf
By Karla Cisneros Galvan
Introduction
This document explains how to effectively measure throughput on a wireless network.
Instructions
Step 1. Install iperf on a client that can be connected by cable to the network. This client will act as the iperf server.
Step 2. Install iperf on a client that can be connected wirelessly to the network. This wireless client will be used as the iperf client.
Step 3. Build a topology like this one:
Note: Ensure both iperf server and client belong to the same VLAN/subnet.
Ensure either the server or the client is connected by wired, otherwise they'll be sharing the RF spectrum and most likely will halve their speed.
Step 4. Start iperf on the server
$ iperf -s
-s = host acting as server
Note: If using iperf v3, you need to use the command iperf3 -s.
Step 5. Start the iperf data transfer on the client to measure the throughput.
Measure upstream throughput (Traffic from the wireless client to the Access Point):
$ iperf -c <server-IP> -u -i 1 -t 10 -b 900M
-u = UDP
-i 1 = measurement is displayed every one sec
-t 10 = Test performed for 10 seconds
-b 900M = client will attempt to send/receive 900M per measurement. Modify as desired.
To learn more about the flags and their usage, check iPerf user documentation.
Measure downstream throughput (Traffic from the Access Point to the wireless client):
$ iperf -c <server-IP> -u -i 1 -t 10 -b 900M -R
-R = send traffic from the server to the client (By default iperf measure traffic from the client to the server)
Note: If using iperf v3, use the command iperf3 -c…
Note: By default, iperf client measures traffic sent from the client itself towards the server. If your server is running on the wireless client and the client is on the wired side, and you want to measure the upstream throughput, you need to use the -R option.
Note: If you are using a mobile device such as a smartphone or tablet, there are iperf apps that you could also use. The same syntax should work.
Output Examples
Upstream Measurements
Server |
Client |
----------------------------------------------------------- Server listening on 5201 ----------------------------------------------------------- Accepted connection from 192.168.40.9, port 59825 [ 6] local 172.16.10.208 port 5201 connected to 192.168.40.9 port 55823 [ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams [ 6] 0.00-1.00 sec 7.53 MBytes 63.2 Mbits/sec 0.138 ms 14687/20139 (73%) [ 6] 1.00-2.00 sec 7.87 MBytes 66.0 Mbits/sec 0.123 ms 11372/17073 (67%) [ 6] 2.00-3.00 sec 7.99 MBytes 67.0 Mbits/sec 0.136 ms 14009/19795 (71%) [ 6] 3.00-4.00 sec 8.30 MBytes 69.6 Mbits/sec 0.121 ms 11912/17919 (66%) [ 6] 4.00-5.00 sec 8.19 MBytes 68.7 Mbits/sec 0.190 ms 25572/31501 (81%) [ 6] 5.00-6.00 sec 7.95 MBytes 66.7 Mbits/sec 0.114 ms 14714/20469 (72%) [ 6] 6.00-7.00 sec 8.24 MBytes 69.1 Mbits/sec 0.126 ms 11797/17762 (66%) [ 6] 7.00-8.00 sec 8.20 MBytes 68.8 Mbits/sec 0.139 ms 13415/19353 (69%) [ 6] 8.00-9.00 sec 7.77 MBytes 65.2 Mbits/sec 0.243 ms 21567/27196 (79%) [ 6] 9.00-10.00 sec 8.41 MBytes 70.5 Mbits/sec 0.115 ms 16571/22660 (73%) [ 6] 10.00-10.13 sec 1.12 MBytes 70.6 Mbits/sec 0.138 ms 0/811 (0%) - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams [ 6] 0.00-10.13 sec 81.6 MBytes 67.5 Mbits/sec 0.138 ms 155616/214678 (72%) receiver |
Connecting to host 172.16.10.208, port 5201 [ 12] local 192.168.40.9 port 55823 connected to 172.16.10.208 port 5201 [ ID] Interval Transfer Bitrate Total Datagrams [ 12] 0.00-1.00 sec 13.1 MBytes 110 Mbits/sec 29988 [ 12] 1.00-2.00 sec 6.98 MBytes 58.5 Mbits/sec 24316 [ 12] 2.00-3.00 sec 6.53 MBytes 54.8 Mbits/sec 16638 [ 12] 3.00-4.00 sec 6.55 MBytes 54.9 Mbits/sec 17566 [ 12] 4.00-5.00 sec 12.3 MBytes 103 Mbits/sec 24058 [ 12] 5.00-6.00 sec 7.46 MBytes 62.5 Mbits/sec 29484 [ 12] 6.00-7.00 sec 6.60 MBytes 55.3 Mbits/sec 18189 [ 12] 7.00-8.00 sec 6.55 MBytes 54.9 Mbits/sec 17004 [ 12] 8.00-9.00 sec 6.81 MBytes 57.1 Mbits/sec 17517 [ 12] 9.00-10.00 sec 13.2 MBytes 110 Mbits/sec 34007 - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams [ 12] 0.00-10.00 sec 86.0 MBytes 72.1 Mbits/sec 0.000 ms 0/228767 (0%) sender [ 12] 0.00-10.13 sec 81.6 MBytes 67.5 Mbits/sec 0.138 ms 155616/214678 (72%) receiver |
Note: Sometimes the client will display a bitrate close to the value used on the -b option. That’s the total traffic the client tried to send to the client every test. If you notice that, check the server output, as it displays the actual traffic it received.
Downstream measurements
Server | Client |
----------------------------------------------------------- Server listening on 5201 ----------------------------------------------------------- Accepted connection from 192.168.40.9, port 59827 [ 6] local 172.16.10.208 port 5201 connected to 192.168.40.9 port 54576 [ ID] Interval Transfer Bitrate Total Datagrams [ 6] 0.00-1.00 sec 60.8 MBytes 510 Mbits/sec 44013 [ 6] 1.00-2.00 sec 76.6 MBytes 643 Mbits/sec 55469 [ 6] 2.00-3.00 sec 76.6 MBytes 643 Mbits/sec 55466 [ 6] 3.00-4.00 sec 76.5 MBytes 642 Mbits/sec 55418 [ 6] 4.00-5.00 sec 76.7 MBytes 643 Mbits/sec 55526 [ 6] 5.00-6.00 sec 76.8 MBytes 644 Mbits/sec 55608 [ 6] 6.00-7.00 sec 76.5 MBytes 641 Mbits/sec 55364 [ 6] 7.00-8.00 sec 76.6 MBytes 643 Mbits/sec 55483 [ 6] 8.00-9.00 sec 76.4 MBytes 641 Mbits/sec 55304 [ 6] 9.00-10.00 sec 76.1 MBytes 638 Mbits/sec 55088 [ 6] 10.00-10.03 sec 1.91 MBytes 640 Mbits/sec 1386 - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams [ 6] 0.00-10.03 sec 751 MBytes 629 Mbits/sec 0.000 ms 0/544125 (0%) sender |
Connecting to host 172.16.10.208, port 5201 Reverse mode, remote host 172.16.10.208 is sending [ 13] local 192.168.40.9 port 54576 connected to 172.16.10.208 port 5201 [ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams [ 13] 0.00-1.00 sec 9.34 MBytes 78.4 Mbits/sec 0.290 ms 28490/35256 (81%) [ 13] 1.00-2.00 sec 9.45 MBytes 79.3 Mbits/sec 0.271 ms 48924/55770 (88%) [ 13] 2.00-3.00 sec 8.88 MBytes 74.5 Mbits/sec 0.425 ms 48069/54502 (88%) [ 13] 3.00-4.00 sec 8.87 MBytes 74.4 Mbits/sec 0.229 ms 49659/56085 (89%) [ 13] 4.00-5.00 sec 8.04 MBytes 67.3 Mbits/sec 0.249 ms 46848/52670 (89%) [ 13] 5.00-6.00 sec 8.83 MBytes 74.2 Mbits/sec 0.274 ms 52210/58605 (89%) [ 13] 6.00-7.00 sec 9.03 MBytes 75.7 Mbits/sec 0.194 ms 48272/54810 (88%) [ 13] 7.00-8.00 sec 9.26 MBytes 77.7 Mbits/sec 0.299 ms 49219/55925 (88%) [ 13] 8.00-9.00 sec 9.20 MBytes 77.2 Mbits/sec 0.274 ms 48075/54739 (88%) [ 13] 9.00-10.00 sec 8.27 MBytes 69.3 Mbits/sec 0.304 ms 44997/50983 (88%) - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams [ 13] 0.00-10.03 sec 751 MBytes 629 Mbits/sec 0.000 ms 0/544125 (0%) sender [SUM] 0.0-10.0 sec 2 datagrams received out-of-order [ 13] 0.00-10.00 sec 89.2 MBytes 74.8 Mbits/sec 0.304 ms 464763/529345 (88%) receiver |
Note: Notice that the Bitrate is ~640Mbits/sec. This means that’s the total traffic the server tried to send to the client every test. The client displays the actual traffic it received.