iperf is a TCP and UDP bandwidth performance measurement tool

iperf3

iperf3 is the latest incarnation of the iperf tool, and is hosted at https://code.google.com/p/iperf/.  It can nominally be built for various platforms, amongst them, Linux and RTEMS. Unfortunately, iperf3 requires a more modern networking stack than that is currently (Dec. 2013) included with 4.11 RTEMS distribution.  So, for RTEMS, see iperf2, below.

The Linux build is installed in the DAT group space at /afs/slac/g/cci/, with the source code in packages/.  The binary and library can be found in /afs/slac/g/cci/bin and lib, resp.

To build iperf, see the README and INSTALL files in the iperf root directory.  For Linux, I used the sequence:

cd /afs/slac/g/cci/package/iperf3
mkdir linux
cd linux
../configure --prefix /afs/slac/g/cci
make
make install

The choice of the prefix argument indicates that the results should be installed in the /afs/slac/g/cci area, rather than in the /usr/local area.  In /afs/slac/g/cci/bin you can find the main program iperf3, for example.  Run iperf3 --help to see the choice of options, but basically, the idea is to run one instance on one machine in server mode (iperf3 -s), and another instance on a different machine in client mode (iperf3 -c).

For RTEMS, there are various problems in building iperf.  Most involve missing header files, and also the definition of int64_t is missing.  I haven't seen a way through these issues yet, so I have punted for the moment.

iperf2

This older version of the iperf tool is hosted at http://iperf.sourceforge.net/.  It doesn't seem to be entirely dead, since the latest version (2.0.5) was placed there on June 12, 2013.

For Linux, the sequence is the same as for iperf3:

cd /afs/slac/g/cci/package/iperf2
mkdir linux
cd linux
../configure --prefix /afs/slac/g/cci 
make
make install

For RTEMS, iperf-2.0.5 builds without too much trouble.  There are a number of header files that are included by headers.h when the corresponding config.h macro is set to indicate that they shouldn't be; easy to fix.  Along these same lines, there were some additional compile-time conditionals needed when building with the LWIP network stack.  Lastly, I renamed main to iperf_main under RTEMS and wrote an Init function to add the iperf command to the shell.

The server mode of iperf runs correctly under RTEMS, but the client mode dies due to a missing functional implementation of setitimer.  Additionally, the RTEMS CPU is no longer pingable after the client side is done.  Also, running the client in UDP mode causes protocol errors to be counted.  All to be investigated.

  • No labels