aboutsummaryrefslogtreecommitdiff
path: root/netperf-2.4.4/doc/netperf.info
diff options
context:
space:
mode:
Diffstat (limited to 'netperf-2.4.4/doc/netperf.info')
-rw-r--r--netperf-2.4.4/doc/netperf.info2859
1 files changed, 0 insertions, 2859 deletions
diff --git a/netperf-2.4.4/doc/netperf.info b/netperf-2.4.4/doc/netperf.info
deleted file mode 100644
index 998733c..0000000
--- a/netperf-2.4.4/doc/netperf.info
+++ /dev/null
@@ -1,2859 +0,0 @@
-This is netperf.info, produced by makeinfo version 4.8 from
-netperf.texi.
-
- This is Rick Jones' feeble attempt at a Texinfo-based manual for the
-netperf benchmark.
-
- Copyright (C) 2005-2007 Hewlett-Packard Company
-
- Permission is granted to copy, distribute and/or modify this
- document per the terms of the netperf source licence, a copy of
- which can be found in the file `COPYING' of the basic netperf
- distribution.
-
-
-File: netperf.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir)
-
-Netperf Manual
-**************
-
-This is Rick Jones' feeble attempt at a Texinfo-based manual for the
-netperf benchmark.
-
- Copyright (C) 2005-2007 Hewlett-Packard Company
-
- Permission is granted to copy, distribute and/or modify this
- document per the terms of the netperf source licence, a copy of
- which can be found in the file `COPYING' of the basic netperf
- distribution.
-
-* Menu:
-
-* Introduction:: An introduction to netperf - what it is and whatit is not.
-* Installing Netperf:: How to go about installing netperf.
-* The Design of Netperf::
-* Global Command-line Options::
-* Using Netperf to Measure Bulk Data Transfer::
-* Using Netperf to Measure Request/Response ::
-* Using Netperf to Measure Aggregate Performance::
-* Using Netperf to Measure Bidirectional Transfer::
-* Other Netperf Tests::
-* Address Resolution::
-* Enhancing Netperf::
-* Netperf4::
-* Concept Index::
-* Option Index::
-
- --- The Detailed Node Listing ---
-
-Introduction
-
-* Conventions::
-
-Installing Netperf
-
-* Getting Netperf Bits::
-* Installing Netperf Bits::
-* Verifying Installation::
-
-The Design of Netperf
-
-* CPU Utilization::
-
-Global Command-line Options
-
-* Command-line Options Syntax::
-* Global Options::
-
-Using Netperf to Measure Bulk Data Transfer
-
-* Issues in Bulk Transfer::
-* Options common to TCP UDP and SCTP tests::
-
-Options common to TCP UDP and SCTP tests
-
-* TCP_STREAM::
-* TCP_MAERTS::
-* TCP_SENDFILE::
-* UDP_STREAM::
-* XTI_TCP_STREAM::
-* XTI_UDP_STREAM::
-* SCTP_STREAM::
-* DLCO_STREAM::
-* DLCL_STREAM::
-* STREAM_STREAM::
-* DG_STREAM::
-
-Using Netperf to Measure Request/Response
-
-* Issues in Request/Response::
-* Options Common to TCP UDP and SCTP _RR tests::
-
-Options Common to TCP UDP and SCTP _RR tests
-
-* TCP_RR::
-* TCP_CC::
-* TCP_CRR::
-* UDP_RR::
-* XTI_TCP_RR::
-* XTI_TCP_CC::
-* XTI_TCP_CRR::
-* XTI_UDP_RR::
-* DLCL_RR::
-* DLCO_RR::
-* SCTP_RR::
-
-Using Netperf to Measure Aggregate Performance
-
-* Running Concurrent Netperf Tests::
-* Using --enable-burst::
-
-Using Netperf to Measure Bidirectional Transfer
-
-* Bidirectional Transfer with Concurrent Tests::
-* Bidirectional Transfer with TCP_RR::
-
-Other Netperf Tests
-
-* CPU rate calibration::
-
-
-File: netperf.info, Node: Introduction, Next: Installing Netperf, Prev: Top, Up: Top
-
-1 Introduction
-**************
-
-Netperf is a benchmark that can be use to measure various aspect of
-networking performance. The primary foci are bulk (aka unidirectional)
-data transfer and request/response performance using either TCP or UDP
-and the Berkeley Sockets interface. As of this writing, the tests
-available either unconditionally or conditionally include:
-
- * TCP and UDP unidirectional transfer and request/response over IPv4
- and IPv6 using the Sockets interface.
-
- * TCP and UDP unidirectional transfer and request/response over IPv4
- using the XTI interface.
-
- * Link-level unidirectional transfer and request/response using the
- DLPI interface.
-
- * Unix domain sockets
-
- * SCTP unidirectional transfer and request/response over IPv4 and
- IPv6 using the sockets interface.
-
- While not every revision of netperf will work on every platform
-listed, the intention is that at least some version of netperf will
-work on the following platforms:
-
- * Unix - at least all the major variants.
-
- * Linux
-
- * Windows
-
- * OpenVMS
-
- * Others
-
- Netperf is maintained and informally supported primarily by Rick
-Jones, who can perhaps be best described as Netperf Contributing
-Editor. Non-trivial and very appreciated assistance comes from others
-in the network performance community, who are too numerous to mention
-here. While it is often used by them, netperf is NOT supported via any
-of the formal Hewlett-Packard support channels. You should feel free
-to make enhancements and modifications to netperf to suit your
-nefarious porpoises, so long as you stay within the guidelines of the
-netperf copyright. If you feel so inclined, you can send your changes
-to netperf-feedback <netperf-feedback@netperf.org> for possible
-inclusion into subsequent versions of netperf.
-
- If you would prefer to make contributions to networking benchmark
-using certified "open source" license, please considuer netperf4, which
-is distributed under the terms of the GPL.
-
- The netperf-talk <netperf-talk@netperf.org> mailing list is
-available to discuss the care and feeding of netperf with others who
-share your interest in network performance benchmarking. The
-netperf-talk mailing list is a closed list and you must first subscribe
-by sending email to netperf-talk-request
-<netperf-talk-request@netperf.org>.
-
-* Menu:
-
-* Conventions::
-
-
-File: netperf.info, Node: Conventions, Prev: Introduction, Up: Introduction
-
-1.1 Conventions
-===============
-
-A "sizespec" is a one or two item, comma-separated list used as an
-argument to a command-line option that can set one or two, related
-netperf parameters. If you wish to set both parameters to separate
-values, items should be separated by a comma:
-
- parameter1,parameter2
-
- If you wish to set the first parameter without altering the value of
-the second from its default, you should follow the first item with a
-comma:
-
- parameter1,
-
- Likewise, precede the item with a comma if you wish to set only the
-second parameter:
-
- ,parameter2
-
- An item with no commas:
-
- parameter1and2
-
- will set both parameters to the same value. This last mode is one of
-the most frequently used.
-
- There is another variant of the comma-separated, two-item list called
-a "optionspec" which is like a sizespec with the exception that a
-single item with no comma:
-
- parameter1
-
- will only set the value of the first parameter and will leave the
-second parameter at its default value.
-
- Netperf has two types of command-line options. The first are global
-command line options. They are essentially any option not tied to a
-particular test or group of tests. An example of a global command-line
-option is the one which sets the test type - `-t'.
-
- The second type of options are test-specific options. These are
-options which are only applicable to a particular test or set of tests.
-An example of a test-specific option would be the send socket buffer
-size for a TCP_STREAM test.
-
- Global command-line options are specified first with test-specific
-options following after a `--' as in:
-
- netperf <global> -- <test-specific>
-
-
-File: netperf.info, Node: Installing Netperf, Next: The Design of Netperf, Prev: Introduction, Up: Top
-
-2 Installing Netperf
-********************
-
-Netperf's primary form of distribution is source code. This allows
-installation on systems other than those to which the authors have
-ready access and thus the ability to create binaries. There are two
-styles of netperf installation. The first runs the netperf server
-program - netserver - as a child of inetd. This requires the installer
-to have sufficient privileges to edit the files `/etc/services' and
-`/etc/inetd.conf' or their platform-specific equivalents.
-
- The second style is to run netserver as a standalone daemon. This
-second method does not require edit privileges on `/etc/services' and
-`/etc/inetd.conf' but does mean you must remember to run the netserver
-program explicitly after every system reboot.
-
- This manual assumes that those wishing to measure networking
-performance already know how to use anonymous FTP and/or a web browser.
-It is also expected that you have at least a passing familiarity with
-the networking protocols and interfaces involved. In all honesty, if
-you do not have such familiarity, likely as not you have some
-experience to gain before attempting network performance measurements.
-The excellent texts by authors such as Stevens, Fenner and Rudoff
-and/or Stallings would be good starting points. There are likely other
-excellent sources out there as well.
-
-* Menu:
-
-* Getting Netperf Bits::
-* Installing Netperf Bits::
-* Verifying Installation::
-
-
-File: netperf.info, Node: Getting Netperf Bits, Next: Installing Netperf Bits, Prev: Installing Netperf, Up: Installing Netperf
-
-2.1 Getting Netperf Bits
-========================
-
-Gzipped tar files of netperf sources can be retrieved via anonymous FTP
-(ftp://ftp.netperf.org/netperf) for "released" versions of the bits.
-Pre-release versions of the bits can be retrieved via anonymous FTP
-from the experimental (ftp://ftp.netperf.org/netperf/experimental)
-subdirectory.
-
- For convenience and ease of remembering, a link to the download site
-is provided via the NetperfPage (http://www.netperf.org/)
-
- The bits corresponding to each discrete release of netperf are
-tagged (http://www.netperf.org/svn/netperf2/tags) for retrieval via
-subversion. For example, there is a tag for the first version
-corresponding to this version of the manual - netperf 2.4.3
-(http://www.netperf.org/svn/netperf2/tags/netperf-2.4.3). Those
-wishing to be on the bleeding edge of netperf development can use
-subversion to grab the top of trunk
-(http://www.netperf.org/svn/netperf2/trunk).
-
- There are likely other places around the Internet from which one can
-download netperf bits. These may be simple mirrors of the main netperf
-site, or they may be local variants on netperf. As with anything one
-downloads from the Internet, take care to make sure it is what you
-really wanted and isn't some malicious Trojan or whatnot. Caveat
-downloader.
-
- As a general rule, binaries of netperf and netserver are not
-distributed from ftp.netperf.org. From time to time a kind soul or
-souls has packaged netperf as a Debian package available via the
-apt-get mechanism or as an RPM. I would be most interested in learning
-how to enhance the makefiles to make that easier for people, and
-perhaps to generate HP-UX swinstall"depots."
-
-
-File: netperf.info, Node: Installing Netperf Bits, Next: Verifying Installation, Prev: Getting Netperf Bits, Up: Installing Netperf
-
-2.2 Installing Netperf
-======================
-
-Once you have downloaded the tar file of netperf sources onto your
-system(s), it is necessary to unpack the tar file, cd to the netperf
-directory, run configure and then make. Most of the time it should be
-sufficient to just:
-
- gzcat <netperf-version>.tar.gz | tar xf -
- cd <netperf-version>
- ./configure
- make
- make install
-
- Most of the "usual" configure script options should be present
-dealing with where to install binaries and whatnot.
- ./configure --help
- should list all of those and more.
-
- If the netperf configure script does not know how to automagically
-detect which CPU utilization mechanism to use on your platform you may
-want to add a `--enable-cpuutil=mumble' option to the configure
-command. If you have knowledge and/or experience to contribute to
-that area, feel free to contact <netperf-feedback@netperf.org>.
-
- Similarly, if you want tests using the XTI interface, Unix Domain
-Sockets, DLPI or SCTP it will be necessary to add one or more
-`--enable-[xti|unix|dlpi|sctp]=yes' options to the configure command.
-As of this writing, the configure script will not include those tests
-automagically.
-
- On some platforms, it may be necessary to precede the configure
-command with a CFLAGS and/or LIBS variable as the netperf configure
-script is not yet smart enough to set them itself. Whenever possible,
-these requirements will be found in `README.PLATFORM' files. Expertise
-and assistance in making that more automagical in the configure script
-would be most welcome.
-
- Other optional configure-time settings include
-`--enable-intervals=yes' to give netperf the ability to "pace" its
-_STREAM tests and `--enable-histogram=yes' to have netperf keep a
-histogram of interesting times. Each of these will have some effect on
-the measured result. If your system supports `gethrtime()' the effect
-of the histogram measurement should be minimized but probably still
-measurable. For example, the histogram of a netperf TCP_RR test will
-be of the individual transaction times:
- netperf -t TCP_RR -H lag -v 2
- TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to lag.hpl.hp.com (15.4.89.214) port 0 AF_INET : histogram
- Local /Remote
- Socket Size Request Resp. Elapsed Trans.
- Send Recv Size Size Time Rate
- bytes Bytes bytes bytes secs. per sec
-
- 16384 87380 1 1 10.00 3538.82
- 32768 32768
- Alignment Offset
- Local Remote Local Remote
- Send Recv Send Recv
- 8 0 0 0
- Histogram of request/response times
- UNIT_USEC : 0: 0: 0: 0: 0: 0: 0: 0: 0: 0
- TEN_USEC : 0: 0: 0: 0: 0: 0: 0: 0: 0: 0
- HUNDRED_USEC : 0: 34480: 111: 13: 12: 6: 9: 3: 4: 7
- UNIT_MSEC : 0: 60: 50: 51: 44: 44: 72: 119: 100: 101
- TEN_MSEC : 0: 105: 0: 0: 0: 0: 0: 0: 0: 0
- HUNDRED_MSEC : 0: 0: 0: 0: 0: 0: 0: 0: 0: 0
- UNIT_SEC : 0: 0: 0: 0: 0: 0: 0: 0: 0: 0
- TEN_SEC : 0: 0: 0: 0: 0: 0: 0: 0: 0: 0
- >100_SECS: 0
- HIST_TOTAL: 35391
-
- Long-time users of netperf will notice the expansion of the main test
-header. This stems from the merging-in of IPv6 with the standard IPv4
-tests and the addition of code to specify addressing information for
-both sides of the data connection.
-
- The histogram you see above is basically a base-10 log histogram
-where we can see that most of the transaction times were on the order
-of one hundred to one-hundred, ninety-nine microseconds, but they were
-occasionally as long as ten to nineteen milliseconds
-
- The `--enable-demo=yes' configure option will cause code to be
-included to report interim results during a test run. The rate at
-which interim results are reported can then be controlled via the
-global `-D' option. Here is an example of -enable-demo mode output:
-
- src/netperf -D 1.35 -H lag -f M
- TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to lag.hpl.hp.com (15.4.89.214) port 0 AF_INET : demo
- Interim result: 9.66 MBytes/s over 1.67 seconds
- Interim result: 9.64 MBytes/s over 1.35 seconds
- Interim result: 9.58 MBytes/s over 1.36 seconds
- Interim result: 9.51 MBytes/s over 1.36 seconds
- Interim result: 9.71 MBytes/s over 1.35 seconds
- Interim result: 9.66 MBytes/s over 1.36 seconds
- Interim result: 9.61 MBytes/s over 1.36 seconds
- Recv Send Send
- Socket Socket Message Elapsed
- Size Size Size Time Throughput
- bytes bytes bytes secs. MBytes/sec
-
- 32768 16384 16384 10.00 9.61
-
- Notice how the units of the interim result track that requested by
-the `-f' option. Also notice that sometimes the interval will be
-longer than the value specified in the `-D' option. This is normal and
-stems from how demo mode is implemented without relying on interval
-timers, but by calculating how many units of work must be performed to
-take at least the desired interval.
-
- As of this writing, a `make install' will not actually update the
-files `/etc/services' and/or `/etc/inetd.conf' or their
-platform-specific equivalents. It remains necessary to perform that
-bit of installation magic by hand. Patches to the makefile sources to
-effect an automagic editing of the necessary files to have netperf
-installed as a child of inetd would be most welcome.
-
- Starting the netserver as a standalone daemon should be as easy as:
- $ netserver
- Starting netserver at port 12865
- Starting netserver at hostname 0.0.0.0 port 12865 and family 0
-
- Over time the specifics of the messages netserver prints to the
-screen may change but the gist will remain the same.
-
- If the compilation of netperf or netserver happens to fail, feel free
-to contact <netperf-feedback@netperf.org> or join and ask in
-<netperf-talk@netperf.org>. However, it is quite important that you
-include the actual compilation errors and perhaps even the configure
-log in your email. Otherwise, it will be that much more difficult for
-someone to assist you.
-
-
-File: netperf.info, Node: Verifying Installation, Prev: Installing Netperf Bits, Up: Installing Netperf
-
-2.3 Verifying Installation
-==========================
-
-Basically, once netperf is installed and netserver is configured as a
-child of inetd, or launched as a standalone daemon, simply typing:
- netperf
- should result in output similar to the following:
- $ netperf
- TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to localhost.localdomain (127.0.0.1) port 0 AF_INET
- Recv Send Send
- Socket Socket Message Elapsed
- Size Size Size Time Throughput
- bytes bytes bytes secs. 10^6bits/sec
-
- 87380 16384 16384 10.00 2997.84
-
-
-File: netperf.info, Node: The Design of Netperf, Next: Global Command-line Options, Prev: Installing Netperf, Up: Top
-
-3 The Design of Netperf
-***********************
-
-Netperf is designed around a basic client-server model. There are two
-executables - netperf and netserver. Generally you will only execute
-the netperf program, with the netserver program being invoked by the
-remote system's inetd or equivalent. When you execute netperf, the
-first that that will happen is the establishment of a control
-connection to the remote system. This connection will be used to pass
-test configuration information and results to and from the remote
-system. Regardless of the type of test to be run, the control
-connection will be a TCP connection using BSD sockets. The control
-connection can use either IPv4 or IPv6.
-
- Once the control connection is up and the configuration information
-has been passed, a separate "data" connection will be opened for the
-measurement itself using the API's and protocols appropriate for the
-specified test. When the test is completed, the data connection will
-be torn-down and results from the netserver will be passed-back via the
-control connection and combined with netperf's result for display to
-the user.
-
- Netperf places no traffic on the control connection while a test is
-in progress. Certain TCP options, such as SO_KEEPALIVE, if set as your
-systems' default, may put packets out on the control connection while a
-test is in progress. Generally speaking this will have no effect on
-the results.
-
-* Menu:
-
-* CPU Utilization::
-
-
-File: netperf.info, Node: CPU Utilization, Prev: The Design of Netperf, Up: The Design of Netperf
-
-3.1 CPU Utilization
-===================
-
-CPU utilization is an important, and alas all-too infrequently reported
-component of networking performance. Unfortunately, it can be one of
-the most difficult metrics to measure accurately as many systems offer
-mechanisms that are at best il-suited to measuring CPU utilization in
-high interrupt rate (eg networking) situations.
-
- CPU utilization in netperf is reported as a value between 0 and 100%
-regardless of the number of CPUs involved. In addition to CPU
-utilization, netperf will report a metric called a "service demand".
-The service demand is the normalization of CPU utilization and work
-performed. For a _STREAM test it is the microseconds of CPU time
-consumed to transfer on KB (K == 1024) of data. For a _RR test it is
-the microseconds of CPU time consumed processing a single transaction.
-For both CPU utilization and service demand, lower is better.
-
- Service demand can be particularly useful when trying to gauge the
-effect of a performance change. It is essentially a measure of
-efficiency, with smaller values being more efficient.
-
- Netperf is coded to be able to use one of several, generally
-platform-specific CPU utilization measurement mechanisms. Single
-letter codes will be included in the CPU portion of the test banner to
-indicate which mechanism was used on each of the local (netperf) and
-remote (netserver) system.
-
- As of this writing those codes are:
-
-`U'
- The CPU utilization measurement mechanism was unknown to netperf or
- netperf/netserver was not compiled to include CPU utilization
- measurements. The code for the null CPU utilization mechanism can
- be found in `src/netcpu_none.c'.
-
-`I'
- An HP-UX-specific CPU utilization mechanism whereby the kernel
- incremented a per-CPU counter by one for each trip through the idle
- loop. This mechanism was only available on specially-compiled HP-UX
- kernels prior to HP-UX 10 and is mentioned here only for the sake
- of historical completeness and perhaps as a suggestion to those
- who might be altering other operating systems. While rather
- simple, perhaps even simplistic, this mechanism was quite robust
- and was not affected by the concerns of statistical methods, or
- methods attempting to track time in each of user, kernel,
- interrupt and idle modes which require quite careful accounting.
- It can be thought-of as the in-kernel version of the looper `L'
- mechanism without the context switch overhead. This mechanism
- required calibration.
-
-`P'
- An HP-UX-specific CPU utilization mechanism whereby the kernel
- keeps-track of time (in the form of CPU cycles) spent in the kernel
- idle loop (HP-UX 10.0 to 11.23 inclusive), or where the kernel
- keeps track of time spent in idle, user, kernel and interrupt
- processing (HP-UX 11.23 and later). The former requires
- calibration, the latter does not. Values in either case are
- retrieved via one of the pstat(2) family of calls, hence the use
- of the letter `P'. The code for these mechanisms is found in
- `src/netcpu_pstat.c' and `src/netcpu_pstatnew.c' respectively.
-
-`K'
- A Solaris-specific CPU utilization mechanism where by the kernel
- keeps track of ticks (eg HZ) spent in the idle loop. This method
- is statistical and is known to be inaccurate when the interrupt
- rate is above epsilon as time spent processing interrupts is not
- subtracted from idle. The value is retrieved via a kstat() call -
- hence the use of the letter `K'. Since this mechanism uses units
- of ticks (HZ) the calibration value should invariably match HZ.
- (Eg 100) The code for this mechanism is implemented in
- `src/netcpu_kstat.c'.
-
-`M'
- A Solaris-specific mechanism available on Solaris 10 and latter
- which uses the new microstate accounting mechanisms. There are
- two, alas, overlapping, mechanisms. The first tracks nanoseconds
- spent in user, kernel, and idle modes. The second mechanism tracks
- nanoseconds spent in interrupt. Since the mechanisms overlap,
- netperf goes through some hand-waving to try to "fix" the problem.
- Since the accuracy of the handwaving cannot be completely
- determined, one must presume that while better than the `K'
- mechanism, this mechanism too is not without issues. The values
- are retrieved via kstat() calls, but the letter code is set to `M'
- to distinguish this mechanism from the even less accurate `K'
- mechanism. The code for this mechanism is implemented in
- `src/netcpu_kstat10.c'.
-
-`L'
- A mechanism based on "looper"or "soaker" processes which sit in
- tight loops counting as fast as they possibly can. This mechanism
- starts a looper process for each known CPU on the system. The
- effect of processor hyperthreading on the mechanism is not yet
- known. This mechanism definitely requires calibration. The code
- for the "looper"mechanism can be found in `src/netcpu_looper.c'
-
-`N'
- A Microsoft Windows-specific mechanism, the code for which can be
- found in `src/netcpu_ntperf.c'. This mechanism too is based on
- what appears to be a form of micro-state accounting and requires no
- calibration. On laptops, or other systems which may dynamically
- alter the CPU frequency to minimize power consumtion, it has been
- suggested that this mechanism may become slightly confsed, in
- which case using BIOS settings to disable the power saving would
- be indicated.
-
-`S'
- This mechanism uses `/proc/stat' on Linux to retrieve time (ticks)
- spent in idle mode. It is thought but not known to be reasonably
- accurate. The code for this mechanism can be found in
- `src/netcpu_procstat.c'.
-
-`C'
- A mechanism somewhat similar to `S' but using the sysctl() call on
- BSD-like Operating systems (*BSD and MacOS X). The code for this
- mechanism can be found in `src/netcpu_sysctl.c'.
-
-`Others'
- Other mechanisms included in netperf in the past have included
- using the times() and getrusage() calls. These calls are actually
- rather poorly suited to the task of measuring CPU overhead for
- networking as they tend to be process-specific and much
- network-related processing can happen outside the context of a
- process, in places where it is not a given it will be charged to
- the correct, or even a process. They are mentioned here as a
- warning to anyone seeing those mechanisms used in other networking
- benchmarks. These mechanisms are not available in netperf 2.4.0
- and later.
-
- For many platforms, the configure script will chose the best
-available CPU utilization mechanism. However, some platforms have no
-particularly good mechanisms. On those platforms, it is probably best
-to use the "LOOPER" mechanism which is basically some number of
-processes (as many as there are processors) sitting in tight little
-loops counting as fast as they can. The rate at which the loopers
-count when the system is believed to be idle is compared with the rate
-when the system is running netperf and the ratio is used to compute CPU
-utilization.
-
- In the past, netperf included some mechanisms that only reported CPU
-time charged to the calling process. Those mechanisms have been
-removed from netperf versions 2.4.0 and later because they are
-hopelessly inaccurate. Networking can and often results in CPU time
-being spent in places - such as interrupt contexts - that do not get
-charged to a or the correct process.
-
- In fact, time spent in the processing of interrupts is a common issue
-for many CPU utilization mechanisms. In particular, the "PSTAT"
-mechanism was eventually known to have problems accounting for certain
-interrupt time prior to HP-UX 11.11 (11iv1). HP-UX 11iv1 and later are
-known to be good. The "KSTAT" mechanism is known to have problems on
-all versions of Solaris up to and including Solaris 10. Even the
-microstate accounting available via kstat in Solaris 10 has issues,
-though perhaps not as bad as those of prior versions.
-
- The /proc/stat mechanism under Linux is in what the author would
-consider an "uncertain" category as it appears to be statistical, which
-may also have issues with time spent processing interrupts.
-
- In summary, be sure to "sanity-check" the CPU utilization figures
-with other mechanisms. However, platform tools such as top, vmstat or
-mpstat are often based on the same mechanisms used by netperf.
-
-
-File: netperf.info, Node: Global Command-line Options, Next: Using Netperf to Measure Bulk Data Transfer, Prev: The Design of Netperf, Up: Top
-
-4 Global Command-line Options
-*****************************
-
-This section describes each of the global command-line options
-available in the netperf and netserver binaries. Essentially, it is an
-expanded version of the usage information displayed by netperf or
-netserver when invoked with the `-h' global command-line option.
-
-* Menu:
-
-* Command-line Options Syntax::
-* Global Options::
-
-
-File: netperf.info, Node: Command-line Options Syntax, Next: Global Options, Prev: Global Command-line Options, Up: Global Command-line Options
-
-4.1 Command-line Options Syntax
-===============================
-
-Revision 1.8 of netperf introduced enough new functionality to overrun
-the English alphabet for mnemonic command-line option names, and the
-author was not and is not quite ready to switch to the contemporary
-`--mumble' style of command-line options. (Call him a Luddite).
-
- For this reason, the command-line options were split into two parts -
-the first are the global command-line options. They are options that
-affect nearly any and every test type of netperf. The second type are
-the test-specific command-line options. Both are entered on the same
-command line, but they must be separated from one another by a `--' for
-correct parsing. Global command-line options come first, followed by
-the `--' and then test-specific command-line options. If there are no
-test-specific options to be set, the `--' may be omitted. If there are
-no global command-line options to be set, test-specific options must
-still be preceded by a `--'. For example:
- netperf <global> -- <test-specific>
- sets both global and test-specific options:
- netperf <global>
- sets just global options and:
- netperf -- <test-specific>
- sets just test-specific options.
-
-
-File: netperf.info, Node: Global Options, Prev: Command-line Options Syntax, Up: Global Command-line Options
-
-4.2 Global Options
-==================
-
-`-a <sizespec>'
- This option allows you to alter the alignment of the buffers used
- in the sending and receiving calls on the local system.. Changing
- the alignment of the buffers can force the system to use different
- copy schemes, which can have a measurable effect on performance.
- If the page size for the system were 4096 bytes, and you want to
- pass page-aligned buffers beginning on page boundaries, you could
- use `-a 4096'. By default the units are bytes, but suffix of "G,"
- "M," or "K" will specify the units to be 2^30 (GB), 2^20 (MB) or
- 2^10 (KB) respectively. A suffix of "g," "m" or "k" will specify
- units of 10^9, 10^6 or 10^3 bytes respectively. [Default: 8 bytes]
-
-`-A <sizespec>'
- This option is identical to the `-a' option with the difference
- being it affects alignments for the remote system.
-
-`-b <size>'
- This option is only present when netperf has been configure with
- -enable-intervals=yes prior to compilation. It sets the size of
- the burst of send calls in a _STREAM test. When used in
- conjunction with the `-w' option it can cause the rate at which
- data is sent to be "paced."
-
-`-B <string>'
- This option will cause `<string>' to be appended to the brief (see
- -P) output of netperf.
-
-`-c [rate]'
- This option will ask that CPU utilization and service demand be
- calculated for the local system. For those CPU utilization
- mechanisms requiring calibration, the options rate parameter may
- be specified to preclude running another calibration step, saving
- 40 seconds of time. For those CPU utilization mechanisms
- requiring no calibration, the optional rate parameter will be
- utterly and completely ignored. [Default: no CPU measurements]
-
-`-C [rate]'
- This option requests CPU utilization and service demand
- calculations for the remote system. It is otherwise identical to
- the `-c' option.
-
-`-d'
- Each instance of this option will increase the quantity of
- debugging output displayed during a test. If the debugging output
- level is set high enough, it may have a measurable effect on
- performance. Debugging information for the local system is
- printed to stdout. Debugging information for the remote system is
- sent by default to the file `/tmp/netperf.debug'. [Default: no
- debugging output]
-
-`-D [interval,units]'
- This option is only available when netperf is configured with
- -enable-demo=yes. When set, it will cause netperf to emit periodic
- reports of performance during the run. [INTERVAL,UNITS] follow
- the semantics of an optionspec. If specified, INTERVAL gives the
- minimum interval in real seconds, it does not have to be whole
- seconds. The UNITS value can be used for the first guess as to
- how many units of work (bytes or transactions) must be done to
- take at least INTERVAL seconds. If omitted, INTERVAL defaults to
- one second and UNITS to values specific to each test type.
-
-`-f G|M|K|g|m|k'
- This option can be used to change the reporting units for _STREAM
- tests. Arguments of "G," "M," or "K" will set the units to 2^30,
- 2^20 or 2^10 bytes/s respectively (EG power of two GB, MB or KB).
- Arguments of "g," ",m" or "k" will set the units to 10^9, 10^6 or
- 10^3 bits/s respectively. [Default: 'm' or 10^6 bits/s]
-
-`-F <fillfile>'
- This option specified the file from which send which buffers will
- be pre-filled . While the buffers will contain data from the
- specified file, the file is not fully transfered to the remote
- system as the receiving end of the test will not write the
- contents of what it receives to a file. This can be used to
- pre-fill the send buffers with data having different
- compressibility and so is useful when measuring performance over
- mechanisms which perform compression.
-
- While optional for most tests, this option is required for a test
- utilizing the sendfile() or related calls because sendfile tests
- need a name of a file to reference.
-
-`-h'
- This option causes netperf to display its usage string and exit to
- the exclusion of all else.
-
-`-H <optionspec>'
- This option will set the name of the remote system and or the
- address family used for the control connection. For example:
- -H linger,4
- will set the name of the remote system to "tardy" and tells
- netperf to use IPv4 addressing only.
- -H ,6
- will leave the name of the remote system at its default, and
- request that only IPv6 addresses be used for the control
- connection.
- -H lag
- will set the name of the remote system to "lag" and leave the
- address family to AF_UNSPEC which means selection of IPv4 vs IPv6
- is left to the system's address resolution.
-
- A value of "inet" can be used in place of "4" to request IPv4 only
- addressing. Similarly, a value of "inet6" can be used in place of
- "6" to request IPv6 only addressing. A value of "0" can be used
- to request either IPv4 or IPv6 addressing as name resolution
- dictates.
-
- By default, the options set with the global `-H' option are
- inherited by the test for its data connection, unless a
- test-specific `-H' option is specified.
-
- If a `-H' option follows either the `-4' or `-6' options, the
- family setting specified with the -H option will override the `-4'
- or `-6' options for the remote address family. If no address
- family is specified, settings from a previous `-4' or `-6' option
- will remain. In a nutshell, the last explicit global command-line
- option wins.
-
- [Default: "localhost" for the remote name/IP address and "0" (eg
- AF_UNSPEC) for the remote address family.]
-
-`-I <optionspec>'
- This option enables the calculation of confidence intervals and
- sets the confidence and width parameters with the first have of the
- optionspec being either 99 or 95 for 99% or 95% confidence
- respectively. The second value of the optionspec specifies the
- width of the desired confidence interval. For example
- -I 99,5
- asks netperf to be 99% confident that the measured mean values for
- throughput and CPU utilization are within +/- 2.5% of the "real"
- mean values. If the `-i' option is specified and the `-I' option
- is omitted, the confidence defaults to 99% and the width to 5%
- (giving +/- 2.5%)
-
- If netperf calculates that the desired confidence intervals have
- not been met, it emits a noticeable warning that cannot be
- suppressed with the `-P' or `-v' options:
-
- netperf -H tardy.cup -i 3 -I 99,5
- TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to tardy.cup.hp.com (15.244.44.58) port 0 AF_INET : +/-2.5% 99% conf.
- !!! WARNING
- !!! Desired confidence was not achieved within the specified iterations.
- !!! This implies that there was variability in the test environment that
- !!! must be investigated before going further.
- !!! Confidence intervals: Throughput : 6.8%
- !!! Local CPU util : 0.0%
- !!! Remote CPU util : 0.0%
-
- Recv Send Send
- Socket Socket Message Elapsed
- Size Size Size Time Throughput
- bytes bytes bytes secs. 10^6bits/sec
-
- 32768 16384 16384 10.01 40.23
-
- Where we see that netperf did not meet the desired convidence
- intervals. Instead of being 99% confident it was within +/- 2.5%
- of the real mean value of throughput it is only confident it was
- within +/-3.4%. In this example, increasing the `-i' option
- (described below) and/or increasing the iteration length with the
- `-l' option might resolve the situation.
-
-`-i <sizespec>'
- This option enables the calculation of confidence intervals and
- sets the minimum and maximum number of iterations to run in
- attempting to achieve the desired confidence interval. The first
- value sets the maximum number of iterations to run, the second,
- the minimum. The maximum number of iterations is silently capped
- at 30 and the minimum is silently floored at 3. Netperf repeats
- the measurement the minimum number of iterations and continues
- until it reaches either the desired confidence interval, or the
- maximum number of iterations, whichever comes first.
-
- If the `-I' option is specified and the `-i' option omitted the
- maximum number of iterations is set to 10 and the minimum to three.
-
- If netperf determines that the desired confidence intervals have
- not been met, it emits a noticeable warning.
-
- The total test time will be somewhere between the minimum and
- maximum number of iterations multiplied by the test length
- supplied by the `-l' option.
-
-`-l testlen'
- This option controls the length of any one iteration of the
- requested test. A positive value for TESTLEN will run each
- iteration of the test for at least TESTLEN seconds. A negative
- value for TESTLEN will run each iteration for the absolute value of
- TESTLEN transactions for a _RR test or bytes for a _STREAM test.
- Certain tests, notably those using UDP can only be timed, they
- cannot be limited by transaction or byte count.
-
- In some situations, individual iterations of a test may run for
- longer for the number of seconds specified by the `-l' option. In
- particular, this may occur for those tests where the socket buffer
- size(s) are significantly longer than the bandwidthXdelay product
- of the link(s) over which the data connection passes, or those
- tests where there may be non-trivial numbers of retransmissions.
-
- If confidence intervals are enabled via either `-I' or `-i' the
- total length of the netperf test will be somewhere between the
- minimum and maximum iteration count multiplied by TESTLEN.
-
-`-L <optionspec>'
- This option is identical to the `-H' option with the difference
- being it sets the _local_ hostname/IP and/or address family
- information. This option is generally unnecessary, but can be
- useful when you wish to make sure that the netperf control and data
- connections go via different paths. It can also come-in handy if
- one is trying to run netperf through those evil, end-to-end
- breaking things known as firewalls.
-
- [Default: 0.0.0.0 (eg INADDR_ANY) for IPv4 and ::0 for IPv6 for the
- local name. AF_UNSPEC for the local address family.]
-
-`-n numcpus'
- This option tells netperf how many CPUs it should ass-u-me are
- active on the system running netperf. In particular, this is used
- for the *Note CPU utilization: CPU Utilization. and service demand
- calculations. On certain systems, netperf is able to determine
- the number of CPU's automagically. This option will override any
- number netperf might be able to determine on its own.
-
- Note that this option does _not_ set the number of CPUs on the
- system running netserver. When netperf/netserver cannot
- automagically determine the number of CPUs that can only be set
- for netserver via a netserver `-n' command-line option.
-
-`-N'
- This option tells netperf to forego establishing a control
- connection. This makes it is possible to run some limited netperf
- tests without a corresponding netserver on the remote system.
-
- With this option set, the test to be run is to get all the
- addressing information it needs to establish its data connection
- from the command line or internal defaults. If not otherwise
- specified by test-specific command line options, the data
- connection for a "STREAM" or "SENDFILE" test will be to the
- "discard" port, an "RR" test will be to the "echo" port, and a
- "MEARTS" test will be to the chargen port.
-
- The response size of an "RR" test will be silently set to be the
- same as the request size. Otherwise the test would hang if the
- response size was larger than the request size, or would report an
- incorrect, inflated transaction rate if the response size was less
- than the request size.
-
- Since there is no control connection when this option is
- specified, it is not possible to set "remote" properties such as
- socket buffer size and the like via the netperf command line. Nor
- is it possible to retrieve such interesting remote information as
- CPU utilization. These items will be set to values which when
- displayed should make it immediately obvious that was the case.
-
- The only way to change remote characteristics such as socket buffer
- size or to obtain information such as CPU utilization is to employ
- platform-specific methods on the remote system. Frankly, if one
- has access to the remote system to employ those methods one aught
- to be able to run a netserver there. However, that ability may
- not be present in certain "support" situations, hence the addition
- of this option.
-
- Added in netperf 2.4.3.
-
-`-o <sizespec>'
- The value(s) passed-in with this option will be used as an offset
- added to the alignment specified with the `-a' option. For
- example:
- -o 3 -a 4096
- will cause the buffers passed to the local send and receive calls
- to begin three bytes past an address aligned to 4096 bytes.
- [Default: 0 bytes]
-
-`-O <sizespec>'
- This option behaves just as the `-o' option but on the remote
- system and in conjunction with the `-A' option. [Default: 0 bytes]
-
-`-p <optionspec>'
- The first value of the optionspec passed-in with this option tells
- netperf the port number at which it should expect the remote
- netserver to be listening for control connections. The second
- value of the optionspec will request netperf to bind to that local
- port number before establishing the control connection. For
- example
- -p 12345
- tells netperf that the remote netserver is listening on port 12345
- and leaves selection of the local port number for the control
- connection up to the local TCP/IP stack whereas
- -p ,32109
- leaves the remote netserver port at the default value of 12865 and
- causes netperf to bind to the local port number 32109 before
- connecting to the remote netserver.
-
- In general, setting the local port number is only necessary when
- one is looking to run netperf through those evil, end-to-end
- breaking things known as firewalls.
-
-`-P 0|1'
- A value of "1" for the `-P' option will enable display of the test
- banner. A value of "0" will disable display of the test banner.
- One might want to disable display of the test banner when running
- the same basic test type (eg TCP_STREAM) multiple times in
- succession where the test banners would then simply be redundant
- and unnecessarily clutter the output. [Default: 1 - display test
- banners]
-
-`-t testname'
- This option is used to tell netperf which test you wish to run.
- As of this writing, valid values for TESTNAME include:
- * *Note TCP_STREAM::, *Note TCP_MAERTS::, *Note TCP_SENDFILE::,
- *Note TCP_RR::, *Note TCP_CRR::, *Note TCP_CC::
-
- * *Note UDP_STREAM::, *Note UDP_RR::
-
- * *Note XTI_TCP_STREAM::, *Note XTI_TCP_RR::, *Note
- XTI_TCP_CRR::, *Note XTI_TCP_CC::
-
- * *Note XTI_UDP_STREAM::, *Note XTI_UDP_RR::
-
- * *Note SCTP_STREAM::, *Note SCTP_RR::
-
- * *Note DLCO_STREAM::, *Note DLCO_RR::, *Note DLCL_STREAM::,
- *Note DLCL_RR::
-
- * *Note LOC_CPU: Other Netperf Tests, *Note REM_CPU: Other
- Netperf Tests.
- Not all tests are always compiled into netperf. In particular, the
- "XTI," "SCTP," "UNIX," and "DL*" tests are only included in
- netperf when configured with `--enable-[xti|sctp|unix|dlpi]=yes'.
-
- Netperf only runs one type of test no matter how many `-t' options
- may be present on the command-line. The last `-t' global
- command-line option will determine the test to be run. [Default:
- TCP_STREAM]
-
-`-v verbosity'
- This option controls how verbose netperf will be in its output,
- and is often used in conjunction with the `-P' option. If the
- verbosity is set to a value of "0" then only the test's SFM (Single
- Figure of Merit) is displayed. If local *Note CPU utilization:
- CPU Utilization. is requested via the `-c' option then the SFM is
- the local service demand. Othersise, if remote CPU utilization is
- requested via the `-C' option then the SFM is the remote service
- demand. If neither local nor remote CPU utilization are requested
- the SFM will be the measured throughput or transaction rate as
- implied by the test specified with the `-t' option.
-
- If the verbosity level is set to "1" then the "normal" netperf
- result output for each test is displayed.
-
- If the verbosity level is set to "2" then "extra" information will
- be displayed. This may include, but is not limited to the number
- of send or recv calls made and the average number of bytes per
- send or recv call, or a histogram of the time spent in each send()
- call or for each transaction if netperf was configured with
- `--enable-histogram=yes'. [Default: 1 - normal verbosity]
-
-`-w time'
- If netperf was configured with `--enable-intervals=yes' then this
- value will set the inter-burst time to time milliseconds, and the
- `-b' option will set the number of sends per burst. The actual
- inter-burst time may vary depending on the system's timer
- resolution.
-
-`-W <sizespec>'
- This option controls the number of buffers in the send (first or
- only value) and or receive (second or only value) buffer rings.
- Unlike some benchmarks, netperf does not continuously send or
- receive from a single buffer. Instead it rotates through a ring of
- buffers. [Default: One more than the size of the send or receive
- socket buffer sizes (`-s' and/or `-S' options) divided by the send
- `-m' or receive `-M' buffer size respectively]
-
-`-4'
- Specifying this option will set both the local and remote address
- families to AF_INET - that is use only IPv4 addresses on the
- control connection. This can be overridden by a subsequent `-6',
- `-H' or `-L' option. Basically, the last option explicitly
- specifying an address family wins. Unless overridden by a
- test-specific option, this will be inherited for the data
- connection as well.
-
-`-6'
- Specifying this option will set both local and and remote address
- families to AF_INET6 - that is use only IPv6 addresses on the
- control connection. This can be overridden by a subsequent `-4',
- `-H' or `-L' option. Basically, the last address family
- explicitly specified wins. Unless overridden by a test-specific
- option, this will be inherited for the data connection as well.
-
-
-
-File: netperf.info, Node: Using Netperf to Measure Bulk Data Transfer, Next: Using Netperf to Measure Request/Response, Prev: Global Command-line Options, Up: Top
-
-5 Using Netperf to Measure Bulk Data Transfer
-*********************************************
-
-The most commonly measured aspect of networked system performance is
-that of bulk or unidirectional transfer performance. Everyone wants to
-know how many bits or bytes per second they can push across the
-network. The netperf convention for a bulk data transfer test name is
-to tack a "_STREAM" suffix to a test name.
-
-* Menu:
-
-* Issues in Bulk Transfer::
-* Options common to TCP UDP and SCTP tests::
-
-
-File: netperf.info, Node: Issues in Bulk Transfer, Next: Options common to TCP UDP and SCTP tests, Prev: Using Netperf to Measure Bulk Data Transfer, Up: Using Netperf to Measure Bulk Data Transfer
-
-5.1 Issues in Bulk Transfer
-===========================
-
-There are any number of things which can affect the performance of a
-bulk transfer test.
-
- Certainly, absent compression, bulk-transfer tests can be limited by
-the speed of the slowest link in the path from the source to the
-destination. If testing over a gigabit link, you will not see more
-than a gigabit :) Such situations can be described as being
-"network-limited" or "NIC-limited".
-
- CPU utilization can also affect the results of a bulk-transfer test.
-If the networking stack requires a certain number of instructions or
-CPU cycles per KB of data transferred, and the CPU is limited in the
-number of instructions or cycles it can provide, then the transfer can
-be described as being "CPU-bound".
-
- A bulk-transfer test can be CPU bound even when netperf reports less
-than 100% CPU utilization. This can happen on an MP system where one
-or more of the CPUs saturate at 100% but other CPU's remain idle.
-Typically, a single flow of data, such as that from a single instance
-of a netperf _STREAM test cannot make use of much more than the power
-of one CPU. Exceptions to this generally occur when netperf and/or
-netserver run on CPU(s) other than the CPU(s) taking interrupts from
-the NIC(s).
-
- Distance and the speed-of-light can affect performance for a
-bulk-transfer; often this can be mitigated by using larger windows.
-One common limit to the performance of a transport using window-based
-flow-control is:
- Throughput <= WindowSize/RoundTripTime
- As the sender can only have a window's-worth of data outstanding on
-the network at any one time, and the soonest the sender can receive a
-window update from the receiver is one RoundTripTime (RTT). TCP and
-SCTP are examples of such protocols.
-
- Packet losses and their effects can be particularly bad for
-performance. This is especially true if the packet losses result in
-retransmission timeouts for the protocol(s) involved. By the time a
-retransmission timeout has happened, the flow or connection has sat
-idle for a considerable length of time.
-
- On many platforms, some variant on the `netstat' command can be used
-to retrieve statistics about packet loss and retransmission. For
-example:
- netstat -p tcp
- will retrieve TCP statistics on the HP-UX Operating System. On other
-platforms, it may not be possible to retrieve statistics for a specific
-protocol and something like:
- netstat -s
- would be used instead.
-
- Many times, such network statistics are keep since the time the stack
-started, and we are only really interested in statistics from when
-netperf was running. In such situations something along the lines of:
- netstat -p tcp > before
- netperf -t TCP_mumble...
- netstat -p tcp > after
- is indicated. The beforeafter
-(ftp://ftp.cup.hp.com/dist/networking/tools/) utility can be used to
-subtract the statistics in `before' from the statistics in `after'
- beforeafter before after > delta
- and then one can look at the statistics in `delta'. Beforeafter is
-distributed in source form so one can compile it on the platofrm(s) of
-interest.
-
- While it was written with HP-UX's netstat in mind, the annotated
-netstat
-(ftp://ftp.cup.hp.com/dist/networking/briefs/annotated_netstat.txt)
-writeup may be helpful with other platforms as well.
-
-
-File: netperf.info, Node: Options common to TCP UDP and SCTP tests, Prev: Issues in Bulk Transfer, Up: Using Netperf to Measure Bulk Data Transfer
-
-5.2 Options common to TCP UDP and SCTP tests
-============================================
-
-Many "test-specific" options are actually common across the different
-tests. For those tests involving TCP, UDP and SCTP, whether using the
-BSD Sockets or the XTI interface those common options include:
-
-`-h'
- Display the test-suite-specific usage string and exit. For a TCP_
- or UDP_ test this will be the usage string from the source file
- nettest_bsd.c. For an XTI_ test, this will be the usage string
- from the source file nettest_xti.c. For an SCTP test, this will
- be the usage string from the source file nettest_sctp.c.
-
-`-H <optionspec>'
- Normally, the remote hostname|IP and address family information is
- inherited from the settings for the control connection (eg global
- command-line `-H', `-4' and/or `-6' options). The test-specific
- `-H' will override those settings for the data (aka test)
- connection only. Settings for the control connection are left
- unchanged.
-
-`-L <optionspec>'
- The test-specific `-L' option is identical to the test-specific
- `-H' option except it affects the local hostname|IP and address
- family information. As with its global command-line counterpart,
- this is generally only useful when measuring though those evil,
- end-to-end breaking things called firewalls.
-
-`-m bytes'
- Set the size of the buffer passed-in to the "send" calls of a
- _STREAM test. Note that this may have only an indirect effect on
- the size of the packets sent over the network, and certain Layer 4
- protocols do _not_ preserve or enforce message boundaries, so
- setting `-m' for the send size does not necessarily mean the
- receiver will receive that many bytes at any one time. By default
- the units are bytes, but suffix of "G," "M," or "K" will specify
- the units to be 2^30 (GB), 2^20 (MB) or 2^10 (KB) respectively. A
- suffix of "g," "m" or "k" will specify units of 10^9, 10^6 or 10^3
- bytes respectively. For example:
- `-m 32K'
- will set the size to 32KB or 32768 bytes. [Default: the local send
- socket buffer size for the connection - either the system's
- default or the value set via the `-s' option.]
-
-`-M bytes'
- Set the size of the buffer passed-in to the "recv" calls of a
- _STREAM test. This will be an upper bound on the number of bytes
- received per receive call. By default the units are bytes, but
- suffix of "G," "M," or "K" will specify the units to be 2^30 (GB),
- 2^20 (MB) or 2^10 (KB) respectively. A suffix of "g," "m" or "k"
- will specify units of 10^9, 10^6 or 10^3 bytes respectively. For
- example:
- `-M 32K'
- will set the size to 32KB or 32768 bytes. [Default: the remote
- receive socket buffer size for the data connection - either the
- system's default or the value set via the `-S' option.]
-
-`-P <optionspec>'
- Set the local and/or remote port numbers for the data connection.
-
-`-s <sizespec>'
- This option sets the local send and receive socket buffer sizes for
- the data connection to the value(s) specified. Often, this will
- affect the advertised and/or effective TCP or other window, but on
- some platforms it may not. By default the units are bytes, but
- suffix of "G," "M," or "K" will specify the units to be 2^30 (GB),
- 2^20 (MB) or 2^10 (KB) respectively. A suffix of "g," "m" or "k"
- will specify units of 10^9, 10^6 or 10^3 bytes respectively. For
- example:
- `-s 128K'
- Will request the local send and receive socket buffer sizes to be
- 128KB or 131072 bytes.
-
- While the historic expectation is that setting the socket buffer
- size has a direct effect on say the TCP window, today that may not
- hold true for all stacks. Further, while the historic expectation
- is that the value specified in a setsockopt() call will be the
- value returned via a getsockopt() call, at least one stack is
- known to deliberately ignore history. When running under Windows
- a value of 0 may be used which will be an indication to the stack
- the user wants to enable a form of copy avoidance. [Default: -1 -
- use the system's default socket buffer sizes]
-
-`-S <sizespec>'
- This option sets the remote send and/or receive socket buffer sizes
- for the data connection to the value(s) specified. Often, this
- will affect the advertised and/or effective TCP or other window,
- but on some platforms it may not. By default the units are bytes,
- but suffix of "G," "M," or "K" will specify the units to be 2^30
- (GB), 2^20 (MB) or 2^10 (KB) respectively. A suffix of "g," "m"
- or "k" will specify units of 10^9, 10^6 or 10^3 bytes respectively.
- For example:
- `-s 128K'
- Will request the local send and receive socket buffer sizes to be
- 128KB or 131072 bytes.
-
- While the historic expectation is that setting the socket buffer
- size has a direct effect on say the TCP window, today that may not
- hold true for all stacks. Further, while the historic expectation
- is that the value specified in a setsockopt() call will be the
- value returned via a getsockopt() call, at least one stack is
- known to deliberately ignore history. When running under Windows
- a value of 0 may be used which will be an indication to the stack
- the user wants to enable a form of copy avoidance. [Default: -1 -
- use the system's default socket buffer sizes]
-
-`-4'
- Set the local and remote address family for the data connection to
- AF_INET - ie use IPv4 addressing only. Just as with their global
- command-line counterparts the last of the `-4', `-6', `-H' or `-L'
- option wins for their respective address families.
-
-`-6'
- This option is identical to its `-4' cousin, but requests IPv6
- addresses for the local and remote ends of the data connection.
-
-
-* Menu:
-
-* TCP_STREAM::
-* TCP_MAERTS::
-* TCP_SENDFILE::
-* UDP_STREAM::
-* XTI_TCP_STREAM::
-* XTI_UDP_STREAM::
-* SCTP_STREAM::
-* DLCO_STREAM::
-* DLCL_STREAM::
-* STREAM_STREAM::
-* DG_STREAM::
-
-
-File: netperf.info, Node: TCP_STREAM, Next: TCP_MAERTS, Prev: Options common to TCP UDP and SCTP tests, Up: Options common to TCP UDP and SCTP tests
-
-5.2.1 TCP_STREAM
-----------------
-
-The TCP_STREAM test is the default test in netperf. It is quite
-simple, transferring some quantity of data from the system running
-netperf to the system running netserver. While time spent establishing
-the connection is not included in the throughput calculation, time
-spent flushing the last of the data to the remote at the end of the
-test is. This is how netperf knows that all the data it sent was
-received by the remote. In addition to the *Note options common to
-STREAM tests: Options common to TCP UDP and SCTP tests, the following
-test-specific options can be included to possibly alter the behavior of
-the test:
-
-`-C'
- This option will set TCP_CORK mode on the data connection on those
- systems where TCP_CORK is defined (typically Linux). A full
- description of TCP_CORK is beyond the scope of this manual, but in
- a nutshell it forces sub-MSS sends to be buffered so every segment
- sent is Maximum Segment Size (MSS) unless the application performs
- an explicit flush operation or the connection is closed. At
- present netperf does not perform any explicit flush operations.
- Setting TCP_CORK may improve the bitrate of tests where the "send
- size" (`-m' option) is smaller than the MSS. It should also
- improve (make smaller) the service demand.
-
- The Linux tcp(7) manpage states that TCP_CORK cannot be used in
- conjunction with TCP_NODELAY (set via the `-d' option), however
- netperf does not validate command-line options to enforce that.
-
-`-D'
- This option will set TCP_NODELAY on the data connection on those
- systems where TCP_NODELAY is defined. This disables something
- known as the Nagle Algorithm, which is intended to make the
- segments TCP sends as large as reasonably possible. Setting
- TCP_NODELAY for a TCP_STREAM test should either have no effect
- when the send size (`-m' option) is larger than the MSS or will
- decrease reported bitrate and increase service demand when the
- send size is smaller than the MSS. This stems from TCP_NODELAY
- causing each sub-MSS send to be its own TCP segment rather than
- being aggregated with other small sends. This means more trips up
- and down the protocol stack per KB of data transferred, which
- means greater CPU utilization.
-
- If setting TCP_NODELAY with `-D' affects throughput and/or service
- demand for tests where the send size (`-m') is larger than the MSS
- it suggests the TCP/IP stack's implementation of the Nagle
- Algorithm _may_ be broken, perhaps interpreting the Nagle
- Algorithm on a segment by segment basis rather than the proper user
- send by user send basis. However, a better test of this can be
- achieved with the *Note TCP_RR:: test.
-
-
- Here is an example of a basic TCP_STREAM test, in this case from a
-Debian Linux (2.6 kernel) system to an HP-UX 11iv2 (HP-UX 11.23) system:
-
- $ netperf -H lag
- TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to lag.hpl.hp.com (15.4.89.214) port 0 AF_INET
- Recv Send Send
- Socket Socket Message Elapsed
- Size Size Size Time Throughput
- bytes bytes bytes secs. 10^6bits/sec
-
- 32768 16384 16384 10.00 80.42
-
- We see that the default receive socket buffer size for the receiver
-(lag - HP-UX 11.23) is 32768 bytes, and the default socket send buffer
-size for the sender (Debian 2.6 kernel) is 16384 bytes. Througput is
-expressed as 10^6 (aka Mega) bits per second, and the test ran for 10
-seconds. IPv4 addresses (AF_INET) were used.
-
-
-File: netperf.info, Node: TCP_MAERTS, Next: TCP_SENDFILE, Prev: TCP_STREAM, Up: Options common to TCP UDP and SCTP tests
-
-5.2.2 TCP_MAERTS
-----------------
-
-A TCP_MAERTS (MAERTS is STREAM backwards) test is "just like" a *Note
-TCP_STREAM:: test except the data flows from the netserver to the
-netperf. The global command-line `-F' option is ignored for this test
-type. The test-specific command-line `-C' option is ignored for this
-test type.
-
- Here is an example of a TCP_MAERTS test between the same two systems
-as in the example for the *Note TCP_STREAM:: test. This time we request
-larger socket buffers with `-s' and `-S' options:
-
- $ netperf -H lag -t TCP_MAERTS -- -s 128K -S 128K
- TCP MAERTS TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to lag.hpl.hp.com (15.4.89.214) port 0 AF_INET
- Recv Send Send
- Socket Socket Message Elapsed
- Size Size Size Time Throughput
- bytes bytes bytes secs. 10^6bits/sec
-
- 221184 131072 131072 10.03 81.14
-
- Where we see that Linux, unlike HP-UX, may not return the same value
-in a getsockopt() as was requested in the prior setsockopt().
-
- This test is included more for benchmarking convenience than anything
-else.
-
-
-File: netperf.info, Node: TCP_SENDFILE, Next: UDP_STREAM, Prev: TCP_MAERTS, Up: Options common to TCP UDP and SCTP tests
-
-5.2.3 TCP_SENDFILE
-------------------
-
-The TCP_SENDFILE test is "just like" a *Note TCP_STREAM:: test except
-netperf the platform's `sendfile()' call instead of calling `send()'.
-Often this results in a "zero-copy" operation where data is sent
-directly from the filesystem buffer cache. This _should_ result in
-lower CPU utilization and possibly higher throughput. If it does not,
-then you may want to contact your vendor(s) because they have a problem
-on their hands.
-
- Zero-copy mechanisms may also alter the characteristics (size and
-number of buffers per) of packets passed to the NIC. In many stacks,
-when a copy is performed, the stack can "reserve" space at the
-beginning of the destination buffer for things like TCP, IP and Link
-headers. This then has the packet contained in a single buffer which
-can be easier to DMA to the NIC. When no copy is performed, there is
-no opportunity to reserve space for headers and so a packet will be
-contained in two or more buffers.
-
- The *Note global `-F' option: Global Options. is required for this
-test and it must specify a file of at least the size of the send ring
-(*Note the global `-W' option: Global Options.) multiplied by the send
-size (*Note the test-specific `-m' option: Options common to TCP UDP
-and SCTP tests.). All other TCP-specific options are available and
-optional.
-
- In this first example:
- $ netperf -H lag -F ../src/netperf -t TCP_SENDFILE -- -s 128K -S 128K
- TCP SENDFILE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to lag.hpl.hp.com (15.4.89.214) port 0 AF_INET
- alloc_sendfile_buf_ring: specified file too small.
- file must be larger than send_width * send_size
-
- we see what happens when the file is too small. Here:
-
- $ ../src/netperf -H lag -F /boot/vmlinuz-2.6.8-1-686 -t TCP_SENDFILE -- -s 128K -S 128K
- TCP SENDFILE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to lag.hpl.hp.com (15.4.89.214) port 0 AF_INET
- Recv Send Send
- Socket Socket Message Elapsed
- Size Size Size Time Throughput
- bytes bytes bytes secs. 10^6bits/sec
-
- 131072 221184 221184 10.02 81.83
-
- we resolve that issue by selecting a larger file.
-
-
-File: netperf.info, Node: UDP_STREAM, Next: XTI_TCP_STREAM, Prev: TCP_SENDFILE, Up: Options common to TCP UDP and SCTP tests
-
-5.2.4 UDP_STREAM
-----------------
-
-A UDP_STREAM test is similar to a *Note TCP_STREAM:: test except UDP is
-used as the transport rather than TCP.
-
- A UDP_STREAM test has no end-to-end flow control - UDP provides none
-and neither does netperf. However, if you wish, you can configure
-netperf with `--enable-intervals=yes' to enable the global command-line
-`-b' and `-w' options to pace bursts of traffic onto the network.
-
- This has a number of implications.
-
- The biggest of these implications is the data which is sent might not
-be received by the remote. For this reason, the output of a UDP_STREAM
-test shows both the sending and receiving throughput. On some
-platforms, it may be possible for the sending throughput to be reported
-as a value greater than the maximum rate of the link. This is common
-when the CPU(s) are faster than the network and there is no
-"intra-stack" flow-control.
-
- Here is an example of a UDP_STREAM test between two systems connected
-by a 10 Gigabit Ethernet link:
- $ netperf -t UDP_STREAM -H 192.168.2.125 -- -m 32768
- UDP UNIDIRECTIONAL SEND TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.2.125 (192.168.2.125) port 0 AF_INET
- Socket Message Elapsed Messages
- Size Size Time Okay Errors Throughput
- bytes bytes secs # # 10^6bits/sec
-
- 124928 32768 10.00 105672 0 2770.20
- 135168 10.00 104844 2748.50
-
- The first line of numbers are statistics from the sending (netperf)
-side. The second line of numbers are from the receiving (netserver)
-side. In this case, 105672 - 104844 or 828 messages did not make it
-all the way to the remote netserver process.
-
- If the value of the `-m' option is larger than the local send socket
-buffer size (`-s' option) netperf will likely abort with an error
-message about how the send call failed:
-
- netperf -t UDP_STREAM -H 192.168.2.125
- UDP UNIDIRECTIONAL SEND TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.2.125 (192.168.2.125) port 0 AF_INET
- udp_send: data send error: Message too long
-
- If the value of the `-m' option is larger than the remote socket
-receive buffer, the reported receive throughput will likely be zero as
-the remote UDP will discard the messages as being too large to fit into
-the socket buffer.
-
- $ netperf -t UDP_STREAM -H 192.168.2.125 -- -m 65000 -S 32768
- UDP UNIDIRECTIONAL SEND TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.2.125 (192.168.2.125) port 0 AF_INET
- Socket Message Elapsed Messages
- Size Size Time Okay Errors Throughput
- bytes bytes secs # # 10^6bits/sec
-
- 124928 65000 10.00 53595 0 2786.99
- 65536 10.00 0 0.00
-
- The example above was between a pair of systems running a "Linux"
-kernel. Notice that the remote Linux system returned a value larger
-than that passed-in to the `-S' option. In fact, this value was larger
-than the message size set with the `-m' option. That the remote socket
-buffer size is reported as 65536 bytes would suggest to any sane person
-that a message of 65000 bytes would fit, but the socket isn't _really_
-65536 bytes, even though Linux is telling us so. Go figure.
-
-
-File: netperf.info, Node: XTI_TCP_STREAM, Next: XTI_UDP_STREAM, Prev: UDP_STREAM, Up: Options common to TCP UDP and SCTP tests
-
-5.2.5 XTI_TCP_STREAM
---------------------
-
-An XTI_TCP_STREAM test is simply a *Note TCP_STREAM:: test using the XTI
-rather than BSD Sockets interface. The test-specific `-X <devspec>'
-option can be used to specify the name of the local and/or remote XTI
-device files, which is required by the `t_open()' call made by netperf
-XTI tests.
-
- The XTI_TCP_STREAM test is only present if netperf was configured
-with `--enable-xti=yes'. The remote netserver must have also been
-configured with `--enable-xti=yes'.
-
-
-File: netperf.info, Node: XTI_UDP_STREAM, Next: SCTP_STREAM, Prev: XTI_TCP_STREAM, Up: Options common to TCP UDP and SCTP tests
-
-5.2.6 XTI_UDP_STREAM
---------------------
-
-An XTI_UDP_STREAM test is simply a *Note UDP_STREAM:: test using the XTI
-rather than BSD Sockets Interface. The test-specific `-X <devspec>'
-option can be used to specify the name of the local and/or remote XTI
-device files, which is required by the `t_open()' call made by netperf
-XTI tests.
-
- The XTI_UDP_STREAM test is only present if netperf was configured
-with `--enable-xti=yes'. The remote netserver must have also been
-configured with `--enable-xti=yes'.
-
-
-File: netperf.info, Node: SCTP_STREAM, Next: DLCO_STREAM, Prev: XTI_UDP_STREAM, Up: Options common to TCP UDP and SCTP tests
-
-5.2.7 SCTP_STREAM
------------------
-
-An SCTP_STREAM test is essentially a *Note TCP_STREAM:: test using the
-SCTP rather than TCP. The `-D' option will set SCTP_NODELAY, which is
-much like the TCP_NODELAY option for TCP. The `-C' option is not
-applicable to an SCTP test as there is no corresponding SCTP_CORK
-option. The author is still figuring-out what the test-specific `-N'
-option does :)
-
- The SCTP_STREAM test is only present if netperf was configured with
-`--enable-sctp=yes'. The remote netserver must have also been
-configured with `--enable-sctp=yes'.
-
-
-File: netperf.info, Node: DLCO_STREAM, Next: DLCL_STREAM, Prev: SCTP_STREAM, Up: Options common to TCP UDP and SCTP tests
-
-5.2.8 DLCO_STREAM
------------------
-
-A DLPI Connection Oriented Stream (DLCO_STREAM) test is very similar in
-concept to a *Note TCP_STREAM:: test. Both use reliable,
-connection-oriented protocols. The DLPI test differs from the TCP test
-in that its protocol operates only at the link-level and does not
-include TCP-style segmentation and reassembly. This last difference
-means that the value passed-in with the `-m' option must be less than
-the interface MTU. Otherwise, the `-m' and `-M' options are just like
-their TCP/UDP/SCTP counterparts.
-
- Other DLPI-specific options include:
-
-`-D <devspec>'
- This option is used to provide the fully-qualified names for the
- local and/or remote DPLI device files. The syntax is otherwise
- identical to that of a "sizespec".
-
-`-p <ppaspec>'
- This option is used to specify the local and/or remote DLPI PPA(s).
- The PPA is used to identify the interface over which traffic is to
- be sent/received. The syntax of a "ppaspec" is otherwise the same
- as a "sizespec".
-
-`-s sap'
- This option specifies the 802.2 SAP for the test. A SAP is
- somewhat like either the port field of a TCP or UDP header or the
- protocol field of an IP header. The specified SAP should not
- conflict with any other active SAPs on the specified PPA's (`-p'
- option).
-
-`-w <sizespec>'
- This option specifies the local send and receive window sizes in
- units of frames on those platforms which support setting such
- things.
-
-`-W <sizespec>'
- This option specifies the remote send and receive window sizes in
- units of frames on those platforms which support setting such
- things.
-
- The DLCO_STREAM test is only present if netperf was configured with
-`--enable-dlpi=yes'. The remote netserver must have also been
-configured with `--enable-dlpi=yes'.
-
-
-File: netperf.info, Node: DLCL_STREAM, Next: STREAM_STREAM, Prev: DLCO_STREAM, Up: Options common to TCP UDP and SCTP tests
-
-5.2.9 DLCL_STREAM
------------------
-
-A DLPI ConnectionLess Stream (DLCL_STREAM) test is analogous to a *Note
-UDP_STREAM:: test in that both make use of unreliable/best-effort,
-connection-less transports. The DLCL_STREAM test differs from the
-*Note UDP_STREAM:: test in that the message size (`-m' option) must
-always be less than the link MTU as there is no IP-like fragmentation
-and reassembly available and netperf does not presume to provide one.
-
- The test-specific command-line options for a DLCL_STREAM test are the
-same as those for a *Note DLCO_STREAM:: test.
-
- The DLCL_STREAM test is only present if netperf was configured with
-`--enable-dlpi=yes'. The remote netserver must have also been
-configured with `--enable-dlpi=yes'.
-
-
-File: netperf.info, Node: STREAM_STREAM, Next: DG_STREAM, Prev: DLCL_STREAM, Up: Options common to TCP UDP and SCTP tests
-
-5.2.10 STREAM_STREAM
---------------------
-
-A Unix Domain Stream Socket Stream test (STREAM_STREAM) is similar in
-concept to a *Note TCP_STREAM:: test, but using Unix Domain sockets.
-It is, naturally, limited to intra-machine traffic. A STREAM_STREAM
-test shares the `-m', `-M', `-s' and `-S' options of the other _STREAM
-tests. In a STREAM_STREAM test the `-p' option sets the directory in
-which the pipes will be created rather than setting a port number. The
-default is to create the pipes in the system default for the
-`tempnam()' call.
-
- The STREAM_STREAM test is only present if netperf was configured with
-`--enable-unix=yes'. The remote netserver must have also been
-configured with `--enable-unix=yes'.
-
-
-File: netperf.info, Node: DG_STREAM, Prev: STREAM_STREAM, Up: Options common to TCP UDP and SCTP tests
-
-5.2.11 DG_STREAM
-----------------
-
-A Unix Domain Datagram Socket Stream test (SG_STREAM) is very much like
-a *Note TCP_STREAM:: test except that message boundaries are preserved.
-In this way, it may also be considered similar to certain flavors of
-SCTP test which can also preserve message boundaries.
-
- All the options of a *Note STREAM_STREAM:: test are applicable to a
-DG_STREAM test.
-
- The DG_STREAM test is only present if netperf was configured with
-`--enable-unix=yes'. The remote netserver must have also been
-configured with `--enable-unix=yes'.
-
-
-File: netperf.info, Node: Using Netperf to Measure Request/Response, Next: Using Netperf to Measure Aggregate Performance, Prev: Using Netperf to Measure Bulk Data Transfer, Up: Top
-
-6 Using Netperf to Measure Request/Response
-*******************************************
-
-Request/response performance is often overlooked, yet it is just as
-important as bulk-transfer performance. While things like larger
-socket buffers and TCP windows can cover a multitude of latency and
-even path-length sins, they cannot easily hide from a request/response
-test. The convention for a request/response test is to have a _RR
-suffix. There are however a few "request/response" tests that have
-other suffixes.
-
- A request/response test, particularly synchronous, one transaction at
-at time test such as those found in netperf, is particularly sensitive
-to the path-length of the networking stack. An _RR test can also
-uncover those platforms where the NIC's are strapped by default with
-overbearing interrupt avoidance settings in an attempt to increase the
-bulk-transfer performance (or rather, decrease the CPU utilization of a
-bulk-transfer test). This sensitivity is most acute for small request
-and response sizes, such as the single-byte default for a netperf _RR
-test.
-
- While a bulk-transfer test reports its results in units of bits or
-bytes transfered per second, a mumble_RR test reports transactions per
-second where a transaction is defined as the completed exchange of a
-request and a response. One can invert the transaction rate to arrive
-at the average round-trip latency. If one is confident about the
-symmetry of the connection, the average one-way latency can be taken as
-one-half the average round-trip latency. Netperf does not do either of
-these on its own but leaves them as exercises to the benchmarker.
-
-* Menu:
-
-* Issues in Request/Response::
-* Options Common to TCP UDP and SCTP _RR tests::
-
-
-File: netperf.info, Node: Issues in Request/Response, Next: Options Common to TCP UDP and SCTP _RR tests, Prev: Using Netperf to Measure Request/Response, Up: Using Netperf to Measure Request/Response
-
-6.1 Issues in Reqeust/Response
-==============================
-
-Most if not all the *Note Issues in Bulk Transfer:: apply to
-request/response. The issue of round-trip latency is even more
-important as netperf generally only has one transaction outstanding at
-a time.
-
- A single instance of a one transaction outstanding _RR test should
-_never_ completely saturate the CPU of a system. If testing between
-otherwise evenly matched systems, the symmetric nature of a _RR test
-with equal request and response sizes should result in equal CPU
-loading on both systems. However, this may not hold true on MP systems,
-particularly if one CPU binds the netperf and netserver differently via
-the global `-T' option.
-
- For smaller request and response sizes packet loss is a bigger issue
-as there is no opportunity for a "fast retransmit" or retransmission
-prior to a retransmission timer expiring.
-
- Certain NICs have ways to minimize the number of interrupts sent to
-the host. If these are strapped badly they can significantly reduce
-the performance of something like a single-byte request/response test.
-Such setups are distinguised by seriously low reported CPU utilization
-and what seems like a low (even if in the thousands) transaction per
-second rate. Also, if you run such an OS/driver combination on faster
-or slower hardware and do not see a corresponding change in the
-transaction rate, chances are good that the drvier is strapping the NIC
-with aggressive interrupt avoidance settings. Good for bulk
-throughput, but bad for latency.
-
- Some drivers may try to automagically adjust the interrupt avoidance
-settings. If they are not terribly good at it, you will see
-considerable run-to-run variation in reported transaction rates.
-Particularly if you "mix-up" _STREAM and _RR tests.
-
-
-File: netperf.info, Node: Options Common to TCP UDP and SCTP _RR tests, Prev: Issues in Request/Response, Up: Using Netperf to Measure Request/Response
-
-6.2 Options Common to TCP UDP and SCTP _RR tests
-================================================
-
-Many "test-specific" options are actually common across the different
-tests. For those tests involving TCP, UDP and SCTP, whether using the
-BSD Sockets or the XTI interface those common options include:
-
-`-h'
- Display the test-suite-specific usage string and exit. For a TCP_
- or UDP_ test this will be the usage string from the source file
- `nettest_bsd.c'. For an XTI_ test, this will be the usage string
- from the source file `src/nettest_xti.c'. For an SCTP test, this
- will be the usage string from the source file `src/nettest_sctp.c'.
-
-`-H <optionspec>'
- Normally, the remote hostname|IP and address family information is
- inherited from the settings for the control connection (eg global
- command-line `-H', `-4' and/or `-6' options. The test-specific
- `-H' will override those settings for the data (aka test)
- connection only. Settings for the control connection are left
- unchanged. This might be used to cause the control and data
- connections to take different paths through the network.
-
-`-L <optionspec>'
- The test-specific `-L' option is identical to the test-specific
- `-H' option except it affects the local hostname|IP and address
- family information. As with its global command-line counterpart,
- this is generally only useful when measuring though those evil,
- end-to-end breaking things called firewalls.
-
-`-P <optionspec>'
- Set the local and/or remote port numbers for the data connection.
-
-`-r <sizespec>'
- This option sets the request (first value) and/or response (second
- value) sizes for an _RR test. By default the units are bytes, but a
- suffix of "G," "M," or "K" will specify the units to be 2^30 (GB),
- 2^20 (MB) or 2^10 (KB) respectively. A suffix of "g," "m" or "k"
- will specify units of 10^9, 10^6 or 10^3 bytes respectively. For
- example:
- `-r 128,16K'
- Will set the request size to 128 bytes and the response size to 16
- KB or 16384 bytes. [Default: 1 - a single-byte request and
- response ]
-
-`-s <sizespec>'
- This option sets the local send and receive socket buffer sizes for
- the data connection to the value(s) specified. Often, this will
- affect the advertised and/or effective TCP or other window, but on
- some platforms it may not. By default the units are bytes, but a
- suffix of "G," "M," or "K" will specify the units to be 2^30 (GB),
- 2^20 (MB) or 2^10 (KB) respectively. A suffix of "g," "m" or "k"
- will specify units of 10^9, 10^6 or 10^3 bytes respectively. For
- example:
- `-s 128K'
- Will request the local send and receive socket buffer sizes to be
- 128KB or 131072 bytes.
-
- While the historic expectation is that setting the socket buffer
- size has a direct effect on say the TCP window, today that may not
- hold true for all stacks. When running under Windows a value of 0
- may be used which will be an indication to the stack the user
- wants to enable a form of copy avoidance. [Default: -1 - use the
- system's default socket buffer sizes]
-
-`-S <sizespec>'
- This option sets the remote send and/or receive socket buffer sizes
- for the data connection to the value(s) specified. Often, this
- will affect the advertised and/or effective TCP or other window,
- but on some platforms it may not. By default the units are bytes,
- but a suffix of "G," "M," or "K" will specify the units to be 2^30
- (GB), 2^20 (MB) or 2^10 (KB) respectively. A suffix of "g," "m"
- or "k" will specify units of 10^9, 10^6 or 10^3 bytes respectively.
- For example:
- `-s 128K'
- Will request the local send and receive socket buffer sizes to be
- 128KB or 131072 bytes.
-
- While the historic expectation is that setting the socket buffer
- size has a direct effect on say the TCP window, today that may not
- hold true for all stacks. When running under Windows a value of 0
- may be used which will be an indication to the stack the user
- wants to enable a form of copy avoidance. [Default: -1 - use the
- system's default socket buffer sizes]
-
-`-4'
- Set the local and remote address family for the data connection to
- AF_INET - ie use IPv4 addressing only. Just as with their global
- command-line counterparts the last of the `-4', `-6', `-H' or `-L'
- option wins for their respective address families.
-
-`-6'
- This option is identical to its `-4' cousin, but requests IPv6
- addresses for the local and remote ends of the data connection.
-
-
-* Menu:
-
-* TCP_RR::
-* TCP_CC::
-* TCP_CRR::
-* UDP_RR::
-* XTI_TCP_RR::
-* XTI_TCP_CC::
-* XTI_TCP_CRR::
-* XTI_UDP_RR::
-* DLCL_RR::
-* DLCO_RR::
-* SCTP_RR::
-
-
-File: netperf.info, Node: TCP_RR, Next: TCP_CC, Prev: Options Common to TCP UDP and SCTP _RR tests, Up: Options Common to TCP UDP and SCTP _RR tests
-
-6.2.1 TCP_RR
-------------
-
-A TCP_RR (TCP Request/Response) test is requested by passing a value of
-"TCP_RR" to the global `-t' command-line option. A TCP_RR test can be
-though-of as a user-space to user-space `ping' with no think time - it
-is a synchronous, one transaction at a time, request/response test.
-
- The transaction rate is the number of complete transactions exchanged
-divided by the length of time it took to perform those transactions.
-
- If the two Systems Under Test are otherwise identical, a TCP_RR test
-with the same request and response size should be symmetric - it should
-not matter which way the test is run, and the CPU utilization measured
-should be virtually the same on each system. If not, it suggests that
-the CPU utilization mechanism being used may have some, well, issues
-measuring CPU utilization completely and accurately.
-
- Time to establish the TCP connection is not counted in the result.
-If you want connection setup overheads included, you should consider the
-TCP_CC or TCP_CRR tests.
-
- If specifying the `-D' option to set TCP_NODELAY and disable the
-Nagle Algorithm increases the transaction rate reported by a TCP_RR
-test, it implies the stack(s) over which the TCP_RR test is running
-have a broken implementation of the Nagle Algorithm. Likely as not
-they are interpreting Nagle on a segment by segment basis rather than a
-user send by user send basis. You should contact your stack vendor(s)
-to report the problem to them.
-
- Here is an example of two systems running a basic TCP_RR test over a
-10 Gigabit Ethernet link:
-
- netperf -t TCP_RR -H 192.168.2.125
- TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.2.125 (192.168.2.125) port 0 AF_INET
- Local /Remote
- Socket Size Request Resp. Elapsed Trans.
- Send Recv Size Size Time Rate
- bytes Bytes bytes bytes secs. per sec
-
- 16384 87380 1 1 10.00 29150.15
- 16384 87380
-
- In this example the request and response sizes were one byte, the
-socket buffers were left at their defaults, and the test ran for all of
-10 seconds. The transaction per second rate was rather good :)
-
-
-File: netperf.info, Node: TCP_CC, Next: TCP_CRR, Prev: TCP_RR, Up: Options Common to TCP UDP and SCTP _RR tests
-
-6.2.2 TCP_CC
-------------
-
-A TCP_CC (TCP Connect/Close) test is requested by passing a value of
-"TCP_CC" to the global `-t' option. A TCP_CC test simply measures how
-fast the pair of systems can open and close connections between one
-another in a synchronous (one at a time) manner. While this is
-considered an _RR test, no request or response is exchanged over the
-connection.
-
- The issue of TIME_WAIT reuse is an important one for a TCP_CC test.
-Basically, TIME_WAIT reuse is when a pair of systems churn through
-connections fast enough that they wrap the 16-bit port number space in
-less time than the length of the TIME_WAIT state. While it is indeed
-theoretically possible to "reuse" a connection in TIME_WAIT, the
-conditions under which such reuse is possible are rather rare. An
-attempt to reuse a connection in TIME_WAIT can result in a non-trivial
-delay in connection establishment.
-
- Basically, any time the connection churn rate approaches:
-
- Sizeof(clientportspace) / Lengthof(TIME_WAIT)
-
- there is the risk of TIME_WAIT reuse. To minimize the chances of
-this happening, netperf will by default select its own client port
-numbers from the range of 5000 to 65535. On systems with a 60 second
-TIME_WAIT state, this should allow roughly 1000 transactions per
-second. The size of the client port space used by netperf can be
-controlled via the test-specific `-p' option, which takes a "sizespec"
-as a value setting the minimum (first value) and maximum (second value)
-port numbers used by netperf at the client end.
-
- Since no requests or responses are exchanged during a TCP_CC test,
-only the `-H', `-L', `-4' and `-6' of the "common" test-specific
-options are likely to have an effect, if any, on the results. The `-s'
-and `-S' options _may_ have some effect if they alter the number and/or
-type of options carried in the TCP SYNchronize segments. The `-P' and
-`-r' options are utterly ignored.
-
- Since connection establishment and tear-down for TCP is not
-symmetric, a TCP_CC test is not symmetric in its loading of the two
-systems under test.
-
-
-File: netperf.info, Node: TCP_CRR, Next: UDP_RR, Prev: TCP_CC, Up: Options Common to TCP UDP and SCTP _RR tests
-
-6.2.3 TCP_CRR
--------------
-
-The TCP Connect/Request/Response (TCP_CRR) test is requested by passing
-a value of "TCP_CRR" to the global `-t' command-line option. A TCP_RR
-test is like a merger of a TCP_RR and TCP_CC test which measures the
-performance of establishing a connection, exchanging a single
-request/response transaction, and tearing-down that connection. This
-is very much like what happens in an HTTP 1.0 or HTTP 1.1 connection
-when HTTP Keepalives are not used. In fact, the TCP_CRR test was added
-to netperf to simulate just that.
-
- Since a request and response are exchanged the `-r', `-s' and `-S'
-options can have an effect on the performance.
-
- The issue of TIME_WAIT reuse exists for the TCP_CRR test just as it
-does for the TCP_CC test. Similarly, since connection establishment
-and tear-down is not symmetric, a TCP_CRR test is not symmetric even
-when the request and response sizes are the same.
-
-
-File: netperf.info, Node: UDP_RR, Next: XTI_TCP_RR, Prev: TCP_CRR, Up: Options Common to TCP UDP and SCTP _RR tests
-
-6.2.4 UDP_RR
-------------
-
-A UDP Request/Response (UDP_RR) test is requested by passing a value of
-"UDP_RR" to a global `-t' option. It is very much the same as a TCP_RR
-test except UDP is used rather than TCP.
-
- UDP does not provide for retransmission of lost UDP datagrams, and
-netperf does not add anything for that either. This means that if
-_any_ request or response is lost, the exchange of requests and
-responses will stop from that point until the test timer expires.
-Netperf will not really "know" this has happened - the only symptom
-will be a low transaction per second rate.
-
- The netperf side of a UDP_RR test will call `connect()' on its data
-socket and thenceforth use the `send()' and `recv()' socket calls. The
-netserver side of a UDP_RR test will not call `connect()' and will use
-`recvfrom()' and `sendto()' calls. This means that even if the request
-and response sizes are the same, a UDP_RR test is _not_ symmetric in
-its loading of the two systems under test.
-
- Here is an example of a UDP_RR test between two otherwise identical
-two-CPU systems joined via a 1 Gigabit Ethernet network:
-
- $ netperf -T 1 -H 192.168.1.213 -t UDP_RR -c -C
- UDP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.1.213 (192.168.1.213) port 0 AF_INET
- Local /Remote
- Socket Size Request Resp. Elapsed Trans. CPU CPU S.dem S.dem
- Send Recv Size Size Time Rate local remote local remote
- bytes bytes bytes bytes secs. per sec % I % I us/Tr us/Tr
-
- 65535 65535 1 1 10.01 15262.48 13.90 16.11 18.221 21.116
- 65535 65535
-
- This example includes the `-c' and `-C' options to enable CPU
-utilization reporting and shows the asymmetry in CPU loading. The `-T'
-option was used to make sure netperf and netserver ran on a given CPU
-and did not move around during the test.
-
-
-File: netperf.info, Node: XTI_TCP_RR, Next: XTI_TCP_CC, Prev: UDP_RR, Up: Options Common to TCP UDP and SCTP _RR tests
-
-6.2.5 XTI_TCP_RR
-----------------
-
-An XTI_TCP_RR test is essentially the same as a *Note TCP_RR:: test only
-using the XTI rather than BSD Sockets interface. It is requested by
-passing a value of "XTI_TCP_RR" to the `-t' global command-line option.
-
- The test-specific options for an XTI_TCP_RR test are the same as
-those for a TCP_RR test with the addition of the `-X <devspec>' option
-to specify the names of the local and/or remote XTI device file(s).
-
-
-File: netperf.info, Node: XTI_TCP_CC, Next: XTI_TCP_CRR, Prev: XTI_TCP_RR, Up: Options Common to TCP UDP and SCTP _RR tests
-
-6.2.6 XTI_TCP_CC
-----------------
-
-
-File: netperf.info, Node: XTI_TCP_CRR, Next: XTI_UDP_RR, Prev: XTI_TCP_CC, Up: Options Common to TCP UDP and SCTP _RR tests
-
-6.2.7 XTI_TCP_CRR
------------------
-
-
-File: netperf.info, Node: XTI_UDP_RR, Next: DLCL_RR, Prev: XTI_TCP_CRR, Up: Options Common to TCP UDP and SCTP _RR tests
-
-6.2.8 XTI_UDP_RR
-----------------
-
-An XTI_UDP_RR test is essentially the same as a UDP_RR test only using
-the XTI rather than BSD Sockets interface. It is requested by passing
-a value of "XTI_UDP_RR" to the `-t' global command-line option.
-
- The test-specific options for an XTI_UDP_RR test are the same as
-those for a UDP_RR test with the addition of the `-X <devspec>' option
-to specify the name of the local and/or remote XTI device file(s).
-
-
-File: netperf.info, Node: DLCL_RR, Next: DLCO_RR, Prev: XTI_UDP_RR, Up: Options Common to TCP UDP and SCTP _RR tests
-
-6.2.9 DLCL_RR
--------------
-
-
-File: netperf.info, Node: DLCO_RR, Next: SCTP_RR, Prev: DLCL_RR, Up: Options Common to TCP UDP and SCTP _RR tests
-
-6.2.10 DLCO_RR
---------------
-
-
-File: netperf.info, Node: SCTP_RR, Prev: DLCO_RR, Up: Options Common to TCP UDP and SCTP _RR tests
-
-6.2.11 SCTP_RR
---------------
-
-
-File: netperf.info, Node: Using Netperf to Measure Aggregate Performance, Next: Using Netperf to Measure Bidirectional Transfer, Prev: Using Netperf to Measure Request/Response, Up: Top
-
-7 Using Netperf to Measure Aggregate Performance
-************************************************
-
-*Note Netperf4: Netperf4. is the preferred benchmark to use when one
-wants to measure aggregate performance because netperf has no support
-for explicit synchronization of concurrent tests.
-
- Basically, there are two ways to measure aggregate performance with
-netperf. The first is to run multiple, concurrent netperf tests and
-can be applied to any of the netperf tests. The second is to configure
-netperf with `--enable-burst' and is applicable to the TCP_RR test.
-
-* Menu:
-
-* Running Concurrent Netperf Tests::
-* Using --enable-burst::
-
-
-File: netperf.info, Node: Running Concurrent Netperf Tests, Next: Using --enable-burst, Prev: Using Netperf to Measure Aggregate Performance, Up: Using Netperf to Measure Aggregate Performance
-
-7.1 Running Concurrent Netperf Tests
-====================================
-
-*Note Netperf4: Netperf4. is the preferred benchmark to use when one
-wants to measure aggregate performance because netperf has no support
-for explicit synchronization of concurrent tests. This leaves netperf2
-results vulnerable to "skew" errors.
-
- However, since there are times when netperf4 is unavailable it may be
-necessary to run netperf. The skew error can be minimized by making use
-of the confidence interval functionality. Then one simply launches
-multiple tests from the shell using a `for' loop or the like:
-
- for i in 1 2 3 4
- do
- netperf -t TCP_STREAM -H tardy.cup.hp.com -i 10 -P 0 &
- done
-
- which will run four, concurrent *Note TCP_STREAM: TCP_STREAM. tests
-from the system on which it is executed to tardy.cup.hp.com. Each
-concurrent netperf will iterate 10 times thanks to the `-i' option and
-will omit the test banners (option `-P') for brevity. The output looks
-something like this:
-
- 87380 16384 16384 10.03 235.15
- 87380 16384 16384 10.03 235.09
- 87380 16384 16384 10.03 235.38
- 87380 16384 16384 10.03 233.96
-
- We can take the sum of the results and be reasonably confident that
-the aggregate performance was 940 Mbits/s.
-
- If you see warnings about netperf not achieving the confidence
-intervals, the best thing to do is to increase the number of iterations
-with `-i' and/or increase the run length of each iteration with `-l'.
-
- You can also enable local (`-c') and/or remote (`-C') CPU
-utilization:
-
- for i in 1 2 3 4
- do
- netperf -t TCP_STREAM -H tardy.cup.hp.com -i 10 -P 0 -c -C &
- done
-
- 87380 16384 16384 10.03 235.47 3.67 5.09 10.226 14.180
- 87380 16384 16384 10.03 234.73 3.67 5.09 10.260 14.225
- 87380 16384 16384 10.03 234.64 3.67 5.10 10.263 14.231
- 87380 16384 16384 10.03 234.87 3.67 5.09 10.253 14.215
-
- If the CPU utilizations reported for the same system are the same or
-very very close you can be reasonably confident that skew error is
-minimized. Presumeably one could then omit `-i' but that is not
-advised, particularly when/if the CPU utilization approaches 100
-percent. In the example above we see that the CPU utilization on the
-local system remains the same for all four tests, and is only off by
-0.01 out of 5.09 on the remote system.
-
- NOTE: It is very important to rememeber that netperf is calculating
- system-wide CPU utilization. When calculating the service demand
- (those last two columns in the output above) each netperf assumes
- it is the only thing running on the system. This means that for
- concurrent tests the service demands reported by netperf will be
- wrong. One has to compute service demands for concurrent tests by
- hand.
-
- If you wish you can add a unique, global `-B' option to each command
-line to append the given string to the output:
-
- for i in 1 2 3 4
- do
- netperf -t TCP_STREAM -H tardy.cup.hp.com -B "this is test $i" -i 10 -P 0 &
- done
-
- 87380 16384 16384 10.03 234.90 this is test 4
- 87380 16384 16384 10.03 234.41 this is test 2
- 87380 16384 16384 10.03 235.26 this is test 1
- 87380 16384 16384 10.03 235.09 this is test 3
-
- You will notice that the tests completed in an order other than they
-were started from the shell. This underscores why there is a threat of
-skew error and why netperf4 is the preferred tool for aggregate tests.
-Even if you see the Netperf Contributing Editor acting to the
-contrary!-)
-
-
-File: netperf.info, Node: Using --enable-burst, Prev: Running Concurrent Netperf Tests, Up: Using Netperf to Measure Aggregate Performance
-
-7.2 Using -enable-burst
-=======================
-
-If one configures netperf with `--enable-burst':
-
- configure --enable-burst
-
- Then a test-specific `-b num' option is added to the *Note TCP_RR:
-TCP_RR. and *Note UDP_RR: UDP_RR. tests. This option causes TCP_RR and
-UDP_RR to quickly work their way up to having at least `num'
-transactions in flight at one time.
-
- This is used as an alternative to or even in conjunction with
-multiple-concurrent _RR tests. When run with just a single instance of
-netperf, increasing the burst size can determine the maximum number of
-transactions per second can be serviced by a single process:
-
- for b in 0 1 2 4 8 16 32
- do
- netperf -v 0 -t TCP_RR -B "-b $b" -H hpcpc108 -P 0 -- -b $b
- done
-
- 9457.59 -b 0
- 9975.37 -b 1
- 10000.61 -b 2
- 20084.47 -b 4
- 29965.31 -b 8
- 71929.27 -b 16
- 109718.17 -b 32
-
- The global `-v' and `-P' options were used to minimize the output to
-the single figure of merit which in this case the transaction rate.
-The global `-B' option was used to more clearly label the output, and
-the test-specific `-b' option enabled by `--enable-burst' set the
-number of transactions in flight at one time.
-
- Now, since the test-specific `-D' option was not specified to set
-TCP_NODELAY, the stack was free to "bundle" requests and/or responses
-into TCP segments as it saw fit, and since the default request and
-response size is one byte, there could have been some considerable
-bundling. If one wants to try to achieve a closer to one-to-one
-correspondence between a request and response and a TCP segment, add
-the test-specific `-D' option:
-
- for b in 0 1 2 4 8 16 32
- do
- netperf -v 0 -t TCP_RR -B "-b $b -D" -H hpcpc108 -P 0 -- -b $b -D
- done
-
- 8695.12 -b 0 -D
- 19966.48 -b 1 -D
- 20691.07 -b 2 -D
- 49893.58 -b 4 -D
- 62057.31 -b 8 -D
- 108416.88 -b 16 -D
- 114411.66 -b 32 -D
-
- You can see that this has a rather large effect on the reported
-transaction rate. In this particular instance, the author believes it
-relates to interactions between the test and interrupt coalescing
-settings in the driver for the NICs used.
-
- NOTE: Even if you set the `-D' option that is still not a
- guarantee that each transaction is in its own TCP segments. You
- should get into the habit of verifying the relationship between the
- transaction rate and the packet rate via other means
-
- You can also combine `--enable-burst' functionality with concurrent
-netperf tests. This would then be an "aggregate of aggregates" if you
-like:
-
-
- for i in 1 2 3 4
- do
- netperf -H hpcpc108 -v 0 -P 0 -i 10 -B "aggregate $i -b 8 -D" -t TCP_RR -- -b 8 -D &
- done
-
- 46668.38 aggregate 4 -b 8 -D
- 44890.64 aggregate 2 -b 8 -D
- 45702.04 aggregate 1 -b 8 -D
- 46352.48 aggregate 3 -b 8 -D
-
- Since each netperf did hit the confidence intervals, we can be
-reasonably certain that the aggregate transaction per second rate was
-the sum of all four concurrent tests, or something just shy of 184,000
-transactions per second. To get some idea if that was also the packet
-per second rate, we could bracket that `for' loop with something to
-gather statistics and run the results through beforeafter
-(ftp://ftp.cup.hp.com/dist/networking/tools):
-
- /usr/sbin/ethtool -S eth2 > before
- for i in 1 2 3 4
- do
- netperf -H 192.168.2.108 -l 60 -v 0 -P 0 -B "aggregate $i -b 8 -D" -t TCP_RR -- -b 8 -D &
- done
- wait
- /usr/sbin/ethtool -S eth2 > after
-
- 52312.62 aggregate 2 -b 8 -D
- 50105.65 aggregate 4 -b 8 -D
- 50890.82 aggregate 1 -b 8 -D
- 50869.20 aggregate 3 -b 8 -D
-
- beforeafter before after > delta
-
- grep packets delta
- rx_packets: 12251544
- tx_packets: 12251550
-
- This example uses `ethtool' because the system being used is running
-Linux. Other platforms have other tools - for example HP-UX has
-lanadmin:
-
- lanadmin -g mibstats <ppa>
-
- and of course one could instead use `netstat'.
-
- The `wait' is important because we are launching concurrent netperfs
-in the background. Without it, the second ethtool command would be run
-before the tests finished and perhaps even before the last of them got
-started!
-
- The sum of the reported transaction rates is 204178 over 60 seconds,
-which is a total of 12250680 transactions. Each transaction is the
-exchange of a request and a response, so we multiply that by 2 to
-arrive at 24501360.
-
- The sum of the ethtool stats is 24503094 packets which matches what
-netperf was reporting very well.
-
- Had the request or response size differed, we would need to know how
-it compared with the "MSS" for the connection.
-
- Just for grins, here is the excercise repeated, using `netstat'
-instead of `ethtool'
-
- netstat -s -t > before
- for i in 1 2 3 4
- do
- netperf -l 60 -H 192.168.2.108 -v 0 -P 0 -B "aggregate $i -b 8 -D" -t TCP_RR -- -b 8 -D & done
- wait
- netstat -s -t > after
-
- 51305.88 aggregate 4 -b 8 -D
- 51847.73 aggregate 2 -b 8 -D
- 50648.19 aggregate 3 -b 8 -D
- 53605.86 aggregate 1 -b 8 -D
-
- beforeafter before after > delta
-
- grep segments delta
- 12445708 segments received
- 12445730 segments send out
- 1 segments retransmited
- 0 bad segments received.
-
- The sums are left as an excercise to the reader :)
-
- Things become considerably more complicated if there are non-trvial
-packet losses and/or retransmissions.
-
- Of course all this checking is unnecessary if the test is a UDP_RR
-test because UDP "never" aggregates multiple sends into the same UDP
-datagram, and there are no ACKnowledgements in UDP. The loss of a
-single request or response will not bring a "burst" UDP_RR test to a
-screeching halt, but it will reduce the number of transactions
-outstanding at any one time. A "burst" UDP_RR test will come to a halt
-if the sum of the lost requests and responses reaches the value
-specified in the test-specific `-b' option.
-
-
-File: netperf.info, Node: Using Netperf to Measure Bidirectional Transfer, Next: Other Netperf Tests, Prev: Using Netperf to Measure Aggregate Performance, Up: Top
-
-8 Using Netperf to Measure Bidirectional Transfer
-*************************************************
-
-There are two ways to use netperf to measure the perfomance of
-bidirectional transfer. The first is to run concurrent netperf tests
-from the command line. The second is to configure netperf with
-`--enable-burst' and use a single instance of the *Note TCP_RR: TCP_RR.
-test.
-
- While neither method is more "correct" than the other, each is doing
-so in different ways, and that has possible implications. For
-instance, using the concurrent netperf test mechanism means that
-multiple TCP connections and multiple processes are involved, whereas
-using the single instance of TCP_RR there is only one TCP connection
-and one process on each end. They may behave differently, especially
-on an MP system.
-
-* Menu:
-
-* Bidirectional Transfer with Concurrent Tests::
-* Bidirectional Transfer with TCP_RR::
-
-
-File: netperf.info, Node: Bidirectional Transfer with Concurrent Tests, Next: Bidirectional Transfer with TCP_RR, Prev: Using Netperf to Measure Bidirectional Transfer, Up: Using Netperf to Measure Bidirectional Transfer
-
-8.1 Bidirectional Transfer with Concurrent Tests
-================================================
-
-If we had two hosts Fred and Ethel, we could simply run a netperf *Note
-TCP_STREAM: TCP_STREAM. test on Fred pointing at Ethel, and a
-concurrent netperf TCP_STREAM test on Ethel pointing at Fred, but since
-there are no mechanisms to synchronize netperf tests and we would be
-starting tests from two different systems, there is a considerable risk
-of skew error.
-
- Far better would be to run simultaneous TCP_STREAM and *Note
-TCP_MAERTS: TCP_MAERTS. tests from just one system, using the concepts
-and procedures outlined in *Note Running Concurrent Netperf Tests:
-Running Concurrent Netperf Tests. Here then is an example:
-
- for i in 1
- do
- netperf -H 192.168.2.108 -t TCP_STREAM -B "outbound" -i 10 -P 0 -v 0 -- -s 256K -S 256K &
- netperf -H 192.168.2.108 -t TCP_MAERTS -B "inbound" -i 10 -P 0 -v 0 -- -s 256K -S 256K &
- done
-
- 892.66 outbound
- 891.34 inbound
-
- We have used a `for' loop in the shell with just one iteration
-because that will be much easier to get both tests started at more or
-less the same time than doing it by hand. The global `-P' and `-v'
-options are used because we aren't interested in anything other than
-the throughput, and the global `-B' option is used to tag each output
-so we know which was inbound and which outbound relative to the system
-on which we were running netperf. Of course that sense is switched on
-the system running netserver :) The use of the global `-i' option is
-explained in *Note Running Concurrent Netperf Tests: Running Concurrent
-Netperf Tests.
-
-
-File: netperf.info, Node: Bidirectional Transfer with TCP_RR, Prev: Bidirectional Transfer with Concurrent Tests, Up: Using Netperf to Measure Bidirectional Transfer
-
-8.2 Bidirectional Transfer with TCP_RR
-======================================
-
-If one configures netperf with `--enable-burst' then one can use the
-test-specific `-b' option to increase the number of transactions in
-flight at one time. If one also uses the -r option to make those
-transactions larger the test starts to look more and more like a
-bidirectional transfer than a request/response test.
-
- Now, the logic behing `--enable-burst' is very simple, and there are
-no calls to `poll()' or `select()' which means we want to make sure
-that the `send()' calls will never block, or we run the risk of
-deadlock with each side stuck trying to call `send()' and neither
-calling `recv()'.
-
- Fortunately, this is easily accomplished by setting a "large enough"
-socket buffer size with the test-specific `-s' and `-S' options.
-Presently this must be performed by the user. Future versions of
-netperf might attempt to do this automagically, but there are some
-issues to be worked-out.
-
- Here then is an example of a bidirectional transfer test using
-`--enable-burst' and the *Note TCP_RR: TCP_RR. test:
-
- netperf -t TCP_RR -H hpcpc108 -- -b 6 -r 32K -s 256K -S 256K
- TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to hpcpc108.cup.hp.com (16.89.84.108) port 0 AF_INET : first burst 6
- Local /Remote
- Socket Size Request Resp. Elapsed Trans.
- Send Recv Size Size Time Rate
- bytes Bytes bytes bytes secs. per sec
-
- 524288 524288 32768 32768 10.01 3525.97
- 524288 524288
-
- Now, at present netperf does not include a bit or byte rate in the
-output of an _RR test which means we must calculate it ourselves. Each
-transaction is the exchange of 32768 bytes of request and 32768 bytes
-of response, or 65536 bytes. Multiply that by 8 and we arrive at
-524288 bits per transaction. Multiply that by 3525.97 and we arrive at
-1848623759 bits per second. Since things were uniform, we can divide
-that by two and arrive at roughly 924311879 bits per second each way.
-That corresponds to "link-rate" for a 1 Gigiabit Ethernet which happens
-to be the type of netpwrk used in the example.
-
- A future version of netperf may perform the calculation on behalf of
-the user, but it would likely not emit it unless the user specified a
-verbosity of 2 or more with the global `-v' option.
-
-
-File: netperf.info, Node: Other Netperf Tests, Next: Address Resolution, Prev: Using Netperf to Measure Bidirectional Transfer, Up: Top
-
-9 Other Netperf Tests
-*********************
-
-Apart from the typical performance tests, netperf contains some tests
-which can be used to streamline measurements and reporting. These
-include CPU rate calibration (present) and host identification (future
-enhancement).
-
-* Menu:
-
-* CPU rate calibration::
-
-
-File: netperf.info, Node: CPU rate calibration, Prev: Other Netperf Tests, Up: Other Netperf Tests
-
-9.1 CPU rate calibration
-========================
-
-Some of the CPU utilization measurement mechanisms of netperf work by
-comparing the rate at which some counter increments when the system is
-idle with the rate at which that same counter increments when the
-system is running a netperf test. The ratio of those rates is used to
-arrive at a CPU utilization percentage.
-
- This means that netperf must know the rate at which the counter
-increments when the system is presumed to be "idle." If it does not
-know the rate, netperf will measure it before starting a data transfer
-test. This calibration step takes 40 seconds for each of the local or
-remote ystems, and if repeated for each netperf test would make taking
-repeated measurements rather slow.
-
- Thus, the netperf CPU utilization options `-c' and and `-C' can take
-an optional calibration value. This value is used as the "idle rate"
-and the calibration step is not performed. To determine the idle rate,
-netperf can be used to run special tests which only report the value of
-the calibration - they are the LOC_CPU and REM_CPU tests. These return
-the calibration value for the local and remote system respectively. A
-common way to use these tests is to store their results into an
-environment variable and use that in subsequent netperf commands:
-
- LOC_RATE=`netperf -t LOC_CPU`
- REM_RATE=`netperf -H <remote> -t REM_CPU`
- netperf -H <remote> -c $LOC_RATE -C $REM_RATE ... -- ...
- ...
- netperf -H <remote> -c $LOC_RATE -C $REM_RATE ... -- ...
-
- If you are going to use netperf to measure aggregate results, it is
-important to use the LOC_CPU and REM_CPU tests to get the calibration
-values first to avoid issues with some of the aggregate netperf tests
-transferring data while others are "idle" and getting bogus calibration
-values. When running aggregate tests, it is very important to remember
-that any one instance of netperf does not know about the other
-instances of netperf. It will report global CPU utilization and will
-calculate service demand believing it was the only thing causing that
-CPU utilization. So, you can use the CPU utilization reported by
-netperf in an aggregate test, but you have to calculate service demands
-by hand.
-
-
-File: netperf.info, Node: Address Resolution, Next: Enhancing Netperf, Prev: Other Netperf Tests, Up: Top
-
-10 Address Resolution
-*********************
-
-Netperf versions 2.4.0 and later have merged IPv4 and IPv6 tests so the
-functionality of the tests in `src/nettest_ipv6.c' has been subsumed
-into the tests in `src/nettest_bsd.c' This has been accomplished in
-part by switching from `gethostbyname()'to `getaddrinfo()' exclusively.
-While it was theoretically possible to get multiple results for a
-hostname from `gethostbyname()' it was generally unlikely and netperf's
-ignoring of the second and later results was not much of an issue.
-
- Now with `getaddrinfo' and particularly with AF_UNSPEC it is
-increasingly likely that a given hostname will have multiple associated
-addresses. The `establish_control()' routine of `src/netlib.c' will
-indeed attempt to chose from among all the matching IP addresses when
-establishing the control connection. Netperf does not _really_ care if
-the control connection is IPv4 or IPv6 or even mixed on either end.
-
- However, the individual tests still ass-u-me that the first result in
-the address list is the one to be used. Whether or not this will
-turn-out to be an issue has yet to be determined.
-
- If you do run into problems with this, the easiest workaround is to
-specify IP addresses for the data connection explicitly in the
-test-specific `-H' and `-L' options. At some point, the netperf tests
-_may_ try to be more sophisticated in their parsing of returns from
-`getaddrinfo()' - straw-man patches to <netperf-feedback@netperf.org>
-would of course be most welcome :)
-
- Netperf has leveraged code from other open-source projects with
-amenable licensing to provide a replacement `getaddrinfo()' call on
-those platforms where the `configure' script believes there is no
-native getaddrinfo call. As of this writing, the replacement
-`getaddrinfo()' as been tested on HP-UX 11.0 and then presumed to run
-elsewhere.
-
-
-File: netperf.info, Node: Enhancing Netperf, Next: Netperf4, Prev: Address Resolution, Up: Top
-
-11 Enhancing Netperf
-********************
-
-Netperf is constantly evolving. If you find you want to make
-enhancements to netperf, by all means do so. If you wish to add a new
-"suite" of tests to netperf the general idea is to
-
- 1. Add files `src/nettest_mumble.c' and `src/nettest_mumble.h' where
- mumble is replaced with something meaningful for the test-suite.
-
- 2. Add support for an apropriate `--enable-mumble' option in
- `configure.ac'.
-
- 3. Edit `src/netperf.c', `netsh.c', and `netserver.c' as required,
- using #ifdef WANT_MUMBLE.
-
- 4. Compile and test
-
- If you wish to submit your changes for possible inclusion into the
-mainline sources, please try to base your changes on the latest
-available sources. (*Note Getting Netperf Bits::.) and then send email
-describing the changes at a high level to
-<netperf-feedback@netperf.org> or perhaps <netperf-talk@netperf.org>.
-If the concensus is positive, then sending context `diff' results to
-<netperf-feedback@netperf.org> is the next step. From that point, it
-is a matter of pestering the Netperf Contributing Editor until he gets
-the changes incorporated :)
-
-
-File: netperf.info, Node: Netperf4, Next: Concept Index, Prev: Enhancing Netperf, Up: Top
-
-12 Netperf4
-***********
-
-Netperf4 is the shorthand name given to version 4.X.X of netperf. This
-is really a separate benchmark more than a newer version of netperf,
-but it is a decendant of netperf so the netperf name is kept. The
-facitious way to describe netperf4 is to say it is the
-egg-laying-wolly-milk-pig version of netperf :) The more respectful
-way to describe it is to say it is the version of netperf with support
-for synchronized, multiple-thread, multiple-test, multiple-system,
-network-oriented benchmarking.
-
- Netperf4 is still undergoing rapid evolution. Those wishing to work
-with or on netperf4 are encouraged to join the netperf-dev
-(http://www.netperf.org/cgi-bin/mailman/listinfo/netperf-dev) mailing
-list and/or peruse the current sources
-(http://www.netperf.org/svn/netperf4/trunk).
-
-
-File: netperf.info, Node: Concept Index, Next: Option Index, Prev: Netperf4, Up: Top
-
-Concept Index
-*************
-
-
-* Menu:
-
-* Aggregate Performance: Using Netperf to Measure Aggregate Performance.
- (line 3)
-* Bandwidth Limitation: Installing Netperf Bits.
- (line 41)
-* Connection Latency: TCP_CC. (line 3)
-* CPU Utilization: The Design of Netperf.
- (line 35)
-* Design of Netperf: The Design of Netperf.
- (line 6)
-* Installation: Installing Netperf. (line 6)
-* Introduction: Introduction. (line 6)
-* Latency, Connection Establishment <1>: XTI_TCP_CRR. (line 3)
-* Latency, Connection Establishment <2>: XTI_TCP_CC. (line 3)
-* Latency, Connection Establishment <3>: TCP_CRR. (line 3)
-* Latency, Connection Establishment: TCP_CC. (line 3)
-* Latency, Request-Response <1>: SCTP_RR. (line 3)
-* Latency, Request-Response <2>: DLCO_RR. (line 3)
-* Latency, Request-Response <3>: DLCL_RR. (line 3)
-* Latency, Request-Response <4>: XTI_UDP_RR. (line 3)
-* Latency, Request-Response <5>: XTI_TCP_CRR. (line 3)
-* Latency, Request-Response <6>: XTI_TCP_RR. (line 3)
-* Latency, Request-Response <7>: UDP_RR. (line 3)
-* Latency, Request-Response <8>: TCP_CRR. (line 3)
-* Latency, Request-Response: TCP_RR. (line 3)
-* Limiting Bandwidth <1>: UDP_STREAM. (line 9)
-* Limiting Bandwidth: Installing Netperf Bits.
- (line 41)
-* Measuring Latency: TCP_RR. (line 3)
-* Packet Loss: UDP_RR. (line 3)
-* Port Reuse: TCP_CC. (line 13)
-* TIME_WAIT: TCP_CC. (line 13)
-
-
-File: netperf.info, Node: Option Index, Prev: Concept Index, Up: Top
-
-Option Index
-************
-
-
-* Menu:
-
-* --enable-burst, Configure: Using Netperf to Measure Aggregate Performance.
- (line 3)
-* --enable-cpuutil, Configure: Installing Netperf Bits.
- (line 22)
-* --enable-dlpi, Configure: Installing Netperf Bits.
- (line 28)
-* --enable-histogram, Configure: Installing Netperf Bits.
- (line 41)
-* --enable-intervals, Configure: Installing Netperf Bits.
- (line 41)
-* --enable-sctp, Configure: Installing Netperf Bits.
- (line 28)
-* --enable-unix, Configure: Installing Netperf Bits.
- (line 28)
-* --enable-xti, Configure: Installing Netperf Bits.
- (line 28)
-* -4, Global: Global Options. (line 379)
-* -4, Test-specific <1>: Options Common to TCP UDP and SCTP _RR tests.
- (line 88)
-* -4, Test-specific: Options common to TCP UDP and SCTP tests.
- (line 110)
-* -6 Test-specific: Options Common to TCP UDP and SCTP _RR tests.
- (line 94)
-* -6, Global: Global Options. (line 388)
-* -6, Test-specific: Options common to TCP UDP and SCTP tests.
- (line 116)
-* -A, Global: Global Options. (line 18)
-* -a, Global: Global Options. (line 6)
-* -B, Global: Global Options. (line 29)
-* -b, Global: Global Options. (line 22)
-* -C, Global: Global Options. (line 42)
-* -c, Global: Global Options. (line 33)
-* -D, Global: Global Options. (line 56)
-* -d, Global: Global Options. (line 47)
-* -F, Global: Global Options. (line 74)
-* -f, Global: Global Options. (line 67)
-* -H, Global: Global Options. (line 92)
-* -h, Global: Global Options. (line 88)
-* -H, Test-specific: Options Common to TCP UDP and SCTP _RR tests.
- (line 17)
-* -h, Test-specific <1>: Options Common to TCP UDP and SCTP _RR tests.
- (line 10)
-* -h, Test-specific: Options common to TCP UDP and SCTP tests.
- (line 10)
-* -i, Global: Global Options. (line 168)
-* -I, Global: Global Options. (line 127)
-* -L, Global: Global Options. (line 209)
-* -l, Global: Global Options. (line 189)
-* -L, Test-specific <1>: Options Common to TCP UDP and SCTP _RR tests.
- (line 26)
-* -L, Test-specific: Options common to TCP UDP and SCTP tests.
- (line 25)
-* -M, Test-specific: Options common to TCP UDP and SCTP tests.
- (line 48)
-* -m, Test-specific: Options common to TCP UDP and SCTP tests.
- (line 32)
-* -N, Global: Global Options. (line 234)
-* -n, Global: Global Options. (line 221)
-* -O, Global: Global Options. (line 279)
-* -o, Global: Global Options. (line 270)
-* -P, Global: Global Options. (line 303)
-* -p, Global: Global Options. (line 283)
-* -P, Test-specific <1>: Options Common to TCP UDP and SCTP _RR tests.
- (line 33)
-* -P, Test-specific: Options common to TCP UDP and SCTP tests.
- (line 61)
-* -r, Test-specific: Options Common to TCP UDP and SCTP _RR tests.
- (line 36)
-* -S Test-specific: Options common to TCP UDP and SCTP tests.
- (line 87)
-* -S, Test-specific: Options Common to TCP UDP and SCTP _RR tests.
- (line 68)
-* -s, Test-specific <1>: Options Common to TCP UDP and SCTP _RR tests.
- (line 48)
-* -s, Test-specific: Options common to TCP UDP and SCTP tests.
- (line 64)
-* -t, Global: Global Options. (line 312)
-* -v, Global: Global Options. (line 341)
-* -W, Global: Global Options. (line 370)
-* -w, Global: Global Options. (line 363)
-
-
-
-Tag Table:
-Node: Top441
-Node: Introduction2702
-Node: Conventions5163
-Node: Installing Netperf6926
-Node: Getting Netperf Bits8480
-Node: Installing Netperf Bits10298
-Node: Verifying Installation16762
-Node: The Design of Netperf17466
-Node: CPU Utilization19048
-Node: Global Command-line Options27661
-Node: Command-line Options Syntax28200
-Node: Global Options29582
-Node: Using Netperf to Measure Bulk Data Transfer48878
-Node: Issues in Bulk Transfer49543
-Node: Options common to TCP UDP and SCTP tests53072
-Node: TCP_STREAM59366
-Node: TCP_MAERTS63134
-Node: TCP_SENDFILE64367
-Node: UDP_STREAM66683
-Node: XTI_TCP_STREAM70119
-Node: XTI_UDP_STREAM70764
-Node: SCTP_STREAM71409
-Node: DLCO_STREAM72109
-Node: DLCL_STREAM74082
-Node: STREAM_STREAM74956
-Node: DG_STREAM75802
-Node: Using Netperf to Measure Request/Response76471
-Node: Issues in Request/Response78392
-Node: Options Common to TCP UDP and SCTP _RR tests80398
-Node: TCP_RR85377
-Node: TCP_CC87721
-Node: TCP_CRR89918
-Node: UDP_RR90964
-Node: XTI_TCP_RR92985
-Node: XTI_TCP_CC93568
-Node: XTI_TCP_CRR93734
-Node: XTI_UDP_RR93902
-Node: DLCL_RR94479
-Node: DLCO_RR94632
-Node: SCTP_RR94784
-Node: Using Netperf to Measure Aggregate Performance94920
-Node: Running Concurrent Netperf Tests95755
-Node: Using --enable-burst99647
-Node: Using Netperf to Measure Bidirectional Transfer105832
-Node: Bidirectional Transfer with Concurrent Tests106905
-Node: Bidirectional Transfer with TCP_RR108771
-Node: Other Netperf Tests111305
-Node: CPU rate calibration111751
-Node: Address Resolution114092
-Node: Enhancing Netperf116068
-Node: Netperf4117305
-Node: Concept Index118214
-Node: Option Index120604
-
-End Tag Table