]> sjero.net Git - iperf/log
iperf
15 years agoDCCP support for iperf
Gerrit Renker [Tue, 24 Feb 2009 19:31:15 +0000 (20:31 +0100)]
DCCP support for iperf

This adds DCCP support for iperf, based on a patch developed by Ian and
later much modified and extended by myself.
When applied, DCCP can be used as transport protocol via the `-d' option.

It knows two modes:

 (1) Bytestream Mode
     This is the default and works as in TCP. The application tries to
     stuff as many bytes into the socket as possible. This is good for
     performance tests with DCCP CCID2, but detrimental in combination
     with DCCP CCID3, since it invariably pushes the sending rate beyond
     controllable limits.

 (2) Packet-oriented mode
     This is enabled by setting the `-b' option in addition to `-d' and
     sets up, as before, a constant bitrate datagram stream. This option
     (also as before) understands the format specifiers `k' for kilobits/sec
     and `m' for megabits/sec. If the optional argument to `-b' is omitted,
     then a default of 1 megabit/sec is used.
     Note that when using this mode, it needs to be enabled both on the
     sender and the receiver.

The changes I added were:
 * made counting of packets work consistently across UDP and DCCP;
 * enabled UDP-like reporting of statistics also for DCCP;
 * rewrote the algorithm to compute the inter-packet-gap in CBR mode:
   - in DCCP it tried to stuff the pipe without accounting for the time
     it spent, thus producing more packets than specifie
   - in tests this was observed to cause overflow
   - the algorithm now measures the actual inter-packet gap of each packet
     and compares it to the target; adjusting for each send time
   - it is more accurate than the previous implementation, in particular
     so for DCCP
 * fixed a bug which resulted in disabling IPv6 (the order of statements
   in Client::Connect() is important; the local socket must be initialised
   first for IPv6 to work).

15 years agoTimer Utilities
Gerrit Renker [Tue, 24 Feb 2009 19:30:50 +0000 (20:30 +0100)]
Timer Utilities

Apart from extending the Timestamp class (support for measuring elapsed
time and an `after' test), the main point of this patch is to update
the delay_loop() function.

The present implementation used a tight loop of continually calling
gettimeofday(2) until the specified amount of time has passed. This
is resource-intensive. In addition, while the loop worked reasonably
in many cases, it sometimes caused unwanted delays of 50 milliseconds
or more (process preempted?).

This has been replaced with nanosleep(2) as default now. The advantage
of nanosleep over the old solution is that signals are blocked and it
seems a much more robust solution.

Also, nanosleep uses the hrtimers interface internally
(/usr/src/davem-2.6/Documentation/hrtimers/hrtimers.txt).

For people who would like to keep the old behaviour, #ifdefs with
alternatives have been added.

15 years agoRemove Win32 Support
Gerrit Renker [Tue, 24 Feb 2009 19:30:18 +0000 (20:30 +0100)]
Remove Win32 Support

This removes support for Win32 since all subsequent patches introduce
functionality specific to Linux:

 * use of nanosleep (POSIX, using hrtimers),
 * UDP-Lite support (RFC 3828),
 * DCCP support (RFC 4340-2).

Don't know whether this was a good idea, but it helped to make the code more readable.

15 years agoFix CPU Usage Bug
Gerrit Renker [Tue, 24 Feb 2009 19:29:49 +0000 (20:29 +0100)]
Fix CPU Usage Bug

Bug fix by Ingo Molnar, taken from

   http://marc.info/?l=linux-kernel&m=119088670113210&w=2

This reduces CPU usage a lot - confirmed in individual tests.

15 years agoOriginal 2.0.2 iperf sources
Gerrit Renker [Tue, 24 Feb 2009 19:26:34 +0000 (20:26 +0100)]
Original 2.0.2 iperf sources