Skip to content

Commit

Permalink
doc: Convert ovs-test to rST
Browse files Browse the repository at this point in the history
Signed-off-by: Stephen Finucane <[email protected]>
Signed-off-by: Ben Pfaff <[email protected]>
  • Loading branch information
stephenfin authored and blp committed Apr 21, 2017
1 parent fd0837a commit 3591d8c
Show file tree
Hide file tree
Showing 9 changed files with 172 additions and 492 deletions.
1 change: 1 addition & 0 deletions Documentation/automake.mk
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ endif

# rST formatted manpages under Documentation/ref.
RST_MANPAGES = \
ovs-test.8.rst \
ovs-vlan-test.8.rst

# The GNU standards say that these variables should control
Expand Down
3 changes: 3 additions & 0 deletions Documentation/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -331,6 +331,9 @@
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
('ref/ovs-test.8', 'ovs-test',
u'Check Linux drivers for performance, vlan and L3 tunneling problems',
[author], 8),
('ref/ovs-vlan-test.8', 'ovs-vlan-test',
u'Check Linux drivers for problems with vlan traffic',
[author], 8)
Expand Down
1 change: 1 addition & 0 deletions Documentation/ref/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ time:
.. toctree::
:maxdepth: 3

ovs-test.8
ovs-vlan-test.8

The remainder are still in roff format can be found below:
Expand Down
163 changes: 163 additions & 0 deletions Documentation/ref/ovs-test.8.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
========
ovs-test
========

Synopsis
========

**ovs-test** -s *port*

**ovs-test** -c *server1* *server2* [**-b** *targetbandwidth*] [**-i** *testinterval*] [**-d**]
[**-l** *vlantag*] [**-t** *tunnelmodes*]

Description
===========

The :program:`ovs-test` program may be used to check for problems sending
802.1Q or GRE traffic that Open vSwitch may uncover. These problems, for
example, can occur when Open vSwitch is used to send 802.1Q traffic through
physical interfaces running certain drivers of certain Linux kernel versions.
To run a test, configure IP addresses on `server1` and `server2` for interfaces
you intended to test. These interfaces could also be already configured OVS
bridges that have a physical interface attached to them. Then, on one of the
nodes, run :program:`ovs-test` in server mode and on the other node run it in
client mode. The client will connect to :program:`ovs-test` server and schedule
tests between both of them. The :program:`ovs-test` client will perform UDP and
TCP tests.

UDP tests can report packet loss and achieved bandwidth for various datagram
sizes. By default target bandwidth for UDP tests is 1Mbit/s.

TCP tests report only achieved bandwidth, because kernel TCP stack takes care
of flow control and packet loss. TCP tests are essential to detect potential
TSO related issues.

To determine whether Open vSwitch is encountering any problems, the user must
compare packet loss and achieved bandwidth in a setup where traffic is being
directly sent and in one where it is not. If in the 802.1Q or L3 tunneled tests
both :program:`ovs-test` processes are unable to communicate or the achieved
bandwidth is much lower compared to direct setup, then, most likely, Open
vSwitch has encountered a pre-existing kernel or driver bug.

Some examples of the types of problems that may be encountered are:

- When NICs use VLAN stripping on receive they must pass a pointer to a
`vlan_group` when reporting the stripped tag to the networking core. If no
`vlan_group` is in use then some drivers just drop the extracted tag.
Drivers are supposed to only enable stripping if a `vlan_group` is registered
but not all of them do that.

- On receive, some drivers handle priority tagged packets specially and don't
pass the tag onto the network stack at all, so Open vSwitch never has a
chance to see it.

- Some drivers size their receive buffers based on whether a `vlan_group` is
enabled, meaning that a maximum size packet with a VLAN tag will not fit if
no `vlan_group` is configured.

- On transmit, some drivers expect that VLAN acceleration will be used if it is
available, which can only be done if a `vlan_group` is configured. In these
cases, the driver may fail to parse the packet and correctly setup checksum
offloading or TSO.

Client Mode
An :program:`ovs-test` client will connect to two :program:`ovs-test` servers
and will ask them to exchange test traffic. It is also possible to spawn an
:program:`ovs-test` server automatically from the client.

Server Mode
To conduct tests, two :program:`ovs-test` servers must be running on two
different hosts where the client can connect. The actual test traffic is
exchanged only between both :program:`ovs-test` servers. It is recommended
that both servers have their IP addresses in the same subnet, otherwise one
would have to make sure that routing is set up correctly.

Options
=======

.. program:: ovs-test

.. option:: -s <port>, --server <port>

