These are the Release Notes for Revision 2.7.0 of netperf:

*) Add bits/s (-f b) and Bytes/s (-f B) as selectable throughput
   units. This may make life easier for folks doing post-processing of
   things like interim results.

*) Miscelaneous fixes

*) Much of the now-seeming kruft for things peripheral to netperf's
   core mission - have been removed though the code itself remains in
   the repository.  So, things like looking-up egress interface,
   driver/slot information etc have been disabled in a manner
   requiring more than just a ./configure to bring-back.

   It wasn't clear those features were being used.  This is a test of
   that hypothesis.

These are the Release Notes for Revision 2.6.0 of netperf:

*) Initial pass at support for --enable-intervals (WANT_INTERVALS) for
   Windows, courtesy of Jonathan Cook.

*) When in demo mode (./configure --enable-demo and a global -D
   <interval> option netperf will make sure it emits "one last
   interval result" when the test is terminated.  This should assist
   when post-processing results through the likes of rrdtool when
   there is a slow-down in the performance just at the end that would
   have stretched the interval to beyond the test termination.

*) A fix to have the AF_UNIX tests realize that the value for "take
   the system default" socket buffer size became -1 years ago.  Bug
   found by Eric Dumazet.

*) Include a patch from Dave Taht to enable symbolic manipulation of
   IP_TOS values.

*) Include a patch from Sachar Raindel to enable the omni tests to get
   ENOBUFS under Linux when the socket buffer is larger than the tx
   queue of the egress interface.  This will help preclude netperf's
   reporting a larger than link-rate send-side figure.

*) Fix a problem with late checking of the return from select() in
   src/netserver.c. Reported by Waqar Sheikh.

*) A new global -Z option has been added to netperf and netserver.
   This takes as an argument a passphrase.  In the case of netserver
   it will expect a control message with the passphrase as the first
   thing it receives on the control connection.  If netserver does not
   receive a control message with the passphrase it will close the
   control connection and move-on.  If the netserver receives a
   control message with a passprhase when it is not lookign for one,
   it will be ignored. There is at present a 20 second timeout on the
   attempted receipt of the request message. In the case of netperf,
   the passphrase will be the first thing sent on the control
   connection.  There is no response to a passphrase control message.

*) Demo mode output format will now track the omni output format. So,
   if the omni ouput format is CSV then the interim results will be
   emitted in csv. Likewise for keyval.  If the mode is human (default
   and test-specific -O) then the output remains unchanged.  Keyval
   output includes the count of interval, with a mind towards being
   able to source it in shells and whatnot.  Subject to change without
   notice.

*) A patch to correctly handle IPv6 addresses in the control messages,
   courtesy of Bjoern Zeeb.

*) The global -F option can now be used specify a local and/or remote
   fill file.

*) It is now possible to set/get the TCP congestion control algorithm
   being used by either end of the test connection when using the omni
   code.  The output selectors are LOCAL_CONG_CONTROL and
   REMOTE_CONG_CONTROL and setting is via the test-specific -K option.

*) Stop leaking file descriptors when looking-up probable egress
   interface names and I/O slot numbers.

*) The global -Y option can be used to set IP_TOS on those platforms
   which support it.  Since this is specific to IP (v4 or v6) it may
   move to a test-specific otion in the future.  It is presently
   global for foolish consistency with the -y option to set
   SO_PRIORITY.

*) The global -y option can be used to set SO_PRIORITY on those
   platforms which support it.  Based on patches from Amir Vidai.

*) The control message size has been increased from 256 bytes to 512
   bytes. THIS WILL BREAK COMPATABILITY WITH PREVIOUS VERSIONS OF
   NETPERF. However, we need more room on the pinhead on which the
   angels dance.

*) Make the "sum" field of the histogram structure a 64 bit int to
   avoid having it wrap-around on tests where the sum of all the
   measured latencies was larger than 31 bits. This was causing
   statistics like stddev to go negative in some cases.

*) If the time delta between two events is negative, do not bother
   doing any math with it in the histogram/statistics code, just
   increment the ridiculous count and move-on.

*) Fixed a bug which caused local transport retransmissions to be
   reported as -1 even though the getsockopt() call was
   successful. (Linux).  Later included remote transport
   retransmissions.

*) The src/nettest_omni.c and re-written src/netserver.c code are now
   known to have compiled under Windows 7 x64 with the Microsoft
   WDK. There remains a timing issue with confidence intervals which
   is yet to be addressed, and may have been there for ages. Netserver
   has been run as a non-spawning (-f) server, netperf has been run,
   both have run "classic" and "omni" tests.

These are the Release Notes for Revision 2.5.0 of netperf:

*) Add a new -N option to netserver which will suppress all creation
   of debug files and so debugging output.  While this would put a
   serious crimp in debugging a problem in netserver, it will enable
   folks using small embedded systems to avoid soaking-up their /tmp
   filesystem with clutter.

*) A refactoring and partial re-write of the src/netserver.c code to
   untangle years of accumulated spaghetti code.  Included is the
   ability to not daemonize netserver when launched from the
   command-line (-D) and also to not fork/spawn child processes upon
   the acceptance of a control connection (-f).  Combined, the two
   options will cause netserver to remain in the forground and not
   spawn children - in effect netserver will handle only one test at a
   time.

