[ovs-dev] [PATCH] netdev-dpdk: Deprecate ring ports.

Ilya Maximets i.maximets at ovn.org
Tue Nov 26 11:31:48 UTC 2019


'dpdkr' a.k.a. DPDK ring ports has really poor support in OVS and not
tested on a regular basis.  These ports are intended to work via
shared memory with another DPDK secondary process, but there are lots
of limitations for using this functionality in practice.  Most of them
connected with running secondary DPDK application and memory layout
issues.  More details are available in DPDK guide:
https://doc.dpdk.org/guides/prog_guide/multi_proc_support.html#multi-process-limitations

Beside the functional limitations it's also hard to use this
functionality correctly.  User must be sure that OVS and secondary DPDK
application are running on different CPU cores, which is hard because
non-PMD threads could float over available CPU cores.  This or any
other misconfiguration will likely lead to crash of OVS.

Another problem is that the user must actually build the secondary
application with the same version of DPDK that was used for OVS build.

Above issues are same as we have while using DPDK pdump.

Beside that, current implementation in OVS is not able to free
allocated rings that could lead to memory exhausting.

Initially these ports was added to use with IVSHMEM for a fast
zero-copy HOST<-->VM communication.  However, IVSHMEM is not used
anymore.  IVSHMEM support was removed from DPDK in 16.11 relase and
the patch for QEMU for using regular files as a device backend is no
longer available.  That makes DPDK ring ports barely useful in real
virtualization environment.

This patch adds a deprecation warnings for run-time port creation
and documentation.  Claiming to completely remove this functionality
from OVS in one of the next releases.

Signed-off-by: Ilya Maximets <i.maximets at ovn.org>
---

These ports also produces complications with offload flags management:
https://mail.openvswitch.org/pipermail/ovs-dev/2019-November/365048.html

 Documentation/topics/dpdk/ring.rst | 6 ++++++
 NEWS                               | 2 ++
 lib/netdev-dpdk.c                  | 4 ++++
 3 files changed, 12 insertions(+)

diff --git a/Documentation/topics/dpdk/ring.rst b/Documentation/topics/dpdk/ring.rst
index 81c2efb37..d8d871601 100644
--- a/Documentation/topics/dpdk/ring.rst
+++ b/Documentation/topics/dpdk/ring.rst
@@ -25,6 +25,12 @@
 DPDK Ring Ports
 ===============
 
+.. warning::
+
+   DPDK ring ports are considered *deprecated*.  Please migrate to
+   virtio-based interfaces, e.g. :doc:`vhost-user ports <vhost-user>` ports,
+   ``net_virtio_user`` :doc:`DPDK vdev <vdev>`.
+
 .. warning::
 
    DPDK ring interfaces cannot be used for guest communication and are retained
diff --git a/NEWS b/NEWS
index 100d7b6a8..f9160a9da 100644
--- a/NEWS
+++ b/NEWS
@@ -22,6 +22,8 @@ Post-v2.12.0
      * DPDK pdump packet capture support disabled by default. New configure
        option '--enable-dpdk-pdump' to enable it.
      * DPDK pdump support is deprecated and will be removed in next releases.
+     * DPDK ring ports (dpdkr) are deprecated and will be removed in next
+       releases.
 
 v2.12.0 - 03 Sep 2019
 ---------------------
diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
index 02120a379..4c9f122b0 100644
--- a/lib/netdev-dpdk.c
+++ b/lib/netdev-dpdk.c
@@ -4002,6 +4002,10 @@ netdev_dpdk_ring_construct(struct netdev *netdev)
     dpdk_port_t port_no = 0;
     int err = 0;
 
+    VLOG_WARN_ONCE("dpdkr a.k.a. ring ports are considered deprecated.  "
+                   "Please migrate to virtio-based interfaces, e.g. "
+                   "dpdkvhostuserclient ports, net_virtio_user DPDK vdev.");
+
     ovs_mutex_lock(&dpdk_mutex);
 
     err = dpdk_ring_open(netdev->name, &port_no);
-- 
2.17.1



More information about the dev mailing list