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>