*) As it has been two years since the defect in Solaris getaddrinfo()
   was submitted, it should be the case that a fix is available, so it
   should no longer be necessary to "hide" the "Hey your platform's
   getaddrinfo() call is buggy" warning.  Consequently, it is no
   longer being suppressed.

*) A new global command line option - -S - has been added to enable
   setting of SO_KEEPALIVE on the data socket.  This will affect the
   netperf side of the "classic" netperf tests, and will also affect
   the netserver side of an "omni" or migrated classic test as only
   the control message for the omni tests has the requisite flags
   field to communicate the desire to set SO_KEEPALIVE.

   Ostensibly, this may help when netperf is (ab)used in functional
   testing situations and netservers end-up orphaned and out in the
   cold because their corresponding netperfs went away and the
   notification was lost amid the roar of traffic over-saturating the
   interconnect(s).

   The default is to behave as before - SO_KEEPALIVE not set.

*) Base on the frequency at which the author has used the
   functionality, the default for --enable-burst is now "yes."  To
   disable support for burst mode one must now include a
   --enable-burst=no when performing the ./configure prior to
   compiling the bits.

*) The output of the -D global command line option (./configure
   --enable-demo) has been enhanced to include seconds and
   milliseconds since the epoch as returned by a gettimeofday() call
   with a null pointer for the timezone.  This is in support of being
   able to easily shove interim results into an rrdtool Round-Robin
   Database (RRD).

*) The "omni" tests will be compiled-in by default, and WANT_MIGRATION
   is the default.  One must ./configure with --enable-omni=no to
   disable this.

*) When ./configured with --enable-intervals and intervals are
   actually used, the round-trip latency reported by an omni (or
   migrated classic) request/response test should better reflect
   reality rather than the length of the pacing interval.  It and the
   MEAN_LATENCY from the histogram and -j output will still differ
   slightly and probably always will.

*) The histogram code has been enhanced to track more than one latency
   at a time and so --enable-histogram and --enable-burst are now
   compatible - for the omni tests or migrated "classic" tests only
   however.  This change was inspired/instigated by Jim Gettys and his
   work on overly-large queues of buffers

*) WANT_MIGRATION is enabled when one specifies --enable-omni on the
   configure command line.

*) Massage and encorporate a patch from Google that enables
   randomization of the IP addresses used in a test.  An optional mask
   length in the standard '/' notation can be added to the end of the
   IP/name in the test-specific -H or -L options of an Omni test.

*) Massage and include a DEBUG_LOG_FILE patch for Android from
   Josselin Costanzi

*) Add intial attempt to report Slot ID on HP-UX 11.31.

*) Add global -s option to cause omni tests to pause between
   setting-up the test and actually starting it.  pause is in seconds.
   Poor man's way to (attempt to) avoid issues when starting many,
   Many, MANY concurrent netperf tests. Based on patches from Google.

*) Additional timing statistics will be kept by the omni tests when
   the global "-j" option is specified.  The additional statistics are
   min, max, mean, stddev and the 50th, 90th and 99th percentiles on
   the timings measured by histograms. Based on patches from Google.

*) Add a workaround to get Linux to report TX queue drops in a
   UDP_STREAM test when the socket buffer size is larger than the
   TX queue.  Provided by Andrew Gallatin.

*) Fix the configure script to know it does not have to look for an
   SCTP library on FreeBSD 8.X

*) The BSD and "omni" tests now have a test-specific -R option which
   is a boolean controlling whether or not SO_DONTROUTE will be set on
   the data socket.  By default, any unidirectional UDP test will have
   SO_DONTROUTE set unless a -R 1 option is given.  All other tests
   (including UDP request/response tests) will not have SO_DONTROUTE
   set unless a -R 0 option is given.  This is put into place to make
   it take longer for blithering idiots to shoot themselves in the
   foot by running tests on setups they shouldn't.

*) At least the beginnings of support for RDS, based on a circa 2007
   patch against 2.4.2 by Vladimir Sokolovsky. Rather than create the
   "RDS_STREAM" test of his patch, the intention this time around is
   to enable RDS for the "omni" tests by using an omni test-specific
   -T rds specifyer for the "transport" to use.

*) Missing fprintf format statements provided by Bruno Cornec

*) Numerous cleanups from Jose Pedro Oliveira

*) Fixes to allow netperf -H ::1 to work without having to add -6 or
    an AF_INET6 -L option

These are the Release Notes for Revision 2.4.5 of netperf:

Things changed in this release:

*) Fixes for Linux procstat-based CPU utilization on newer kernels
   from Andrew Gallatin.

*) Fix for a TCP_RR hang from Michael Shuldman

*) Compilation cleanups for MingW cnd MSDOS (djgpp) ourtesy of Gisle
   Vanem.

*) Changes to enable compilation and building of netperf for
   VMware. Kudos to the person who did the first port, I will be happy
   to name that person when told it is OK :)

*) Fixes from Adam Bidema for launching netserver children when the
   path to netserver.exe is very long.

*) For the first time, netperf2 has a dependency, albeit optional, on
   another non-base-os bit of code - libsmbios under Linux.  It will
   attept to detect this at compile time and use it to report the
   system model name in an omni test.  If libsmbios is there we will
   try to use it, otherwise we will not.  If the associated include
   file is also there (eg the -dev package in apt-get-speak), we will
   use it to get the prototype for SMBIOSGetSystemName, otherwise we
   make a guess as to the prototype for SMBIOSGetSystemName(), which
   is the only call we make to libsmbios.

