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