Annotation of embedaddon/iperf/docs/dev.rst, revision 1.1.1.2
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
1.1.1.2 ! misho 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:
1.1 misho 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)
1.1.1.2 ! misho 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.
1.1 misho 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:
1.1.1.2 ! misho 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:
1.1 misho 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
1.1.1.2 ! misho 134: that the "Known Issues" section of the ``README`` file and in this document
! 135: are up to date.
1.1 misho 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@googlegroups.com
202:
203: * iperf-users@lists.sourceforge.net
204:
205: * perfsonar-user@internet2.edu
206:
207: * perfsonar-developer@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:
1.1.1.2 ! misho 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:
1.1 misho 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 Jaißle, 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.
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>