Skip to content

Commit

Permalink
dpdk: Update to use v23.11.
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
david-marchand authored and igsilya committed Jan 15, 2024
1 parent 65b2255 commit 8893e24
Show file tree
Hide file tree
Showing 16 changed files with 80 additions and 37 deletions.
28 changes: 18 additions & 10 deletions .ci/dpdk-build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,27 @@ set -x

function build_dpdk()
{
local VERSION_FILE="dpdk-dir/cached-version"
local DPDK_VER=$1
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
git clone --single-branch $DPDK_GIT dpdk-dir -b "${DPDK_VER##refs/*/}"
pushd dpdk-dir
git clone --single-branch $DPDK_GIT dpdk-src -b "${DPDK_VER##refs/*/}"
pushd dpdk-src
git log -1 --oneline
else
wget https://fast.dpdk.org/rel/dpdk-$1.tar.xz
tar xvf dpdk-$1.tar.xz > /dev/null
DIR_NAME=$(tar -tf dpdk-$1.tar.xz | head -1 | cut -f1 -d"/")
mv ${DIR_NAME} dpdk-dir
pushd dpdk-dir
mv ${DIR_NAME} dpdk-src
pushd dpdk-src
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.
DPDK_OPTS="$DPDK_OPTS -Dmachine=default"

Expand All @@ -40,16 +42,22 @@ function build_dpdk()
DPDK_OPTS="$DPDK_OPTS -Denable_apps=test-pmd"
enable_drivers="net/null,net/af_xdp,net/tap,net/virtio,net/pcap"
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.
DPDK_OPTS="$DPDK_OPTS --prefix=$(pwd)/build"
DPDK_OPTS="$DPDK_OPTS --prefix=$DPDK_INSTALL_DIR"

meson $DPDK_OPTS build
ninja -C build
ninja -C build install

echo "Installed DPDK in $(pwd)"
popd

# Remove examples sources.
rm -rf $DPDK_INSTALL_DIR/share/dpdk/examples

echo "Installed DPDK in $DPDK_INSTALL_DIR"
echo "${DPDK_VER}" > ${VERSION_FILE}
}

Expand Down
9 changes: 5 additions & 4 deletions .ci/linux-build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@ JOBS=${JOBS:-"-j4"}