*) Fixes for BSD CPU utilization to deal with different BSD variants
   using different types.  Courtesy of Simon Burge <simonb@NetBSD.org>

*) The "omni" suite has been added on an experimental basis.  If it
   works-out then many of the tests in src/nettest_bsd.c,
   src/nettest_sdp.c, and src/nettest_sctp.c will be "migrated" to use
   the "omni infrastructure" (aka two routines to measure them
   all...).  Apart from reduced socket code, the omni suite has
   user-configurable output in either "human readable," CSV or
   keyword=value format.  By default, a VERY large quantity of data is
   output when asking for csv format (test-specific -o option) or
   keyword format (test-specific -k option).  The omni suite is not
   yet documented (there are some as-yet undiagnosed problems with
   doc/netperf.texi in emacs texinfo mode and updating nodes and links
   and such - any help there would be appreciated) but there is a
   small text file in doc/ describing the names (most) of the
   available output's.  For the most up-to-date list consult
   src/nettest_omni.c and the enum netperf_output_name. Or, you can
   pass-in a "filename" of '?' to either of the -O, -o or -k options
   and netperf will emit a list of the known available outputs.

*) Coming along for the ride are some new platform specific files to
   determine the probable egress interface for each end of a test, as
   well as driver information for that interface.  There is also
   reporting of "uname" like information for both local and remote
   system, and eventually perhaps something about the vendor's model
   name for the systems as well as the processor types.  The end goal
   is to make it easy to get most if not all what one would want in a
   database of netperf results.

*) The UDP_RR test now understands the global -f option to change
   output units.  It also understands the -B option to tag
   results. Courtesy of Alexander Duyck.

*) A fix has been added for hanging UDP_RR tests under
   Windows. Courtesy of Alexander Duyck.

*) Use vfork() on those platforms without fork(), courtesy of Matt
   Waddel

*) Track the bouncing interfaces that are linux processor affinity

*) Fixes for Solaris sendfilev usage.

*) A TCP_MSS test has been added which will report the MSS for a data
   connection setup as if the test were a TCP_STREAM test.  While the
   remote (netserver) is tricked into thinking it is to accept a
   TCP_STREAM test, no actual data will flow over the connection.
   This means that if the MSS is one which might change over the life
   of the connection, it will not be reflected in the test output.
   Should this prove to be a problem a single send() can be arranged
   along with the return of the shutdown();recv() handshake.

   The idea is that this might be useful for netperf scripts wanting
   to parameterize things based on the MSS - for example the
   packet_byte_script.

*) The width of the confidence interval can be specified in fractions
   of a percent for the confidence of a clean, close, comfortable
   calculation. :)

*) Honor the global -B option in a TCP_SENDFILE test.

*) Correct the sense of Send/Recv in the banner of a TCP_MAERTS test.

These are the Release Notes for Revision 2.4.4 of netperf:

Things changed in this release:

*) The LOC_CPU and REM_CPU tests will report their respective beliefs
   as to the number of CPUs present when the verbosity is set to more
   than one.  This can be used when trying to diagnose issues with CPU
   utilization.

*) A kind soul who wishes to remain anonymous provided a patch to
   enable use of sendfile() on OSX.

*) Fix a misplaced \n in a format string of send_tcp_maerts, courtesy
   of Alexander Duyck.

*) There is an experimental global -r option which will allow one to
   include CPU utilization measurements, but make the decision about
   hitting confidence based on the result only.  The test banner will
   reflects this when -r is used.

*) It is no longer necessary to specify a file with the global -F
   option when running a _SENDFILE test.  Netperf will create a
   temporary file and populate it with random data and use that.  If
   running aggregate tests it is strongly suggested one use a -F
   option. Otherwise, the overhead spent creating and populating the
   temporary file will be included in the CPU utilization calculation.

*) The configure script recognizes Solaris 11 and selects the correct
   CPU utilization mechanism - or rather it selects the same mechanism
   as is used in Solaris 10.  Fix courtesy of Andrew Gallatin.

*) Convert a number of struct sockaddr_in's to struct
   sockaddr_storage's and add requisite casts to deal with some abort
   problems on Windows and perhaps other platforms as well. Kudos to
   Alexander Duyck.

