.. _faq:

iperf3 FAQ
==========

What is the history of iperf3, and what is the difference between iperf2 and iperf3?
  iperf2 was orphaned in the late 2000s at version 2.0.5, despite some
  known bugs and issues. After spending some time trying to fix
  iperf2's problems, ESnet decided by 2010 that a new, simpler tool
  was needed, and began development of iperf3. The goal was make the
  tool as simple as possible, so others could contribute to the code
  base. For this reason, it was decided to make the tool single
  threaded, and not worry about backwards compatibility with
  iperf2. Many of the feature requests for iperf3 came from the
  perfSONAR project (http://www.perfsonar.net).
 
  Then in 2014, Bob (Robert) McMahon from Broadcom restarted
  development of iperf2 (See
  https://sourceforge.net/projects/iperf2/). He fixed many of the
  problems with iperf2, and added a number of new features similar to
  iperf3. iperf2.0.8, released in 2015, made iperf2 a useful tool. iperf2's 
  current development is focused is on using UDP for latency testing, as well
  as broad platform support.
 
  As of this writing (2017), both iperf2 and iperf3 are being actively
  (although independently) developed.  We recommend being familiar with
  both tools, and use whichever tool’s features best match your needs.
 
  A feature comparison of iperf2, iperf3, and nuttcp is available at:
  https://fasterdata.es.net/performance-testing/network-troubleshooting-tools/throughput-tool-comparision/
 
iperf3 parallel stream performance is much less than iperf2. Why?
  iperf3 is single threaded, and iperf2 is multi-threaded. We
  recommend using iperf2 for parallel streams.
  If you want to use multiple iperf3 streams use the method described `here <https://fasterdata.es.net/performance-testing/network-troubleshooting-tools/iperf/multi-stream-iperf3/>`_.
 
I’m trying to use iperf3 on Windows, but having trouble. What should I do?
  iperf3 is not officially supported on Windows, but iperf2 is. We
  recommend you use iperf2.

  Some people are using Cygwin to run iperf3 in Windows, but not all
  options will work.  Some community-provided binaries of iperf3 for
  Windows exist.
 
How can I build a statically-linked executable of iperf3?
  There are a number of reasons for building an iperf3 executable with
  no dependencies on any shared libraries.  Unfortunately this isn't
  quite a straight-forward process.

  The steps below have nominally been tested on CentOS 7.4, but
  can probably be adapted for use with other Linux distributions:

  #.  If necessary, install the static C libraries; for CentOS this is
      the ``glibc-static`` package.

  #.  If OpenSSL is installed, be sure that its static libraries are
      also installed, from the ``openssl-static`` package.

  #.  Be sure that ``lksctp-*`` packages are not installed, because
      as of this writing, there do not appear to be any static
      libraries available for SCTP.

  #.  Configure iperf3 thusly: ``configure "LDFLAGS=--static"
      --disable-shared`` These options are necessary to disable the
      generation of shared libraries and link the executable
      statically.

  #.  Compile as normal.

  It appears that for FreeBSD (tested on FreeBSD 11.1-RELEASE), only
  the last two steps are needed to produce a static executable.

How can I build on a system that doesn't support profiled executables?
  This problem has been noted by users attempting to build iperf3 for
  Android systems.  There are several workarounds. In order from least
  effort to most effort:

  #. Beginning with iperf-3.6, the ``--disable-profiling`` flag can be
     passed to ``configure`` to disable the building of profiled
     object files and the profiled executable.

  #. At the time the linking of the iperf3 profiled executable fails,
     the "normal" iperf3 executable is probably already created. So if
     you are willing to accept the error exit from the make process
     (and a little bit of wasted work on the build host), you might
     not need to do anything.

  #. After the configure step, there will be a definition in
     ``src/Makefile`` that looks like this::

       noinst_PROGRAMS = t_timer$(EXEEXT) t_units$(EXEEXT) t_uuid$(EXEEXT) \
         iperf3_profile$(EXEEXT)

     If you edit it to look like this, it will disable the build of the profiled iperf3::

       noinst_PROGRAMS = t_timer$(EXEEXT) t_units$(EXEEXT) t_uuid$(EXEEXT)

  #. Similar to item 2 above, but more permanent...if you edit
     ``src/Makefile.am`` and change the line reading like this::

       noinst_PROGRAMS         = t_timer t_units t_uuid iperf3_profile

     To look like this::

       noinst_PROGRAMS         = t_timer t_units t_uuid

     And then run ``./bootstrap.sh``, that will regenerate the project
     Makefiles to make the exclusion of the profiled iperf3 executable
     permanant (within that source tree).

I'm seeing quite a bit of unexpected UDP loss. Why?
  First, confirm you are using iperf 3.1.5 or higher. There was an
  issue with the default UDP send size that was fixed in
  3.1.5. Second, try adding the flag ``-w2M`` to increase the socket
  buffer sizes. That seems to make a big difference on some hosts.
 
iperf3 UDP does not seem to work at bandwidths less than 100Kbps. Why?
  You'll need to reduce the default packet length to get UDP rates of less that 100Kbps. Try ``-l100``.
 
What congestion control algorithms are supported?
  On Linux, run this command to see the available congestion control
  algorithms (note that some algorithms are packaged as kernel
  modules, which must be loaded before they can be used)::
    
    /sbin/sysctl net.ipv4.tcp_available_congestion_control

  On FreeBSD, the equivalent command is::

    /sbin/sysctl net.inet.tcp.cc.available
 
I’m using the ``--logfile`` option. How do I see file output in real time?
  Use the ``--forceflush`` flag.

I'm using the --fq-rate flag, but it does not seem to be working. Why?
  You need to add 'net.core.default_qdisc = fq' to /etc/sysctl.conf for that option to work.

I'm having trouble getting iperf3 to work on Windows, Android, etc. Where can I get help?
  iperf3 only supports Linux, FreeBSD, and OSX. For other platforms we recommend using iperf2.

I managed to get a Windows executable built, but why do I get a BSOD on Windows 7?
  There seems to be a bug in Windows 7 where running iperf3 from a
  network filesystem can cause a system crash (in other words Blue
  Screen of Death, or BSOD).  This is a Windows bug addressed in kb2839149:

  https://support.microsoft.com/en-us/help/2839149/stop-error-0x00000027-in-the-rdbss-sys-process-in-windows-7-or-windows

  A hotfix is available under kb2732673:

  https://support.microsoft.com/en-us/help/2732673/-delayed-write-failed-error-message-when--pst-files-are-stored-on-a-ne

Why can’t I run a UDP client with no server?
  This is potentially dangerous, and an attacker could use this for a
  denial of service attack.  We don't want iperf3 to be an attack tool.

I'm trying to use iperf3 to test a 40G/100G link...What do I need to know?
  See the following pages on fasterdata.es.net:

  - https://fasterdata.es.net/host-tuning/100g-tuning/
  - https://fasterdata.es.net/performance-testing/network-troubleshooting-tools/iperf/multi-stream-iperf3/

My receiver didn't get all the bytes that got sent but there was no loss.  Huh?
  iperf3 uses a control connection between the client and server to
  manage the start and end of each test.  Sometimes the commands on
  the control connection can be received and acted upon before all of
  the test data has been processed.  Thus the test ends with data
  still in flight.  This effect can be significant for short (a few
  seconds) tests, but is probably negligible for longer tests.

A file sent using the ``-F`` option got corrupted...what happened?
  The ``-F`` option to iperf3 is not a file transfer utility.  It's a
  way of testing the end-to-end performance of a file transfer,
  including filesystem and disk overheads.  So while the test will
  mimic an actual file transfer, the data stored to disk may not be
  the same as what was sent.  In particular, the file size will be
  rounded up to the next larger multiple of the transfer block size,
  and for UDP tests, iperf's metadata (containing timestamps and
  sequence numbers) will overwrite the start of every UDP packet
  payload.

I have a question regarding iperf3...what's the best way to get help?
  Searching on the Internet is a good first step.
  http://stackoverflow.com/ has a number of iperf3-related questions
  and answers, but a simple query into your favorite search engine can
  also yield some results.

  There is a mailing list nominally used for iperf3 development,
  iperf-dev@googlegroups.com.

  We discourage the use of the iperf3 issue tracker on GitHub for
  support questions.  Actual bug reports, enhancement requests, or
  pull requests are encouraged, however.


