.TH netperf 1 ""
.SH NAME

netperf \- a network performance benchmark

.SH SYNOPSIS

.B netperf
[global options] -- [test specific options]

.SH DESCRIPTION
.B Netperf
is a benchmark that can be used to measure various aspects of
networking performance.
Currently, its focus is on bulk data transfer and request/response
performance using either TCP or UDP, and the Berkeley Sockets
interface. In addition, tests for DLPI, and Unix Domain
Sockets, tests for IPv6 may be conditionally compiled-in.

.SS GLOBAL OPTIONS

.TP
.B \-4
Use AF_INET (aka IPv4) addressing for the control and possibly data
connections. 
.TP
.B \-6
Use AF_INET6 (aka IPv6) addressing for the control and possibly data
connections.
.TP
.B \-a sizespec
Alter the send and receive buffer alignments on the local system.
This defaults to 8 bytes.
.TP
.B \-A sizespec
As -a, but for the remote system.
.TP
.B \-B brandstr
Add brandstr to the output of a test with banners disabled.
.TP
.B \-c [rate]
Request CPU utilization and service demand calculations for the
local system. If the optional rate parameter is specified,
.B netperf
will use that instead of calculating the rate itself.
.TP
.B \-C [rate]
As -c, but for the remote system.
.TP
.B \-d
Increase the quantity of debugging output displayed during
a test (possibly at the expense of performance).
.TP
.B \-D [secs,units] (*)
Display interim results at least every secs seconds uning units as the
initial guess for units per second. This is only available when
netperf has been configured with --enable-demo.
.TP
.B \-f GMKgmk
Change the units of measure for *_STREAM tests. Capital letters are
powers of two, lowercase are powers of ten.
.TP
.B \-F fill_file
Pre-fill the send buffers with data from the named file. This is
intended to provide a means for avoiding buffers that are filled with
data which is trivially easy to compress. A good choice for a file
that should be present on any system is this manpage - netperf.man.
Other files may be provided as part of the distribution.
.TP
.B \-h
Display a usage string, and exit.
.TP
.B \-H name|ip,family (*)
Set the hostname (or IP address) and address family to use to
establish the control connection to the remote system. Passing a
single name with no comma will only set remote_host and will leave
selection of address family for the control connection to the stack or
by a -4 -r -6 command line option.
.TP
.B \-i max,min
Set the maximum and minimum number of iterations when trying to reach
certain confidence levels.
.TP
.B \-I lvl,[,intvl]
Specify the confidence level (either 95 or 99 - 99 is the default) and
the width of the confidence interval as a percentage (default 10)
.TP
.B \-l testlen
Specify the length of the test (default 10 seconds).
A negative value sets the number of request/response transactions,
or the number of bytes for a stream test.
.TP
.B \-L name|ip,fam (*)
Set the local name|IP and/or address family for the socket used for
the control connection to the remote netserver.
.TP
.B \-n numcpus
Specify the number of CPU's in the system on those systems for which
netperf has no way to find the number of CPU's programatically. 
.TP
.B \-N
This option will tell netperf to not establish a control connection to
a remote  netserver.  Instead it will try to establish a data
connection directly, using only the information supplied by the
command line parameters and/or internal defaults.  Unless other ports
are provided by the command line, by default the data connection will
be to the "discard" port for a "STREAM" or "SENDFILE" test, the "echo"
port for an "RR" test or the "chargen" port for a "MAERTS" test.
.TP
.B \-o sizespec
Set an offset from the alignment specified with -a.
.TP
.B \-O sizespec
As -o, but for the remote system.
.TP
.B \-p portnum,locport (*)
Direct the control connection to a netserver listening on the
specified port, rather than using a "netperf" entry in
/etc/services or the internal default (port 12865). If ",locport" is
specified the control connection will be established from that local
port number.  Specifying a single port number with no comma will
specify only the remote netserver port number and will leave local
port number selection to the stack.  
.TP
.B \-P 0|1
Show (1) or suppress (0) the test banner.
.TP
.B \-t testname
Specify the test to perform.
Valid testnames include, but are not limited to, nor always compiled-in:
.RS
.RS
.nf
.I TCP_STREAM
.I TCP_SENDFILE
.I TCP_MAERTS
.I TCP_RR
.I TCP_CRR
.I UDP_STREAM
.I UDP_RR
.I DLCO_STREAM
.I DLCO_RR
.I DLCL_STREAM
.I DLCL_RR
.I STREAM_STREAM
.I STREAM_RR
.I DG_STREAM
.I DG_RR
.I LOC_CPU
.I REM_CPU
.fi
.RE
.RE
.TP
.B \-T lcpu,remcpu
Request that netperf be bound to CPU lcpu and/or netserver be bound to
CPU rcpu.
.TP
.B \-v verbosity
Set the verbosity level for the test (only with -P).


.SS TEST SPECIFIC OPTIONS

.TP
.B \-h
Display a usage string based on the test name set with -t, and exit.

Please consult the netperf manual
.I 
Netperf: A Network Performance Benchmark 
(netperf.ps) for more information. Or you can join and mail to 
netperf-talk@netperf.org.

.SH NOTE
For those options taking two parms, at least one must be specified;
specifying one value without a comma will set both parms to that
value, specifying a value with a leading comma will set just the
second parm, a value with a trailing comma will set just the first. To
set each parm to unique values, specify both and separate them with a
comma.

* For these options taking two parms, specifying one value with no
comma will only set the first parms and will leave the second at the
default value. To set the second value it must be preceded with a
comma or be a comma-separated pair. This is to retain previous netperf
behaviour.


.SH BUGS 
There are bound to be bugs. If you think you have found a bug, please
mention it in netperf-talk@netperf.org.  List membership is required
to send email to the list.  See
http://www.netperf.org/cgi-bin/mailman/listinfo/netperf-talk . If all
else fails send email to Rick Jones <raj@cup.hp.com>.

.SH SEE ALSO
.C netserver
.br
.I
Netperf: A Network Performance Benchmark
.br
http://www.netperf.org/

.SH AUTHORS
HP Information Networks Division - Networking Performance Team.
.br
Rick Jones	<raj@cup.hp.com>
.br
Karen Choy	HP IND
.br
Dave Shield	<daves@csc.liv.ac.uk>	(man pages)
.br
Others too numerous to mention here - see the ACKNWLDGMNTS file
