diff mbox series

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

Message ID 20191126113148.30474-1-i.maximets@ovn.org
State Accepted
Delegated to: Ilya Maximets
Headers show
Series [ovs-dev] netdev-dpdk: Deprecate ring ports. | expand

Commit Message

Ilya Maximets Nov. 26, 2019, 11:31 a.m. UTC
'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@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(+)

Comments

Flavio Leitner Nov. 26, 2019, 12:10 p.m. UTC | #1
On Tue, Nov 26, 2019 at 12:31:48PM +0100, Ilya Maximets wrote:
> '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@ovn.org>
> ---

Acked-by: Flavio Leitner <fbl@sysclose.org>
Stokes, Ian Nov. 26, 2019, 12:12 p.m. UTC | #2
On 11/26/2019 11:31 AM, Ilya Maximets wrote:
> '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@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);
> 

Acked-by: Ian Stokes <ian.stokes@intel.com>
Aaron Conole Nov. 26, 2019, 1:13 p.m. UTC | #3
Ilya Maximets <i.maximets@ovn.org> writes:

> '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@ovn.org>
> ---

Acked-by: Aaron Conole <aconole@redhat.com>
David Marchand Nov. 26, 2019, 1:21 p.m. UTC | #4
On Tue, Nov 26, 2019 at 12:32 PM Ilya Maximets <i.maximets@ovn.org> wrote:
>
> '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

Nit.

I did not realise earlier with pdump deprecation, but pointing at a
release guide might be better than the master guide.
The doc of an existing release won't change, while in master, this
page could get renamed etc..

Here, https://doc.dpdk.org/guides-18.11/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

release

> 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@ovn.org>

Acked-by: David Marchand <david.marchand@redhat.com>

Thanks.


--
David Marchand
Kevin Traynor Nov. 26, 2019, 1:50 p.m. UTC | #5
On 26/11/2019 11:31, Ilya Maximets wrote:
> '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.
> 

You could also reference that instructions for ivshmem were removed from
the OVS docs almost 3 years ago.
90ca71dd317f ("doc: Remove ivshmem instructions.")

> 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@ovn.org>
> ---

Acked-by: Kevin Traynor <ktraynor@redhat.com>
Ilya Maximets Nov. 28, 2019, 5:32 p.m. UTC | #6
On 26.11.2019 12:31, Ilya Maximets wrote:
> '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@ovn.org>
> ---

Thanks to all. I updated the commit-message with suggestions from
David and Kevin and applied to master.

Best regards, Ilya Maximets.
diff mbox series

Patch

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