Annotation of embedaddon/iperf/docs/dev.rst, revision 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>