1.2.1.14 Iperf Module

Iperf is a networking tool that helps to measure networking bandwidth and performance.

Using Iperf

Iperf is a networking tool that helps to measure networking bandwidth and performance. The Iperf module can act as both a client and server for testing. Iperf has the ability to test both UDP and TCP. In the case of UDP, you can specify the size of the UDP datagrams. For TCP, Iperf measures the throughput of the payload.

To run Iperf, you will need a personal computer that has an Iperf application installed. There is an open source version that is maintained, as well as many other variants across the Internet.

Iperf is meant to be run on the command line. On the MPLAB Harmony TCP/IP Stack device side, there is also a built-in command console that can accept your different Iperf settings from a system console, such as the UART.

Iperf measures performance data in a unidirectional format. Therefore, the side that the server is running on is considered the receiver, and provides the most accurate performance values

Command Synopsis

iperf [ -s|-c <IP addr> ]
[ -u ]
[ -i <sec> ]
[ -b <bandwidth> ]
[ -t <time> ]    

-s                  Runs the Iperf server. No IP address needs to be specified.  
-c <IP addr>        Runs the Iperf client. The IP address is the IP address of the server.  
-u                  Sends UDP datagrams.  
-i <sec>            Specified the time interval, in seconds, that the display will be updated.  
-b <bandwidth>      Specifies the amount of data to try and send. This option is only valid with UDP datagrams.  
-t <time>           Amount of time, in seconds, to run the test.  

Note: The_socket_size of TCP/UDP (especially TCP) will affect the benchmark result. In addition, activated TCP/IP modules will also consume CPU and Ethernet load. The traffic load in your test network environment will also affect the benchmark test.

To get a reasonable maximum benchmark/evaluation data for a device target, it is recommended to disable other modules, such as HTTP, client example, server example, etc., and find a uncongested network.

Running the Demonstration

  1. First, make sure the Iperf module and the System Console are enabled in your project.

  2. Then, rebuild and program your project into target board.

  3. After powering on the development board and associating the connected network, start the server side Iperf application first. If you start Iperf as a server on the development board in the console, this implies that you are trying to measure the device Ethernet receiver performance. If you start the Iperf server on a personal computer, you will be measuring MCHP device Ethernet transmit performance.

Iperf Running Example

The following tests show receiver and transmitter performance, respectively with the following settings:

  • TCP TX and RX Socket Size = 512

  • UDP TX and RX Socket Size = 512

  • Built by MPLAB XC32 C/C++ Compiler without any optimization

  • Personal Computer IP Address: 172.16.175.86

  • Device IP Address: 172.16.175.54

Note: The data does NOT show the maximum throughput of the device under test as the settings are not optimized for that. Only the DHCP client, and the TCP and UDP modules are enabled in this example.

Device under test as UDP server (receive):

  • Command on the device: iperf -s -u -i 1

IPERF Figure 1
  • Command on personal computer: iperf -c 172.16.175.54 -b 10M -i 1 -t 5

IPERF Figure 2

Personal computer as UDP server (device transmit)

  • Command on personal computer: iperf -s -u -i 1

IPERF Figure 3
  • Command on the device: iperf -c 172.16.175.86 -b 50M -i 1 -t 5

IPERF Figure 4

Device as TCP server (receiving):

  • Command on the device under test: iperf -s -i 1

IPERF Figure 5
  • Command on personal computer: iperf -c 172.16.175.54 -i 1 -t 5

IPERF Figure 6

Personal computer as TCP server (device transmit):

  • Command on personal computer: iperf -s -i 1

IPERF Figure 7
  • Command on the device: iperf -c 172.16.175.86 -x 10M -i 1 -t 5

IPERF Figure 8

Library Interface

NameDescription
Macros
TCPIP_IPERF_RX_BUFFER_SIZEDefault size of the Iperf RX buffer The default value is 4KB. The performance of a socket is highly dependent on the size of its buffers so it's a good idea to use as large as possible buffers for the sockets that need high throughput. Bigger buffers will help obtain higher performance numbers
TCPIP_IPERF_TX_BUFFER_SIZEDefault size of the Iperf TX buffer The default value is 4KB. The performance of a socket is highly dependent on the size of its buffers so it's a good idea to use as large as possible buffers for the sockets that need high throughput. Bigger buffers will help obtain higher performance numbers
TCPIP_IPERF_TX_QUEUE_LIMITfor Iperf UDP client, the limit to set to avoid memory allocation overflow on slow connections
TCPIP_IPERF_TX_WAIT_TMOtimeout to wait for TX channel to be ready to transmit a new packet; ms depends on the channel bandwidth
TCPIP_IPERF_MAX_INSTANCESmaximum number of simultaneously running iperf instances
TCPIP_IPERF_TIMING_ERROR_MARGINiperf timing error, ms. Accounts for timing uncertainty The higher the value, the more relaxed is the iperf timing Lower limit is 0
TCPIP_IPERF_TX_BW_LIMITDefault TCP Tx Bandwidth
Functions
TCPIP_IPERF_TaskStandard TCP/IP stack module task function.