function install_dpdk()
{
local VERSION_FILE="dpdk-dir/cached-version"
local DPDK_LIB=$(pwd)/dpdk-dir/build/lib/x86_64-linux-gnu
local DPDK_INSTALL_DIR="$(pwd)/dpdk-dir"
local VERSION_FILE="${DPDK_INSTALL_DIR}/cached-version"
local DPDK_LIB=${DPDK_INSTALL_DIR}/lib/x86_64-linux-gnu

if [ "$DPDK_SHARED" ]; then
EXTRA_OPTS="$EXTRA_OPTS --with-dpdk=shared"
Expand All @@ -27,13 +28,13 @@ function install_dpdk()
export PATH=$(pwd)/dpdk-dir/build/bin:$PATH

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
fi

# Update the library paths.
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()
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/build-and-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ jobs:
env:
dependencies: gcc libbpf-dev libnuma-dev libpcap-dev ninja-build pkgconf
CC: gcc
DPDK_GIT: https://dpdk.org/git/dpdk-stable
DPDK_VER: 22.11.1
DPDK_GIT: https://dpdk.org/git/dpdk
DPDK_VER: 23.11
name: dpdk gcc
outputs:
dpdk_key: ${{ steps.gen_dpdk_key.outputs.key }}
Expand Down
2 changes: 1 addition & 1 deletion Documentation/faq/releases.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
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:

Expand Down
16 changes: 8 additions & 8 deletions Documentation/intro/install/dpdk.rst
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ Build requirements
In addition to the requirements described in :doc:`general`, building Open
vSwitch with DPDK will require the following:

- DPDK 22.11.1
- DPDK 23.11

- A `DPDK supported NIC`_

Expand All @@ -59,8 +59,8 @@ vSwitch with DPDK will require the following:

Detailed system requirements can be found at `DPDK requirements`_.

.. _DPDK supported NIC: https://doc.dpdk.org/guides-22.11/nics/index.html
.. _DPDK requirements: https://doc.dpdk.org/guides-22.11/linux_gsg/sys_reqs.html
.. _DPDK supported NIC: https://doc.dpdk.org/guides-23.11/nics/index.html
.. _DPDK requirements: https://doc.dpdk.org/guides-23.11/linux_gsg/sys_reqs.html

.. _dpdk-install:

Expand All @@ -73,9 +73,9 @@ Install DPDK
#. Download the `DPDK sources`_, extract the file and set ``DPDK_DIR``::

$ cd /usr/src/
$ wget https://fast.dpdk.org/rel/dpdk-22.11.1.tar.xz
$ tar xf dpdk-22.11.1.tar.xz
$ export DPDK_DIR=/usr/src/dpdk-stable-22.11.1
$ wget https://fast.dpdk.org/rel/dpdk-23.11.tar.xz
$ tar xf dpdk-23.11.tar.xz
$ export DPDK_DIR=/usr/src/dpdk-23.11
$ cd $DPDK_DIR

#. Configure and install DPDK using Meson
Expand Down Expand Up @@ -121,7 +121,7 @@ Install DPDK

.. _DPDK sources: http://dpdk.org/rel
.. _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
~~~~~~~~~~~
Expand Down Expand Up @@ -722,7 +722,7 @@ Limitations
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
given MTU value is calculated e.g. i40e driver includes 2 x vlan headers in
Expand Down
12 changes: 6 additions & 6 deletions Documentation/topics/dpdk/phy.rst
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ tool::

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:

Expand Down Expand Up @@ -148,14 +148,14 @@ situation.
Some physical NICs can be programmed to put these protocols in a dedicated
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::

This feature is not compatible with all NICs. Refer to the DPDK
`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`` option takes one of the following values:
Expand Down Expand Up @@ -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
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::

Expand Down Expand Up @@ -354,7 +354,7 @@ Representors are multi devices created on top of one PF.

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
and the eth device. With port representors the relationship becomes one PF to
Expand Down Expand Up @@ -488,7 +488,7 @@ in the ``options`` column of the ``Interface`` table.
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.

.. _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::

Expand Down
2 changes: 1 addition & 1 deletion Documentation/topics/dpdk/vdev.rst
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,4 @@ run::
More information on the different types of virtual DPDK PMDs can be found in
the `DPDK documentation`__.

__ https://doc.dpdk.org/guides-22.11/nics/overview.html
__ https://doc.dpdk.org/guides-23.11/nics/overview.html
2 changes: 1 addition & 1 deletion Documentation/topics/dpdk/vhost-user.rst
Original file line number Diff line number Diff line change
Expand Up @@ -539,4 +539,4 @@ shown with::

Further information can be found in the
`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>`__
2 changes: 1 addition & 1 deletion Documentation/topics/testing.rst
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,7 @@ with a mlx5 device::
All tests are skipped if no hugepages are configured. User must look into the DPDK
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
testsuite.
Expand Down
2 changes: 1 addition & 1 deletion Documentation/topics/userspace-tso.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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,
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
~~~~~~~~~~~~
Expand Down
9 changes: 9 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,15 @@ Post-v3.2.0
* The userspace conntrack module no longer requires the user to specify
connection helpers in all flow rules. Instead, the helper specified
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
Expand Down
2 changes: 1 addition & 1 deletion debian/control.in
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Build-Depends:
iproute2,
libcap-ng-dev,
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],
libpcap-dev [amd64 i386 ppc64el arm64],
libssl-dev,
Expand Down
1 change: 1 addition & 0 deletions include/sparse/automake.mk
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ noinst_HEADERS += \
include/sparse/arpa/inet.h \
include/sparse/bits/floatn.h \
include/sparse/assert.h \
include/sparse/ia32intrin.h \
include/sparse/math.h \
include/sparse/numa.h \
include/sparse/netinet/in.h \
Expand Down
23 changes: 23 additions & 0 deletions include/sparse/ia32intrin.h
Original file line number Diff line number Diff line change
@@ -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>
2 changes: 1 addition & 1 deletion rhel/openvswitch-fedora.spec.in
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ BuildRequires: libcap-ng libcap-ng-devel
%endif
%if %{with dpdk}
BuildRequires: libpcap-devel numactl-devel
BuildRequires: dpdk-devel >= 22.11
BuildRequires: dpdk-devel >= 23.11
Provides: %{name}-dpdk = %{version}-%{release}
%endif
%if %{with afxdp}
Expand Down
1 change: 1 addition & 0 deletions tests/system-dpdk-macros.at
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ $1";/does not exist. The Open vSwitch kernel module is probably not loaded./d
/does not support MTU configuration,/d
/EAL: No \(available\|free\) .*hugepages reported/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
/TELEMETRY: No legacy callbacks, legacy socket not created/d"])
])
Expand Down

0 comments on commit 8893e24

Please sign in to comment.