[netperf-talk] multithread support and other feature ideas
Rick Jones
rick.jones2 at hp.com
Fri Mar 6 11:02:05 PST 2009
Brandeburg, Jesse wrote:
> in these days of multicore systems, what is the state of multithreaded netperf?
that would be netperf4:
http://www.netperf.org/svn/netperf4/trunk
which could use some help. It presently suffers/benefits from a very rich
configuration file mechanism and dependencies on glib and libxml2. I find I am
most able to work-on/enhance netperf2 when others are actively involved - helps
get me off my keyster :)
> also, one of the coolest features of the old ttcp was that it had a polynomial
> based traffic generator mode for detecting data corruption.
>
> it was cool because the polynomial only repeated the same data pattern every
> 2^something huge bytes, which made it easy to predict the value of any given
> byte at the other end, and made detecting single byte data corruption simple.
>
> I'm not sure if the polynomial thing would be part of netperf's charter or
> not,
I've wanted to avoid netperf being corrupted into a functional test :) Still,
there is the global -F option which will cause netperf's buffers to be filled
with data from the specified file. However, netperf/netserver will not attempt
to determine if there was data corruption - the mechanism was put into place to
allow netperf to send uncompressible data when necessary.
By default, top-of-trunk netperf:
http://www.netperf.org/svn/netperf2/trunk
tries to put a repeating "netperf " into what it sends. This was done to allow
someone sniffing traffic to more easily see if something was a netperf flow.
Seems that at some point, someone using the UDP_STREAM test didn't check their
routing and ended-up flooding a site-to-site link and took-out the security
camera feeds... I ended-up getting a phone call from some IT folks asking if
there was anyway netperf could prevent such things - I tossed them "netperf " in
the data stream but reminded them that netperf cannot fix end-system routing
errors :)
> but multithreading should be if at all possible.
>
> right now I multithread netperf like so:
>
> for ((i=1; i<17; i++)); do netperf -H 10.0.0.$i -t TCP_STREAM -C -c -P0 & done
>
> however I don't get aggregate throughput unless I script up a bunch of
> awk/sed/bash addition magic.
>
> Thoughts?
Short term I would suggest following:
http://www.netperf.org/svn/netperf2/trunk/doc/netperf.html#Using-Netperf-to-Measure-Aggregate-Performance
particularly the bit about (ab)using the confidence intervals to help detect skew
errors.
Medium term I might suggest the netperf2 "omni" tests - not so much because they
will one day replace the scattershot code for TCP, UDP, SDP DCCP etc, but because
they introduce the ability to get netperf to emit not only classic-esque "Human"
output, but CSV and keyval, and you can configure what netperf emits specifically
via what are currently a "-t omni" test-specific -O (human) -o (CSV) or -k
(keyval) option. If you pass a ? to either of those they will emit the list of
known outputs. You can then make a list of those you want in a file and pass
that to the option instead:
netperf -H <remote> -t omni -- -o foo
It won't eliminate the post processing, but it might make it easier. (just as you
do now, you have to remember that each netperf is reporting overall system CPU
util and caculating service demand based on that)
On those platforms with support, netperf2 omni tests will attempt to find things
like the presumed egress interface, driver name and revision for same, PCI slot
number, system kernel revision, etc etc. It can also be asked to report not just
the overall CPU utilization, but the ID and utilization of the most utilized CPU
happy benchmarking,
rick jo nes
More information about the netperf-talk
mailing list