Hey Drew,
On Sep 25, 2014, at 1:47 PM, Andrew Gallatin
<galla...@gmail.com<mailto:galla...@gmail.com>> wrote:
I tried the tarball, and I could not get it to link on ubuntu 12.04. The tail
end of the compile is:
libtool: link: ranlib .libs/libiperf.a
libtool: link: ( cd ".libs" && rm -f "libiperf.la<http://libiperf.la/>" && ln
-s "../libiperf.la<http://libiperf.la/>" "libiperf.la<http://libiperf.la/>" )
gcc -DHAVE_CONFIG_H -I. -g -g -O2 -Wall -MT iperf3-main.o -MD -MP -MF
.deps/iperf3-main.Tpo -c -o iperf3-main.o `test -f 'main.c' || echo './'`main.c
mv -f .deps/iperf3-main.Tpo .deps/iperf3-main.Po
/bin/bash ../libtool --tag=CC --mode=link gcc -g -g -O2 -Wall -g -lrt -o
iperf3 iperf3-main.o libiperf.la<http://libiperf.la/>
libtool: link: gcc -g -g -O2 -Wall -g -o .libs/iperf3 iperf3-main.o -lrt
./.libs/libiperf.so
./.libs/libiperf.so: undefined reference to `timer_create'
./.libs/libiperf.so: undefined reference to `timer_delete'
./.libs/libiperf.so: undefined reference to `timer_settime'
collect2: ld returned 1 exit status
Amusingly, if I just ignore libfool, and link it manually, I get a binary:
% gcc -o iperf3 iperf3-main.o .libs/libiperf.a -lrt
Experimentally, it looks like the order of the -lrt is wrong, and it must come
last. Eg:
% gcc -o iperf3 iperf3-main.o -lrt .libs/libiperf.a
.libs/libiperf.a(timer.o): In function `tmr_reset':
/home/gallatin/iperf-3.0.7-signal/src/timer.c:162: undefined reference to
`timer_settime'
<...>
The binary itself behaves oddly:
Connecting to host 198.18.0.1, port 5201
[ 4] local 198.18.0.2 port 40068 connected to 198.18.0.1 port 5201
[ ID] Interval Transfer Bandwidth Total Datagrams
[ 4] 0.00-1.00 sec 0.00 Bytes 0.00 bits/sec 0
[ 4] 1.00-2.00 sec 0.00 Bytes 0.00 bits/sec 0
<...>
[ 4] 9.00-10.00 sec 0.00 Bytes 0.00 bits/sec 0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Jitter Lost/Total
Datagrams
[ 4] 0.00-10.00 sec 0.00 Bytes 0.00 bits/sec 666910000.000 ms
-357639344/-357639343 (1e+02%)
[ 4] Sent -357639343 datagrams
That’s bizarre. What type of host was this on?
Unfortunately, I'm no longer at Myricom, where I ran iperf on across 10GbE or
larger links on hosts with painfully slow gettimeofday(), and syscalls in
general (mostly FreeBSD with poorly configured timecounters, and Solaris in
various forms, and MacOSX). Without access to those hosts, my testing may not
be very helpful.
One other bit of feedback is that it would be great to get rid of the
gettimeofday around every packet (eg, turn off jitter measurement). A lot of
times you don't care about the jitter, and just want to fill the link. I think
that iperf2 was just doing the gettimeofday around each packet, and that was
still enough overhead on systems with expensive gettimeofday() calls to reduce
perceived performance from 9.4Gb/s to ~5Gb/s
Yeah, some sort of “—disable-jitter” flag would probably make sense.
Cheers,
Aaron
Drew
On Thu, Sep 25, 2014 at 9:16 AM, Aaron Brown
<aa...@internet2.edu<mailto:aa...@internet2.edu>> wrote:
Hey Andrew,
I’ve got a few patches I hacked together that use posix timers for the timers
instead of the heavy gettimeofday usage done before. They seem to work, with
the caveats that it stills calls gettimeofday per-packet, the intervals can be
slightly off (e.g. 0.00-1.06 instead of 0.00-1.00), and i’ve not tested burst
mode at all to verify if it works or not. You can grab a copy of the source
from http://ndb1.internet2.edu/~aaron/iperf-3.0.7-signal.tar.gz . The patches
themselves are:
http://ndb1.internet2.edu/~aaron/0001-Modify-the-timer-stuff-to-use-POSIX-timers-instead-o.patch
http://ndb1.internet2.edu/~aaron/0002-Handle-the-rate-based-tests-using-timers-instead-of-.patch
http://ndb1.internet2.edu/~aaron/0003-Remove-some-spurious-commits.patch
I’d be curious what your experience with these ends up being since gettimeofday
runs quickly on my hosts :)
Cheers,
Aaron
On Sep 10, 2014, at 12:14 PM, Andrew Gallatin
<galla...@gmail.com<mailto:galla...@gmail.com>> wrote:
> 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
> Iperf-users@lists.sourceforge.net<mailto:Iperf-users@lists.sourceforge.net>
> https://lists.sourceforge.net/lists/listinfo/iperf-users
------------------------------------------------------------------------------
Slashdot TV. Videos for Nerds. Stuff that Matters.
http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk
_______________________________________________
Iperf-users mailing list
Iperf-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/iperf-users