Home | History | Annotate | Download | only in docs
      1 iperf3 Development
      2 ==================
      3 
      4 The iperf3 project is hosted on GitHub at:
      5 
      6 http://github.com/esnet/iperf
      7 
      8 This site includes the source code repository, issue tracker, and
      9 wiki.
     10 
     11 Mailing Lists
     12 -------------
     13 
     14 The developer list for iperf3 is:  iperf-dev (a] googlegroups.com.
     15 Information on joining the mailing list can be found at:
     16 
     17 http://groups.google.com/group/iperf-dev
     18 
     19 There is, at the moment, no mailing list for user questions, although
     20 a low volume of inquiries on the developer list is probably
     21 acceptable.  If necessary, a user-oriented mailing list might be
     22 created in the future.
     23 
     24 Bug Reports
     25 -----------
     26 
     27 Before submitting a bug report, try checking out the latest version of
     28 the code, and confirm that it's not already fixed. Also see the :doc:`faq`. 
     29 Then submit to the iperf3 issue tracker on GitHub:
     30 
     31 https://github.com/esnet/iperf/issues
     32 
     33 **Note:** Issues submitted to the old iperf3 issue tracker on Google
     34 Code (or comments to existing issues on the Google Code issue tracker)
     35 will be ignored.
     36 
     37 Changes from iperf 2.x
     38 ----------------------
     39 
     40 New options (not necessarily complete, please refer to the manual page
     41 for a complete list of iperf3 options)::
     42 
     43     -V, --verbose             more detailed output than before
     44     -J, --json                output in JSON format
     45     -Z, --zerocopy            use a 'zero copy' sendfile() method of sending data
     46     -O, --omit N              omit the first n seconds (to ignore slowstart)
     47     -T, --title str           prefix every output line with this string
     48     -F, --file name           xmit/recv the specified file
     49     -A, --affinity n/n,m      set CPU affinity (Linux and FreeBSD only)
     50     -k, --blockcount #[KMG]   number of blocks (packets) to transmit (instead 
     51                               of -t or -n)
     52     -L, --flowlabel           set IPv6 flow label (Linux only)
     53 
     54 Changed flags::
     55 
     56     -C, --linux-congestion    set congestion control algorithm (Linux only)
     57                               (-Z in iperf2)
     58 
     59 
     60 Deprecated flags (currently no plans to support)::
     61 
     62     -d, --dualtest           Do a bidirectional test simultaneously
     63     -r, --tradeoff           Do a bidirectional test individually
     64     -T, --ttl                time-to-live, for multicast (default 1)
     65     -x, --reportexclude [CDMSV]   exclude C(connection) D(data) M(multicast) 
     66                                   S(settings) V(server) reports
     67     -y, --reportstyle C      report as a Comma-Separated Values
     68 
     69 Also deprecated is the ability to set the options via environment
     70 variables.
     71 
     72 Known Issues
     73 ------------
     74 
     75 The following problems are notable known issues, which are probably of
     76 interest to a large fraction of users or have high impact for some
     77 users, and for which issues have already been filed in the issue
     78 tracker.  These issues are either open (indicating no solution
     79 currently exists) or closed with the notation that no further attempts
     80 to solve the problem are currently being made:
     81 
     82 * The ``-Z`` flag sometimes causes the iperf3 client to hang on OSX.
     83   (Issue #129)
     84 
     85 * When specifying the TCP buffer size using the ``-w`` flag on Linux,
     86   the Linux kernel automatically doubles the value passed in to
     87   compensate for overheads.  (This can be observed by using
     88   iperf3's ``--debug`` flag.)  However, CWND does not actually ramp up
     89   to the doubled value, but only to about 75% of the doubled
     90   value.  Some part of this behavior is documented in the tcp(7)
     91   manual page.
     92 
     93 * Although the ``-w`` flag is documented as setting the (TCP) window
     94   size, it is also used to set the socket buffer size.  This has been
     95   shown to be helpful with high-bitrate UDP tests.
     96 
     97 * On some platforms (observed on at least one version of Ubuntu
     98   Linux), it might be necessary to invoke ``ldconfig`` manually after
     99   doing a ``make install`` before the ``iperf3`` executable can find
    100   its shared library.  (Issue #153)
    101 
    102 * The results printed on the server side at the end of a test do not
    103   correctly reflect the client-side measurements.  This is due to the
    104   ordering of computing and transferring results between the client
    105   and server.  (Issue #293)
    106 
    107 * The server could have a very short measurement reporting interval at
    108   the end of a test (particularly a UDP test), containing few or no
    109   packets.  This issue is due to an artifact of timing between the
    110   client and server.  (Issue #278)
    111 
    112 There are, of course, many other open and closed issues in the issue
    113 tracker.
    114 
    115 Versioning
    116 ----------
    117 
    118 iperf3 version numbers use (roughly) a `Semantic Versioning
    119 <http://semver.org/>`_ scheme, in which version numbers consist of
    120 three parts:  *MAJOR.MINOR.PATCH*
    121 
    122 The developers increment the:
    123 
    124 * *MAJOR* version when making incompatible API changes,
    125 
    126 * *MINOR* version when adding functionality in a backwards-compatible manner, and
    127 
    128 * *PATCH* version when making backwards-compatible bug fixes.
    129 
    130 Release Engineering Checklist
    131 -----------------------------
    132 
    133 1. Update the ``README`` and ``RELEASE_NOTES`` files to be accurate. Make sure
    134    that the "Known Issues" section of the ``README`` file and in this document
    135    are up to date.
    136 
    137 2. Compose a release announcement.  Most of the release announcement
    138    can be written before tagging.  Usually the previous version's
    139    announcement can be used as a starting point.
    140 
    141 3. Preferably starting from a clean source tree (be sure that ``git
    142    status`` emits no output), make the changes necessary to produce
    143    the new version, such as bumping version numbers::
    144 
    145     vi RELEASE_NOTES   # update version number and release date
    146     vi configure.ac    # update version parameter in AC_INIT
    147     vi src/iperf3.1    # update manpage revision date if needed
    148     vi src/libiperf.3  # update manpage revision date if needed
    149     git commit -a      # commit changes to the local repository only
    150     ./bootstrap.sh     # regenerate configure script, etc.
    151     git commit -a      # commit changes to the local repository only
    152 
    153     # Assuming that $VERSION is the version number to be released...
    154     ./make_release tag $VERSION # this creates a tag in the local repo
    155     ./make_release tar $VERSION # create tarball and compute SHA256 hash
    156 
    157    These steps should be done on a platform with a relatively recent
    158    version of autotools / libtools.  Examples are MacOS / MacPorts or
    159    FreeBSD.  The versions of these tools in CentOS 6 are somewhat
    160    older and probably should be avoided.
    161 
    162    The result will be a release artifact that should be used for
    163    pre-testing.
    164 
    165 4. Stage the tarball (and a file containing the SHA256 hash) to the
    166    download site.  Currently this is located on ``downloads.es.net``.
    167 
    168 5. From another host, test the link in the release announcement by
    169    downloading a fresh copy of the file and verifying the SHA256
    170    checksum.  Checking all other links in the release announcement is
    171    strongly recommended as well.
    172 
    173 6. Also verify (with file(1)) that the tarball is actually a gzipped
    174    tarball.
    175 
    176 7. For extra points, actually try downloading, compiling, and
    177    smoke-testing the results of the tarball on all supported
    178    platforms.
    179    
    180 8. Plug the SHA256 checksum into the release announcement.
    181 
    182 9. PGP-sign the release announcement text using ``gpg --clearsign``.
    183    The signed announcement will be sent out in a subsequent emails,
    184    but could also be archived.  Decoupling the signing from emailing
    185    allows a signed release announcement to be resent via email or sent
    186    by other, non-email means.
    187 
    188 10. At this point, the release can and should be considered
    189     finalized.  To commit the release-engineering-related changes to
    190     GitHub and make them public, push them out thusly::
    191 
    192      git push            # Push version changes
    193      git push --tags     # Push the new tag to the GitHub repo
    194 
    195 11. Send the PGP-signed release announcement to the following
    196     addresses.  Remember to turn off signing in the MUA, if
    197     applicable.  Remember to check the source address when posting to
    198     lists, as "closed" list will reject posting from all from
    199     registered email addresses.
    200 
    201     * iperf-dev (a] googlegroups.com
    202 
    203     * iperf-users (a] lists.sourceforge.net
    204 
    205     * perfsonar-user (a] internet2.edu
    206 
    207     * perfsonar-developer (a] internet2.edu
    208 
    209     Note: Thunderbird sometimes mangles the PGP-signed release
    210     announcement so that it does not verify correctly.  This could be
    211     due to Thunderbird trying to wrap the length of extremely long
    212     lines (such as the SHA256 hash).  Apple Mail and mutt seem to
    213     handle this situation correctly.  Testing the release announcement
    214     sending process by sending a copy to oneself first and attempting
    215     to verify the signature is highly encouraged.
    216 
    217 12. Update the iperf3 Project News section of the documentation site
    218     to announce the new release (see ``docs/news.rst`` and
    219     ``docs/conf.py`` in the source tree) and deploy a new build of the
    220     documentation to GitHub Pages.
    221 
    222 13. If an update to the on-line manual page is needed, it can be
    223     generated with this sequence of commands (tested on CentOS 7) and
    224     import the result into ``invoking.rst``::
    225 
    226      TERM=
    227      export TERM
    228      nroff -Tascii -c -man src/iperf3.1 | ul | sed 's/^/   /' > iperf3.txt
    229 
    230 Code Authors
    231 ------------
    232 
    233 The main authors of iperf3 are (in alphabetical order):  Jon Dugan,
    234 Seth Elliott, Bruce A. Mah, Jeff Poskanzer, Kaustubh Prabhu.
    235 Additional code contributions have come from (also in alphabetical
    236 order):  Mark Ashley, Aaron Brown, Aeneas Jaile, Susant Sahani, 
    237 Bruce Simpson, Brian Tierney.
    238 
    239 iperf3 contains some original code from iperf2.  The authors of iperf2
    240 are (in alphabetical order): Jon Dugan, John Estabrook, Jim Ferbuson,
    241 Andrew Gallatin, Mark Gates, Kevin Gibbs, Stephen Hemminger, Nathan
    242 Jones, Feng Qin, Gerrit Renker, Ajay Tirumala, Alex Warshavsky.
    243