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= . *) 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 , 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 and will leave 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 , 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 and will leave 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 --------------------------------------------------------------------- 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 ---------------------------------------------------------------------- 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 " 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 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.