Home | History | Annotate | Download | only in netperf
      1 These are the Release Notes for Revision 2.7.0 of netperf:
      2 
      3 *) Add bits/s (-f b) and Bytes/s (-f B) as selectable throughput
      4    units. This may make life easier for folks doing post-processing of
      5    things like interim results.
      6 
      7 *) Miscelaneous fixes
      8 
      9 *) Much of the now-seeming kruft for things peripheral to netperf's
     10    core mission - have been removed though the code itself remains in
     11    the repository.  So, things like looking-up egress interface,
     12    driver/slot information etc have been disabled in a manner
     13    requiring more than just a ./configure to bring-back.
     14 
     15    It wasn't clear those features were being used.  This is a test of
     16    that hypothesis.
     17 
     18 These are the Release Notes for Revision 2.6.0 of netperf:
     19 
     20 *) Initial pass at support for --enable-intervals (WANT_INTERVALS) for
     21    Windows, courtesy of Jonathan Cook.
     22 
     23 *) When in demo mode (./configure --enable-demo and a global -D
     24    <interval> option netperf will make sure it emits "one last
     25    interval result" when the test is terminated.  This should assist
     26    when post-processing results through the likes of rrdtool when
     27    there is a slow-down in the performance just at the end that would
     28    have stretched the interval to beyond the test termination.
     29 
     30 *) A fix to have the AF_UNIX tests realize that the value for "take
     31    the system default" socket buffer size became -1 years ago.  Bug
     32    found by Eric Dumazet.
     33 
     34 *) Include a patch from Dave Taht to enable symbolic manipulation of
     35    IP_TOS values.
     36 
     37 *) Include a patch from Sachar Raindel to enable the omni tests to get
     38    ENOBUFS under Linux when the socket buffer is larger than the tx
     39    queue of the egress interface.  This will help preclude netperf's
     40    reporting a larger than link-rate send-side figure.
     41 
     42 *) Fix a problem with late checking of the return from select() in
     43    src/netserver.c. Reported by Waqar Sheikh.
     44 
     45 *) A new global -Z option has been added to netperf and netserver.
     46    This takes as an argument a passphrase.  In the case of netserver
     47    it will expect a control message with the passphrase as the first
     48    thing it receives on the control connection.  If netserver does not
     49    receive a control message with the passphrase it will close the
     50    control connection and move-on.  If the netserver receives a
     51    control message with a passprhase when it is not lookign for one,
     52    it will be ignored. There is at present a 20 second timeout on the
     53    attempted receipt of the request message. In the case of netperf,
     54    the passphrase will be the first thing sent on the control
     55    connection.  There is no response to a passphrase control message.
     56 
     57 *) Demo mode output format will now track the omni output format. So,
     58    if the omni ouput format is CSV then the interim results will be
     59    emitted in csv. Likewise for keyval.  If the mode is human (default
     60    and test-specific -O) then the output remains unchanged.  Keyval
     61    output includes the count of interval, with a mind towards being
     62    able to source it in shells and whatnot.  Subject to change without
     63    notice.
     64 
     65 *) A patch to correctly handle IPv6 addresses in the control messages,
     66    courtesy of Bjoern Zeeb.
     67 
     68 *) The global -F option can now be used specify a local and/or remote
     69    fill file.
     70 
     71 *) It is now possible to set/get the TCP congestion control algorithm
     72    being used by either end of the test connection when using the omni
     73    code.  The output selectors are LOCAL_CONG_CONTROL and
     74    REMOTE_CONG_CONTROL and setting is via the test-specific -K option.
     75 
     76 *) Stop leaking file descriptors when looking-up probable egress
     77    interface names and I/O slot numbers.
     78 
     79 *) The global -Y option can be used to set IP_TOS on those platforms
     80    which support it.  Since this is specific to IP (v4 or v6) it may
     81    move to a test-specific otion in the future.  It is presently
     82    global for foolish consistency with the -y option to set
     83    SO_PRIORITY.
     84 
     85 *) The global -y option can be used to set SO_PRIORITY on those
     86    platforms which support it.  Based on patches from Amir Vidai.
     87 
     88 *) The control message size has been increased from 256 bytes to 512
     89    bytes. THIS WILL BREAK COMPATABILITY WITH PREVIOUS VERSIONS OF
     90    NETPERF. However, we need more room on the pinhead on which the
     91    angels dance.
     92 
     93 *) Make the "sum" field of the histogram structure a 64 bit int to
     94    avoid having it wrap-around on tests where the sum of all the
     95    measured latencies was larger than 31 bits. This was causing
     96    statistics like stddev to go negative in some cases.
     97 
     98 *) If the time delta between two events is negative, do not bother
     99    doing any math with it in the histogram/statistics code, just
    100    increment the ridiculous count and move-on.
    101 
    102 *) Fixed a bug which caused local transport retransmissions to be
    103    reported as -1 even though the getsockopt() call was
    104    successful. (Linux).  Later included remote transport
    105    retransmissions.
    106 
    107 *) The src/nettest_omni.c and re-written src/netserver.c code are now
    108    known to have compiled under Windows 7 x64 with the Microsoft
    109    WDK. There remains a timing issue with confidence intervals which
    110    is yet to be addressed, and may have been there for ages. Netserver
    111    has been run as a non-spawning (-f) server, netperf has been run,
    112    both have run "classic" and "omni" tests.
    113 
    114 These are the Release Notes for Revision 2.5.0 of netperf:
    115 
    116 *) Add a new -N option to netserver which will suppress all creation
    117    of debug files and so debugging output.  While this would put a
    118    serious crimp in debugging a problem in netserver, it will enable
    119    folks using small embedded systems to avoid soaking-up their /tmp
    120    filesystem with clutter.
    121 
    122 *) A refactoring and partial re-write of the src/netserver.c code to
    123    untangle years of accumulated spaghetti code.  Included is the
    124    ability to not daemonize netserver when launched from the
    125    command-line (-D) and also to not fork/spawn child processes upon
    126    the acceptance of a control connection (-f).  Combined, the two
    127    options will cause netserver to remain in the forground and not
    128    spawn children - in effect netserver will handle only one test at a
    129    time.
    130 
    131 *) As it has been two years since the defect in Solaris getaddrinfo()
    132    was submitted, it should be the case that a fix is available, so it
    133    should no longer be necessary to "hide" the "Hey your platform's
    134    getaddrinfo() call is buggy" warning.  Consequently, it is no
    135    longer being suppressed.
    136 
    137 *) A new global command line option - -S - has been added to enable
    138    setting of SO_KEEPALIVE on the data socket.  This will affect the
    139    netperf side of the "classic" netperf tests, and will also affect
    140    the netserver side of an "omni" or migrated classic test as only
    141    the control message for the omni tests has the requisite flags
    142    field to communicate the desire to set SO_KEEPALIVE.
    143 
    144    Ostensibly, this may help when netperf is (ab)used in functional
    145    testing situations and netservers end-up orphaned and out in the
    146    cold because their corresponding netperfs went away and the
    147    notification was lost amid the roar of traffic over-saturating the
    148    interconnect(s).
    149 
    150    The default is to behave as before - SO_KEEPALIVE not set.
    151 
    152 *) Base on the frequency at which the author has used the
    153    functionality, the default for --enable-burst is now "yes."  To
    154    disable support for burst mode one must now include a
    155    --enable-burst=no when performing the ./configure prior to
    156    compiling the bits.
    157 
    158 *) The output of the -D global command line option (./configure
    159    --enable-demo) has been enhanced to include seconds and
    160    milliseconds since the epoch as returned by a gettimeofday() call
    161    with a null pointer for the timezone.  This is in support of being
    162    able to easily shove interim results into an rrdtool Round-Robin
    163    Database (RRD).
    164 
    165 *) The "omni" tests will be compiled-in by default, and WANT_MIGRATION
    166    is the default.  One must ./configure with --enable-omni=no to
    167    disable this.
    168 
    169 *) When ./configured with --enable-intervals and intervals are
    170    actually used, the round-trip latency reported by an omni (or
    171    migrated classic) request/response test should better reflect
    172    reality rather than the length of the pacing interval.  It and the
    173    MEAN_LATENCY from the histogram and -j output will still differ
    174    slightly and probably always will.
    175 
    176 *) The histogram code has been enhanced to track more than one latency
    177    at a time and so --enable-histogram and --enable-burst are now
    178    compatible - for the omni tests or migrated "classic" tests only
    179    however.  This change was inspired/instigated by Jim Gettys and his
    180    work on overly-large queues of buffers
    181 
    182 *) WANT_MIGRATION is enabled when one specifies --enable-omni on the
    183    configure command line.
    184 
    185 *) Massage and encorporate a patch from Google that enables
    186    randomization of the IP addresses used in a test.  An optional mask
    187    length in the standard '/' notation can be added to the end of the
    188    IP/name in the test-specific -H or -L options of an Omni test.
    189 
    190 *) Massage and include a DEBUG_LOG_FILE patch for Android from
    191    Josselin Costanzi
    192 
    193 *) Add intial attempt to report Slot ID on HP-UX 11.31.
    194 
    195 *) Add global -s option to cause omni tests to pause between
    196    setting-up the test and actually starting it.  pause is in seconds.
    197    Poor man's way to (attempt to) avoid issues when starting many,
    198    Many, MANY concurrent netperf tests. Based on patches from Google.
    199 
    200 *) Additional timing statistics will be kept by the omni tests when
    201    the global "-j" option is specified.  The additional statistics are
    202    min, max, mean, stddev and the 50th, 90th and 99th percentiles on
    203    the timings measured by histograms. Based on patches from Google.
    204 
    205 *) Add a workaround to get Linux to report TX queue drops in a
    206    UDP_STREAM test when the socket buffer size is larger than the
    207    TX queue.  Provided by Andrew Gallatin.
    208 
    209 *) Fix the configure script to know it does not have to look for an 
    210    SCTP library on FreeBSD 8.X
    211 
    212 *) The BSD and "omni" tests now have a test-specific -R option which
    213    is a boolean controlling whether or not SO_DONTROUTE will be set on
    214    the data socket.  By default, any unidirectional UDP test will have
    215    SO_DONTROUTE set unless a -R 1 option is given.  All other tests
    216    (including UDP request/response tests) will not have SO_DONTROUTE
    217    set unless a -R 0 option is given.  This is put into place to make
    218    it take longer for blithering idiots to shoot themselves in the
    219    foot by running tests on setups they shouldn't.
    220 
    221 *) At least the beginnings of support for RDS, based on a circa 2007
    222    patch against 2.4.2 by Vladimir Sokolovsky. Rather than create the
    223    "RDS_STREAM" test of his patch, the intention this time around is
    224    to enable RDS for the "omni" tests by using an omni test-specific
    225    -T rds specifyer for the "transport" to use.
    226 
    227 *) Missing fprintf format statements provided by Bruno Cornec
    228 
    229 *) Numerous cleanups from Jose Pedro Oliveira
    230 
    231 *) Fixes to allow netperf -H ::1 to work without having to add -6 or
    232     an AF_INET6 -L option
    233 
    234 These are the Release Notes for Revision 2.4.5 of netperf:
    235 
    236 Things changed in this release:
    237 
    238 *) Fixes for Linux procstat-based CPU utilization on newer kernels
    239    from Andrew Gallatin.
    240 
    241 *) Fix for a TCP_RR hang from Michael Shuldman
    242 
    243 *) Compilation cleanups for MingW cnd MSDOS (djgpp) ourtesy of Gisle
    244    Vanem.
    245 
    246 *) Changes to enable compilation and building of netperf for
    247    VMware. Kudos to the person who did the first port, I will be happy
    248    to name that person when told it is OK :)
    249 
    250 *) Fixes from Adam Bidema for launching netserver children when the
    251    path to netserver.exe is very long.  
    252 
    253 *) For the first time, netperf2 has a dependency, albeit optional, on
    254    another non-base-os bit of code - libsmbios under Linux.  It will
    255    attept to detect this at compile time and use it to report the
    256    system model name in an omni test.  If libsmbios is there we will
    257    try to use it, otherwise we will not.  If the associated include
    258    file is also there (eg the -dev package in apt-get-speak), we will
    259    use it to get the prototype for SMBIOSGetSystemName, otherwise we
    260    make a guess as to the prototype for SMBIOSGetSystemName(), which
    261    is the only call we make to libsmbios.
    262 
    263 *) Fixes for BSD CPU utilization to deal with different BSD variants
    264    using different types.  Courtesy of Simon Burge <simonb (a] NetBSD.org>
    265 
    266 *) The "omni" suite has been added on an experimental basis.  If it
    267    works-out then many of the tests in src/nettest_bsd.c,
    268    src/nettest_sdp.c, and src/nettest_sctp.c will be "migrated" to use
    269    the "omni infrastructure" (aka two routines to measure them
    270    all...).  Apart from reduced socket code, the omni suite has
    271    user-configurable output in either "human readable," CSV or
    272    keyword=value format.  By default, a VERY large quantity of data is
    273    output when asking for csv format (test-specific -o option) or
    274    keyword format (test-specific -k option).  The omni suite is not
    275    yet documented (there are some as-yet undiagnosed problems with
    276    doc/netperf.texi in emacs texinfo mode and updating nodes and links
    277    and such - any help there would be appreciated) but there is a
    278    small text file in doc/ describing the names (most) of the
    279    available output's.  For the most up-to-date list consult
    280    src/nettest_omni.c and the enum netperf_output_name. Or, you can
    281    pass-in a "filename" of '?' to either of the -O, -o or -k options
    282    and netperf will emit a list of the known available outputs.
    283 
    284 *) Coming along for the ride are some new platform specific files to
    285    determine the probable egress interface for each end of a test, as
    286    well as driver information for that interface.  There is also
    287    reporting of "uname" like information for both local and remote
    288    system, and eventually perhaps something about the vendor's model
    289    name for the systems as well as the processor types.  The end goal
    290    is to make it easy to get most if not all what one would want in a
    291    database of netperf results.
    292 
    293 *) The UDP_RR test now understands the global -f option to change
    294    output units.  It also understands the -B option to tag
    295    results. Courtesy of Alexander Duyck.
    296 
    297 *) A fix has been added for hanging UDP_RR tests under
    298    Windows. Courtesy of Alexander Duyck.
    299 
    300 *) Use vfork() on those platforms without fork(), courtesy of Matt
    301    Waddel
    302 
    303 *) Track the bouncing interfaces that are linux processor affinity
    304 
    305 *) Fixes for Solaris sendfilev usage.
    306 
    307 *) A TCP_MSS test has been added which will report the MSS for a data
    308    connection setup as if the test were a TCP_STREAM test.  While the
    309    remote (netserver) is tricked into thinking it is to accept a
    310    TCP_STREAM test, no actual data will flow over the connection.
    311    This means that if the MSS is one which might change over the life
    312    of the connection, it will not be reflected in the test output.
    313    Should this prove to be a problem a single send() can be arranged
    314    along with the return of the shutdown();recv() handshake.
    315 
    316    The idea is that this might be useful for netperf scripts wanting
    317    to parameterize things based on the MSS - for example the
    318    packet_byte_script.
    319 
    320 *) The width of the confidence interval can be specified in fractions
    321    of a percent for the confidence of a clean, close, comfortable
    322    calculation. :)
    323 
    324 *) Honor the global -B option in a TCP_SENDFILE test.
    325 
    326 *) Correct the sense of Send/Recv in the banner of a TCP_MAERTS test.
    327 
    328 These are the Release Notes for Revision 2.4.4 of netperf:
    329 
    330 Things changed in this release:
    331 
    332 *) The LOC_CPU and REM_CPU tests will report their respective beliefs
    333    as to the number of CPUs present when the verbosity is set to more
    334    than one.  This can be used when trying to diagnose issues with CPU
    335    utilization.
    336 
    337 *) A kind soul who wishes to remain anonymous provided a patch to
    338    enable use of sendfile() on OSX.
    339 
    340 *) Fix a misplaced \n in a format string of send_tcp_maerts, courtesy
    341    of Alexander Duyck.
    342 
    343 *) There is an experimental global -r option which will allow one to
    344    include CPU utilization measurements, but make the decision about
    345    hitting confidence based on the result only.  The test banner will
    346    reflects this when -r is used.
    347 
    348 *) It is no longer necessary to specify a file with the global -F
    349    option when running a _SENDFILE test.  Netperf will create a
    350    temporary file and populate it with random data and use that.  If
    351    running aggregate tests it is strongly suggested one use a -F
    352    option. Otherwise, the overhead spent creating and populating the
    353    temporary file will be included in the CPU utilization calculation.
    354 
    355 *) The configure script recognizes Solaris 11 and selects the correct
    356    CPU utilization mechanism - or rather it selects the same mechanism
    357    as is used in Solaris 10.  Fix courtesy of Andrew Gallatin.
    358 
    359 *) Convert a number of struct sockaddr_in's to struct
    360    sockaddr_storage's and add requisite casts to deal with some abort
    361    problems on Windows and perhaps other platforms as well. Kudos to
    362    Alexander Duyck.
    363 
    364 *) One can now pass a value of 'x' to the global -f option to specify
    365    the units as transactions per second.  This is the default for any
    366    request/response test, which is determined by there being a "double
    367    `r'" in the name - eg "RR," "rr," "Rr," or "rR."  At present only
    368    the TCP_RR test actually looks for this to be set.
    369 
    370 *) One can request bits/bytes per second as the primary output of a
    371    TCP_RR test by setting the global -f option to [kmgKMG] as with any
    372    of the "STREAM" tests.  This converts the primary throughput metric
    373    to a bitrate (byterate) following the verbosity rules for a STREAM
    374    test.  Service demand remains usec/Transaction regardless of the
    375    setting of the global -f option.
    376 
    377    A verbosity level of 2 or more will cause the TCP_RR test to report
    378    calculated average RTT latency, transaction rate, and inbound and
    379    outbound transfer rates regardless of the primary units selected
    380    with the global -f paramter.  If the primary output is transactions
    381    per second, the reported inbound and outbound transfer rates will
    382    be 10^6 bits per second, otherwise, they honor the setting of the
    383    global -f option.
    384 
    385    All of this is EXPERIMENTAL and subject to change without prior
    386    notice in future versions of netperf.
    387 
    388 *) Replace "break" with "break 2" in acinclude.m4 for a socklen macro
    389 
    390 *) The default for the requested socket buffer size is changed from 0
    391    to -1 to enable passing a value of 0 under Windows, which tells that
    392    stack one wishes to enable copy-avoidance.
    393 
    394 *) Call fflush() on each interim result displayed in demo mode to make
    395    things happier for folks redirecting same to a file.  From Dan
    396    Yost.
    397 
    398 *) In theory each distinct netserver child will have a debug log with
    399    its pid appended to the name, somewhat like what appears to happen
    400    under Windows.
    401 
    402 *) A new global, command-line option to netperf and netserver has been
    403    added. The -V option will cause netperf/netserver to display its
    404    version and exit.
    405 
    406 *) Setting -I without setting -i will now implicitly set the iteration
    407    minimum and maximums as if a -i 10,3 were set.  Also, some further
    408    sanity checking on the bounds for each is made.
    409 
    410 *) Fixed a typo in the manual (found by Emir Halepovic) so the
    411    description for the -s and -S options properly specifies they
    412    affect the data connection.
    413 
    414 These are the Release Notes for Revision 2.4.3 of netperf:
    415 
    416 Things changed in this release:
    417 
    418 *) The UDP_STREAM test includes --enable-demo support, courtesy of
    419    patches from Scott Weitzenkamp.
    420 
    421 *) The nettest_dns.* files have been removed from the release and the
    422    repository.  Those wishing to perform DNS server tests should
    423    migrate to netperf4 which has better support for DNS test.
    424 
    425 *) Fixes for compiling under Windows with Mingw/gcc courtesy of Gisle
    426    Vanem.
    427 
    428 *) A new global option - -N - has been added. When specified, this
    429    option will tell netperf to not bother to try to establish a
    430    control connection with a remote netserver.  Instead, netperf will
    431    only attempt to make a data connection to the remote system.  By
    432    default, this will be to the "discard" service for a "STREAM" or
    433    "SENDFILE" test, the "echo" service for a "RR" test and the
    434    "chargen" service for a "MAERTS" test.  Any "remote" settings are
    435    changed to reflect their being unused in the test, and a "no
    436    control" tag is added to the test banner when -N is specified.
    437 
    438    This still needs to be propagated to other test files - at least
    439    for those for which it may make sense.
    440 
    441 *) The tests in nettest_bsd.c have been altered to not actually take
    442    timestamps and deltas in --enable-histogram unless the verbosity
    443    level has been set to actually display a histogram.  This reduces
    444    the overhead measurably, even on systems with "fast" time calls,
    445    which _may_ mean that a future release of netperf may have
    446    histogram support enabled by default.
    447 
    448    This still needs to be propagated to other test files.  Patches
    449    from the community would be most welcome :)
    450 
    451 *) Eliminate a bogus fprintf from the signal catching routine which
    452    was being executed when both intervals and demo mode were active at
    453    the same time.
    454 
    455 *) The nettest_ipv6.* files are no longer included in the source
    456    tar/zip file. IPv6 functionality has been subsumed into the
    457    nettest_bsd.* files for some time now. 
    458 
    459 *) Use a higher resolution "time" source for HISTOGRAM support under
    460    Windows, courtesy of Spencer Frink. Prior to this it had no better
    461    than 10ms granularity which could lead to some rather strange
    462    looking results :)
    463 
    464 *) A bug fix reporting recv_size rather than send_size in TCP_MAERTS
    465    when CPU utilization was requested.
    466 
    467 *) A bug fix for buffer filling from a file to properly advance the
    468    buffer pointer when the file is smaller than the send buffer.
    469 
    470 *) Enable certain UDP tests which previously used unconnected sockets 
    471    to use connected sockets.  Courtesy of Shilpi Agarwal.
    472 
    473 *) The OSX CPU utilization code actually gets put into the tarball in
    474    a make dist now :)
    475 
    476 *) The check to make sure that getaddrinfo returned ai_protocol and/or
    477    ai_socktype's matching that which we requested is done for all socket
    478    and/or protocol types and a warning is emitted if it returns any which
    479    do not match.
    480 
    481 *) The linux CPU affinity code has been made capable of binding to
    482    CPU's >=32 on a 32-bit compilation and >=64 on a 64-bit
    483    compilation.
    484 
    485 *) More complete closing/redirecting of stdin/stdout/stderr/where in
    486    netserver to make it easier to launch netserver at the far-end of a
    487    remote shell.  Courtesy of Hans Blom.
    488 
    489 *) Sendfile changes for Solaris courtesy of Andrew Gallatin.
    490 
    491 *) "spec" file support to generate RPMs courtesy of Martin Brown
    492 
    493 These are the Release Notes for Revision 2.4.2 of netperf:
    494 
    495 Things changed in this release:
    496 
    497 *) Fixes for floating point format differences, courtesy of George
    498    Davis.
    499 
    500 *) Additions for CPU util support on MacOS X, courtesy of Anonymous.
    501 
    502 *) Processor affinity is now supported on AIX 5.3 (perhaps earlier)
    503    via the bindprocessor system call.
    504 
    505 *) Fixes for test lockups with TCP_CRR and TCP_CC under Windows
    506    courtesy of Dikon Reed.
    507 
    508 *) Fixes to netcpu_looper.c to get it to actually compile :)
    509 
    510 *) Have netcpu_looper use the bind_to_specific_processor() call
    511    provided by netlib since that knows about more platforms than the
    512    code in netcpu_looper did. The looper CPU binding will use a
    513    mapping to handle cases where the CPU id's on the system may not be
    514    a contiguous space starting from zero.  At present, the code that
    515    setups the mapping only knows about retrieving actual CPU ids under
    516    HP-UX.
    517 
    518 *) The netcpu_sysctl method becomes calibration-free, courtesy of 
    519    Andrew Gallatin
    520 
    521 These are the Release Notes for Revision 2.4.1 of netperf:
    522 
    523 Things changed in this release:
    524 
    525 *) There is now a -B global command-line argument that will append its
    526    parameter as a string to the end of result lines when test banners
    527    have been suppressed.  this is to make it easier to distinguish one
    528    result from another when aggregate restults are being run in
    529    parallel, without having to resort to having the individual results
    530    shell redirected to a file. This has been done for some of the
    531    tests in nettest_bsd.c, but not all of them, nor for the tests in
    532    the other nettest_mumble.c files.
    533 
    534 *) There is now an --enable-spin configure option that will enable
    535    intervals if not already enabled and will have the sender sit and
    536    spin in a tight loop until time for the next interval rather than
    537    wait for an interval timer to expire.  This means it should be
    538    possible to have a much finer granularity on the interval, at the
    539    expense of an EXTREME increase in CPU utilization.  (To the extent
    540    I'm considering disabling measurement of local CPU utilization when
    541    that mode is enabled, and bursts have been requested - your
    542    feedback on that topic would be most appreciated) 
    543 
    544    If only --enable-intervals is used with configure, the old set the
    545    interval timer and wait method is still used.
    546 
    547    If --enable-spin is configured, the test banner will include "spin
    548    intervals" rather than the "intervals" from a plain
    549    --enable-intervals.  The sit and spin will either use
    550    gettimeofday(), or gethrtime() if gethrtime() is available.
    551 
    552    This has been implemented in the tests of nettest_bsd.c but none of
    553    the others.  Volunteers would be most welcome.  I would entertain
    554    the notion of making the implementation a series of inline
    555    functions in netlib. This holds true for the demo mode - why will
    556    become clear when you look at nettest_bsd.c.  While things are
    557    considerably cleaner than they were before, with reuse within
    558    nettest_bsd.c, there is no resuse with the rest of the
    559    nettest_mumble.c files.
    560 
    561 *) the -w option for the interval time now takes three optional
    562    suffixes. if the suffix is 'm' (eg 10m) it will assume the user has
    563    specified time in units of milliseconds.  if the suffix is 'u' it
    564    will assume microseconds, and if 's' seconds. no suffix remains
    565    milliseconds for backwards compatability with previous netperf
    566    versions.
    567 
    568 *) It should be possible to successfully compile with
    569    --enable-intervals.
    570 
    571 These are the Release Notes for Revision 2.4.1 of netperf:
    572 
    573 Things changed in this release:
    574 
    575 *) netcpu_pstatnew.c has been altered to workaround a bug in the
    576    interrupt cycle accounting in HP-UX 11.23 that is not expected to
    577    be resolved until a later release.  basically, some interrupt time
    578    is not counted, which means the sum of idle, user, kernel and
    579    interrupt is less than the cycles per second multiplied by the
    580    elapsed time.  the workaround preserves the "no calibration
    581    required" nature of the pstatnew CPU utilization mechanism.  you
    582    can see more in netcpu_pstatnew.c and/or in debug output.
    583 
    584 *) in netlib.c recv_response has been renamed
    585    recv_response_timed(addl_time) which is now used in
    586    calibrate_remote_cpu in place of the "sleep(40);recv_response()"
    587    sequence.  This then allows the REM_CPU test to complete in less
    588    than 40 seconds when the remote's CPU utilization mechanism does
    589    not require calibration.  The value of "addl_time" is added to the
    590    tc_sec field of the select() timeout.  A "new" recv_response has
    591    been added that simply calls recv_response_timed(0) - this is to
    592    minimize the number of changes needed elsewhere in the code.
    593 
    594 *) hopefully, this release fixes problems people have been having with
    595    the configure script failing when picking a type for socklen_t.
    596    now, instead of generating an error, it emits a warning and simply
    597    tries socklen_t
    598 
    599 *) the configure script no longer looks for the size of an in_port_t
    600 
    601 *) netlib.c now has code to perform processor binding for Tru64, but
    602    the configure script may or may not detect it correctly. This means
    603    that one may have to edit the config.h file by hand to get the
    604    functionality.
    605 
    606 *) it is known that netperf will compile under Windows XP and 2003
    607    using the DDK it is possible that netperf 2.4.1 will compile on a
    608    Windows system under VC++/Visual Studio.  It might even work!-) See
    609    the README.window file for additional details.
    610 
    611 Things _NOT_ changed in this release:
    612 
    613 *) The automagic determination of the number and type of parameters to
    614    sched_setaffinity under Linux remains brittle at best.
    615 
    616 These are the Release Notes for Revision 2.4.0 of netperf:
    617 
    618 Things changed in this release:
    619 
    620 *) Netperf has been converted to use a configure script.  Yes boys and
    621    girls, after 12 years of distributing netperf with just a makefile
    622    I have finally bitten the bullet and cast my fate to autoconf,
    623    automake, etc.  To get the most basic netperf built all you should
    624    need to do is:
    625 
    626    cd to the netperf directory
    627    ./configure
    628    make
    629    and perhaps
    630    make install
    631 
    632    (Note, I've not done much with make install - I'm hemming and
    633    hawing over what the default installation location should be)
    634 
    635    Please keep in mind that this is the first time I've tried to use
    636    autoconf et al. I am sure there are things that should be done
    637    differently and would welcome any and all constructive criticisms.
    638 
    639    I suspect there are several places where I've not fully
    640    demonstrated being of the autoconf body - particulary as pertains
    641    to include files being in "#if mumble #endif" blocks.  Fixes would
    642    be most welcome.
    643 
    644 *) Speaking of becomming one with various GNU tools, work on a new
    645    netperf manual has begun, with the source being a texinfo document
    646    that is converted to "all" the other formats.  This resides in doc/
    647    .
    648 
    649 *) The platform-specific parts of CPU utilization measurement have
    650    been broken-out into separate .c files and selected at configure
    651    time a la the pcap_mumble files of tcpdump.  This makes
    652    src/netlib.c _much_ easier to read and the addition of new CPU
    653    utilization mechanisms much easier.
    654 
    655 *) New HP-UX 11.23 and Solaris 10 CPU utilization measurement
    656    mechanisms (called pstatnew and kstat10 respectively) need no
    657    calibration step.  Both have variations on microstate accounting.
    658    HP-UX 11.23 still identifies the method in the headers as 'P' for
    659    pstat.  The kstat10 method is identified as 'M' for Microstate.
    660 
    661    Scripts which make calibration runs with LOC_CPU and REM_CPU may
    662    continue to do so, they will just run forty to eighty seconds
    663    faster on platforms with the calibration-free CPU util mechanisms.
    664 
    665 *) Automatic detection of CPU utilization mechanism for HP-UX, Linux,
    666    AIX, *BSD and Solaris.  If you do not like what the configure
    667    script selects, you can use --enable-cpuutil=<foo> .
    668 
    669 *) The "times" (aka 'T') CPU utilization mechanism has been removed.
    670    It was never very accurate at all, only showing CPU time charged to
    671    the process, and with interrupts and other network processing it is
    672    rarely chaged to a or the correct process.  It and other methods
    673    may remain in the format_cpu_method() routine of src/netlib.c for
    674    historical purposes only.
    675 
    676 *) CAVEAT - the "kstat" mechanism is KNOWN TO BE BOGUS for Solaris.
    677    It does not include time spent processing interrupts, and
    678    networking benchmarks will generate at least a few of those...
    679    This affects _ALL_ versions of Solaris with kstat.
    680 
    681    So, do NOT trust any CPU util figures where netperf says the method
    682    was 'K' for kstat - unless perhaps it reports 100% CPU util.
    683 
    684    Solaris 10 takes a step in the right direction adding microstate
    685    accounting similar to what netperf uses on HP-UX 11.23.  HOWEVER,
    686    Solaris 10's accounting for user/kernel/idle is done in _parallel_
    687    with interrupt, which means they overlap. Doubleplusungood. Netperf
    688    attempts to compensate for that with some handwaving
    689    (src/netcpu_kstat10.c)
    690 
    691 *) Initial support for SCTP has been added with the SCTP_STREAM and
    692    SCTP_RR tests.  These tests use the libsctp mechanisms for
    693    increased portability.  It has been explained that libsctp should
    694    not impart all that much overhead and it does make things rather
    695    simpler.
    696 
    697 *) Netperf now uses getaddrinfo() to resolve hostnames and IP
    698    addresses. A replacement getaddrinfo() is provided for those
    699    platforms where the configure script cannot tell that getaddrinfo
    700    is present.   
    701 
    702    There are cases where a host's getaddrinfo call may return results
    703    that ignore the hints for protocol.  Netperf catches these and
    704    reports a warning so you can pester your OS source for fixes.
    705 
    706    Solaris getaddrinfo() seems to return results with SCTP procotol
    707    cleared.
    708 
    709    Mac OS X getaddrinfo botches when the service/port is specified as
    710    "0" so one must specify a port number on the netperf command line.
    711 
    712    AIX 5.something getaddrinfo has a different but similar problem
    713    with "0" as a port/service name as well.
    714 
    715    Linux 2.6 and HP-UX 11i getaddrinfo seem to be fine - at least as
    716    far as netperf goes :)
    717 
    718 *) A "Demo Mode" has been added to the main BSD Sockets/TCP/UDP tests:
    719    TCP_STREAM, TCP_MAERTS, TCP_SENDFILE, TCP_RR, TCP_CC, TCP_CRR and
    720    UDP_RR. It has not been added to UDP_STREAM.  This mode is enabled
    721    with --enable-demo when configuring netperf, which activates a
    722    global "-D" option.  By default, -D will cause interim results
    723    (throughput or transactions/s only, not CPU util) from the
    724    netperf's perspective to be emitted no sooner than once per second.
    725    An optional parameter can specify another interval in units
    726    (floating point) of seconds:
    727 
    728       -D 1.5
    729 
    730    will make the reporting interval at least 1.5 seconds.
    731 
    732    This mode makes no use of explicit interval timers since that can
    733    be so, well fun on different platforms.  Instead, an initial guess
    734    of how many units of work must be done to consume the desired
    735    reporting interval is made, and that guess is refined throughout
    736    the entire test.  If something happens to dramatically slow-down
    737    the test, the reproting interval may become must larger for a few
    738    intervals.  When things speed-up it is detected very quickly.  As
    739    with the --enable-historgram support, if gethrtime() is available
    740    on the platform, it will be used in lieu of gettimeofday().  In any
    741    case, the number of calls to gettimeofday()/gethrtime() is much,
    742    Much, MUCH smaller than for --enable-histogram so while there may
    743    be a measurable effect on the results, it should be rather small.
    744 
    745 *) The global -H option has been enhanced to take an optional address
    746    family specification for the control connection:
    747 
    748    -H <remote>,<family>
    749 
    750    Unlike other comma-separated options, where specifying only one
    751    thing will set both, here specifying only one thing will be
    752    ass-u-me-d to be the <remote> and will leave <family> defaulted
    753    (AF_UNSPEC).   Family can be specified as "4" or "inet" for
    754    AF_INET, "6" or "inet6" for AF_INET6.
    755 
    756 *) A new global -L option has been added to specify the local name/IP
    757    and/or address family for the control connection:
    758 
    759    -L <local>,<family>
    760 
    761    Unlike other comma-separated options, where specifying only one
    762    thing will set both, here specifying only one thing will be
    763    ass-u-me-d to be the <local> and will leave <family> defaulted
    764    (AF_UNSPEC).  Family can be specified as "4" or "inet" for
    765    AF_INET, "6" or "inet6" for AF_INET6.
    766 
    767 *) Test-specific -H and -L options are present for the TCP, UDP and
    768    SCTP tests, which are now (intended to be) IP protocol version
    769    agnostic.
    770 
    771 *) Global -4 and -6 options will set the both the local and remote
    772    address family to either AF_INET or AF_INET6 respectively.
    773 
    774 *) Test-specific -4 and -6 options have been added for TCP, UDP and
    775    SCTP tests.
    776 
    777 *) Since the basic TCP UDP and SCTP tests are no longer IPv4-only, the
    778    nettest_ipv6.[ch] files are only included in the source
    779    distribution for historical interest.
    780 
    781 *) The main test banners for the TCP, UDP and SCTP tests have been
    782    enhanced to give both local and remote addressing information for
    783    the data connection.
    784 
    785 *) Compilation under Windows is likely FUBAR at this point.  I _hope_
    786    to start trying to do builds under the DDK soon, but am not sure
    787    when I'll be able to start.  Any and all assistance you can give
    788    there would be most welcome.
    789 
    790 *) Various and sundry fixes.  TCP_RR should no longer go into an
    791    infinite loop when you abort netperf.  I'm sure there are others.
    792 
    793 *) Unix domain socket tests are compiled-in with --enable-unix=yes at
    794    configure time.
    795 
    796 *) DLPI tests are compiled-in with --enable-dlpi=yes at configure
    797    time.
    798 
    799 *) XTI tests are compiled-in with --enable-xti=yes at configure time. 
    800 
    801 Things not changed in this release:
    802 
    803 *) Seems like everything has changed :)
    804 
    805 These are the Release Notes for Revision 2.3pl2 of netperf:
    806 
    807 Things changed in this release
    808 
    809 *) One can bind netperf or netserver to specific CPUs with the -T
    810    option. This is a generalization of some HP-UX and netserver specific
    811    work from 2.3pl1.
    812 
    813 *) Extend the kludge to workaround the Linux setsockopt/getsockopt
    814    bizzarreness to the socket buffer sizes for the remote side in
    815    addition to the local side.
    816 
    817 *) Fix the lack of initialization of times_up in recv_tcp_maerts()
    818    that caused confidence intervals to fail miserably.
    819 
    820 *) Other misc fixes - than you to all of you who sent them.
    821 
    822 These are the Release Notes for revision 2.3pl1 of netperf:
    823 
    824 Things changed in this release
    825 
    826 *) The bind() call in create_data_socket() in the file nettest_bsd.c
    827    is no longer conditional on the user's specifying an IP address or
    828    port number to which the data socket should be bound.  This fixes
    829    the "connection refused" errors in the UDP tests.
    830 
    831 *) Some experimental code to allow one to specify a CPU to which the
    832    remote netserver should be bound.  This is intended to allow one to
    833    get greater certainty (as in confidence intervals) on SMP
    834    systems. At present the functionality is HP-UX specific.
    835    Submittals of changes for a more general approach are welcomed.
    836 
    837 These are the Release Notes for revision 2.3 of netperf:
    838 
    839 Things changed in this release
    840 
    841 *) The user can now specify local and/or remote port numbers for the
    842    data connection using the -P test-specific option.  This is to
    843    support those folks who want to run netperf through those evil,
    844    end-to-end-breaking things known as firewalls... :)  This changes
    845    the format of some of the control messages, hence the bump in the
    846    update number in the VUF. While it may be possible to mix 2.3 and
    847    pre-2.3 netperf and netserver, it is not supported.
    848 
    849 *) The user can now specify local and/or remote IP addresses for the
    850    data connection using the -I test-specific option.  This is to
    851    support those folks who want to run netperf through those evil,
    852    end-to-end-breaking things known as firewalls... :) This changes
    853    the format of some of the control messages, hence the bump in the
    854    update number in the VUF. While it may be possible to mix 2.3 and
    855    pre-2.3 netperf and netserver, it is not supported.
    856 
    857 *) Set DL_mumble  message priorities in the DLPI tests
    858 
    859 *) Fix error return check for getaddrinfo()
    860 
    861 *) Those systems with gethrtime() can define -DHAVE_GETHRTIME to use
    862    gethrtime() instead of gettimeofday() and reduce the measurement
    863    overhead when enabling the -DHISTOGRAM functionality.
    864 
    865 *) The default for -DHISTOGRAM compilation now adds a UNIT_USEC and
    866    TEN_USEC row and renames TENTH_MSEC to HUNDRED_USEC.  If you want
    867    the old behaviour add -DOLD_HISTOGRAM to CFLAGS.
    868 
    869 *) Add missing '!' in the recv_udp*_stream so we recognize the end of 
    870    a timed test correctly.
    871 
    872 *) Replace "||" with "&&" to fix an infinite loop in
    873    recv_tcp_conn_rr() most likely introduced in 2.2pl5. 
    874 
    875 *) Code has been added to kludge around the bug in Linux getsockopt()
    876    where it almost always returns twice the value for which one
    877    asks unlike virtually every other stack on the face of the
    878    planet. This was doing some unpleasant things to tests in which
    879    confidence intervals were requested. 
    880 
    881 Things not changed in this release
    882 
    883 *) Lots :)
    884 
    885 These are the Release Notes for revision 2.2pl5 of netperf:
    886 
    887 Things changed in this release
    888 
    889 *) Improved (perhaps even usable :) support for Windows, including
    890 compilation and run on Win64.
    891 
    892 *) Fixes for MacOS X and FreeBSD
    893 
    894 Things not changed in this release
    895 
    896 *) Specifying the port number(s) for the data connection
    897 
    898 These are the Release Notes for Revision 2.2pl4 of netperf:
    899 
    900 Things changed in this release
    901 
    902 *) USE_SYSCTL available on suitable FreeBSD releases to measure CPU
    903    utilization without having to resort to -DUSE_LOOPER.
    904 
    905 *) Include Solaris 9 with the Linux sendfile path under -DHAVE_SENDFILE
    906 
    907 This still outstanding in this release
    908 
    909 *) Knowing why signals are not interrupting socket calls under
    910    OpenVMS.  A quick try to use threads for timing a la Win32 worked,
    911    but also cut performance in half.  Any and all assistance in this
    912    area would be most welcome.
    913 
    914 These are the Release Notes for revisoin 2.2pl3 of netperf:
    915 
    916 Things changed in this release
    917 
    918 *) I started practicing what I preach and will set SO_REUSEADDR before
    919    netserver tries to bind to its well-known port.
    920 
    921 *) Initial port to OpenVMS.  This includes support for the OVMS
    922    Auxilliary server (inetd replacement).  See README.ovms for more
    923    details on what is involved in compiling and running netperf under
    924    OpenVMS.
    925 
    926 *) Testname comparisons are now case insensitive.  This is a side
    927    effect of OpenVMS downshifting commandlines to lowercase.  I made
    928    the change and decided it was OK to keep it that way, even though
    929    for OpenVMS one _has_ to set the right defines to disable that
    930    downshifting or the command-line options will not work. For example
    931    "-H" will become "-h" which isn't quite the same thing...
    932 
    933 *) Misc fixes for nettest_ipv6.c.
    934 
    935 *) Support for sendfile() under Linux
    936 
    937 Thins I would like to have changed but did not know how or didn't have
    938 time:
    939 
    940 *) Allow netserver to run as a standalone daemon under OpenVMS
    941 *) Allow netserver to run as a standalone daemon under Windows
    942 *) Rediscover an inetd-like facility for Windows
    943 *) Figure-out how to get low-overhead, accurate, per-CPU utilization
    944    figures under OpenVMS
    945 *) Get the UDP_RR and UDP_STREAM tests to work under OpenVMS, and get
    946    the TCP_RR test to work based on time rather than transaction
    947    count.  There is some bug (possibly in OpenVMS?) where the SIGALRM
    948    fires, but a socket call will not return an EINTR.
    949 
    950 Things that changed prior to this release:
    951 
    952 *) Addition of the TCP_MAERTS test - this is a TCP_STREAM test where
    953    the data flows from the netserver to the netperf rather than from
    954    the netperf to the netserver.  This can be useful in those
    955    situations where netperf (netserver) is installed on a remote
    956    system, but the tester has no shell access and wishes to get
    957    performance data for the path from netserver to netperf.
    958 
    959 These are the Release Notes for the 2.2 revision of netperf:
    960 
    961 Things changed in this release
    962 
    963 *) Various and sundry bugs fixed (in theory) for platforms such as
    964    FreeBSD and Linux. If I left-out your bug fix, it was purely
    965    accidental - my mind has a very small cache, and sometimes I will
    966    "lose" email in the shuffle.
    967 
    968 *) Initial support for sendfile() on HP-UX. This test will use the
    969    sendfile() call instead of send() to send data to the
    970    remote. Netperf "lies" to netserver and calls it a TCP_STREAM test
    971    since what netserver needs to do is exactly the same. A future
    972    patch may change that and simply have netserver call the same
    973    routine for both test types. Kudos to Charles Harris for the
    974    initial prototype.
    975 
    976 *) The Fore ATM API and HiPPI tests have been dropped from the
    977    distribution. 
    978 
    979 Things I would have liked to have changed, but did not have time for:
    980 
    981 *) Conversion of the source and makefile to use the GNU configure/autoconf 
    982    utility to make it easier for folks to build by not having to edit
    983    makefiles... You will notice that I have started to switch from
    984    "DO_MUMBLE" to "HAVE_MUMBLE"
    985 
    986 as always - happy benchmarking,
    987 
    988 rick jones <raj (a] cup.hp.com>
    989 
    990 ---------------------------------------------------------------------
    991 
    992 These are the Release Notes for the 2.1pl3 revision of netperf:
    993 
    994 *) An OBOB (Off By One Bug) in netlib.c that was causing a core dump
    995    on Irix should be fixed.
    996 
    997 *) Irix systems should now be able to determine the number of CPU's
    998    present automagically (code from outside, not tested yet because I
    999    have no MP Irix systems at my disposal)
   1000 
   1001 *) An alpha version of a TCP_CC test has been added - this is a
   1002    TCP_CRR test with out the "RR."
   1003 
   1004 *) The -Ae has been removed from the default makefile. If someone has
   1005    a nice way to automagically generate the correct makefile for
   1006    different platforms I would like to learn how.
   1007 
   1008 happy benchmarking,
   1009 
   1010 rick jones <raj (a] cup.hp.com>
   1011 
   1012 ----------------------------------------------------------------------
   1013 
   1014 These are the Release Notes for the 2.1 revision of netperf:
   1015 
   1016 Things Changed in this release:
   1017 
   1018 *) The XTI (Version 2 of the spec) tests are now documented in the
   1019    manual. 
   1020 
   1021 *) The TCP_CRR (Connect Request/Response) test is now documented in
   1022    the manual, including a description of how it mimics the behaviour
   1023    of http (the protocol underlying the WWW).
   1024 
   1025 *) Support for for Windows NT 3.51 OS in the BSD Sockets tests (ok, so
   1026    they are really Winsock in that case :). Other test suites may be
   1027    ported as required/desired/appropriate. 
   1028 
   1029 *) Tests for TCP and UDP, using the IPv6 extensions to BSD sockets are
   1030    included in this release. They are included by adding -DUSE_IPv6 to
   1031    the makefile and recompiling.
   1032 
   1033 *) Support for a "long long" datatype should only be required for
   1034    -DUSE_PSTAT compilation which is an HP-UX only thing. The
   1035    *unbundled* HP compilers from at least "HP92453-01 A.09.61 HP C
   1036    Compiler" and later should have the required support. The bundled
   1037    compiler may not. GCC should work - check the archives listed in
   1038    the comp.sys.hp.hpux FAQ for copies. The FAQ is archived on
   1039    rtfm.mit.edu under the path pub/usenet/comp.sys.hp.hpux.
   1040 
   1041 *) A "proper" fix for double data type alignment has been included.
   1042 
   1043 *) A new script is included with this release which can be used to
   1044    measure aggregate TCP_RR performance (multiple, concurrent
   1045    instances of the TCP_RR test). A related use of this script would
   1046    be measuring MP scaling. A single-byte TCP_RR test is good for this
   1047    purpose for two reasons:
   1048 
   1049       1) it excercises the control/protocol paths heavily without
   1050          using much in the way of data copies which may be easier to
   1051          scale.
   1052       2) most systems can easily saturate cards with bandwidth, but
   1053          not so easily with request/response
   1054 
   1055    Of course, feedback on this is most welcome.
   1056 
   1057 *) When measuring CPU utilization, the units for service demand have
   1058    been changed from milliseconds (designated ms) of CPU per unit (KB
   1059    or Transaction) to microseconds (desginated us).
   1060 
   1061 *) For accurate reporting of service demand, netperf needs to know the
   1062    number of CPU's present on a system. On some systems (HP-UX), this
   1063    is automatic. For others (All), it is necessary to add a global "-n
   1064    <numcpu>" option to both netperf and netserver.
   1065 
   1066    !! IF THIS IS LEFT-OUT CPU UTILIZATION AND SERVICE DEMAND FOR !!
   1067 	     !! MULTI-PROCESSOR SYSTEMS WILL BE WRONG. !!
   1068 
   1069    If you know of ways to programatically determine the number of
   1070    active CPUs on a system, please let the author Rick Jones
   1071    <raj (a] cup.hp.com> know.
   1072 
   1073 *) other things I've probably forgotten :)
   1074 
   1075 Things Not Changed in this release:
   1076 
   1077 *) The ancillary test suites are essentially unchanged - DLPI,
   1078    HiPPI/LLA, Unix Domain, and Fore ATM API. Unless there is much
   1079    interest expressed in these tests, 2.1 may be the last release in
   1080    which they are included. The order of retirement would likely be
   1081    Unix Domain, HiPPI/LLA, Fore ATM API, and then DLPI.
   1082 
   1083 Miscelaneous Comments:
   1084 
   1085 *) The -DUSE_LOOPER CPU utilization _seems_ to be nice and low-impact
   1086    on HP-UX, Digital Unix, and IRIX. It does not yet seem to be
   1087    low-impact on Solaris (I need an example of priocntl usage), AIX
   1088    (setpri only works if you are root), and NT (not sure of the
   1089    reason). Help with those problems would be most appreciated.
   1090