[ovs-dev] [PATCH v2 1/1] dpdk: Update to use DPDK v20.11.

Govindharajan, Hariprasad hariprasad.govindharajan at intel.com
Tue Dec 8 13:52:16 UTC 2020



> -----Original Message-----
> From: Stokes, Ian <ian.stokes at intel.com>
> Sent: Tuesday, December 8, 2020 11:07 AM
> To: Van Haaren, Harry <harry.van.haaren at intel.com>;
> dev at openvswitch.org; Govindharajan, Hariprasad
> <hariprasad.govindharajan at intel.com>
> Cc: elibr at nvidia.com; i.maximets at ovn.org; david.marchand at redhat.com;
> bluca at debian.org
> Subject: RE: [ovs-dev] [PATCH v2 1/1] dpdk: Update to use DPDK v20.11.
> 
> > > -----Original Message-----
> > > From: dev <ovs-dev-bounces at openvswitch.org> On Behalf Of Ian
> Stokes
> > > Sent: Wednesday, December 2, 2020 1:02 PM
> > > To: dev at openvswitch.org
> > > Cc: elibr at nvidia.com; i.maximets at ovn.org;
> david.marchand at redhat.com;
> > > bluca at debian.org
> > > Subject: [ovs-dev] [PATCH v2 1/1] dpdk: Update to use DPDK v20.11.
> > >
> > > This commit adds support for DPDK v20.11, it includes the following
> > > changes.
> > >
> > > 1. travis: Remove explicit DPDK kmods configuration.
> > > 2. sparse: Fix build with 20.05 DPDK tracepoints.
> > > 3. netdev-dpdk: Remove experimental API flag.
> > >
> > >
> > http://patchwork.ozlabs.org/project/openvswitch/list/?series=173216&st
> > ate=*
> > >
> > > 4. sparse: Update to DPDK 20.05 trace point header.
> > >
> > >
> > http://patchwork.ozlabs.org/project/openvswitch/list/?series=179604&st
> > ate=*
> > >
> > > 5. sparse: Fix build with DPDK 20.08.
> > >
> > >
> > http://patchwork.ozlabs.org/project/openvswitch/list/?series=200181&st
> > ate=*
> > >
> > > 6. build: Add support for DPDK meson build.
> > >
> > >
> > http://patchwork.ozlabs.org/project/openvswitch/list/?series=199138&st
> > ate=*
> > >
> > > 7. netdev-dpdk: Remove usage of RTE_ETH_DEV_CLOSE_REMOVE flag.
> > >
> > >
> > http://patchwork.ozlabs.org/project/openvswitch/list/?series=207850&st
> > ate=*
> > >
> > > 8. netdev-dpdk: Fix build with 20.11-rc1.
> > >
> > >
> > http://patchwork.ozlabs.org/project/openvswitch/list/?series=209006&st
> > ate=*
> > >
> > > 9. sparse: Fix __ATOMIC_* redefinition errors
> > >
> > >
> > http://patchwork.ozlabs.org/project/openvswitch/list/?series=209452&st
> > ate=*
> > >
> > > 10. build: Remove DPDK make build references.
> > >
> > >
> > http://patchwork.ozlabs.org/project/openvswitch/list/?series=216682&st
> > ate=*
> > >
> > > For credit all authors of the original commits to 'dpdk-latest' with
> > > the above changes have been added as co-authors for this commit.
> > >
> > > Signed-off-by: David Marchand <david.marchand at redhat.com>
> > > Co-authored-by: David Marchand <david.marchand at redhat.com>
> > > Signed-off-by: Sunil Pai G <sunil.pai.g at intel.com>
> > > Co-authored-by: Sunil Pai G <sunil.pai.g at intel.com>
> > > Signed-off-by: Eli Britstein <elibr at nvidia.com>
> > > Co-authored-by: Eli Britstein <elibr at nvidia.com>
> > > Signed-off-by: Ian Stokes <ian.stokes at intel.com>
> >
> > As part of the DPIF refactoring[1], we're rebasing to the latest DPDK
> > 20.11 enabling patch (aka, this v2 patch).
> > Using updated meson/ninja commands as described in the docs in this
> > patch, all compiled successfully.
> >
> > Thanks for the patch Ian, and wider OVS community can we merge this
> > patch ASAP?
> > There will be a dependencies on this DPDK 20.11 enabling patch in our
> > DPIF patch series.
> >
> > Tested-by: Harry van Haaren <harry.van.haaren at intel.com>
> 
> Thanks for the Tested-by tag Harry.
> 
> Separate to your testing Hari Prasad has been testing 20.11 also with OVS.
> 
> @Govindharajan, Hariprasad could you provide a summary of the testing
> you've completed with DPDK 20.11?
> 
> Regards
> Ian
> 
[Govindharajan, Hariprasad] 
The following functionalities were validated with OvS-DPDK 20.11 release.
DPDK 20.11
OvS dpdk-latest

ICE Device

Basic performance tests  (RFC2544 P2P, PVP_CONT, RFC2544 PVP_TPUT, RFC2544 PVVP_TPUT, PVPV) Jumbo frames RSS Partial Hardware offloading Port statistics Port hot plugging

i40e Device

Basic performance (RFC2544 P2P, PVP_CONT, RFC2544 PVP_TPUT, RFC2544 PVVP_TPUT, PVPV) Jumbo frames RSS Hardware offloading Port statistics Port hot plugging Flow control

