summaryrefslogtreecommitdiff
path: root/Documentation/topics
diff options
context:
space:
mode:
authorMaxime Coquelin <maxime.coquelin@redhat.com>2022-01-05 09:19:25 +0100
committerIlya Maximets <i.maximets@ovn.org>2022-01-17 18:07:00 +0100
commitc18e707b2f259438633af5b23df53e1409472871 (patch)
tree3f2cad4b4ceb690834d1ce688ebe023b530d3911 /Documentation/topics
parent31e67c998bf7eec70e87c8d64670599053c0f1f3 (diff)
downloadopenvswitch-c18e707b2f259438633af5b23df53e1409472871.tar.gz
dpif-netdev: Introduce hash-based Tx packet steering mode.
This patch adds a new hash Tx steering mode that distributes the traffic on all the Tx queues, whatever the number of PMD threads. It would be useful for guests expecting traffic to be distributed on all the vCPUs. The idea here is to re-use the 5-tuple hash of the packets, already computed to build the flows batches (and so it does not provide flexibility on which fields are part of the hash). There are also no user-configurable indirection table, given the feature is transparent to the guest. The queue selection is just a modulo operation between the packet hash and the number of Tx queues. There are no (at least intentionnally) functionnal changes for the existing XPS and static modes. There should not be noticeable performance changes for these modes (only one more branch in the hot path). For the hash mode, performance could be impacted due to locking when multiple PMD threads are in use (same as XPS mode) and also because of the second level of batching. Regarding the batching, the existing Tx port output_pkts is not modified. It means that at maximum, NETDEV_MAX_BURST can be batched for all the Tx queues. A second level of batching is done in dp_netdev_pmd_flush_output_on_port(), only for this hash mode. Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com> Reviewed-by: David Marchand <david.marchand@redhat.com> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Diffstat (limited to 'Documentation/topics')
-rw-r--r--Documentation/topics/index.rst1
-rw-r--r--Documentation/topics/userspace-tx-steering.rst74
2 files changed, 75 insertions, 0 deletions
diff --git a/Documentation/topics/index.rst b/Documentation/topics/index.rst
index d8ccbd757..3699fd5c4 100644
--- a/Documentation/topics/index.rst
+++ b/Documentation/topics/index.rst
@@ -55,3 +55,4 @@ OVS
userspace-tso
idl-compound-indexes
ovs-extensions
+ userspace-tx-steering
diff --git a/Documentation/topics/userspace-tx-steering.rst b/Documentation/topics/userspace-tx-steering.rst
new file mode 100644
index 000000000..16f066a8a
--- /dev/null
+++ b/Documentation/topics/userspace-tx-steering.rst
@@ -0,0 +1,74 @@
+..
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ Convention for heading levels in Open vSwitch documentation:
+
+ ======= Heading 0 (reserved for the title in a document)
+ ------- Heading 1
+ ~~~~~~~ Heading 2
+ +++++++ Heading 3
+ ''''''' Heading 4
+
+ Avoid deeper levels because they do not render well.
+
+============================
+Userspace Tx packet steering
+============================
+
+The userspace datapath supports two transmit packet steering modes.
+
+Thread mode
+~~~~~~~~~~~
+
+This mode is automatically selected when the port's ``tx-steering`` option is
+set to ``thread`` or unset.
+
+Depending on the port's number of Tx queues being greater or equal than the
+number of PMD threads, static txq mapping or XPS will be used.
+
+This is the recommended mode for performance reasons if the number of Tx queues
+is greater or equal to the number of PMD threads, because the Tx lock is not
+acquired.
+
+If the number of Tx queues is greater than the number of threads, the remaining
+Tx queues will not be used.
+
+This mode is enabled by default.
+
+Hash mode
+~~~~~~~~~
+
+Hash-based Tx packet steering mode distributes the packets on all the port's
+transmit queues, whatever the number of PMD threads. The queue selection is
+based on the 5-tuples hash to build the flows batches, the selected queue being
+the modulo between the hash and the number of Tx queues of the port.
+
+Hash mode may be used for example with vhost-user ports, when the number of
+vCPUs and queues of the guest are greater than the number of PMD threads.
+Without hash mode, the Tx queues used would be limited to the number of
+threads.
+
+Hash-based Tx packet steering may have an impact on the performance, given the
+Tx lock acquisition is always required and a second level of batching is
+performed.
+
+Usage
+~~~~~
+
+To enable hash mode::
+
+ $ ovs-vsctl set Interface <iface> other_config:tx-steering=hash
+
+To disable hash mode::
+
+ $ ovs-vsctl set Interface <iface> other_config:tx-steering=thread