Run in server mode and wait for the client to establish XML RPC Control
Connection on this TCP port. It is recommended to have `ethtool(8)`
installed on the server so that it could retrieve information about the NIC
driver.

.. option:: -c <server1> <server2>, --client <server1> <server2>

Run in client mode and schedule tests between `server1` and `server2`,
where each server must be given in the following format::

OuterIP[:OuterPort],InnerIP[/Mask][:InnerPort].

The `OuterIP` must be already assigned to the physical interface which is
going to be tested. This is the IP address where client will try to
establish XML RPC connection. If `OuterIP` is 127.0.0.1 then client will
automatically spawn a local instance of :program:`ovs-test` server.
OuterPort is TCP port where server is listening for incoming XML/RPC
control connections to schedule tests (by default it is 15531). The
:program:`ovs-test` will automatically assign `InnerIP[/Mask]` to the
interfaces that will be created on the fly for testing purposes. It is
important that `InnerIP[/Mask]` does not interfere with already existing IP
addresses on both :program:`ovs-test` servers and client. InnerPort is port
which will be used by server to listen for test traffic that will be
encapsulated (by default it is 15532).

.. option:: -b <targetbandwidth>, --bandwidth <targetbandwidth>

Target bandwidth for UDP tests. The targetbandwidth must be given in bits
per second. It is possible to use postfix `M` or `K` to alter the target
bandwidth magnitude.

.. option:: -i <testinterval>, --interval <testinterval>

How long each test should run. By default 5 seconds.

.. option:: -h, --help

Prints a brief help message to the console.

.. option:: -V, --version

Prints version information to the console.

The following test modes are supported by :program:`ovs-test`. It is possible
to combine multiple of them in a single :program:`ovs-test` invocation.

.. option:: -d, --direct

Perform direct tests between both OuterIP addresses. These tests could be
used as a reference to compare 802.1Q or L3 tunneling test results.

.. option:: -l <vlantag>, --vlan-tag <vlantag>

Perform 802.1Q tests between both servers. These tests will create a
temporary OVS bridge, if necessary, and attach a VLAN tagged port to
it for testing purposes.

.. option:: -t <tunnelmodes>, --tunnel-modes <tunnelmodes>

Perform L3 tunneling tests. The given argument is a comma sepa‐ rated
string that specifies all the L3 tunnel modes that should be tested (e.g.
gre). The L3 tunnels are terminated on interface that has the OuterIP
address assigned.

Examples
========

On host 1.2.3.4 start :program:`ovs-test` in server mode::

ovs-test -s 15531

On host 1.2.3.5 start :program:`ovs-test` in client mode and do direct, VLAN
and GRE tests between both nodes::

ovs-test -c 127.0.0.1,1.1.1.1/30 1.2.3.4,1.1.1.2/30 -d -l 123 -t
gre

See Also
========

`ovs-vswitchd(8)`, `ovs-ofctl(8)`, `ovs-vsctl(8)`, :program:`ovs-vlan-test`,
`ethtool(8)`, `uname(1)`
11 changes: 4 additions & 7 deletions Documentation/ref/ovs-vlan-test.8.rst
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,11 @@ Synopsis
Description
===========

.. TODO(stephenfin): Add the `:program:` prefixes to `ovs-test` once that doc
is converted
The :program:`ovs-vlan-test` utility has some limitations, for example, it does
not use TCP in its tests. Also it does not take into account MTU to detect
potential edge cases. To overcome those limitations a new tool was developed -
`ovs-test`. `ovs-test` is currently supported only on Debian so, if possible,
try to use that on instead of :program:`ovs-vlan-test`.
:program:`ovs-test`. :program:`ovs-test` is currently supported only on Debian
so, if possible, try to use that on instead of :program:`ovs-vlan-test`.

The :program:`ovs-vlan-test` program may be used to check for problems sending
802.1Q traffic which may occur when running Open vSwitch. These problems can
Expand Down Expand Up @@ -111,5 +108,5 @@ Run an :program:`ovs-vlan-test` client with a control server located at
See Also
========

`ovs-vswitchd(8)`, `ovs-ofctl(8)`, `ovs-vsctl(8)`, `ovs-test(8)`, `ethtool(8)`,
`uname(1)`
`ovs-vswitchd(8)`, `ovs-ofctl(8)`, `ovs-vsctl(8)`, :program:`ovs-test`,
`ethtool(8)`, `uname(1)`
1 change: 0 additions & 1 deletion debian/openvswitch-test.manpages
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
utilities/ovs-l3ping.8
utilities/ovs-test.8
Loading

0 comments on commit 3591d8c

Please sign in to comment.