*) One can now pass a value of 'x' to the global -f option to specify
   the units as transactions per second.  This is the default for any
   request/response test, which is determined by there being a "double
   `r'" in the name - eg "RR," "rr," "Rr," or "rR."  At present only
   the TCP_RR test actually looks for this to be set.

*) One can request bits/bytes per second as the primary output of a
   TCP_RR test by setting the global -f option to [kmgKMG] as with any
   of the "STREAM" tests.  This converts the primary throughput metric
   to a bitrate (byterate) following the verbosity rules for a STREAM
   test.  Service demand remains usec/Transaction regardless of the
   setting of the global -f option.

   A verbosity level of 2 or more will cause the TCP_RR test to report
   calculated average RTT latency, transaction rate, and inbound and
   outbound transfer rates regardless of the primary units selected
   with the global -f paramter.  If the primary output is transactions
   per second, the reported inbound and outbound transfer rates will
   be 10^6 bits per second, otherwise, they honor the setting of the
   global -f option.

   All of this is EXPERIMENTAL and subject to change without prior
   notice in future versions of netperf.

*) Replace "break" with "break 2" in acinclude.m4 for a socklen macro

*) The default for the requested socket buffer size is changed from 0
   to -1 to enable passing a value of 0 under Windows, which tells that
   stack one wishes to enable copy-avoidance.

*) Call fflush() on each interim result displayed in demo mode to make
   things happier for folks redirecting same to a file.  From Dan
   Yost.

*) In theory each distinct netserver child will have a debug log with
   its pid appended to the name, somewhat like what appears to happen
   under Windows.

*) A new global, command-line option to netperf and netserver has been
   added. The -V option will cause netperf/netserver to display its
   version and exit.

*) Setting -I without setting -i will now implicitly set the iteration
   minimum and maximums as if a -i 10,3 were set.  Also, some further
   sanity checking on the bounds for each is made.

*) Fixed a typo in the manual (found by Emir Halepovic) so the
   description for the -s and -S options properly specifies they
   affect the data connection.

These are the Release Notes for Revision 2.4.3 of netperf:

Things changed in this release:

*) The UDP_STREAM test includes --enable-demo support, courtesy of
   patches from Scott Weitzenkamp.

*) The nettest_dns.* files have been removed from the release and the
   repository.  Those wishing to perform DNS server tests should
   migrate to netperf4 which has better support for DNS test.

*) Fixes for compiling under Windows with Mingw/gcc courtesy of Gisle
   Vanem.

*) A new global option - -N - has been added. When specified, this
   option will tell netperf to not bother to try to establish a
   control connection with a remote netserver.  Instead, netperf will
   only attempt to make a data connection to the remote system.  By
   default, this will be to the "discard" service for a "STREAM" or
   "SENDFILE" test, the "echo" service for a "RR" test and the
   "chargen" service for a "MAERTS" test.  Any "remote" settings are
   changed to reflect their being unused in the test, and a "no
   control" tag is added to the test banner when -N is specified.

   This still needs to be propagated to other test files - at least
   for those for which it may make sense.

*) The tests in nettest_bsd.c have been altered to not actually take
   timestamps and deltas in --enable-histogram unless the verbosity
   level has been set to actually display a histogram.  This reduces
   the overhead measurably, even on systems with "fast" time calls,
   which _may_ mean that a future release of netperf may have
   histogram support enabled by default.

   This still needs to be propagated to other test files.  Patches
   from the community would be most welcome :)

*) Eliminate a bogus fprintf from the signal catching routine which
   was being executed when both intervals and demo mode were active at
   the same time.

*) The nettest_ipv6.* files are no longer included in the source
   tar/zip file. IPv6 functionality has been subsumed into the
   nettest_bsd.* files for some time now.

*) Use a higher resolution "time" source for HISTOGRAM support under
   Windows, courtesy of Spencer Frink. Prior to this it had no better
   than 10ms granularity which could lead to some rather strange
   looking results :)

*) A bug fix reporting recv_size rather than send_size in TCP_MAERTS
   when CPU utilization was requested.

*) A bug fix for buffer filling from a file to properly advance the
   buffer pointer when the file is smaller than the send buffer.

*) Enable certain UDP tests which previously used unconnected sockets
   to use connected sockets.  Courtesy of Shilpi Agarwal.

*) The OSX CPU utilization code actually gets put into the tarball in
   a make dist now :)

*) The check to make sure that getaddrinfo returned ai_protocol and/or
   ai_socktype's matching that which we requested is done for all socket
   and/or protocol types and a warning is emitted if it returns any which
   do not match.

*) The linux CPU affinity code has been made capable of binding to
   CPU's >=32 on a 32-bit compilation and >=64 on a 64-bit
   compilation.

*) More complete closing/redirecting of stdin/stdout/stderr/where in
   netserver to make it easier to launch netserver at the far-end of a
   remote shell.  Courtesy of Hans Blom.

*) Sendfile changes for Solaris courtesy of Andrew Gallatin.

*) "spec" file support to generate RPMs courtesy of Martin Brown

These are the Release Notes for Revision 2.4.2 of netperf:

Things changed in this release:

*) Fixes for floating point format differences, courtesy of George
   Davis.

*) Additions for CPU util support on MacOS X, courtesy of Anonymous.

*) Processor affinity is now supported on AIX 5.3 (perhaps earlier)
   via the bindprocessor system call.

*) Fixes for test lockups with TCP_CRR and TCP_CC under Windows
   courtesy of Dikon Reed.

*) Fixes to netcpu_looper.c to get it to actually compile :)

*) Have netcpu_looper use the bind_to_specific_processor() call
   provided by netlib since that knows about more platforms than the
   code in netcpu_looper did. The looper CPU binding will use a
   mapping to handle cases where the CPU id's on the system may not be
   a contiguous space starting from zero.  At present, the code that
   setups the mapping only knows about retrieving actual CPU ids under
   HP-UX.

*) The netcpu_sysctl method becomes calibration-free, courtesy of
   Andrew Gallatin

These are the Release Notes for Revision 2.4.1 of netperf:

Things changed in this release:

*) There is now a -B global command-line argument that will append its
   parameter as a string to the end of result lines when test banners
   have been suppressed.  this is to make it easier to distinguish one
   result from another when aggregate restults are being run in
   parallel, without having to resort to having the individual results
   shell redirected to a file. This has been done for some of the
   tests in nettest_bsd.c, but not all of them, nor for the tests in
   the other nettest_mumble.c files.

*) There is now an --enable-spin configure option that will enable
   intervals if not already enabled and will have the sender sit and
   spin in a tight loop until time for the next interval rather than
   wait for an interval timer to expire.  This means it should be
   possible to have a much finer granularity on the interval, at the
   expense of an EXTREME increase in CPU utilization.  (To the extent
   I'm considering disabling measurement of local CPU utilization when
   that mode is enabled, and bursts have been requested - your
   feedback on that topic would be most appreciated)

   If only --enable-intervals is used with configure, the old set the
   interval timer and wait method is still used.

   If --enable-spin is configured, the test banner will include "spin
   intervals" rather than the "intervals" from a plain
   --enable-intervals.  The sit and spin will either use
   gettimeofday(), or gethrtime() if gethrtime() is available.

   This has been implemented in the tests of nettest_bsd.c but none of
   the others.  Volunteers would be most welcome.  I would entertain
   the notion of making the implementation a series of inline
   functions in netlib. This holds true for the demo mode - why will
   become clear when you look at nettest_bsd.c.  While things are
   considerably cleaner than they were before, with reuse within
   nettest_bsd.c, there is no resuse with the rest of the
   nettest_mumble.c files.

*) the -w option for the interval time now takes three optional
   suffixes. if the suffix is 'm' (eg 10m) it will assume the user has
   specified time in units of milliseconds.  if the suffix is 'u' it
   will assume microseconds, and if 's' seconds. no suffix remains
   milliseconds for backwards compatability with previous netperf
   versions.

*) It should be possible to successfully compile with
   --enable-intervals.

These are the Release Notes for Revision 2.4.1 of netperf:

Things changed in this release:

*) netcpu_pstatnew.c has been altered to workaround a bug in the
   interrupt cycle accounting in HP-UX 11.23 that is not expected to
   be resolved until a later release.  basically, some interrupt time
   is not counted, which means the sum of idle, user, kernel and
   interrupt is less than the cycles per second multiplied by the
   elapsed time.  the workaround preserves the "no calibration
   required" nature of the pstatnew CPU utilization mechanism.  you
   can see more in netcpu_pstatnew.c and/or in debug output.

*) in netlib.c recv_response has been renamed
   recv_response_timed(addl_time) which is now used in
   calibrate_remote_cpu in place of the "sleep(40);recv_response()"
   sequence.  This then allows the REM_CPU test to complete in less
   than 40 seconds when the remote's CPU utilization mechanism does
   not require calibration.  The value of "addl_time" is added to the
   tc_sec field of the select() timeout.  A "new" recv_response has
   been added that simply calls recv_response_timed(0) - this is to
   minimize the number of changes needed elsewhere in the code.

*) hopefully, this release fixes problems people have been having with
   the configure script failing when picking a type for socklen_t.
   now, instead of generating an error, it emits a warning and simply
   tries socklen_t

*) the configure script no longer looks for the size of an in_port_t

*) netlib.c now has code to perform processor binding for Tru64, but
   the configure script may or may not detect it correctly. This means
   that one may have to edit the config.h file by hand to get the
   functionality.

*) it is known that netperf will compile under Windows XP and 2003
   using the DDK it is possible that netperf 2.4.1 will compile on a
   Windows system under VC++/Visual Studio.  It might even work!-) See
   the README.window file for additional details.

Things _NOT_ changed in this release:

*) The automagic determination of the number and type of parameters to
   sched_setaffinity under Linux remains brittle at best.

These are the Release Notes for Revision 2.4.0 of netperf:

Things changed in this release:

*) Netperf has been converted to use a configure script.  Yes boys and
   girls, after 12 years of distributing netperf with just a makefile
   I have finally bitten the bullet and cast my fate to autoconf,
   automake, etc.  To get the most basic netperf built all you should
   need to do is:

   cd to the netperf directory
   ./configure
   make
   and perhaps
   make install

   (Note, I've not done much with make install - I'm hemming and
   hawing over what the default installation location should be)

   Please keep in mind that this is the first time I've tried to use
   autoconf et al. I am sure there are things that should be done
   differently and would welcome any and all constructive criticisms.

   I suspect there are several places where I've not fully
   demonstrated being of the autoconf body - particulary as pertains
   to include files being in "#if mumble #endif" blocks.  Fixes would
   be most welcome.

*) Speaking of becomming one with various GNU tools, work on a new
   netperf manual has begun, with the source being a texinfo document
   that is converted to "all" the other formats.  This resides in doc/
   .

*) The platform-specific parts of CPU utilization measurement have
   been broken-out into separate .c files and selected at configure
   time a la the pcap_mumble files of tcpdump.  This makes
   src/netlib.c _much_ easier to read and the addition of new CPU
   utilization mechanisms much easier.

*) New HP-UX 11.23 and Solaris 10 CPU utilization measurement
   mechanisms (called pstatnew and kstat10 respectively) need no
   calibration step.  Both have variations on microstate accounting.
   HP-UX 11.23 still identifies the method in the headers as 'P' for
   pstat.  The kstat10 method is identified as 'M' for Microstate.

   Scripts which make calibration runs with LOC_CPU and REM_CPU may
   continue to do so, they will just run forty to eighty seconds
   faster on platforms with the calibration-free CPU util mechanisms.

*) Automatic detection of CPU utilization mechanism for HP-UX, Linux,
   AIX, *BSD and Solaris.  If you do not like what the configure
   script selects, you can use --enable-cpuutil=<foo> .

*) The "times" (aka 'T') CPU utilization mechanism has been removed.
   It was never very accurate at all, only showing CPU time charged to
   the process, and with interrupts and other network processing it is
   rarely chaged to a or the correct process.  It and other methods
   may remain in the format_cpu_method() routine of src/netlib.c for
   historical purposes only.

*) CAVEAT - the "kstat" mechanism is KNOWN TO BE BOGUS for Solaris.
   It does not include time spent processing interrupts, and
   networking benchmarks will generate at least a few of those...
   This affects _ALL_ versions of Solaris with kstat.

   So, do NOT trust any CPU util figures where netperf says the method
   was 'K' for kstat - unless perhaps it reports 100% CPU util.

   Solaris 10 takes a step in the right direction adding microstate
   accounting similar to what netperf uses on HP-UX 11.23.  HOWEVER,
   Solaris 10's accounting for user/kernel/idle is done in _parallel_
   with interrupt, which means they overlap. Doubleplusungood. Netperf
   attempts to compensate for that with some handwaving
   (src/netcpu_kstat10.c)

*) Initial support for SCTP has been added with the SCTP_STREAM and
   SCTP_RR tests.  These tests use the libsctp mechanisms for
   increased portability.  It has been explained that libsctp should
   not impart all that much overhead and it does make things rather
   simpler.

*) Netperf now uses getaddrinfo() to resolve hostnames and IP
   addresses. A replacement getaddrinfo() is provided for those
   platforms where the configure script cannot tell that getaddrinfo
   is present.

   There are cases where a host's getaddrinfo call may return results
   that ignore the hints for protocol.  Netperf catches these and
   reports a warning so you can pester your OS source for fixes.

   Solaris getaddrinfo() seems to return results with SCTP procotol
   cleared.

   Mac OS X getaddrinfo botches when the service/port is specified as
   "0" so one must specify a port number on the netperf command line.

   AIX 5.something getaddrinfo has a different but similar problem
   with "0" as a port/service name as well.

   Linux 2.6 and HP-UX 11i getaddrinfo seem to be fine - at least as
   far as netperf goes :)

*) A "Demo Mode" has been added to the main BSD Sockets/TCP/UDP tests:
   TCP_STREAM, TCP_MAERTS, TCP_SENDFILE, TCP_RR, TCP_CC, TCP_CRR and
   UDP_RR. It has not been added to UDP_STREAM.  This mode is enabled
   with --enable-demo when configuring netperf, which activates a
   global "-D" option.  By default, -D will cause interim results
   (throughput or transactions/s only, not CPU util) from the
   netperf's perspective to be emitted no sooner than once per second.
   An optional parameter can specify another interval in units
   (floating point) of seconds:

      -D 1.5

   will make the reporting interval at least 1.5 seconds.

   This mode makes no use of explicit interval timers since that can
   be so, well fun on different platforms.  Instead, an initial guess
   of how many units of work must be done to consume the desired
   reporting interval is made, and that guess is refined throughout
   the entire test.  If something happens to dramatically slow-down
   the test, the reproting interval may become must larger for a few
   intervals.  When things speed-up it is detected very quickly.  As
   with the --enable-historgram support, if gethrtime() is available
   on the platform, it will be used in lieu of gettimeofday().  In any
   case, the number of calls to gettimeofday()/gethrtime() is much,
   Much, MUCH smaller than for --enable-histogram so while there may
   be a measurable effect on the results, it should be rather small.

*) The global -H option has been enhanced to take an optional address
   family specification for the control connection:

   -H <remote>,<family>

   Unlike other comma-separated options, where specifying only one
   thing will set both, here specifying only one thing will be
   ass-u-me-d to be the <remote> and will leave <family> defaulted
   (AF_UNSPEC).   Family can be specified as "4" or "inet" for
   AF_INET, "6" or "inet6" for AF_INET6.

*) A new global -L option has been added to specify the local name/IP
   and/or address family for the control connection:

   -L <local>,<family>

   Unlike other comma-separated options, where specifying only one
   thing will set both, here specifying only one thing will be
   ass-u-me-d to be the <local> and will leave <family> defaulted
   (AF_UNSPEC).  Family can be specified as "4" or "inet" for
   AF_INET, "6" or "inet6" for AF_INET6.

*) Test-specific -H and -L options are present for the TCP, UDP and
   SCTP tests, which are now (intended to be) IP protocol version
   agnostic.

*) Global -4 and -6 options will set the both the local and remote
   address family to either AF_INET or AF_INET6 respectively.

*) Test-specific -4 and -6 options have been added for TCP, UDP and
   SCTP tests.

*) Since the basic TCP UDP and SCTP tests are no longer IPv4-only, the
   nettest_ipv6.[ch] files are only included in the source
   distribution for historical interest.

*) The main test banners for the TCP, UDP and SCTP tests have been
   enhanced to give both local and remote addressing information for
   the data connection.

*) Compilation under Windows is likely FUBAR at this point.  I _hope_
   to start trying to do builds under the DDK soon, but am not sure
   when I'll be able to start.  Any and all assistance you can give
   there would be most welcome.

*) Various and sundry fixes.  TCP_RR should no longer go into an
   infinite loop when you abort netperf.  I'm sure there are others.

*) Unix domain socket tests are compiled-in with --enable-unix=yes at
   configure time.

*) DLPI tests are compiled-in with --enable-dlpi=yes at configure
   time.

*) XTI tests are compiled-in with --enable-xti=yes at configure time.

Things not changed in this release:

*) Seems like everything has changed :)

These are the Release Notes for Revision 2.3pl2 of netperf:

Things changed in this release

*) One can bind netperf or netserver to specific CPUs with the -T
   option. This is a generalization of some HP-UX and netserver specific
   work from 2.3pl1.

*) Extend the kludge to workaround the Linux setsockopt/getsockopt
   bizzarreness to the socket buffer sizes for the remote side in
   addition to the local side.

*) Fix the lack of initialization of times_up in recv_tcp_maerts()
   that caused confidence intervals to fail miserably.

*) Other misc fixes - than you to all of you who sent them.

These are the Release Notes for revision 2.3pl1 of netperf:

Things changed in this release

*) The bind() call in create_data_socket() in the file nettest_bsd.c
   is no longer conditional on the user's specifying an IP address or
   port number to which the data socket should be bound.  This fixes
   the "connection refused" errors in the UDP tests.

*) Some experimental code to allow one to specify a CPU to which the
   remote netserver should be bound.  This is intended to allow one to
   get greater certainty (as in confidence intervals) on SMP
   systems. At present the functionality is HP-UX specific.
   Submittals of changes for a more general approach are welcomed.

These are the Release Notes for revision 2.3 of netperf:

Things changed in this release

*) The user can now specify local and/or remote port numbers for the
   data connection using the -P test-specific option.  This is to
   support those folks who want to run netperf through those evil,
   end-to-end-breaking things known as firewalls... :)  This changes
   the format of some of the control messages, hence the bump in the
   update number in the VUF. While it may be possible to mix 2.3 and
   pre-2.3 netperf and netserver, it is not supported.

*) The user can now specify local and/or remote IP addresses for the
   data connection using the -I test-specific option.  This is to
   support those folks who want to run netperf through those evil,
   end-to-end-breaking things known as firewalls... :) This changes
   the format of some of the control messages, hence the bump in the
   update number in the VUF. While it may be possible to mix 2.3 and
   pre-2.3 netperf and netserver, it is not supported.

*) Set DL_mumble  message priorities in the DLPI tests

*) Fix error return check for getaddrinfo()

*) Those systems with gethrtime() can define -DHAVE_GETHRTIME to use
   gethrtime() instead of gettimeofday() and reduce the measurement
   overhead when enabling the -DHISTOGRAM functionality.

*) The default for -DHISTOGRAM compilation now adds a UNIT_USEC and
   TEN_USEC row and renames TENTH_MSEC to HUNDRED_USEC.  If you want
   the old behaviour add -DOLD_HISTOGRAM to CFLAGS.

*) Add missing '!' in the recv_udp*_stream so we recognize the end of
   a timed test correctly.

*) Replace "||" with "&&" to fix an infinite loop in
   recv_tcp_conn_rr() most likely introduced in 2.2pl5.

*) Code has been added to kludge around the bug in Linux getsockopt()
   where it almost always returns twice the value for which one
   asks unlike virtually every other stack on the face of the
   planet. This was doing some unpleasant things to tests in which
   confidence intervals were requested.

Things not changed in this release

*) Lots :)

These are the Release Notes for revision 2.2pl5 of netperf:

Things changed in this release

*) Improved (perhaps even usable :) support for Windows, including
compilation and run on Win64.

*) Fixes for MacOS X and FreeBSD

Things not changed in this release

*) Specifying the port number(s) for the data connection

These are the Release Notes for Revision 2.2pl4 of netperf:

Things changed in this release

*) USE_SYSCTL available on suitable FreeBSD releases to measure CPU
   utilization without having to resort to -DUSE_LOOPER.

*) Include Solaris 9 with the Linux sendfile path under -DHAVE_SENDFILE

This still outstanding in this release

*) Knowing why signals are not interrupting socket calls under
   OpenVMS.  A quick try to use threads for timing a la Win32 worked,
   but also cut performance in half.  Any and all assistance in this
   area would be most welcome.

These are the Release Notes for revisoin 2.2pl3 of netperf:

Things changed in this release

*) I started practicing what I preach and will set SO_REUSEADDR before
   netserver tries to bind to its well-known port.

*) Initial port to OpenVMS.  This includes support for the OVMS
   Auxilliary server (inetd replacement).  See README.ovms for more
   details on what is involved in compiling and running netperf under
   OpenVMS.

*) Testname comparisons are now case insensitive.  This is a side
   effect of OpenVMS downshifting commandlines to lowercase.  I made
   the change and decided it was OK to keep it that way, even though
   for OpenVMS one _has_ to set the right defines to disable that
   downshifting or the command-line options will not work. For example
   "-H" will become "-h" which isn't quite the same thing...

*) Misc fixes for nettest_ipv6.c.

*) Support for sendfile() under Linux

Thins I would like to have changed but did not know how or didn't have
time:

*) Allow netserver to run as a standalone daemon under OpenVMS
*) Allow netserver to run as a standalone daemon under Windows
*) Rediscover an inetd-like facility for Windows
*) Figure-out how to get low-overhead, accurate, per-CPU utilization
   figures under OpenVMS
*) Get the UDP_RR and UDP_STREAM tests to work under OpenVMS, and get
   the TCP_RR test to work based on time rather than transaction
   count.  There is some bug (possibly in OpenVMS?) where the SIGALRM
   fires, but a socket call will not return an EINTR.

Things that changed prior to this release:

*) Addition of the TCP_MAERTS test - this is a TCP_STREAM test where
   the data flows from the netserver to the netperf rather than from
   the netperf to the netserver.  This can be useful in those
   situations where netperf (netserver) is installed on a remote
   system, but the tester has no shell access and wishes to get
   performance data for the path from netserver to netperf.

These are the Release Notes for the 2.2 revision of netperf:

Things changed in this release

*) Various and sundry bugs fixed (in theory) for platforms such as
   FreeBSD and Linux. If I left-out your bug fix, it was purely
   accidental - my mind has a very small cache, and sometimes I will
   "lose" email in the shuffle.

*) Initial support for sendfile() on HP-UX. This test will use the
   sendfile() call instead of send() to send data to the
   remote. Netperf "lies" to netserver and calls it a TCP_STREAM test
   since what netserver needs to do is exactly the same. A future
   patch may change that and simply have netserver call the same
   routine for both test types. Kudos to Charles Harris for the
   initial prototype.

*) The Fore ATM API and HiPPI tests have been dropped from the
   distribution.

Things I would have liked to have changed, but did not have time for:

*) Conversion of the source and makefile to use the GNU configure/autoconf
   utility to make it easier for folks to build by not having to edit
   makefiles... You will notice that I have started to switch from
   "DO_MUMBLE" to "HAVE_MUMBLE"

as always - happy benchmarking,

rick jones <raj@cup.hp.com>

---------------------------------------------------------------------

These are the Release Notes for the 2.1pl3 revision of netperf:

*) An OBOB (Off By One Bug) in netlib.c that was causing a core dump
   on Irix should be fixed.

*) Irix systems should now be able to determine the number of CPU's
   present automagically (code from outside, not tested yet because I
   have no MP Irix systems at my disposal)

*) An alpha version of a TCP_CC test has been added - this is a
   TCP_CRR test with out the "RR."

*) The -Ae has been removed from the default makefile. If someone has
   a nice way to automagically generate the correct makefile for
   different platforms I would like to learn how.

happy benchmarking,

rick jones <raj@cup.hp.com>

----------------------------------------------------------------------

These are the Release Notes for the 2.1 revision of netperf:

Things Changed in this release:

*) The XTI (Version 2 of the spec) tests are now documented in the
   manual.

*) The TCP_CRR (Connect Request/Response) test is now documented in
   the manual, including a description of how it mimics the behaviour
   of http (the protocol underlying the WWW).

*) Support for for Windows NT 3.51 OS in the BSD Sockets tests (ok, so
   they are really Winsock in that case :). Other test suites may be
   ported as required/desired/appropriate.

*) Tests for TCP and UDP, using the IPv6 extensions to BSD sockets are
   included in this release. They are included by adding -DUSE_IPv6 to
   the makefile and recompiling.

*) Support for a "long long" datatype should only be required for
   -DUSE_PSTAT compilation which is an HP-UX only thing. The
   *unbundled* HP compilers from at least "HP92453-01 A.09.61 HP C
   Compiler" and later should have the required support. The bundled
   compiler may not. GCC should work - check the archives listed in
   the comp.sys.hp.hpux FAQ for copies. The FAQ is archived on
   rtfm.mit.edu under the path pub/usenet/comp.sys.hp.hpux.

*) A "proper" fix for double data type alignment has been included.

*) A new script is included with this release which can be used to
   measure aggregate TCP_RR performance (multiple, concurrent
   instances of the TCP_RR test). A related use of this script would
   be measuring MP scaling. A single-byte TCP_RR test is good for this
   purpose for two reasons:

      1) it excercises the control/protocol paths heavily without
         using much in the way of data copies which may be easier to
         scale.
      2) most systems can easily saturate cards with bandwidth, but
         not so easily with request/response

   Of course, feedback on this is most welcome.

*) When measuring CPU utilization, the units for service demand have
   been changed from milliseconds (designated ms) of CPU per unit (KB
   or Transaction) to microseconds (desginated us).

*) For accurate reporting of service demand, netperf needs to know the
   number of CPU's present on a system. On some systems (HP-UX), this
   is automatic. For others (All), it is necessary to add a global "-n
   <numcpu>" option to both netperf and netserver.

   !! IF THIS IS LEFT-OUT CPU UTILIZATION AND SERVICE DEMAND FOR !!
	     !! MULTI-PROCESSOR SYSTEMS WILL BE WRONG. !!

   If you know of ways to programatically determine the number of
   active CPUs on a system, please let the author Rick Jones
   <raj@cup.hp.com> know.

*) other things I've probably forgotten :)

Things Not Changed in this release:

*) The ancillary test suites are essentially unchanged - DLPI,
   HiPPI/LLA, Unix Domain, and Fore ATM API. Unless there is much
   interest expressed in these tests, 2.1 may be the last release in
   which they are included. The order of retirement would likely be
   Unix Domain, HiPPI/LLA, Fore ATM API, and then DLPI.

Miscelaneous Comments:

*) The -DUSE_LOOPER CPU utilization _seems_ to be nice and low-impact
   on HP-UX, Digital Unix, and IRIX. It does not yet seem to be
   low-impact on Solaris (I need an example of priocntl usage), AIX
   (setpri only works if you are root), and NT (not sure of the
   reason). Help with those problems would be most appreciated.