ixgbe Device

Basic performance tests (RFC2544 P2P, PVP_CONT, RFC2544 PVP_TPUT, RFC2544 PVVP_TPUT, PVPV) Jumbo frames RSS Port statistics Port hot plugging Flow control 

vhostuserclient device

Jumbo frames
dpdkvhostuserclient re-connect
dpdkvhostuserclient NUMA node
Port statistics

Basic AVX512 features
AVX512 performance
AVX512 Unit tests

QoS metrics
> Tested-by: Govindharajan, Hariprasad <hariprasad.govindharajan at intel.com>
> >
> > [1]
> >
> https://patchwork.ozlabs.org/project/openvswitch/cover/20201203193747.
> > 807
> > 120-1-harry.van.haaren at intel.com/
> >
> >
> > > ---
> > > RFC v1 -> v2
> > > * Removed RFC tag.
> > > * Rebased to head of master.
> > > * Modified GHA build scripts to install required python packages.
> > > * Modified URLs to use versioned 20.11 links.
> > > * Removed unrequired reformat in travis.yml.
> > > * Modified GHA worflow buil-and-test.yml to remove others write
> > >   permission to $HOME in prepare step.
> > > ---
> > >  .ci/linux-build.sh                       | 48 +++++++++++++-------
> > >  .ci/linux-prepare.sh                     |  1 +
> > >  .github/workflows/build-and-test.yml     | 10 ++--
> > >  .travis.yml                              |  3 ++
> > >  Documentation/intro/install/afxdp.rst    |  2 +-
> > >  Documentation/intro/install/dpdk.rst     | 64 ++++++++++++++------------
> > >  Documentation/topics/dpdk/phy.rst        | 18 +++++---
> > >  Documentation/topics/dpdk/vhost-user.rst | 20 +-------
> > >  Documentation/topics/testing.rst         |  2 +-
> > >  NEWS                                     |  1 +
> > >  acinclude.m4                             | 78 +++++++++++++-------------------
> > >  include/sparse/automake.mk               |  2 +
> > >  include/sparse/rte_mbuf.h                | 29 ++++++++++++
> > >  include/sparse/rte_trace_point.h         | 28 ++++++++++++
> > >  lib/dpdk.c                               |  2 +-
> > >  lib/netdev-dpdk.c                        | 20 ++------
> > >  16 files changed, 190 insertions(+), 138 deletions(-)  create mode
> > > 100644 include/sparse/rte_mbuf.h  create mode 100644
> > > include/sparse/rte_trace_point.h
> > >
> > > diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh index
> > > 16102ac94..3e5136fd4 100755
> > > --- a/.ci/linux-build.sh
> > > +++ b/.ci/linux-build.sh
> > > @@ -87,17 +87,29 @@ function install_dpdk()  {
> > >      local DPDK_VER=$1
> > >      local VERSION_FILE="dpdk-dir/travis-dpdk-cache-version"
> > > +    local DPDK_OPTS=""
> > > +    local DPDK_LIB=""
> > >
> > >      if [ -z "$TRAVIS_ARCH" ] ||
> > >         [ "$TRAVIS_ARCH" == "amd64" ]; then
> > > -        TARGET="x86_64-native-linuxapp-gcc"
> > > +        DPDK_LIB=$(pwd)/dpdk-dir/build/lib/x86_64-linux-gnu
> > >      elif [ "$TRAVIS_ARCH" == "aarch64" ]; then
> > > -        TARGET="arm64-armv8a-linuxapp-gcc"
> > > +        DPDK_LIB=$(pwd)/dpdk-dir/build/lib/aarch64-linux-gnu
> > >      else
> > >          echo "Target is unknown"
> > >          exit 1
> > >      fi
> > >
> > > +    if [ "$DPDK_SHARED" ]; then
> > > +        EXTRA_OPTS="$EXTRA_OPTS --with-dpdk=shared"
> > > +        export LD_LIBRARY_PATH=$DPDK_LIB/:$LD_LIBRARY_PATH
> > > +    else
> > > +        EXTRA_OPTS="$EXTRA_OPTS --with-dpdk=static"
> > > +    fi
> > > +
> > > +    # Export the following path for pkg-config to find the .pc file.
> > > +    export
> PKG_CONFIG_PATH=$DPDK_LIB/pkgconfig/:$PKG_CONFIG_PATH
> > > +
> > >      if [ "${DPDK_VER##refs/*/}" != "${DPDK_VER}" ]; then
> > >          # Avoid using cache for git tree build.
> > >          rm -rf dpdk-dir
> > > @@ -110,7 +122,8 @@ function install_dpdk()
> > >          if [ -f "${VERSION_FILE}" ]; then
> > >              VER=$(cat ${VERSION_FILE})
> > >              if [ "${VER}" = "${DPDK_VER}" ]; then
> > > -                EXTRA_OPTS="${EXTRA_OPTS} --with-dpdk=$(pwd)/dpdk-
> dir/build"
> > > +                # Update the library paths.
> > > +                sudo ldconfig
> > >                  echo "Found cached DPDK ${VER} build in $(pwd)/dpdk-dir"
> > >                  return
> > >              fi
> > > @@ -124,23 +137,24 @@ function install_dpdk()
> > >          pushd dpdk-dir
> > >      fi
> > >
> > > -    make config CC=gcc T=$TARGET
> > > +    # Switching to 'default' machine to make dpdk-dir cache usable on
> > > +    # different CPUs. We can't be sure that all CI machines are exactly
> same.
> > > +    DPDK_OPTS="$DPDK_OPTS -Dmachine=default"
> > >
> > > -    if [ "$DPDK_SHARED" ]; then
> > > -        sed -i '/CONFIG_RTE_BUILD_SHARED_LIB=n/s/=n/=y/' build/.config
> > > -        export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/$TARGET/lib
> > > -    fi
> > > +    # Disable building DPDK unit tests. Not needed for OVS build or tests.
> > > +    DPDK_OPTS="$DPDK_OPTS -Dtests=false"
> > > +
> > > +    # Install DPDK using prefix.
> > > +    DPDK_OPTS="$DPDK_OPTS --prefix=$(pwd)/build"
> > > +
> > > +    CC=gcc meson $DPDK_OPTS build
> > > +    ninja -C build
> > > +    ninja -C build install
> > >
> > > -    # Disable building DPDK kernel modules. Not needed for OVS build or
> tests.
> > > -    sed -i '/CONFIG_RTE_EAL_IGB_UIO=y/s/=y/=n/' build/.config
> > > -    sed -i '/CONFIG_RTE_KNI_KMOD=y/s/=y/=n/' build/.config
> > > +    # Update the library paths.
> > > +    sudo ldconfig
> > >
> > > -    # Switching to 'default' machine to make dpdk-dir cache usable on
> different
> > > -    # CPUs.  We can't be sure that all CI machines are exactly same.
> > > -    sed -i '/CONFIG_RTE_MACHINE="native"/s/="native"/="default"/'
> > build/.config
> > >
> > > -    make -j4 CC=gcc EXTRA_CFLAGS='-fPIC'
> > > -    EXTRA_OPTS="$EXTRA_OPTS --with-dpdk=$(pwd)/build"
> > >      echo "Installed DPDK source in $(pwd)"
> > >      popd
> > >      echo "${DPDK_VER}" > ${VERSION_FILE} @@ -187,7 +201,7 @@ fi
> > >
> > >  if [ "$DPDK" ] || [ "$DPDK_SHARED" ]; then
> > >      if [ -z "$DPDK_VER" ]; then
> > > -        DPDK_VER="19.11.2"
> > > +        DPDK_VER="20.11"
> > >      fi
> > >      install_dpdk $DPDK_VER
> > >      if [ "$CC" = "clang" ]; then
> > > diff --git a/.ci/linux-prepare.sh b/.ci/linux-prepare.sh index
> > > fea905a83..69a40011f 100755
> > > --- a/.ci/linux-prepare.sh
> > > +++ b/.ci/linux-prepare.sh
> > > @@ -22,6 +22,7 @@ cd ..
> > >
> > >  pip3 install --disable-pip-version-check --user flake8 hacking
> > >  pip3 install --user --upgrade docutils
> > > +pip3 install --user  'meson==0.47.1'
> > >
> > >  if [ "$M32" ]; then
> > >      # Installing 32-bit libraries.
> > > diff --git a/.github/workflows/build-and-test.yml
> > > b/.github/workflows/build-
> > and-
> > > test.yml
> > > index 847fd3150..d33e6a0b5 100644
> > > --- a/.github/workflows/build-and-test.yml
> > > +++ b/.github/workflows/build-and-test.yml
> > > @@ -8,7 +8,8 @@ jobs:
> > >        dependencies: |
> > >          automake libtool gcc bc libjemalloc1 libjemalloc-dev    \
> > >          libssl-dev llvm-dev libelf-dev libnuma-dev libpcap-dev  \
> > > -        python3-openssl python3-pip python3-sphinx              \
> > > +        ninja-build python3-openssl python3-pip                 \
> > > +        python3-setuptools python3-sphinx python3-wheel         \
> > >          selinux-policy-dev
> > >        deb_dependencies: |
> > >          linux-headers-$(uname -r) build-essential fakeroot
> > > devscripts equivs @@ -143,10 +144,13 @@ jobs:
> > >        run:  sudo apt install -y libunbound-dev libunwind-dev
> > >
> > >      - name: prepare
> > > -      run:  ./.ci/linux-prepare.sh
> > > +      run:  |
> > > +        ./.ci/linux-prepare.sh
> > > +        # Workaround on $HOME permissions as EAL checks them for
> > > + plugin
> > loading
> > > +        chmod o-w $HOME
> > >
> > >      - name: build
> > > -      run:  PATH="$PATH:$HOME/bin" ./.ci/linux-build.sh
> > > +      run:  PATH="$PATH:$HOME/bin:$HOME/.local/bin"
> > > + ./.ci/linux-build.sh
> > >
> > >      - name: upload deb packages
> > >        if:   matrix.deb_package != ''
> > > diff --git a/.travis.yml b/.travis.yml index acf3c10fb..51d051108
> > > 100644
> > > --- a/.travis.yml
> > > +++ b/.travis.yml
> > > @@ -24,6 +24,9 @@ addons:
> > >        - selinux-policy-dev
> > >        - libunbound-dev
> > >        - libunwind-dev
> > > +      - python3-setuptools
> > > +      - python3-wheel
> > > +      - ninja-build
> > >
> > >  before_install: ./.ci/${TRAVIS_OS_NAME}-prepare.sh
> > >
> > > diff --git a/Documentation/intro/install/afxdp.rst
> > > b/Documentation/intro/install/afxdp.rst
> > > index 3c8f78825..aad0aeebe 100644
> > > --- a/Documentation/intro/install/afxdp.rst
> > > +++ b/Documentation/intro/install/afxdp.rst
> > > @@ -396,7 +396,7 @@ PVP using vhostuser device
> > >  --------------------------
> > >  First, build OVS with DPDK and AFXDP::
> > >
> > > -  ./configure  --enable-afxdp --with-dpdk=<dpdk path>
> > > +  ./configure  --enable-afxdp --with-dpdk=shared|static
> > >    make -j4 && make install
> > >
> > >  Create a vhost-user port from OVS::
> > > diff --git a/Documentation/intro/install/dpdk.rst
> > > b/Documentation/intro/install/dpdk.rst
> > > index fe11571d2..4f0c10082 100644
> > > --- a/Documentation/intro/install/dpdk.rst
> > > +++ b/Documentation/intro/install/dpdk.rst
> > > @@ -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 19.11.2
> > > +- DPDK 20.11
> > >
> > >  - A `DPDK supported NIC`_
> > >
> > > @@ -62,6 +62,8 @@ Detailed system requirements can be found at
> `DPDK
> > > requirements`_.
> > >  .. _DPDK supported NIC: http://dpdk.org/doc/nics  .. _DPDK
> > > requirements: http://dpdk.org/doc/guides/linux_gsg/sys_reqs.html
> > >
> > > +.. _dpdk-install:
> > > +
> > >  Installing
> > >  ----------
> > >
> > > @@ -71,38 +73,44 @@ Install DPDK
> > >  #. Download the `DPDK sources`_, extract the file and set ``DPDK_DIR``::
> > >
> > >         $ cd /usr/src/
> > > -       $ wget https://fast.dpdk.org/rel/dpdk-19.11.2.tar.xz
> > > -       $ tar xf dpdk-19.11.2.tar.xz
> > > -       $ export DPDK_DIR=/usr/src/dpdk-stable-19.11.2
> > > +       $ wget https://fast.dpdk.org/rel/dpdk-20.11.tar.xz
> > > +       $ tar xf dpdk-20.11.tar.xz
> > > +       $ export DPDK_DIR=/usr/src/dpdk-20.11
> > >         $ cd $DPDK_DIR
> > >
> > > -#. (Optional) Configure DPDK as a shared library
> > > +#. Configure and install DPDK using Meson
> > >
> > > -   DPDK can be built as either a static library or a shared library.  By
> > > -   default, it is configured for the former. If you wish to use the latter, set
> > > -   ``CONFIG_RTE_BUILD_SHARED_LIB=y`` in
> > ``$DPDK_DIR/config/common_base``.
> > > +   Build and install the DPDK library::
> > >
> > > -   .. note::
> > > +       $ export DPDK_BUILD=$DPDK_DIR/build
> > > +       $ meson build
> > > +       $ ninja -C build
> > > +       $ sudo ninja -C build install
> > > +       $ sudo ldconfig
> > >
> > > -      Minor performance loss is expected when using OVS with a shared
> DPDK
> > > -      library compared to a static DPDK library.
> > > +   Detailed information can be found at `DPDK documentation`_.
> > >
> > > -#. Configure and install DPDK
> > > +#. (Optional) Configure and export the DPDK shared library location
> > >
> > > -   Build and install the DPDK library::
> > > +   Since DPDK is built both as static and shared library by default, no extra
> > > +   configuration is required for the build.
> > >
> > > -       $ export DPDK_TARGET=x86_64-native-linuxapp-gcc
> > > -       $ export DPDK_BUILD=$DPDK_DIR/$DPDK_TARGET
> > > -       $ make install T=$DPDK_TARGET DESTDIR=install
> > > +   Exporting the path to library is not necessary if the DPDK libraries are
> > > +   system installed. For libraries installed using a prefix, export the path
> > > +   to this library and also update the $PKG_CONFIG_PATH for use
> > > +   before building OVS::
> > >
> > > -#. (Optional) Export the DPDK shared library location
> > > +      $ export LD_LIBRARY_PATH=/path/to/installed/DPDK/libraries
> > > +      $ export PKG_CONFIG_PATH=/path/to/installed/".pc"
> > > + file/for/DPDK
> > >
> > > -   If DPDK was built as a shared library, export the path to this library for
> > > -   use when building OVS::
> > > +   .. note::
> > >
> > > -       $ export LD_LIBRARY_PATH=$DPDK_DIR/x86_64-native-linuxapp-
> gcc/lib
> > > +      Minor performance loss is expected when using OVS with a shared
> DPDK
> > > +      library compared to a static DPDK library.
> > >
> > >  .. _DPDK sources: http://dpdk.org/rel
> > > +.. _DPDK documentation:
> > > +   https://doc.dpdk.org/guides-20.08/linux_gsg/build_dpdk.html
> > >
> > >  Install OVS
> > >  ~~~~~~~~~~~
> > > @@ -121,16 +129,16 @@ has to be configured to build against the DPDK
> > library (``--
> > > with-dpdk``).
> > >
> > >  #. Bootstrap, if required, as described in
> > > :ref:`general-bootstrapping`
> > >
> > > -#. Configure the package using the ``--with-dpdk`` flag::
> > > +#. Configure the package using the ``--with-dpdk`` flag:
> > > +
> > > +   If OVS must consume DPDK static libraries
> > > +   (also equivalent to ``--with-dpdk=yes`` )::
> > >
> > > -       $ ./configure --with-dpdk=$DPDK_BUILD
> > > +       $ ./configure --with-dpdk=static
> > >
> > > -   where ``DPDK_BUILD`` is the path to the built DPDK library. This can be
> > > -   skipped if DPDK library is installed in its default location.
> > > +   If OVS must consume DPDK shared libraries::
> > >
> > > -   If no path is provided to ``--with-dpdk``, but a pkg-config configuration
> > > -   for libdpdk is available the include paths will be generated via an
> > > -   equivalent ``pkg-config --cflags libdpdk``.
> > > +       $ ./configure --with-dpdk=shared
> > >
> > >     .. note::
> > >       While ``--with-dpdk`` is required, you can pass any other
> > > configuration @@ -703,7 +711,7 @@ Limitations
> > >    release notes`_.
> > >
> > >  .. _DPDK release notes:
> > > -   https://doc.dpdk.org/guides-19.11/rel_notes/release_19_11.html
> > > +   https://doc.dpdk.org/guides-20.11/rel_notes/release_20_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 diff --git a/Documentation/topics/dpdk/phy.rst
> > > b/Documentation/topics/dpdk/phy.rst
> > > index 7ee3eacff..d21ecc915 100644
> > > --- a/Documentation/topics/dpdk/phy.rst
> > > +++ b/Documentation/topics/dpdk/phy.rst
> > > @@ -218,18 +218,24 @@ If the log is not seen then the port can be
> > > detached
> > like
> > > so::
> > >  Hotplugging with IGB_UIO
> > >  ~~~~~~~~~~~~~~~~~~~~~~~~
> > >
> > > -As of DPDK 19.11, default igb_uio hotplugging behavior changes from
> > > +.. important::
> > > +
> > > +   As of DPDK v20.11 IGB_UIO has been deprecated and is no longer built
> as
> > > +   part of the default DPDK library. Below is intended for those who wish
> > > +   to use IGB_UIO outside of the standard DPDK build from v20.11
> onwards.
> > > +
> > > +As of DPDK v19.11, default igb_uio hotplugging behavior changed
> > > +from
> > >  previous DPDK versions.
> > >
> > > -With DPDK 19.11, if no device is bound to igb_uio when OVS is
> > > launched then -the IOVA mode may be set to virtual addressing for
> > > DPDK. This is incompatible -for hotplugging with igb_uio.
> > > +From DPDK v19.11 onwards, if no device is bound to igb_uio when OVS
> > > +is launched then the IOVA mode may be set to virtual addressing for
> DPDK.
> > > +This is incompatible for hotplugging with igb_uio.
> > >
> > >  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-
> > > 19.11/prog_guide/env_abstraction_layer.html#iova-mode-detection
> > > +__ https://doc.dpdk.org/guides-
> > > 20.11/prog_guide/env_abstraction_layer.html#iova-mode-detection
> > >
> > >  To configure OVS DPDK to use physical addressing for IOVA::
> > >
> > > @@ -261,7 +267,7 @@ Representors are multi devices created on top of
> > > one
> > PF.
> > >
> > >  For more information, refer to the `DPDK documentation`__.
> > >
> > > -__ https://doc.dpdk.org/guides-
> > 19.11/prog_guide/switch_representation.html
> > > +__ https://doc.dpdk.org/guides-
> > 20.11/prog_guide/switch_representation.html
> > >
> > >  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 diff --git
> > > a/Documentation/topics/dpdk/vhost-user.rst
> > > b/Documentation/topics/dpdk/vhost-user.rst
> > > index 75d3fc958..bcd51e65c 100644
> > > --- a/Documentation/topics/dpdk/vhost-user.rst
> > > +++ b/Documentation/topics/dpdk/vhost-user.rst
> > > @@ -389,23 +389,7 @@ application in the VM.
> > >
> > >  To begin, instantiate a guest as described in
> > > :ref:`dpdk-vhost-user` or  :ref:`dpdk-vhost-user-client`. Once
> > > started, connect to the VM, download the -DPDK sources to VM and
> build DPDK::
> > > -
> > > -    $ cd /root/dpdk/
> > > -    $ wget https://fast.dpdk.org/rel/dpdk-19.11.2.tar.xz
> > > -    $ tar xf dpdk-19.11.2.tar.xz
> > > -    $ export DPDK_DIR=/root/dpdk/dpdk-stable-19.11.2
> > > -    $ export DPDK_TARGET=x86_64-native-linuxapp-gcc
> > > -    $ export DPDK_BUILD=$DPDK_DIR/$DPDK_TARGET
> > > -    $ cd $DPDK_DIR
> > > -    $ make install T=$DPDK_TARGET DESTDIR=install
> > > -
> > > -Build the test-pmd application::
> > > -
> > > -    $ cd app/test-pmd
> > > -    $ export RTE_SDK=$DPDK_DIR
> > > -    $ export RTE_TARGET=$DPDK_TARGET
> > > -    $ make
> > > +DPDK sources to VM and build DPDK as described in :ref:`dpdk-install`.
> > >
> > >  Setup huge pages and DPDK devices using UIO::
> > >
> > > @@ -555,4 +539,4 @@ shown with::
> > >
> > >  Further information can be found in the  `DPDK documentation
> > > -<https://doc.dpdk.org/guides-19.11/prog_guide/vhost_lib.html>`__
> > > +<https://doc.dpdk.org/guides-20.11/prog_guide/vhost_lib.html>`__
> > > diff --git a/Documentation/topics/testing.rst
> > b/Documentation/topics/testing.rst
> > > index b9fa94dda..951fe9e85 100644
> > > --- a/Documentation/topics/testing.rst
> > > +++ b/Documentation/topics/testing.rst
> > > @@ -353,7 +353,7 @@ All tests are skipped if no hugepages are
> configured.
> > User
> > > must look into the DP
> > >  manual to figure out how to `Configure hugepages`_.
> > >  The phy test will skip if no compatible physical device is available.
> > >
> > > -.. _Configure hugepages: https://doc.dpdk.org/guides-
> > > 19.11/linux_gsg/sys_reqs.html
> > > +.. _Configure hugepages: https://doc.dpdk.org/guides-
> > > 20.11/linux_gsg/sys_reqs.html
> > >
> > >  All the features documented under `Unit Tests`_ are available for
> > > the DPDK  datapath testsuite.
> > > diff --git a/NEWS b/NEWS
> > > index 7e291a180..1a39cc661 100644
> > > --- a/NEWS
> > > +++ b/NEWS
> > > @@ -11,6 +11,7 @@ Post-v2.14.0
> > >         Use the 'cluster/set-backlog-threshold' command to change limits.
> > >     - DPDK:
> > >       * Removed support for vhost-user dequeue zero-copy.
> > > +     * Add support for DPDK 20.11.
> > >     - Userspace datapath:
> > >       * Add the 'pmd' option to "ovs-appctl dpctl/dump-flows", which
> > >         restricts a flow dump to a single PMD thread if set.
> > > diff --git a/acinclude.m4 b/acinclude.m4 index ddf4b71e1..2fd9aa255
> > > 100644
> > > --- a/acinclude.m4
> > > +++ b/acinclude.m4
> > > @@ -334,8 +334,9 @@ dnl
> > >  dnl Configure DPDK source tree
> > >  AC_DEFUN([OVS_CHECK_DPDK], [
> > >    AC_ARG_WITH([dpdk],
> > > -              [AC_HELP_STRING([--with-dpdk=/path/to/dpdk],
> > > -                              [Specify the DPDK build directory])],
> > > +              [AC_HELP_STRING([--with-dpdk=static|shared|yes],
> > > +                              [Specify "static" or "shared" depending on the
> > > +                              DPDK libraries to use])],
> > >                [have_dpdk=true])
> > >
> > >    AC_MSG_CHECKING([whether dpdk is enabled]) @@ -345,35 +346,25
> @@
> > > AC_DEFUN([OVS_CHECK_DPDK], [
> > >    else
> > >      AC_MSG_RESULT([yes])
> > >      case "$with_dpdk" in
> > > -      yes)
> > > -        DPDK_AUTO_DISCOVER="true"
> > > -        PKG_CHECK_MODULES_STATIC([DPDK], [libdpdk], [
> > > -            DPDK_INCLUDE="$DPDK_CFLAGS"
> > > -            DPDK_LIB="$DPDK_LIBS"], [
> > > -            DPDK_INCLUDE="-I/usr/local/include/dpdk -I/usr/include/dpdk"
> > > -            DPDK_LIB="-ldpdk"])
> > > -        ;;
> > > -      *)
> > > -        DPDK_AUTO_DISCOVER="false"
> > > -        DPDK_INCLUDE_PATH="$with_dpdk/include"
> > > -        # If 'with_dpdk' is passed install directory, point to headers
> > > -        # installed in $DESTDIR/$prefix/include/dpdk
> > > -        if test -e "$DPDK_INCLUDE_PATH/rte_config.h"; then
> > > -           DPDK_INCLUDE="-I$DPDK_INCLUDE_PATH"
> > > -        elif test -e "$DPDK_INCLUDE_PATH/dpdk/rte_config.h"; then
> > > -           DPDK_INCLUDE="-I$DPDK_INCLUDE_PATH/dpdk"
> > > -        fi
> > > -        DPDK_LIB_DIR="$with_dpdk/lib"
> > > -        DPDK_LIB="-ldpdk"
> > > -        ;;
> > > +      "shared")
> > > +          PKG_CHECK_MODULES([DPDK], [libdpdk], [
> > > +              DPDK_INCLUDE="$DPDK_CFLAGS"
> > > +              DPDK_LIB="$DPDK_LIBS"], [
> > > +              DPDK_INCLUDE="-I/usr/local/include/dpdk -I/usr/include/dpdk"
> > > +              DPDK_LIB="-ldpdk"])
> > > +              ;;
> > > +      "static" | "yes")
> > > +          PKG_CHECK_MODULES_STATIC([DPDK], [libdpdk], [
> > > +              DPDK_INCLUDE="$DPDK_CFLAGS"
> > > +              DPDK_LIB="$DPDK_LIBS"], [
> > > +              DPDK_INCLUDE="-I/usr/local/include/dpdk -I/usr/include/dpdk"
> > > +              DPDK_LIB="-ldpdk"])
> > > +              ;;
> > >      esac
> > >
> > >      ovs_save_CFLAGS="$CFLAGS"
> > >      ovs_save_LDFLAGS="$LDFLAGS"
> > >      CFLAGS="$CFLAGS $DPDK_INCLUDE"
> > > -    if test "$DPDK_AUTO_DISCOVER" = "false"; then
> > > -      LDFLAGS="$LDFLAGS -L${DPDK_LIB_DIR}"
> > > -    fi
> > >
> > >      AC_CHECK_HEADERS([rte_config.h], [], [
> > >        AC_MSG_ERROR([unable to find rte_config.h in $with_dpdk]) @@
> > > -422,20 +413,14 @@ AC_DEFUN([OVS_CHECK_DPDK], [
> > >        [AC_MSG_RESULT([yes])
> > >         DPDKLIB_FOUND=true],
> > >        [AC_MSG_RESULT([no])
> > > -       if test "$DPDK_AUTO_DISCOVER" = "true"; then
> > > -         AC_MSG_ERROR(m4_normalize([
> > > -            Could not find DPDK library in default search path, Use --with-dpdk
> > > -            to specify the DPDK library installed in non-standard location]))
> > > -       else
> > > -         AC_MSG_ERROR([Could not find DPDK libraries in $DPDK_LIB_DIR])
> > > -       fi
> > > +       AC_MSG_ERROR(m4_normalize([
> > > +          Could not find DPDK library in default search path, update
> > > +          PKG_CONFIG_PATH for pkg-config to find the .pc file in
> > > +          non-standard location]))
> > >        ])
> > >
> > >      CFLAGS="$ovs_save_CFLAGS"
> > >      LDFLAGS="$ovs_save_LDFLAGS"
> > > -    if test "$DPDK_AUTO_DISCOVER" = "false"; then
> > > -      OVS_LDFLAGS="$OVS_LDFLAGS -L$DPDK_LIB_DIR"
> > > -    fi
> > >      OVS_CFLAGS="$OVS_CFLAGS $DPDK_INCLUDE"
> > >      OVS_ENABLE_OPTION([-mssse3])
> > >
> > > @@ -444,17 +429,16 @@ AC_DEFUN([OVS_CHECK_DPDK], [
> > >      # This happens because the rest of the DPDK code doesn't use any
> symbol in
> > >      # the pmd driver objects, and the drivers register themselves using an
> > >      # __attribute__((constructor)) function.
> > > -    #
> > > -    # These options are specified inside a single -Wl directive to prevent
> > > -    # autotools from reordering them.
> > > -    #
> > > -    # OTOH newer versions of dpdk pkg-config (generated with Meson)
> > > -    # will already have flagged just the right set of libs with
> > > -    # --whole-archive - in those cases do not wrap it once more.
> > > -    case "$DPDK_LIB" in
> > > -      *whole-archive*) DPDK_vswitchd_LDFLAGS=$DPDK_LIB;;
> > > -      *) DPDK_vswitchd_LDFLAGS=-Wl,--whole-archive,$DPDK_LIB,--no-
> whole-
> > > archive
> > > -    esac
> > > +
> > > +    # Wrap the DPDK libraries inside a single -Wl directive
> > > +    # after comma separation to prevent autotools from reordering them.
> > > +    DPDK_vswitchd_LDFLAGS=$(echo "$DPDK_LIB"| tr -s ' ' ',' | sed 's/-
> Wl,//g')
> > > +    # Replace -pthread with -lpthread for LD and remove the last extra
> comma.
> > > +    DPDK_vswitchd_LDFLAGS=$(echo "$DPDK_vswitchd_LDFLAGS"| sed
> 's/,$//'
> > | \
> > > +                            sed 's/-pthread/-lpthread/g')
> > > +    # Prepend "-Wl,".
> > > +    DPDK_vswitchd_LDFLAGS="-Wl,$DPDK_vswitchd_LDFLAGS"
> > > +
> > >      AC_SUBST([DPDK_vswitchd_LDFLAGS])
> > >      AC_DEFINE([DPDK_NETDEV], [1], [System uses the DPDK module.])
> > >    fi
> > > diff --git a/include/sparse/automake.mk b/include/sparse/automake.mk
> > > index 974ad3fe5..e96637119 100644
> > > --- a/include/sparse/automake.mk
> > > +++ b/include/sparse/automake.mk
> > > @@ -11,7 +11,9 @@ noinst_HEADERS += \
> > >          include/sparse/netpacket/packet.h \
> > >          include/sparse/pthread.h \
> > >          include/sparse/rte_atomic.h \
> > > +        include/sparse/rte_mbuf.h \
> > >          include/sparse/rte_memcpy.h \
> > > +        include/sparse/rte_trace_point.h \
> > >          include/sparse/sys/socket.h \
> > >          include/sparse/sys/sysmacros.h \
> > >          include/sparse/sys/types.h \ diff --git
> > > a/include/sparse/rte_mbuf.h b/include/sparse/rte_mbuf.h new file
> > > mode 100644 index 000000000..981cdb441
> > > --- /dev/null
> > > +++ b/include/sparse/rte_mbuf.h
> > > @@ -0,0 +1,29 @@
> > > +/* Copyright (c) 2020 Intel, 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
> > > +
> > > +/* sparse doesn't know about gcc atomic builtins. */ #ifndef
> > > +__ATOMIC_ACQ_REL #define __ATOMIC_ACQ_REL 0 #define
> > > +__ATOMIC_RELAXED 1 #define __atomic_add_fetch(p, val, memorder)
> > > +(*(p) = *(p) + (val)) #define __atomic_store_n(p, val, memorder)
> > > +(*(p) = (val)) #endif
> > > +
> > > +/* Get actual <rte_mbuf.h> definitions for us to annotate and build
> > > +on. */ #include_next <rte_mbuf.h>
> > > diff --git a/include/sparse/rte_trace_point.h
> > b/include/sparse/rte_trace_point.h
> > > new file mode 100644
> > > index 000000000..803923275
> > > --- /dev/null
> > > +++ b/include/sparse/rte_trace_point.h
> > > @@ -0,0 +1,28 @@
> > > +/* Copyright 2020, 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
> > > +
> > > +/* sparse doesn't know about gcc atomic builtins. */ #ifndef
> > > +__ATOMIC_ACQUIRE #define __ATOMIC_ACQUIRE 0 #define
> > > +__atomic_load_n(p, memorder) *(p) #endif
> > > +
> > > +/* Get actual <rte_trace_point.h> definitions for us to annotate
> > > +and
> > > + * build on. */
> > > +#include_next <rte_trace_point.h>
> > > diff --git a/lib/dpdk.c b/lib/dpdk.c index 2f235a742..319540394
> > > 100644
> > > --- a/lib/dpdk.c
> > > +++ b/lib/dpdk.c
> > > @@ -443,7 +443,7 @@ dpdk_init__(const struct smap
> *ovs_other_config)
> > >
> > >      /**
> > >       * NOTE: This is an unsophisticated mechanism for determining the
> DPDK
> > > -     * lcore for the DPDK Master.
> > > +     * main core.
> > >       */
> > >      if (auto_determine) {
> > >          const struct ovs_numa_info_core *core; diff --git
> > > a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index 75dffefb8..2640a421a
> > > 100644
> > > --- a/lib/netdev-dpdk.c
> > > +++ b/lib/netdev-dpdk.c
> > > @@ -26,12 +26,6 @@
> > >  #include <sys/socket.h>
> > >  #include <linux/if.h>
> > >
> > > -/* Include rte_compat.h first to allow experimental API's needed
> > > for the
> > > - * rte_meter.h rfc4115 functions. Once they are no longer marked as
> > > - * experimental the #define and rte_compat.h include can be removed.
> > > - */
> > > -#define ALLOW_EXPERIMENTAL_API
> > > -#include <rte_compat.h>
> > >  #include <rte_bus_pci.h>
> > >  #include <rte_config.h>
> > >  #include <rte_cycles.h>
> > > @@ -1312,7 +1306,7 @@ static int
> > >  vhost_common_construct(struct netdev *netdev)
> > >      OVS_REQUIRES(dpdk_mutex)
> > >  {
> > > -    int socket_id = rte_lcore_to_socket_id(rte_get_master_lcore());
> > > +    int socket_id = rte_lcore_to_socket_id(rte_get_main_lcore());
> > >      struct netdev_dpdk *dev = netdev_dpdk_cast(netdev);
> > >
> > >      dev->vhost_rxq_enabled =
> > dpdk_rte_mzalloc(OVS_VHOST_MAX_QUEUE_NUM *
> > > @@ -1463,7 +1457,6 @@ netdev_dpdk_destruct(struct netdev *netdev)
> > >      struct netdev_dpdk *dev = netdev_dpdk_cast(netdev);
> > >      struct rte_device *rte_dev;
> > >      struct rte_eth_dev *eth_dev;
> > > -    bool remove_on_close;
> > >
> > >      ovs_mutex_lock(&dpdk_mutex);
> > >
> > > @@ -1475,20 +1468,15 @@ netdev_dpdk_destruct(struct netdev
> *netdev)
> > >           * FIXME: avoid direct access to DPDK internal array rte_eth_devices.
> > >           */
> > >          eth_dev = &rte_eth_devices[dev->port_id];
> > > -        remove_on_close =
> > > -            eth_dev->data &&
> > > -                (eth_dev->data->dev_flags & RTE_ETH_DEV_CLOSE_REMOVE);
> > >          rte_dev = eth_dev->device;
> > >
> > >          /* Remove the eth device. */
> > >          rte_eth_dev_close(dev->port_id);
> > >
> > > -        /* Remove this rte device and all its eth devices if flag
> > > -         * RTE_ETH_DEV_CLOSE_REMOVE is not supported (which means
> > representors
> > > -         * are not supported), or if all the eth devices belonging to the rte
> > > -         * device are closed.
> > > +        /* Remove this rte device and all its eth devices if all the eth
> > > +         * devices belonging to the rte device are closed.
> > >           */
> > > -        if (!remove_on_close || !netdev_dpdk_get_num_ports(rte_dev)) {
> > > +        if (!netdev_dpdk_get_num_ports(rte_dev)) {
> > >              int ret = rte_dev_remove(rte_dev);
> > >
> > >              if (ret < 0) {
> > > --
> > > 2.13.6
> > >
> > > _______________________________________________
> > > dev mailing list
> > > dev at openvswitch.org
> > > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> 



More information about the dev mailing list