2
0
mirror of https://github.com/openvswitch/ovs synced 2025-09-02 15:25:22 +00:00

dpdk: Update to use v23.11.

This commit adds support for DPDK v23.11.
It updates the CI script and documentation and includes the following
changes coming from the dpdk-latest branch:

- sparse: Add some compiler intrinsics for DPDK build.
  https://patchwork.ozlabs.org/project/openvswitch/list/?series=371129&state=*

- ci: Cache DPDK installed libraries only.
- ci: Reduce optional libraries in DPDK.
  https://patchwork.ozlabs.org/project/openvswitch/list/?series=383367&state=*

- system-dpdk: Ignore net/ice error log about QinQ offloading.
  https://patchwork.ozlabs.org/project/openvswitch/list/?series=385259&state=*

There is a known issue with i40e VF devices where OVS main thread may
block when adding such devices as dpif-netdev dpdk ports.

Acked-by: Kevin Traynor <ktraynor@redhat.com>
Signed-off-by: David Marchand <david.marchand@redhat.com>
Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
This commit is contained in:
David Marchand
2024-01-15 15:28:14 +01:00
committed by Ilya Maximets
parent 65b22552a0
commit 8893e24d9d
16 changed files with 80 additions and 37 deletions

View File

@@ -5,25 +5,27 @@ set -x
function build_dpdk() function build_dpdk()
{ {
local VERSION_FILE="dpdk-dir/cached-version"
local DPDK_VER=$1 local DPDK_VER=$1
local DPDK_OPTS="" local DPDK_OPTS=""
local DPDK_INSTALL_DIR="$(pwd)/dpdk-dir"
local VERSION_FILE="$DPDK_INSTALL_DIR/cached-version"
rm -rf dpdk-dir rm -rf dpdk-src
rm -rf $DPDK_INSTALL_DIR
if [ "${DPDK_VER##refs/*/}" != "${DPDK_VER}" ]; then if [ "${DPDK_VER##refs/*/}" != "${DPDK_VER}" ]; then
git clone --single-branch $DPDK_GIT dpdk-dir -b "${DPDK_VER##refs/*/}" git clone --single-branch $DPDK_GIT dpdk-src -b "${DPDK_VER##refs/*/}"
pushd dpdk-dir pushd dpdk-src
git log -1 --oneline git log -1 --oneline
else else
wget https://fast.dpdk.org/rel/dpdk-$1.tar.xz wget https://fast.dpdk.org/rel/dpdk-$1.tar.xz
tar xvf dpdk-$1.tar.xz > /dev/null tar xvf dpdk-$1.tar.xz > /dev/null
DIR_NAME=$(tar -tf dpdk-$1.tar.xz | head -1 | cut -f1 -d"/") DIR_NAME=$(tar -tf dpdk-$1.tar.xz | head -1 | cut -f1 -d"/")
mv ${DIR_NAME} dpdk-dir mv ${DIR_NAME} dpdk-src
pushd dpdk-dir pushd dpdk-src
fi fi
# Switching to 'default' machine to make dpdk-dir cache usable on # Switching to 'default' machine to make the dpdk cache usable on
# different CPUs. We can't be sure that all CI machines are exactly same. # different CPUs. We can't be sure that all CI machines are exactly same.
DPDK_OPTS="$DPDK_OPTS -Dmachine=default" DPDK_OPTS="$DPDK_OPTS -Dmachine=default"
@@ -40,16 +42,22 @@ function build_dpdk()
DPDK_OPTS="$DPDK_OPTS -Denable_apps=test-pmd" DPDK_OPTS="$DPDK_OPTS -Denable_apps=test-pmd"
enable_drivers="net/null,net/af_xdp,net/tap,net/virtio,net/pcap" enable_drivers="net/null,net/af_xdp,net/tap,net/virtio,net/pcap"
DPDK_OPTS="$DPDK_OPTS -Denable_drivers=$enable_drivers" DPDK_OPTS="$DPDK_OPTS -Denable_drivers=$enable_drivers"
# OVS depends on the vhost library (and its dependencies).
# net/tap depends on the gso library.
DPDK_OPTS="$DPDK_OPTS -Denable_libs=cryptodev,dmadev,gso,vhost"
# Install DPDK using prefix. # Install DPDK using prefix.
DPDK_OPTS="$DPDK_OPTS --prefix=$(pwd)/build" DPDK_OPTS="$DPDK_OPTS --prefix=$DPDK_INSTALL_DIR"
meson $DPDK_OPTS build meson $DPDK_OPTS build
ninja -C build ninja -C build
ninja -C build install ninja -C build install
echo "Installed DPDK in $(pwd)"
popd popd
# Remove examples sources.
rm -rf $DPDK_INSTALL_DIR/share/dpdk/examples
echo "Installed DPDK in $DPDK_INSTALL_DIR"
echo "${DPDK_VER}" > ${VERSION_FILE} echo "${DPDK_VER}" > ${VERSION_FILE}
} }

