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