I was looking at the iperf3 source code, and its ... unfortunate ... that
iperf3 still seems to be nearly as much of a gettimeofday() benchmark as it
is a network benchmark.
For example, if I want to send UDP as fast as possible, I'll do something
like:
iperf -c 172.18.126.63 -u -b 9999999M
If I use strace -c on this, I see:
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
42.92 0.238950 1 287535 gettimeofday
41.96 0.233611 3 71567 write
14.87 0.082772 1 72900 select
The pattern seems to be:
gettimeofday
gettimeofday
select
gettimeofday
gettimeofday
write
gettimeofday
gettimeofday
select
<repeats>
This isn't a problem on *most* OSes (and it is getting better), but it can
lead to surprisingly bad results on 10GbE or 40GbE networks on some OSes,
especially one that chose an expensive timecounter (eg, one that does a PIO
read access on every gettimeofday). This is the big reason why I still use
netperf.
Maybe iperf needs a "go fast" option that dispenses with all timing except
to mark the time at the start & end of the test.
Drew
------------------------------------------------------------------------------
Want excitement?
Manually upgrade your production database.
When you want reliability, choose Perforce
Perforce version control. Predictably reliable.
http://pubads.g.doubleclick.net/gampad/clk?id=157508191&iu=/4140/ostg.clktrk
_______________________________________________
Iperf-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/iperf-users