<div dir="ltr">Hi All,<br><br>We're adding a --sum-only option to iperf 2.0.14. This is useful for scaling the number of traffic threads to large values. Here is a sample output:<br><br>[rjmcmahon@localhost iperf2-code]$ src/iperf -c 192.168.1.10 -i 1 <span style="background-color:rgb(255,255,0)">-P 1000 --sum-only</span><br>[SUM-1000] 0.0- 1.0 sec 1.57 GBytes 13.5 Gbits/sec<br>[SUM-1000] 1.0- 2.0 sec 1.12 GBytes 9.65 Gbits/sec<br>[SUM-1000] 2.0- 3.0 sec 1.11 GBytes 9.50 Gbits/sec<br>[SUM-1000] 3.0- 4.0 sec 1.11 GBytes 9.51 Gbits/sec<br>[SUM-1000] 4.0- 5.0 sec 1.10 GBytes 9.41 Gbits/sec<br>[SUM-1000] 5.0- 6.0 sec 1.09 GBytes 9.40 Gbits/sec<br>[SUM-1000] 6.0- 7.0 sec 1.10 GBytes 9.45 Gbits/sec<br>[SUM-1000] 7.0- 8.0 sec 1.09 GBytes 9.40 Gbits/sec<br>[SUM-1000] 8.0- 9.0 sec 1.10 GBytes 9.41 Gbits/sec<br>[SUM-1000] 9.0-10.4 sec 1.34 GBytes 8.47 Gbits/sec<br>[SUM-1000] 0.0-10.4 sec 11.7 GBytes 9.73 Gbits/sec<div><br></div><div>I also wanted to get feedback on iperf client timestamps. Particularly on what exactly constitutes a writer as done? Is it when the last write completes on the client host, when the writer issues a socket close(), or when the writer detects a reader (server) <a href="https://linux.die.net/man/3/shutdown" target="_blank">shutdown()</a> event, i.e. the FIN, FINACK handshake? None of these are perfect as there are OS and network interactions in play for all of them which are difficult to decouple. The first two will cause a timestamp to be a bit early as the OS hasn't finished draining the socket even though the application thread is done and destroyed. We've chosen to await for the FINACK per the following in the upcoming release of iperf 2.0.14<br><pre style="white-space:pre-wrap;box-sizing:inherit;margin-top:0px;margin-bottom:0px;padding:15px;border:0px;outline:0px;font-size:14px;vertical-align:baseline;background:0px 0px;font-family:monospace,sans-serif;overflow:auto;color:rgb(85,85,85)"><div id="gmail-m_5603465045718651320gmail-l1144" style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;width:1185px"> <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;color:rgb(176,0,64)">int</span> <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">rc</span> <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;color:rgb(102,102,102)">=</span> <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">recv</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">(</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">mySocket</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">,</span> <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;color:rgb(102,102,102)">&</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">x</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">,</span> <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;color:rgb(102,102,102)">1</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">,</span> <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">MSG_DONTWAIT</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;color:rgb(102,102,102)">|</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">MSG_PEEK</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">);</span>
</div><div id="gmail-m_5603465045718651320gmail-l1145" style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px rgb(255,255,153);width:1185px"> <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;color:green;font-weight:700">if</span> <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">(</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">rc</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;color:rgb(102,102,102)">==</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;color:rgb(102,102,102)">0</span> <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;color:rgb(102,102,102)">||</span> <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;color:rgb(102,102,102)">!</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">NONFATALTCPREADERR</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">(</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">errno</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">))</span> <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">{</span>
</div><div id="gmail-m_5603465045718651320gmail-l1146" style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;width:1185px"><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;color:rgb(188,122,0)">#ifdef HAVE_THREAD_DEBUG</span>
</div><div id="gmail-m_5603465045718651320gmail-l1147" style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;width:1185px"> <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">thread_debug</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">(</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;color:rgb(186,33,33)">"Client detected server close %d"</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">,</span> <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">mySocket</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">);</span>
</div><div id="gmail-m_5603465045718651320gmail-l1148" style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;width:1185px"><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;color:rgb(188,122,0)">#endif</span>
</div><div id="gmail-m_5603465045718651320gmail-l1149" style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;width:1185px"> <span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px;color:green;font-weight:700">break</span><span style="box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background:0px 0px">;</span> </div></pre><br><div>More Background: <br><br>We've implemented the --trip-times option so that iperf server will be able to give end/end performance at the application level. With --trip-times the start stamp is taken from the first write vs., without, it's taken from the first read. Also, write timestamps go into bursts so the timing is exactly what a customer will experience.<br><br>Thanks for thoughts and comments,</div>Bob</div></div>