efce01e1b5
Also fix some RST formatting and add some text on FreeBSD TCP congestion control algorithms. Fixes #410.
190 строки
8.6 KiB
ReStructuredText
190 строки
8.6 KiB
ReStructuredText
.. _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 three workarounds. In order from least
|
||
effort to most effort:
|
||
|
||
#. 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.
|
||
|
||
|