Annotation of embedaddon/iperf/docs/dev.rst, revision 1.1.1.1

1.1       misho       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@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.  Then submit to the
                     29: 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: * UDP performance: Some problems have been noticed with iperf3 on the
                     83:   ESnet 100G testbed at high UDP rates (above 10Gbps).  The symptom is
                     84:   that on any particular run of iperf3 the receiver reports a loss
                     85:   rate of about 20%, regardless of the ``-b`` option used on the client
                     86:   side.  This problem appears not to be iperf3-specific, and may be
                     87:   due to the placement of the iperf3 process on a CPU and its relation
                     88:   to the inbound NIC.  In some cases this problem can be mitigated by
                     89:   an appropriate use of the CPU affinity (``-A``) option.  (Issue #55)
                     90: 
                     91: * Interval reports on high-loss networks: The way iperf3 is currently
                     92:   implemented, the sender write command will block until the entire
                     93:   block has been written. This means that it might take several
                     94:   seconds to send a full block if the network has high loss, and the
                     95:   interval reports will have widely varying interval times.  A
                     96:   solution is being discussed, but in the meantime a work around is to
                     97:   try using a small block size, for example ``-l 4K``.  (Issue #125,
                     98:   a fix will be released in iperf 3.1)
                     99: 
                    100: * The ``-Z`` flag sometimes causes the iperf3 client to hang on OSX.
                    101:   (Issue #129)
                    102: 
                    103: * When specifying the TCP buffer size using the ``-w`` flag on Linux,
                    104:   the Linux kernel automatically doubles the value passed in to
                    105:   compensate for overheads.  (This can be observed by using
                    106:   iperf3's ``--debug`` flag.)  However, CWND does not actually ramp up
                    107:   to the doubled value, but only to about 75% of the doubled
                    108:   value.  Some part of this behavior is documented in the tcp(7)
                    109:   manual page.  (Issue #145)
                    110: 
                    111: * On some platforms (observed on at least one version of Ubuntu
                    112:   Linux), it might be necessary to invoke ``ldconfig`` manually after
                    113:   doing a ``make install`` before the ``iperf3`` executable can find
                    114:   its shared library.  (Issue #153)
                    115: 
                    116: There are, of course, many other open and closed issues in the issue
                    117: tracker.
                    118: 
                    119: Versioning
                    120: ----------
                    121: 
                    122: iperf3 version numbers use (roughly) a `Semantic Versioning
                    123: <http://semver.org/>`_ scheme, in which version numbers consist of
                    124: three parts:  *MAJOR.MINOR.PATCH*
                    125: 
                    126: The developers increment the:
                    127: 
                    128: * *MAJOR* version when making incompatible API changes,
                    129: 
                    130: * *MINOR* version when adding functionality in a backwards-compatible manner, and
                    131: 
                    132: * *PATCH* version when making backwards-compatible bug fixes.
                    133: 
                    134: Release Engineering Checklist
                    135: -----------------------------
                    136: 
                    137: 1. Update the ``README`` and ``RELEASE_NOTES`` files to be accurate. Make sure
                    138:    that the "Known Issues" section of the ``README`` file is up to date.
                    139: 
                    140: 2. Compose a release announcement.  Most of the release announcement
                    141:    can be written before tagging.  Usually the previous version's
                    142:    announcement can be used as a starting point.
                    143: 
                    144: 3. Preferably starting from a clean source tree (be sure that ``git
                    145:    status`` emits no output), make the changes necessary to produce
                    146:    the new version, such as bumping version numbers::
                    147: 
                    148:     vi RELEASE_NOTES   # update version number and release date
                    149:     vi configure.ac    # update version parameter in AC_INIT
                    150:     vi src/iperf3.1    # update manpage revision date if needed
                    151:     vi src/libiperf.3  # update manpage revision date if needed
                    152:     git commit -a      # commit changes to the local repository only
                    153:     ./bootstrap.sh     # regenerate configure script, etc.
                    154:     git commit -a      # commit changes to the local repository only
                    155: 
                    156:     # Assuming that $VERSION is the version number to be released...
                    157:     ./make_release tag $VERSION # this creates a tag in the local repo
                    158:     ./make_release tar $VERSION # create tarball and compute SHA256 hash
                    159: 
                    160:    These steps should be done on a platform with a relatively recent
                    161:    version of autotools / libtools.  Examples are MacOS / MacPorts or
                    162:    FreeBSD.  The versions of these tools in CentOS 6 are somewhat
                    163:    older and probably should be avoided.
                    164: 
                    165:    The result will be a release artifact that should be used for
                    166:    pre-testing.
                    167: 
                    168: 4. Stage the tarball (and a file containing the SHA256 hash) to the
                    169:    download site.  Currently this is located on ``downloads.es.net``.
                    170: 
                    171: 5. From another host, test the link in the release announcement by
                    172:    downloading a fresh copy of the file and verifying the SHA256
                    173:    checksum.  Checking all other links in the release announcement is
                    174:    strongly recommended as well.
                    175: 
                    176: 6. Also verify (with file(1)) that the tarball is actually a gzipped
                    177:    tarball.
                    178: 
                    179: 7. For extra points, actually try downloading, compiling, and
                    180:    smoke-testing the results of the tarball on all supported
                    181:    platforms.
                    182:    
                    183: 8. Plug the SHA256 checksum into the release announcement.
                    184: 
                    185: 9. PGP-sign the release announcement text using ``gpg --clearsign``.
                    186:    The signed announcement will be sent out in a subsequent emails,
                    187:    but could also be archived.  Decoupling the signing from emailing
                    188:    allows a signed release announcement to be resent via email or sent
                    189:    by other, non-email means.
                    190: 
                    191: 10. At this point, the release can and should be considered
                    192:     finalized.  To commit the release-engineering-related changes to
                    193:     GitHub and make them public, push them out thusly::
                    194: 
                    195:      git push            # Push version changes
                    196:      git push --tags     # Push the new tag to the GitHub repo
                    197: 
                    198: 11. Send the PGP-signed release announcement to the following
                    199:     addresses.  Remember to turn off signing in the MUA, if
                    200:     applicable.  Remember to check the source address when posting to
                    201:     lists, as "closed" list will reject posting from all from
                    202:     registered email addresses.
                    203: 
                    204:     * iperf-dev@googlegroups.com
                    205: 
                    206:     * iperf-users@lists.sourceforge.net
                    207: 
                    208:     * perfsonar-user@internet2.edu
                    209: 
                    210:     * perfsonar-developer@internet2.edu
                    211: 
                    212:     Note: Thunderbird sometimes mangles the PGP-signed release
                    213:     announcement so that it does not verify correctly.  This could be
                    214:     due to Thunderbird trying to wrap the length of extremely long
                    215:     lines (such as the SHA256 hash).  Apple Mail and mutt seem to
                    216:     handle this situation correctly.  Testing the release announcement
                    217:     sending process by sending a copy to oneself first and attempting
                    218:     to verify the signature is highly encouraged.
                    219: 
                    220: 12. Update the iperf3 Project News section of the documentation site
                    221:     to announce the new release (see ``docs/news.rst`` and
                    222:     ``docs/conf.py`` in the source tree) and deploy a new build of the
                    223:     documentation to GitHub Pages.
                    224: 
                    225: Code Authors
                    226: ------------
                    227: 
                    228: The main authors of iperf3 are (in alphabetical order):  Jon Dugan,
                    229: Seth Elliott, Bruce A. Mah, Jeff Poskanzer, Kaustubh Prabhu.
                    230: Additional code contributions have come from (also in alphabetical
                    231: order):  Mark Ashley, Aaron Brown, Aeneas Jaißle, Susant Sahani, 
                    232: Bruce Simpson, Brian Tierney.
                    233: 
                    234: iperf3 contains some original code from iperf2.  The authors of iperf2
                    235: are (in alphabetical order): Jon Dugan, John Estabrook, Jim Ferbuson,
                    236: Andrew Gallatin, Mark Gates, Kevin Gibbs, Stephen Hemminger, Nathan
                    237: Jones, Feng Qin, Gerrit Renker, Ajay Tirumala, Alex Warshavsky.

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>