View File

@@ -10,8 +10,9 @@ JOBS=${JOBS:-"-j4"}
function install_dpdk() function install_dpdk()
{ {
local VERSION_FILE="dpdk-dir/cached-version" local DPDK_INSTALL_DIR="$(pwd)/dpdk-dir"
local DPDK_LIB=$(pwd)/dpdk-dir/build/lib/x86_64-linux-gnu local VERSION_FILE="${DPDK_INSTALL_DIR}/cached-version"
local DPDK_LIB=${DPDK_INSTALL_DIR}/lib/x86_64-linux-gnu
if [ "$DPDK_SHARED" ]; then if [ "$DPDK_SHARED" ]; then
EXTRA_OPTS="$EXTRA_OPTS --with-dpdk=shared" EXTRA_OPTS="$EXTRA_OPTS --with-dpdk=shared"
@@ -27,13 +28,13 @@ function install_dpdk()
export PATH=$(pwd)/dpdk-dir/build/bin:$PATH export PATH=$(pwd)/dpdk-dir/build/bin:$PATH
if [ ! -f "${VERSION_FILE}" ]; then if [ ! -f "${VERSION_FILE}" ]; then
echo "Could not find DPDK in $(pwd)/dpdk-dir" echo "Could not find DPDK in $DPDK_INSTALL_DIR"
return 1 return 1
fi fi
# Update the library paths. # Update the library paths.
sudo ldconfig sudo ldconfig
echo "Found cached DPDK $(cat ${VERSION_FILE}) build in $(pwd)/dpdk-dir" echo "Found cached DPDK $(cat ${VERSION_FILE}) build in $DPDK_INSTALL_DIR"
} }
function configure_ovs() function configure_ovs()

View File

@@ -7,8 +7,8 @@ jobs:
env: env:
dependencies: gcc libbpf-dev libnuma-dev libpcap-dev ninja-build pkgconf dependencies: gcc libbpf-dev libnuma-dev libpcap-dev ninja-build pkgconf
CC: gcc CC: gcc
DPDK_GIT: https://dpdk.org/git/dpdk-stable DPDK_GIT: https://dpdk.org/git/dpdk
DPDK_VER: 22.11.1 DPDK_VER: 23.11
name: dpdk gcc name: dpdk gcc
outputs: outputs:
dpdk_key: ${{ steps.gen_dpdk_key.outputs.key }} dpdk_key: ${{ steps.gen_dpdk_key.outputs.key }}

View File

@@ -236,7 +236,7 @@ Q: Are all the DPDK releases that OVS versions work with maintained?
The latest information about DPDK stable and LTS releases can be found The latest information about DPDK stable and LTS releases can be found
at `DPDK stable`_. at `DPDK stable`_.
.. _DPDK stable: http://doc.dpdk.org/guides-22.11/contributing/stable.html .. _DPDK stable: http://doc.dpdk.org/guides-23.11/contributing/stable.html
Q: I get an error like this when I configure Open vSwitch: Q: I get an error like this when I configure Open vSwitch:

View File

