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.