Provided by: openvswitch-common_2.5.9-0ubuntu0.16.04.3_amd64 bug

NAME

       ovs-benchmark - flow setup benchmark utility for Open vSwitch

SYNOPSIS

       ovs-benchmark latency --remote ip[:ports] [--sockets nsocks] [--batches nbatches] [--local [ip][:ports]]

       ovs-benchmark rate --remote ip[:ports] [--max-rate rate] [--timeout maxsecs] [--sockets nsocks]
                          [--batches nbatches] [--local [ip][:ports]]

       ovs-benchmark listen [--local [ip]:ports]

       ovs-benchmark help

DESCRIPTION

       ovs-benchmark  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.

       Each ovs-benchmark command is described separately below.

The ``latency'' command

       This  command  initiates  nsocks 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 . or ! symbols, one for each TCP connection that completed  in  that
       many milliseconds.  A successful connection prints a ., and an unsuccessful connection (e.g. to a port on
       which no process is listening) prints a !.

       If  nbatches  is  given,  the  entire procedure is repeated the specified number of times.  Only a single
       summary line is printed at the end.

       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.)

The ``rate'' command

       This command initiates nsocks TCP connections (by default,  100)  as  quickly  as  possible  (limited  by
       maxrate,  if  --max-rate  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 --timeout is
       specified, until maxsecs 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.

       Without  --max-rate,  the rate command measures the maximum sustained flow setup rate for an Open vSwitch
       instance.  This naturally tends to drive ovs-vswitchd CPU  usage  to  100%  on  the  host  receiving  the
       traffic.

       When  --max-rate  is  specified  with  a  value  below the maximum rate that an Open vSwitch instance can
       handle, then rate can also be used to measure the kernel  and  userspace  CPU  cost  of  flow  setups  at
       specific flow rates.

       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.

The ``listen'' command

       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 rate or latency commands  for  observing  effects  of
       successful vs. unsuccessful TCP connections.

       It  is  easier  to  reproduce  and  interpret  ovs-benchmark results when there is no listener (see NOTES
       below).

The ``help'' command

       Prints a usage message and exits successfully.

OPTIONS

       -r ip[:ports]
       --remote ip[:ports]
              This option, required on latency and rate commands, minimally specifies the remote host to connect
              to (as an IP address or DNS name) as ip.

              A TCP port or range of ports (separated by -) 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.

       -l [ip][:ports]
       --local [ip][:ports]
              On  the  latency  and rate, 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
              --local  and  --remote,  then  each local port in its range will be used before the remote port is
              incremented to the next port in its range.)

              On the listen 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.

       -s nsocks
       --sockets nsocks
              For  latency,  sets the number of connections to initiate per batch.  For rate, sets the number of
              outstanding connections attempts to maintain at any given time.  The default is 100.

       -b nbatches
       --batches nbatches
              For latency, sets the number of times to initiate and wait for all of the connections to complete.
              The default is 1.

       -c maxrate
       --max-rate maxrate
              For rate, caps the maximum rate at which connections will be attempted to maxrate connections  per
              second.  By default there is no limit.

       -T maxsecs
       --timeout maxsecs
              For  rate,  stops  the  benchmark  after  maxsecs seconds have elapsed.  By default, the benchmark
              continues until interrupted by a signal.

NOTES

       ovs-benchmark 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 ovs-benchmark 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.  ovs-benchmark 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.

       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., iptables -F.

       ovs-benchmark  is  single-threaded.   A  multithreaded process might be able to initiate connections more
       quickly.

       A TCP connection consists of two flows (one in each direction), so multiply the TCP connection statistics
       that ovs-benchmark reports by 2 to get flow statistics.

Open vSwitch                                          2.5.9                                     ovs-benchmark(1)