Signiant Support

Using IPerf to determine optimal speed - a detailed example Print


In many cases you need to know what the fastest transfer speed between two agents on your network connection is.
Using IPerf you can find what this speed is by altering the bandwidth variable to a point where you either reach packet loss or the speed maxes out.

The results below are examples only. Your results will likely be different. You can substitute the bandwidth setting to suit your network. Remember that this test should be performed over port 49221 so you will need to stop the agent service on both ends. If this is not possible, use a different port but note that the results may not exactly match what you may get with our port 49221.

Download IPerf from https://iperf.fr/. Make sure to get the proper version for your operating system and place it in an easy-to-reach folder, such as /tmp.

The Server is your TARGET machine. This is where the packets are sent. Make sure you have an IP that is reachable from the Source server. The command format is:
iperf3 -s -p {port}
where:
-s - This designates the 'server' status of the machine.
-p - This, followed by a number, is the port it will listen on.
For example:
iperf3 -s -p 49221
 
The Client is the SOURCE server. This is where the packets are sent from. 
iperf3 -c {target} -u -p {port} -t 60 -i 2 -b 1000M
where:
-c - designates this as a Client system.
[target] – Is the IP of the target machine. This is the IP of the Server above.
-u - specifies UDP transfers (may not be required if NOT using iperf3)
-p [port] – This is the port you want to test on. We use 49221 for our transfers so it is best to use that port. (This requires taking down your Agent services on the source and target to free up that port.)
-t – The length of time that we want to run the test. This example runs for 60 seconds. In order to get a more real-life transfer test you must use a longer transfer. (The test below was only for 10 seconds which did not produce the results consistently.)
-i – The intervals in seconds that we want to display the results. This example is 2 second intervals. What this will do is every 2 seconds display the server’s received data on the client side.
-b – This is the bandwidth that we want to send at. Sending at 1000M (megabytes/second) will essentially flood a gigabit line. The results on the server display the maximum amount of data that pipe from point A to B can handle on that port.
 
The following is an example of a Client report after running the above. (See the notes in line.)
 
shasha2b:root [ ~ ] iperf3 -c 10.0.13.125 -p 49221 -t 60 -i 2 -b 1000M
------------------------------------------------------------
Client connecting to 10.0.13.125, UDP port 49221
Sending 1470 byte datagrams
UDP buffer size:  126 KByte (default)
------------------------------------------------------------
[  3] local 66.48.39.xxx port 37094 connected with 10.0.13.125 port 49221
[ ID] Interval       Transfer     Bandwidth

[  3]  0.0- 2.0 sec   167 MBytes   699 Mbits/sec  {You’ll notice that the bandwidth column is maxing out at around 700Mb/s even though we told it to transfer at 1000M. This is the maximum that this pipe can handle.}

[  3]  2.0- 4.0 sec   168 MBytes   705 Mbits/sec   
[  3]  4.0- 6.0 sec   172 MBytes   720 Mbits/sec
[  3]  6.0- 8.0 sec   165 MBytes   692 Mbits/sec
.
.
.
[  3] 54.0-56.0 sec   170 MBytes   711 Mbits/sec
[  3] 56.0-58.0 sec   173 MBytes   725 Mbits/sec
[  3] 58.0-60.0 sec   164 MBytes   687 Mbits/sec
[  3]  0.0-60.0 sec  4.95 GBytes   708 Mbits/sec
[  3] Sent 3614199 datagrams
[  3] Server Report:

[  3]  0.0-60.0 sec  4.63 GBytes   662 Mbits/sec   0.042 ms 235163/3614198 (6.5%)   {Here you can see that the packet-loss over the course of the transfer   hit 6.5%. That is very high and another test should be done below the maximum bandwidth reported.}

[  3]  0.0-60.0 sec  1 datagrams received out-of-order                      
                                                                                                                                                                                                                
 
After running more tests as noted above we found the following:
 
At ‘–b 700M’ the packet loss is 1.5% and at ‘-b 500M, it’s only 0.56%. 
 
With the above examples results, the decision is that just below or at 500M is the ideal bandwidth.

Lowering the -b a little at a time until your packet loss is at or below 1% will give you an idea of you best transfer speed.

**Signiant transfers will read the packet loss and within a certain threshold between 1 and 3%, throttle the transfer speed in order to provide the best transfer. This is why you should run your tests down to that packet loss level.