xref: /iperf/docs/dev.rst (revision e919e8c2)
114741dcbSBruce A. Mahiperf3 Development
214741dcbSBruce A. Mah==================
314741dcbSBruce A. Mah
414741dcbSBruce A. MahThe iperf3 project is hosted on GitHub at:
514741dcbSBruce A. Mah
614741dcbSBruce A. Mahhttp://github.com/esnet/iperf
714741dcbSBruce A. Mah
814741dcbSBruce A. MahThis site includes the source code repository, issue tracker, and
914741dcbSBruce A. Mahwiki.
1014741dcbSBruce A. Mah
1114741dcbSBruce A. MahMailing Lists
1214741dcbSBruce A. Mah-------------
1314741dcbSBruce A. Mah
148c369d40SBruce A. MahThe developer list for iperf3 is:  [email protected].
1514741dcbSBruce A. MahInformation on joining the mailing list can be found at:
1614741dcbSBruce A. Mah
1714741dcbSBruce A. Mahhttp://groups.google.com/group/iperf-dev
1814741dcbSBruce A. Mah
1914741dcbSBruce A. MahThere is, at the moment, no mailing list for user questions, although
2014741dcbSBruce A. Maha low volume of inquiries on the developer list is probably
2114741dcbSBruce A. Mahacceptable.  If necessary, a user-oriented mailing list might be
2214741dcbSBruce A. Mahcreated in the future.
2314741dcbSBruce A. Mah
2414741dcbSBruce A. MahBug Reports
2514741dcbSBruce A. Mah-----------
2614741dcbSBruce A. Mah
2714741dcbSBruce A. MahBefore submitting a bug report, try checking out the latest version of
28e739c776SBrian Tierneythe code, and confirm that it's not already fixed. Also see the :doc:`faq`.
29e739c776SBrian TierneyThen submit to the iperf3 issue tracker on GitHub:
3014741dcbSBruce A. Mah
3114741dcbSBruce A. Mahhttps://github.com/esnet/iperf/issues
3214741dcbSBruce A. Mah
3314741dcbSBruce A. Mah**Note:** Issues submitted to the old iperf3 issue tracker on Google
348c369d40SBruce A. MahCode (or comments to existing issues on the Google Code issue tracker)
358c369d40SBruce A. Mahwill be ignored.
3614741dcbSBruce A. Mah
3714741dcbSBruce A. MahChanges from iperf 2.x
3814741dcbSBruce A. Mah----------------------
3914741dcbSBruce A. Mah
4014741dcbSBruce A. MahNew options (not necessarily complete, please refer to the manual page
4114741dcbSBruce A. Mahfor a complete list of iperf3 options)::
4214741dcbSBruce A. Mah
4314741dcbSBruce A. Mah    -V, --verbose             more detailed output than before
4414741dcbSBruce A. Mah    -J, --json                output in JSON format
4514741dcbSBruce A. Mah    -Z, --zerocopy            use a 'zero copy' sendfile() method of sending data
4614741dcbSBruce A. Mah    -O, --omit N              omit the first n seconds (to ignore slowstart)
4714741dcbSBruce A. Mah    -T, --title str           prefix every output line with this string
4814741dcbSBruce A. Mah    -F, --file name           xmit/recv the specified file
4914741dcbSBruce A. Mah    -A, --affinity n/n,m      set CPU affinity (Linux and FreeBSD only)
5014741dcbSBruce A. Mah    -k, --blockcount #[KMG]   number of blocks (packets) to transmit (instead
5114741dcbSBruce A. Mah                              of -t or -n)
5214741dcbSBruce A. Mah    -L, --flowlabel           set IPv6 flow label (Linux only)
5314741dcbSBruce A. Mah
5414741dcbSBruce A. MahChanged flags::
5514741dcbSBruce A. Mah
5614741dcbSBruce A. Mah    -C, --linux-congestion    set congestion control algorithm (Linux only)
5714741dcbSBruce A. Mah                              (-Z in iperf2)
5814741dcbSBruce A. Mah
5914741dcbSBruce A. Mah
6014741dcbSBruce A. MahDeprecated flags (currently no plans to support)::
6114741dcbSBruce A. Mah
6214741dcbSBruce A. Mah    -d, --dualtest           Do a bidirectional test simultaneously
6314741dcbSBruce A. Mah    -r, --tradeoff           Do a bidirectional test individually
6414741dcbSBruce A. Mah    -T, --ttl                time-to-live, for multicast (default 1)
6514741dcbSBruce A. Mah    -x, --reportexclude [CDMSV]   exclude C(connection) D(data) M(multicast)
6614741dcbSBruce A. Mah                                  S(settings) V(server) reports
6714741dcbSBruce A. Mah    -y, --reportstyle C      report as a Comma-Separated Values
6814741dcbSBruce A. Mah
6914741dcbSBruce A. MahAlso deprecated is the ability to set the options via environment
7014741dcbSBruce A. Mahvariables.
7114741dcbSBruce A. Mah
7214741dcbSBruce A. MahKnown Issues
7314741dcbSBruce A. Mah------------
7414741dcbSBruce A. Mah
7514741dcbSBruce A. MahThe following problems are notable known issues, which are probably of
7614741dcbSBruce A. Mahinterest to a large fraction of users or have high impact for some
7714741dcbSBruce A. Mahusers, and for which issues have already been filed in the issue
7814741dcbSBruce A. Mahtracker.  These issues are either open (indicating no solution
7914741dcbSBruce A. Mahcurrently exists) or closed with the notation that no further attempts
8014741dcbSBruce A. Mahto solve the problem are currently being made:
8114741dcbSBruce A. Mah
82b957be43SBruce A. Mah* The ``-Z`` flag sometimes causes the iperf3 client to hang on OSX.
83b957be43SBruce A. Mah  (Issue #129)
8414741dcbSBruce A. Mah
8514741dcbSBruce A. Mah* When specifying the TCP buffer size using the ``-w`` flag on Linux,
868c369d40SBruce A. Mah  the Linux kernel automatically doubles the value passed in to
878c369d40SBruce A. Mah  compensate for overheads.  (This can be observed by using
888c369d40SBruce A. Mah  iperf3's ``--debug`` flag.)  However, CWND does not actually ramp up
8914741dcbSBruce A. Mah  to the doubled value, but only to about 75% of the doubled
908c369d40SBruce A. Mah  value.  Some part of this behavior is documented in the tcp(7)
91b3202027SBruce A. Mah  manual page.
92b3202027SBruce A. Mah
93b3202027SBruce A. Mah* Although the ``-w`` flag is documented as setting the (TCP) window
94b3202027SBruce A. Mah  size, it is also used to set the socket buffer size.  This has been
95b3202027SBruce A. Mah  shown to be helpful with high-bitrate UDP tests.
9614741dcbSBruce A. Mah
9732f50a2cSBruce A. Mah* On some platforms (observed on at least one version of Ubuntu
9832f50a2cSBruce A. Mah  Linux), it might be necessary to invoke ``ldconfig`` manually after
9932f50a2cSBruce A. Mah  doing a ``make install`` before the ``iperf3`` executable can find
10032f50a2cSBruce A. Mah  its shared library.  (Issue #153)
10132f50a2cSBruce A. Mah
102b3202027SBruce A. Mah* The results printed on the server side at the end of a test do not
103b3202027SBruce A. Mah  correctly reflect the client-side measurements.  This is due to the
104b3202027SBruce A. Mah  ordering of computing and transferring results between the client
105b3202027SBruce A. Mah  and server.  (Issue #293)
106b3202027SBruce A. Mah
107b3202027SBruce A. Mah* The server could have a very short measurement reporting interval at
108b3202027SBruce A. Mah  the end of a test (particularly a UDP test), containing few or no
109b3202027SBruce A. Mah  packets.  This issue is due to an artifact of timing between the
110b3202027SBruce A. Mah  client and server.  (Issue #278)
111b3202027SBruce A. Mah
11214741dcbSBruce A. MahThere are, of course, many other open and closed issues in the issue
11314741dcbSBruce A. Mahtracker.
11414741dcbSBruce A. Mah
11514741dcbSBruce A. MahVersioning
11614741dcbSBruce A. Mah----------
11714741dcbSBruce A. Mah
1188c369d40SBruce A. Mahiperf3 version numbers use (roughly) a `Semantic Versioning
1198c369d40SBruce A. Mah<http://semver.org/>`_ scheme, in which version numbers consist of
1208c369d40SBruce A. Mahthree parts:  *MAJOR.MINOR.PATCH*
12114741dcbSBruce A. Mah
12214741dcbSBruce A. MahThe developers increment the:
12314741dcbSBruce A. Mah
12414741dcbSBruce A. Mah* *MAJOR* version when making incompatible API changes,
12514741dcbSBruce A. Mah
12614741dcbSBruce A. Mah* *MINOR* version when adding functionality in a backwards-compatible manner, and
12714741dcbSBruce A. Mah
12814741dcbSBruce A. Mah* *PATCH* version when making backwards-compatible bug fixes.
12914741dcbSBruce A. Mah
13014741dcbSBruce A. MahRelease Engineering Checklist
13114741dcbSBruce A. Mah-----------------------------
13214741dcbSBruce A. Mah
13314741dcbSBruce A. Mah1. Update the ``README`` and ``RELEASE_NOTES`` files to be accurate. Make sure
134*4e2312a2SBrian Tierney   that the "Known Issues" section of the ``README`` file and in this document
135*4e2312a2SBrian Tierney   are up to date.
13614741dcbSBruce A. Mah
13714741dcbSBruce A. Mah2. Compose a release announcement.  Most of the release announcement
13884b24b89SBruce A. Mah   can be written before tagging.  Usually the previous version's
13984b24b89SBruce A. Mah   announcement can be used as a starting point.
14014741dcbSBruce A. Mah
14184b24b89SBruce A. Mah3. Preferably starting from a clean source tree (be sure that ``git
14213f9e354SBruce A. Mah   status`` emits no output), make the changes necessary to produce
14313f9e354SBruce A. Mah   the new version, such as bumping version numbers::
14414741dcbSBruce A. Mah
14584b24b89SBruce A. Mah    vi RELEASE_NOTES   # update version number and release date
14614741dcbSBruce A. Mah    vi configure.ac    # update version parameter in AC_INIT
14714741dcbSBruce A. Mah    vi src/iperf3.1    # update manpage revision date if needed
14814741dcbSBruce A. Mah    vi src/libiperf.3  # update manpage revision date if needed
14984b24b89SBruce A. Mah    git commit -a      # commit changes to the local repository only
15014741dcbSBruce A. Mah    ./bootstrap.sh     # regenerate configure script, etc.
15184b24b89SBruce A. Mah    git commit -a      # commit changes to the local repository only
15214741dcbSBruce A. Mah
15384b24b89SBruce A. Mah    # Assuming that $VERSION is the version number to be released...
15484b24b89SBruce A. Mah    ./make_release tag $VERSION # this creates a tag in the local repo
15584b24b89SBruce A. Mah    ./make_release tar $VERSION # create tarball and compute SHA256 hash
15684b24b89SBruce A. Mah
15766d00951SBruce A. Mah   These steps should be done on a platform with a relatively recent
15866d00951SBruce A. Mah   version of autotools / libtools.  Examples are MacOS / MacPorts or
15966d00951SBruce A. Mah   FreeBSD.  The versions of these tools in CentOS 6 are somewhat
16066d00951SBruce A. Mah   older and probably should be avoided.
16114741dcbSBruce A. Mah
16213f9e354SBruce A. Mah   The result will be a release artifact that should be used for
16313f9e354SBruce A. Mah   pre-testing.
16413f9e354SBruce A. Mah
16514741dcbSBruce A. Mah4. Stage the tarball (and a file containing the SHA256 hash) to the
1667ec1cbe0SBruce A. Mah   download site.  Currently this is located on ``downloads.es.net``.
16714741dcbSBruce A. Mah
16814741dcbSBruce A. Mah5. From another host, test the link in the release announcement by
16914741dcbSBruce A. Mah   downloading a fresh copy of the file and verifying the SHA256
17084b24b89SBruce A. Mah   checksum.  Checking all other links in the release announcement is
17184b24b89SBruce A. Mah   strongly recommended as well.
17214741dcbSBruce A. Mah
17314741dcbSBruce A. Mah6. Also verify (with file(1)) that the tarball is actually a gzipped
17414741dcbSBruce A. Mah   tarball.
17514741dcbSBruce A. Mah
17614741dcbSBruce A. Mah7. For extra points, actually try downloading, compiling, and
17714741dcbSBruce A. Mah   smoke-testing the results of the tarball on all supported
17814741dcbSBruce A. Mah   platforms.
17914741dcbSBruce A. Mah
18014741dcbSBruce A. Mah8. Plug the SHA256 checksum into the release announcement.
18114741dcbSBruce A. Mah
1828344b698SBruce A. Mah9. PGP-sign the release announcement text using ``gpg --clearsign``.
18384b24b89SBruce A. Mah   The signed announcement will be sent out in a subsequent emails,
18484b24b89SBruce A. Mah   but could also be archived.  Decoupling the signing from emailing
18584b24b89SBruce A. Mah   allows a signed release announcement to be resent via email or sent
18684b24b89SBruce A. Mah   by other, non-email means.
18784b24b89SBruce A. Mah
18813f9e354SBruce A. Mah10. At this point, the release can and should be considered
18913f9e354SBruce A. Mah    finalized.  To commit the release-engineering-related changes to
19013f9e354SBruce A. Mah    GitHub and make them public, push them out thusly::
19113f9e354SBruce A. Mah
19213f9e354SBruce A. Mah     git push            # Push version changes
19313f9e354SBruce A. Mah     git push --tags     # Push the new tag to the GitHub repo
19413f9e354SBruce A. Mah
19513f9e354SBruce A. Mah11. Send the PGP-signed release announcement to the following
196bd9e3ae5SBruce A. Mah    addresses.  Remember to turn off signing in the MUA, if
197bd9e3ae5SBruce A. Mah    applicable.  Remember to check the source address when posting to
198bd9e3ae5SBruce A. Mah    lists, as "closed" list will reject posting from all from
199bd9e3ae5SBruce A. Mah    registered email addresses.
20014741dcbSBruce A. Mah
20114741dcbSBruce A. Mah    * [email protected]
20214741dcbSBruce A. Mah
20314741dcbSBruce A. Mah    * [email protected]
20414741dcbSBruce A. Mah
20514741dcbSBruce A. Mah    * [email protected]
20614741dcbSBruce A. Mah
20784b24b89SBruce A. Mah    * [email protected]
20814741dcbSBruce A. Mah
20984b24b89SBruce A. Mah    Note: Thunderbird sometimes mangles the PGP-signed release
21084b24b89SBruce A. Mah    announcement so that it does not verify correctly.  This could be
21184b24b89SBruce A. Mah    due to Thunderbird trying to wrap the length of extremely long
21284b24b89SBruce A. Mah    lines (such as the SHA256 hash).  Apple Mail and mutt seem to
21384b24b89SBruce A. Mah    handle this situation correctly.  Testing the release announcement
21484b24b89SBruce A. Mah    sending process by sending a copy to oneself first and attempting
21584b24b89SBruce A. Mah    to verify the signature is highly encouraged.
21684b24b89SBruce A. Mah
21713f9e354SBruce A. Mah12. Update the iperf3 Project News section of the documentation site
21884b24b89SBruce A. Mah    to announce the new release (see ``docs/news.rst`` and
21984b24b89SBruce A. Mah    ``docs/conf.py`` in the source tree) and deploy a new build of the
22084b24b89SBruce A. Mah    documentation to GitHub Pages.
2218c369d40SBruce A. Mah
222c2b34b4dSBruce A. Mah13. If an update to the on-line manual page is needed, it can be
223902b195eSBruce A. Mah    generated with this sequence of commands (tested on CentOS 7) and
224902b195eSBruce A. Mah    import the result into ``invoking.rst``::
225902b195eSBruce A. Mah
226c2b34b4dSBruce A. Mah     TERM=
227c2b34b4dSBruce A. Mah     export TERM
228c2b34b4dSBruce A. Mah     nroff -Tascii -c -man src/iperf3.1 | ul | sed 's/^/   /' > iperf3.txt
229c2b34b4dSBruce A. Mah
230552e943aSBruce A. MahCode Authors
231552e943aSBruce A. Mah------------
232552e943aSBruce A. Mah
233552e943aSBruce A. MahThe main authors of iperf3 are (in alphabetical order):  Jon Dugan,
234552e943aSBruce A. MahSeth Elliott, Bruce A. Mah, Jeff Poskanzer, Kaustubh Prabhu.
235552e943aSBruce A. MahAdditional code contributions have come from (also in alphabetical
236e1420625SBruce A. Mahorder):  Mark Ashley, Aaron Brown, Aeneas Jaißle, Susant Sahani,
237e1420625SBruce A. MahBruce Simpson, Brian Tierney.
238552e943aSBruce A. Mah
239552e943aSBruce A. Mahiperf3 contains some original code from iperf2.  The authors of iperf2
240552e943aSBruce A. Mahare (in alphabetical order): Jon Dugan, John Estabrook, Jim Ferbuson,
241552e943aSBruce A. MahAndrew Gallatin, Mark Gates, Kevin Gibbs, Stephen Hemminger, Nathan
242552e943aSBruce A. MahJones, Feng Qin, Gerrit Renker, Ajay Tirumala, Alex Warshavsky.
243