@@ -42,7 +42,7 @@ Build requirements
In addition to the requirements described in :doc:`general`, building Open In addition to the requirements described in :doc:`general`, building Open
vSwitch with DPDK will require the following: vSwitch with DPDK will require the following:
- DPDK 22.11.1 - DPDK 23.11
- A `DPDK supported NIC`_ - A `DPDK supported NIC`_
@@ -59,8 +59,8 @@ vSwitch with DPDK will require the following:
Detailed system requirements can be found at `DPDK requirements`_. Detailed system requirements can be found at `DPDK requirements`_.
.. _DPDK supported NIC: https://doc.dpdk.org/guides-22.11/nics/index.html .. _DPDK supported NIC: https://doc.dpdk.org/guides-23.11/nics/index.html
.. _DPDK requirements: https://doc.dpdk.org/guides-22.11/linux_gsg/sys_reqs.html .. _DPDK requirements: https://doc.dpdk.org/guides-23.11/linux_gsg/sys_reqs.html
.. _dpdk-install: .. _dpdk-install:
@@ -73,9 +73,9 @@ Install DPDK
#. Download the `DPDK sources`_, extract the file and set ``DPDK_DIR``:: #. Download the `DPDK sources`_, extract the file and set ``DPDK_DIR``::
$ cd /usr/src/ $ cd /usr/src/
$ wget https://fast.dpdk.org/rel/dpdk-22.11.1.tar.xz $ wget https://fast.dpdk.org/rel/dpdk-23.11.tar.xz
$ tar xf dpdk-22.11.1.tar.xz $ tar xf dpdk-23.11.tar.xz
$ export DPDK_DIR=/usr/src/dpdk-stable-22.11.1 $ export DPDK_DIR=/usr/src/dpdk-23.11
$ cd $DPDK_DIR $ cd $DPDK_DIR
#. Configure and install DPDK using Meson #. Configure and install DPDK using Meson
@@ -121,7 +121,7 @@ Install DPDK
.. _DPDK sources: http://dpdk.org/rel .. _DPDK sources: http://dpdk.org/rel
.. _DPDK documentation: .. _DPDK documentation:
https://doc.dpdk.org/guides-22.11/linux_gsg/build_dpdk.html https://doc.dpdk.org/guides-23.11/linux_gsg/build_dpdk.html
Install OVS Install OVS
~~~~~~~~~~~ ~~~~~~~~~~~
@@ -722,7 +722,7 @@ Limitations
release notes`_. release notes`_.
.. _DPDK release notes: .. _DPDK release notes:
https://doc.dpdk.org/guides-22.11/rel_notes/release_22_11.html https://doc.dpdk.org/guides-23.11/rel_notes/release_23_11.html
- Upper bound MTU: DPDK device drivers differ in how the L2 frame for a - Upper bound MTU: DPDK device drivers differ in how the L2 frame for a
given MTU value is calculated e.g. i40e driver includes 2 x vlan headers in given MTU value is calculated e.g. i40e driver includes 2 x vlan headers in

View File

