mirror of
https://github.com/openvswitch/ovs
synced 2025-08-22 01:51:26 +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:
parent
65b22552a0
commit
8893e24d9d
@ -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"
|
||||
|
||||
@ -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}
|
||||
}
|
||||
|
||||
|
@ -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"
|
||||
@ -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()
|
||||
|
4
.github/workflows/build-and-test.yml
vendored
4
.github/workflows/build-and-test.yml
vendored
@ -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 }}
|
||||
|
@ -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:
|
||||
|
||||
|
@ -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`_
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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
|
||||
@ -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
|
||||
~~~~~~~~~~~
|
||||
@ -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
|
||||
|
@ -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:
|
||||
|
||||
@ -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:
|
||||
@ -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::
|
||||
|
||||
@ -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
|
||||
@ -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::
|
||||
|
||||
|
@ -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
|
||||
|
@ -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>`__
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
~~~~~~~~~~~~
|
||||
|
9
NEWS
9
NEWS
@ -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
|
||||
|
2
debian/control.in
vendored
2
debian/control.in
vendored
@ -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,
|
||||
|
@ -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 \
|
||||
|
23
include/sparse/ia32intrin.h
Normal file
23
include/sparse/ia32intrin.h
Normal 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>
|
@ -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}
|
||||
|
@ -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"])
|
||||
])
|
||||
|
Loading…
x
Reference in New Issue
Block a user