199 lines
7.5 KiB
Groff
Executable File
199 lines
7.5 KiB
Groff
Executable File
.\" -*- nroff -*-
|
|
.so lib/ovs.tmac
|
|
.TH ovs\-benchmark 1 "@VERSION@" "Open vSwitch" "Open vSwitch Manual"
|
|
.
|
|
.SH NAME
|
|
ovs\-benchmark \- flow setup benchmark utility for Open vSwitch
|
|
.
|
|
.SH SYNOPSIS
|
|
.
|
|
.SY ovs\-benchmark\ latency
|
|
\fB\-\-remote \fIip\fR[\fB:\fIports\fR]
|
|
.OP \-\-sockets nsocks
|
|
.OP \-\-batches nbatches
|
|
.OP \-\-local \fR[\fIip\fR][\fB:\fIports\fR]
|
|
.YS
|
|
.
|
|
.SY ovs\-benchmark\ rate
|
|
\fB\-\-remote \fIip\fR[\fB:\fIports\fR]
|
|
.OP \-\-max\-rate rate
|
|
.OP \-\-timeout maxsecs
|
|
.OP \-\-sockets nsocks
|
|
.OP \-\-batches nbatches
|
|
.OP \-\-local \fR[\fIip\fR][\fB:\fIports\fR]
|
|
.YS
|
|
.
|
|
.SY ovs\-benchmark\ listen
|
|
.OP \-\-local \fR[\fIip\fR]\fB:\fIports
|
|
.YS
|
|
.
|
|
.SY ovs\-benchmark\ help
|
|
.YS
|
|
.
|
|
.SH DESCRIPTION
|
|
\fBovs\-benchmark\fR tests the performance of Open vSwitch flow setup
|
|
by setting up a number of TCP connections and measuring the time
|
|
required. It can also be used with the Linux bridge or without any
|
|
bridging software, which allows one to measure the bandwidth and
|
|
latency cost of bridging.
|
|
.PP
|
|
Each \fBovs\-benchmark\fR command is described separately below.
|
|
.
|
|
.SH "The ``latency'' command"
|
|
.
|
|
.PP
|
|
This command initiates \fInsocks\fR TCP connections (by default, 100)
|
|
as quickly as possible, waits for each one to complete with success or
|
|
failure, and prints a bar chart of completion times on standard
|
|
output, followed by a summary line. Each line in the bar chart lists
|
|
a time to connection completion in milliseconds followed by a number
|
|
of \fB.\fR or \fB!\fR symbols, one for each TCP connection that
|
|
completed in that many milliseconds. A successful connection prints a
|
|
\fB.\fR, and an unsuccessful connection (e.g. to a port on which no
|
|
process is listening) prints a \fB!\fR.
|
|
.
|
|
.PP
|
|
If \fInbatches\fR is given, the entire procedure is repeated the
|
|
specified number of times. Only a single summary line is printed at
|
|
the end.
|
|
.
|
|
.PP
|
|
Results vary widely based on the number of sockets and whether the
|
|
remote host is listening for connections on the specified ports. With
|
|
a small number of sockets, all connection times typically remain
|
|
within a handful of milliseconds. As the number of sockets increases,
|
|
the distribution of connection times clusters around the sending TCP
|
|
stack's SYN retransmission interval. (This pattern occurs with or
|
|
without Open vSwitch on the network path.)
|
|
.
|
|
.SH "The ``rate'' command"
|
|
.
|
|
.PP
|
|
This command initiates \fInsocks\fR TCP connections (by default, 100)
|
|
as quickly as possible (limited by \fImaxrate\fR, if
|
|
\fB\-\-max\-rate\fR is specified). Each time a connection completes
|
|
with success or failure, it closes that connection and initiates a new
|
|
one. It continues to do so either forever or, if \fB\-\-timeout\fR is
|
|
specified, until \fImaxsecs\fR seconds have elapsed. During the test,
|
|
it prints statistics about time elapsed, successful and unsuccessful
|
|
connections, and the average number of completed (succeeded or failed)
|
|
connections per second over the run.
|
|
.
|
|
.PP
|
|
Without \fB\-\-max\-rate\fR, the \fBrate\fR command measures the
|
|
maximum sustained flow setup rate for an Open vSwitch instance. This
|
|
naturally tends to drive \fBovs\-vswitchd\fR CPU usage to 100% on the
|
|
host receiving the traffic.
|
|
.
|
|
.PP
|
|
When \fB\-\-max\-rate\fR is specified with a value below the maximum
|
|
rate that an Open vSwitch instance can handle, then \fBrate\fR can
|
|
also be used to measure the kernel and userspace CPU cost of flow
|
|
setups at specific flow rates.
|
|
.
|
|
.PP
|
|
Results tend to fluctuate greatly for the first few seconds of a run,
|
|
then settle down. The displayed average is calculated over the entire
|
|
run and so tends to converge asymptotically on the ``correct'' value.
|
|
To converge more quickly, try running for 5 to 10 seconds, then
|
|
killing and restarting the run.
|
|
.
|
|
.SH "The ``listen'' command"
|
|
.
|
|
.PP
|
|
This command listens on one or more TCP ports for incoming
|
|
connections. It accepts connections and immediately closes them. It
|
|
can be paired with the \fBrate\fR or \fBlatency\fR commands for
|
|
observing effects of successful vs. unsuccessful TCP connections.
|
|
.
|
|
.PP
|
|
It is easier to reproduce and interpret \fBovs\-benchmark\fR results
|
|
when there is no listener (see \fBNOTES\fR below).
|
|
.
|
|
.SH "The ``help'' command"
|
|
.
|
|
.PP
|
|
Prints a usage message and exits successfully.
|
|
.
|
|
.SH OPTIONS
|
|
.
|
|
.IP "\fB\-r \fIip\fR[\fB:\fIports\fR]"
|
|
.IQ "\fB\-\-remote \fIip\fR[\fB:\fIports\fR]"
|
|
This option, required on \fBlatency\fR and \fBrate\fR commands,
|
|
minimally specifies the remote host to connect to (as an IP address or
|
|
DNS name) as \fIip\fR.
|
|
.
|
|
.IP
|
|
A TCP port or range of ports (separated by \fB\-\fR) may also be
|
|
specified. If a range is specified then each port in the range is
|
|
used in round-robin order. The default port is 6630 if none is
|
|
specified.
|
|
.
|
|
.IP "\fB\-l \fR[\fIip\fR][\fB:\fIports\fR]"
|
|
.IQ "\fB\-\-local \fR[\fIip\fR][\fB:\fIports\fR]"
|
|
On the \fBlatency\fR and \fBrate\fR, without this option, outgoing
|
|
connections will not bind a specific TCP port. The local TCP stack
|
|
will pick a local TCP port to bind. When this option is specified,
|
|
the specified port or range of ports will be used in turn. (If a port
|
|
range is specified on both \fB\-\-local\fR and \fB\-\-remote\fR, then
|
|
each local port in its range will be used before the remote port is
|
|
incremented to the next port in its range.)
|
|
.
|
|
.IP
|
|
On the \fBlisten\fR command, this option specifies the local port or
|
|
ports and IP addresses on which to listen. If it is omitted, port
|
|
6630 on any IP address is used.
|
|
.
|
|
.IP "\fB\-s \fInsocks\fR"
|
|
.IQ "\fB\-\-sockets \fInsocks\fR"
|
|
For \fBlatency\fR, sets the number of connections to initiate per
|
|
batch. For \fBrate\fR, sets the number of outstanding connections
|
|
attempts to maintain at any given time. The default is 100.
|
|
.
|
|
.IP "\fB\-b \fInbatches\fR"
|
|
.IQ "\fB\-\-batches \fInbatches\fR"
|
|
For \fBlatency\fR, sets the number of times to initiate and wait for
|
|
all of the connections to complete. The default is 1.
|
|
.
|
|
.IP "\fB\-c \fImaxrate\fR"
|
|
.IQ "\fB\-\-max\-rate \fImaxrate\fR"
|
|
For \fBrate\fR, caps the maximum rate at which connections will be
|
|
attempted to \fImaxrate\fR connections per second. By default there
|
|
is no limit.
|
|
.
|
|
.IP "\fB\-T \fImaxsecs\fR"
|
|
.IQ "\fB\-\-timeout \fImaxsecs\fR"
|
|
For \fBrate\fR, stops the benchmark after \fImaxsecs\fR seconds have
|
|
elapsed. By default, the benchmark continues until interrupted by a
|
|
signal.
|
|
.
|
|
.SH NOTES
|
|
.PP
|
|
\fBovs\-benchmark\fR uses standard POSIX socket calls for network
|
|
access, so it shares the strengths and limitations of TCP/IP and its
|
|
implementations in the local and remote TCP/IP stacks. Particularly,
|
|
TCP and its implementations limit the number of successfully completed
|
|
and then closed TCP connections. This means that \fBovs\-benchmark\fR
|
|
tests tend to slow down if run for long intervals or with large
|
|
numbers of sockets or batches, if the remote system is listening on
|
|
the port or ports being contacted. The problem does not occur when
|
|
the remote system is not listening. \fBovs\-benchmark\fR results are
|
|
therefore much more reliable and repeatable when the remote system is
|
|
not listening on the port or ports being contacted. Even a single
|
|
listening socket (e.g. range of ports 8000 to 9000 with one listener
|
|
on port 8080) can cause anomalies in results.
|
|
.
|
|
.PP
|
|
Be sure that the remote TCP/IP stack's firewall allows the benchmark's
|
|
traffic to be processed. For Open vSwitch benchmarking purposes, you
|
|
might want to disable the firewall with, e.g., \fBiptables \-F\fR.
|
|
.
|
|
.PP
|
|
\fBovs\-benchmark\fR is single-threaded. A multithreaded process
|
|
might be able to initiate connections more quickly.
|
|
.
|
|
.PP
|
|
A TCP connection consists of two flows (one in each direction), so
|
|
multiply the TCP connection statistics that \fBovs\-benchmark\fR
|
|
reports by 2 to get flow statistics.
|