@@ -117,7 +117,7 @@ tool::
For more information, refer to the `DPDK drivers documentation`_. For more information, refer to the `DPDK drivers documentation`_.
.. _DPDK drivers documentation: https://doc.dpdk.org/guides-22.11/linux_gsg/linux_drivers.html .. _DPDK drivers documentation: https://doc.dpdk.org/guides-23.11/linux_gsg/linux_drivers.html
.. _dpdk-phy-multiqueue: .. _dpdk-phy-multiqueue:
@@ -148,14 +148,14 @@ situation.
Some physical NICs can be programmed to put these protocols in a dedicated Some physical NICs can be programmed to put these protocols in a dedicated
hardware Rx queue using the rte_flow__ API. hardware Rx queue using the rte_flow__ API.
__ https://doc.dpdk.org/guides-22.11/prog_guide/rte_flow.html __ https://doc.dpdk.org/guides-23.11/prog_guide/rte_flow.html
.. warning:: .. warning::
This feature is not compatible with all NICs. Refer to the DPDK This feature is not compatible with all NICs. Refer to the DPDK
`compatibilty matrix`__ and vendor documentation for more details. `compatibilty matrix`__ and vendor documentation for more details.
__ https://doc.dpdk.org/guides-22.11/nics/overview.html __ https://doc.dpdk.org/guides-23.11/nics/overview.html
Rx steering must be enabled for specific protocols per port. The Rx steering must be enabled for specific protocols per port. The
``rx-steering`` option takes one of the following values: ``rx-steering`` option takes one of the following values:
@@ -322,7 +322,7 @@ To hotplug a port with igb_uio in this case, DPDK must be configured to use
physical addressing for IOVA mode. For more information regarding IOVA modes physical addressing for IOVA mode. For more information regarding IOVA modes
in DPDK please refer to the `DPDK IOVA Mode Detection`__. in DPDK please refer to the `DPDK IOVA Mode Detection`__.
__ https://doc.dpdk.org/guides-22.11/prog_guide/env_abstraction_layer.html#iova-mode-detection __ https://doc.dpdk.org/guides-23.11/prog_guide/env_abstraction_layer.html#iova-mode-detection
To configure OVS DPDK to use physical addressing for IOVA:: To configure OVS DPDK to use physical addressing for IOVA::
@@ -354,7 +354,7 @@ Representors are multi devices created on top of one PF.
For more information, refer to the `DPDK documentation`__. For more information, refer to the `DPDK documentation`__.
__ https://doc.dpdk.org/guides-22.11/prog_guide/switch_representation.html#port-representors __ https://doc.dpdk.org/guides-23.11/prog_guide/switch_representation.html#port-representors
Prior to port representors there was a one-to-one relationship between the PF Prior to port representors there was a one-to-one relationship between the PF
and the eth device. With port representors the relationship becomes one PF to and the eth device. With port representors the relationship becomes one PF to
@@ -488,7 +488,7 @@ in the ``options`` column of the ``Interface`` table.
kernel netdevice, and be inherited from it when Open vSwitch is restarted, kernel netdevice, and be inherited from it when Open vSwitch is restarted,
even if the options described in this section are unset from Open vSwitch. even if the options described in this section are unset from Open vSwitch.
.. _bifurcated drivers: https://doc.dpdk.org/guides-22.11/linux_gsg/linux_drivers.html#bifurcated-driver .. _bifurcated drivers: https://doc.dpdk.org/guides-23.11/linux_gsg/linux_drivers.html#bifurcated-driver
- Configure the VF MAC address:: - Configure the VF MAC address::

View File

@@ -63,4 +63,4 @@ run::
More information on the different types of virtual DPDK PMDs can be found in More information on the different types of virtual DPDK PMDs can be found in
the `DPDK documentation`__. the `DPDK documentation`__.
__ https://doc.dpdk.org/guides-22.11/nics/overview.html __ https://doc.dpdk.org/guides-23.11/nics/overview.html

View File

@@ -539,4 +539,4 @@ shown with::
Further information can be found in the Further information can be found in the
`DPDK documentation `DPDK documentation
<https://doc.dpdk.org/guides-22.11/prog_guide/vhost_lib.html>`__ <https://doc.dpdk.org/guides-23.11/prog_guide/vhost_lib.html>`__

View File

@@ -358,7 +358,7 @@ with a mlx5 device::
All tests are skipped if no hugepages are configured. User must look into the DPDK All tests are skipped if no hugepages are configured. User must look into the DPDK
manual to figure out how to `Configure hugepages`_. manual to figure out how to `Configure hugepages`_.
.. _Configure hugepages: https://doc.dpdk.org/guides-22.11/linux_gsg/sys_reqs.html .. _Configure hugepages: https://doc.dpdk.org/guides-23.11/linux_gsg/sys_reqs.html
All the features documented under `Unit Tests`_ are available for the DPDK All the features documented under `Unit Tests`_ are available for the DPDK
testsuite. testsuite.

View File

@@ -46,7 +46,7 @@ datasheet for compatibility. Secondly, the NIC must have an associated DPDK
Poll Mode Driver (PMD) which supports `TSO`. For a list of features per PMD, Poll Mode Driver (PMD) which supports `TSO`. For a list of features per PMD,
refer to the `DPDK documentation`__. refer to the `DPDK documentation`__.
__ https://doc.dpdk.org/guides-22.11/nics/overview.html __ https://doc.dpdk.org/guides-23.11/nics/overview.html
Enabling TSO Enabling TSO
~~~~~~~~~~~~ ~~~~~~~~~~~~

9
NEWS
View File

@@ -43,6 +43,15 @@ Post-v3.2.0
* The userspace conntrack module no longer requires the user to specify * The userspace conntrack module no longer requires the user to specify
connection helpers in all flow rules. Instead, the helper specified connection helpers in all flow rules. Instead, the helper specified
during connection commit will be used by default. during connection commit will be used by default.
- DPDK:
* Add support for DPDK 23.11.
Known issues:
- DPDK: v23.11 has a change in behavior in handling i40e VF devices. This
may block and prevent OVS from adding such devices as ports in a netdev
datapath bridge.
For the details, see https://bugs.dpdk.org/show_bug.cgi?id=1337 which
describes the issue first detected in the 21.11 LTS branch.
v3.2.0 - 17 Aug 2023 v3.2.0 - 17 Aug 2023

2
debian/control.in vendored
View File

@@ -21,7 +21,7 @@ Build-Depends:
iproute2, iproute2,
libcap-ng-dev, libcap-ng-dev,
libdbus-1-dev [amd64 i386 ppc64el arm64], libdbus-1-dev [amd64 i386 ppc64el arm64],
# DPDK_NETDEV libdpdk-dev (>= 22.11) [amd64 i386 ppc64el arm64], # DPDK_NETDEV libdpdk-dev (>= 23.11) [amd64 i386 ppc64el arm64],
libnuma-dev [amd64 i386 ppc64el arm64], libnuma-dev [amd64 i386 ppc64el arm64],
libpcap-dev [amd64 i386 ppc64el arm64], libpcap-dev [amd64 i386 ppc64el arm64],
libssl-dev, libssl-dev,

View File

@@ -4,6 +4,7 @@ noinst_HEADERS += \
include/sparse/arpa/inet.h \ include/sparse/arpa/inet.h \
include/sparse/bits/floatn.h \ include/sparse/bits/floatn.h \
include/sparse/assert.h \ include/sparse/assert.h \
include/sparse/ia32intrin.h \
include/sparse/math.h \ include/sparse/math.h \
include/sparse/numa.h \ include/sparse/numa.h \
include/sparse/netinet/in.h \ include/sparse/netinet/in.h \

View File

@@ -0,0 +1,23 @@
/* Copyright (c) 2023 Red Hat, Inc.
*
* 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.
*/
#ifndef __CHECKER__
#error "Use this header only with sparse. It is not a correct implementation."
#endif
#define __builtin_ia32_rdtsc() (unsigned long long) 0
/* Get actual <ia32intrin.h> definitions for us to annotate and build on. */
#include_next <ia32intrin.h>

View File

@@ -71,7 +71,7 @@ BuildRequires: libcap-ng libcap-ng-devel
%endif %endif
%if %{with dpdk} %if %{with dpdk}
BuildRequires: libpcap-devel numactl-devel BuildRequires: libpcap-devel numactl-devel
BuildRequires: dpdk-devel >= 22.11 BuildRequires: dpdk-devel >= 23.11
Provides: %{name}-dpdk = %{version}-%{release} Provides: %{name}-dpdk = %{version}-%{release}
%endif %endif
%if %{with afxdp} %if %{with afxdp}

View File

@@ -80,6 +80,7 @@ $1";/does not exist. The Open vSwitch kernel module is probably not loaded./d
/does not support MTU configuration,/d /does not support MTU configuration,/d
/EAL: No \(available\|free\) .*hugepages reported/d /EAL: No \(available\|free\) .*hugepages reported/d
/Failed to enable flow control/d /Failed to enable flow control/d
/ice_vsi_config_outer_vlan_stripping(): Single VLAN mode (SVM) does not support qinq/d
/Rx checksum offload is not supported on/d /Rx checksum offload is not supported on/d
/TELEMETRY: No legacy callbacks, legacy socket not created/d"]) /TELEMETRY: No legacy callbacks, legacy socket not created/d"])
]) ])