On Mon, Jun 24, 2024 at 1:59 PM Eelco Chaudron <echau...@redhat.com> wrote:

>
>
> On 20 Jun 2024, at 14:57, Ales Musil wrote:
>
> > The DPDK was built as extra step in the CI, however it is useful to
> > have it inside the container prepared. This also helps with
> > reproduction of failures with DPDK by having the exact version inside
> > the container already.
> >
> > Also bump the Ubuntu version for container builds to 24.04 to get
> > Podman 4. This is required to avoid the tar permissions error:
> >
> > tar: dpdk-23.11/.ci: Cannot change mode to rwxrwxr-x: Operation not
> permitted
> >
> > Signed-off-by: Ales Musil <amu...@redhat.com>
>
> Hi Ales,
>
> The change in general looks good. Two small nit comments, but anyway I
> think the patch is good.
>
> Acked-by: Eelco Chaudron <echau...@redhat.com>
>
> //Eelco
>
> > ---
> >  .ci/ci.sh                                |  6 --
> >  .ci/dpdk-build.sh                        | 62 ------------------
> >  .ci/dpdk-prepare.sh                      | 11 ----
> >  .ci/linux-build.sh                       |  7 +-
> >  .github/workflows/containers.yml         |  2 +-
> >  .github/workflows/test.yml               | 81 +-----------------------
> >  Makefile.am                              |  2 -
> >  utilities/containers/fedora/Dockerfile   |  1 +
> >  utilities/containers/prepare.sh          | 56 ++++++++++++++++
> >  utilities/containers/py-requirements.txt |  1 +
> >  utilities/containers/ubuntu/Dockerfile   |  1 +
> >  11 files changed, 66 insertions(+), 164 deletions(-)
> >  delete mode 100755 .ci/dpdk-build.sh
> >  delete mode 100755 .ci/dpdk-prepare.sh
> >
> > diff --git a/.ci/ci.sh b/.ci/ci.sh
> > index 6beeace84..f543967dc 100755
> > --- a/.ci/ci.sh
> > +++ b/.ci/ci.sh
> > @@ -16,7 +16,6 @@
> >
> >  OVN_PATH=${OVN_PATH:-$PWD}
> >  OVS_PATH=${OVS_PATH:-$OVN_PATH/ovs}
> > -DPDK_PATH=${DPDK_PATH:-$OVN_PATH/dpdk-dir}
> >  CONTAINER_CMD=${CONTAINER_CMD:-podman}
> >  CONTAINER_WORKSPACE="/workspace"
> >  CONTAINER_WORKDIR="/workspace/ovn-tmp"
> > @@ -163,17 +162,12 @@ if [ "$ARCH" = "aarch64" ] && !
> check_clang_version_ge "16.0.0"; then
> >      ASAN_OPTIONS="detect_leaks=0"
> >  fi
> >
> > -if [ -z "$DPDK" ]; then
> > -   mkdir -p "$DPDK_PATH"
> > -fi
> > -
> >  CONTAINER_ID="$($CONTAINER_CMD run --privileged -d \
> >      --pids-limit=-1 \
> >      --env ASAN_OPTIONS=$ASAN_OPTIONS \
> >      -v /lib/modules/$(uname -r):/lib/modules/$(uname -r):ro \
> >      -v $OVN_PATH:$CONTAINER_WORKSPACE/ovn:Z \
> >      -v $OVS_PATH:$CONTAINER_WORKSPACE/ovs:Z \
> > -    -v $DPDK_PATH:$CONTAINER_WORKSPACE/dpdk-dir:Z \
> >      $IMAGE_NAME)"
> >  trap remove_container EXIT
> >
> > diff --git a/.ci/dpdk-build.sh b/.ci/dpdk-build.sh
> > deleted file mode 100755
> > index 0c13c98c9..000000000
> > --- a/.ci/dpdk-build.sh
> > +++ /dev/null
> > @@ -1,62 +0,0 @@
> > -#!/bin/bash
> > -
> > -set -o errexit
> > -set -x
> > -
> > -function build_dpdk()
> > -{
> > -    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-src
> > -    rm -rf $DPDK_INSTALL_DIR
> > -
> > -    if [ "${DPDK_VER##refs/*/}" != "${DPDK_VER}" ]; then
> > -        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-src
> > -        pushd dpdk-src
> > -    fi
> > -
> > -    # 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"
> > -
> > -    # Disable building DPDK unit tests. Not needed for OVS build or
> tests.
> > -    DPDK_OPTS="$DPDK_OPTS -Dtests=false"
> > -
> > -    # Disable DPDK developer mode, this results in less build checks
> and less
> > -    # meson verbose outputs.
> > -    DPDK_OPTS="$DPDK_OPTS -Ddeveloper_mode=disabled"
> > -
> > -    # OVS compilation and the "ovn-system-dpdk" unit tests (run in the
> CI)
> > -    # only depend on virtio/tap drivers.
> > -    # We can disable all remaining drivers to save compilation time.
> > -    DPDK_OPTS="$DPDK_OPTS -Denable_drivers=net/null,net/tap,net/virtio"
> > -    # 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=$DPDK_INSTALL_DIR"
> > -
> > -    meson $DPDK_OPTS build
> > -    ninja -C build
> > -    ninja -C build install
> > -    popd
> > -
> > -    # Remove examples sources.
> > -    rm -rf $DPDK_INSTALL_DIR/share/dpdk/examples
> > -
> > -    echo "Installed DPDK in $DPDK_INSTALL_DIR"
> > -    echo "${DPDK_VER}" > ${VERSION_FILE}
> > -}
> > -
> > -build_dpdk $DPDK_VER
> > diff --git a/.ci/dpdk-prepare.sh b/.ci/dpdk-prepare.sh
> > deleted file mode 100755
> > index 5543da90a..000000000
> > --- a/.ci/dpdk-prepare.sh
> > +++ /dev/null
> > @@ -1,11 +0,0 @@
> > -#!/bin/bash
> > -
> > -set -ev
> > -
> > -# Installing wheel separately because it may be needed to build some
> > -# of the packages during dependency backtracking and pip >= 22.0 will
> > -# stop backtracking on build failures:
> > -#     https://github.com/pypa/pip/issues/10655
> > -pip3 install --disable-pip-version-check --user wheel
> > -pip3 install --disable-pip-version-check --user pyelftools
> > -pip3 install --user  'meson==0.53.2'
> > diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh
> > index d4c57d32c..75a9480f9 100755
> > --- a/.ci/linux-build.sh
> > +++ b/.ci/linux-build.sh
> > @@ -15,10 +15,10 @@ function install_dpdk()
> >  {
> >      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
> > +    local DPDK_PC=$(find $DPDK_INSTALL_DIR -type f -name
> libdpdk-libs.pc)
> >
> >      # Export the following path for pkg-config to find the .pc file.
> > -    export PKG_CONFIG_PATH=$DPDK_LIB/pkgconfig/:$PKG_CONFIG_PATH
> > +    export PKG_CONFIG_PATH="$(dirname $DPDK_PC):$PKG_CONFIG_PATH"
> >
> >      if [ ! -f "${VERSION_FILE}" ]; then
> >          echo "Could not find DPDK in $DPDK_INSTALL_DIR"
> > @@ -26,8 +26,7 @@ function install_dpdk()
> >      fi
> >
> >      # As we build inside a container we need to update the prefix.
> > -    sed -i -E "s|^prefix=.*|prefix=${DPDK_INSTALL_DIR}|" \
> > -        "$DPDK_LIB/pkgconfig/libdpdk-libs.pc"
> > +    sed -i -E "s|^prefix=.*|prefix=${DPDK_INSTALL_DIR}|" $DPDK_PC
> >
> >      # Update the library paths.
> >      sudo ldconfig
> > diff --git a/.github/workflows/containers.yml
> b/.github/workflows/containers.yml
> > index 87e28d645..4cce255a8 100644
> > --- a/.github/workflows/containers.yml
> > +++ b/.github/workflows/containers.yml
> > @@ -15,7 +15,7 @@ env:
> >
> >  jobs:
> >    container:
> > -    runs-on: ubuntu-22.04
> > +    runs-on: ubuntu-24.04
> >      strategy:
> >        matrix:
> >          distro: [ fedora, ubuntu ]
> > diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
> > index efe2dac25..befa0bfac 100644
> > --- a/.github/workflows/test.yml
> > +++ b/.github/workflows/test.yml
> > @@ -12,74 +12,6 @@ concurrency:
> >    cancel-in-progress: true
> >
> >  jobs:
> > -  build-dpdk:
> > -    env:
> > -      dependencies: gcc libnuma-dev ninja-build
> > -      CC: gcc
> > -      DPDK_GIT: https://dpdk.org/git/dpdk
> > -      DPDK_VER: 23.11
> > -    name: dpdk gcc
> > -    outputs:
> > -      dpdk_key: ${{ steps.gen_dpdk_key.outputs.key }}
> > -    runs-on: ubuntu-20.04
> > -    timeout-minutes: 30
> > -
> > -    steps:
> > -    - name: checkout
> > -      uses: actions/checkout@v4
> > -
> > -    - name: update PATH
> > -      run: |
> > -        echo "$HOME/bin"        >> $GITHUB_PATH
> > -        echo "$HOME/.local/bin" >> $GITHUB_PATH
> > -
> > -    - name: create ci signature file for the dpdk cache key
> > -      # This will collect most of DPDK related lines, so hash will be
> different
> > -      # if something changed in a way we're building DPDK including
> DPDK_VER.
> > -      # This also allows us to use cache from any branch as long as
> version
> > -      # and a way we're building DPDK stays the same.
> > -      run: |
> > -        grep -irE 'RTE_|DPDK|meson|ninja' .ci/dpdk-* > dpdk-ci-signature
> > -        grep -rwE 'DPDK_GIT|DPDK_VER' .github/ >> dpdk-ci-signature
> > -        if [ "${DPDK_VER##refs/*/}" != "${DPDK_VER}" ]; then
> > -            git ls-remote --heads $DPDK_GIT $DPDK_VER >>
> dpdk-ci-signature
> > -        fi
> > -        cat dpdk-ci-signature
>
> Removing the caching, will cause the robot to build DPDK for every patch.
> I’m not sure how much time is actually saved with this, so just that you
> are aware of the side effects.
>


We are rebuilding the whole container in that case anyway. I don't think
that this will cause any issues.


>
> > -    - name: generate ci DPDK key
> > -      id: gen_dpdk_key
> > -      env:
> > -        ci_key: ${{ hashFiles('dpdk-ci-signature') }}
> > -      run: echo 'key=dpdk-${{ env.ci_key }}' >> $GITHUB_OUTPUT
> > -
> > -    - name: cache
> > -      id: dpdk_cache
> > -      uses: actions/cache@v4
> > -      with:
> > -        path: dpdk-dir
> > -        key: ${{ steps.gen_dpdk_key.outputs.key }}
> > -
> > -    - name: set up python
> > -      if: steps.dpdk_cache.outputs.cache-hit != 'true'
> > -      uses: actions/setup-python@v5
> > -      with:
> > -        python-version: '3.9'
> > -
> > -    - name: update APT cache
> > -      if: steps.dpdk_cache.outputs.cache-hit != 'true'
> > -      run: sudo apt update || true
> > -    - name: install common dependencies
> > -      if: steps.dpdk_cache.outputs.cache-hit != 'true'
> > -      run: sudo apt install -y ${{ env.dependencies }}
> > -
> > -    - name: prepare
> > -      if: steps.dpdk_cache.outputs.cache-hit != 'true'
> > -      run: ./.ci/dpdk-prepare.sh
> > -
> > -    - name: build
> > -      if: steps.dpdk_cache.outputs.cache-hit != 'true'
> > -      run: ./.ci/dpdk-build.sh
> > -
> >    prepare-container:
> >      # This job has the following matrix, x: Job trigger, y: Branch
> >      # (scheduled jobs run only on main):
> > @@ -93,7 +25,7 @@ jobs:
> >      env:
> >        DEPENDENCIES: podman
> >      name: Prepare container
> > -    runs-on: ubuntu-22.04
> > +    runs-on: ubuntu-24.04
> >
> >      steps:
> >        - uses: actions/checkout@v4
> > @@ -124,7 +56,7 @@ jobs:
> >          run: podman pull ghcr.io/ovn-org/ovn-tests:${{
> <http://ghcr.io/ovn-org/ovn-tests:$%7B%7B> env.IMAGE_DISTRO }}
> >
> >        - name: Export image
> > -        run: podman save -o /tmp/image.tar ovn-org/ovn-tests
> > +        run: podman save -o /tmp/image.tar ovn-org/ovn-tests:${{
> env.IMAGE_DISTRO }}
> >
> >        - name: Cache image
> >          id: image_cache
> > @@ -134,7 +66,7 @@ jobs:
> >            key: ${{ github.sha }}/${{ github.event_name }}
> >
> >    build-linux:
> > -    needs: [build-dpdk, prepare-container]
> > +    needs: [prepare-container]
> >      env:
> >        ARCH:        ${{ matrix.cfg.arch }}
> >        CC:          ${{ matrix.cfg.compiler }}
> > @@ -204,13 +136,6 @@ jobs:
> >              sort -V | tail -1)
> >        working-directory: ovs
> >
> > -    - name: cache dpdk
> > -      if: matrix.cfg.dpdk != ''
> > -      uses: actions/cache@v4
> > -      with:
> > -        path: dpdk-dir
> > -        key: ${{ needs.build-dpdk.outputs.dpdk_key }}
> > -
> >      - name: image cache
> >        id: image_cache
> >        uses: actions/cache@v4
> > diff --git a/Makefile.am b/Makefile.am
> > index bfc9565e8..6b0f1913a 100644
> > --- a/Makefile.am
> > +++ b/Makefile.am
> > @@ -87,8 +87,6 @@ EXTRA_DIST = \
> >       NOTICE \
> >       .cirrus.yml \
> >       .ci/ci.sh \
> > -     .ci/dpdk-build.sh \
> > -     .ci/dpdk-prepare.sh \
> >       .ci/linux-build.sh \
> >       .ci/linux-util.sh \
> >       .ci/osx-build.sh \
> > diff --git a/utilities/containers/fedora/Dockerfile
> b/utilities/containers/fedora/Dockerfile
> > index 9e17a6b20..078180cff 100755
> > --- a/utilities/containers/fedora/Dockerfile
> > +++ b/utilities/containers/fedora/Dockerfile
> > @@ -27,6 +27,7 @@ RUN dnf -y update \
> >          libcap-ng-devel \
> >          libtool \
> >          net-tools \
> > +        ninja-build \
> >          nmap-ncat \
> >          numactl-devel \
> >          openssl \
> > diff --git a/utilities/containers/prepare.sh
> b/utilities/containers/prepare.sh
> > index 3aac94590..8e35b4354 100755
> > --- a/utilities/containers/prepare.sh
> > +++ b/utilities/containers/prepare.sh
> > @@ -1,5 +1,8 @@
> >  #!/bin/bash -xe
> >
> > +DPDK_GIT=https://dpdk.org/git/dpdk
> > +DPDK_VER=23.11
>
> Should we maybe get the DPDK version from the OVS subtree? This will save
> updating each time OVS updates.
> I guess, .github/workflows/build-and-test.yml would be the best place to
> grep for.
>


That would be a little tricky to pull off, we don't have the source in the
container at this stage. It could be probably done as an argument to the
build. I will think about it as a follow up.


>
> > +
> >  function compile_sparse()
> >  {
> >      git clone git://git.kernel.org/pub/scm/devel/sparse/sparse.git \
> > @@ -31,6 +34,59 @@ function install_python_dep()
> >      python3 -m pip install -r /tmp/py-requirements.txt
> >  }
> >
> > +function build_dpdk()
> > +{
> > +      local DPDK_OPTS=""
> > +      local DPDK_INSTALL_DIR="$(pwd)/dpdk-dir"
> > +      local VERSION_FILE="$DPDK_INSTALL_DIR/cached-version"
> > +
> > +      if [ "${DPDK_VER##refs/*/}" != "${DPDK_VER}" ]; then
> > +          git clone --single-branch $DPDK_GIT dpdk-src \
> > +              -b "${DPDK_VER##refs/*/}"
> > +          pushd dpdk-src
> > +          git log -1 --oneline
> > +      else
> > +          curl -O https://fast.dpdk.org/rel/dpdk-$DPDK_VER.tar.xz
> > +          tar --no-same-owner -xvf dpdk-$DPDK_VER.tar.xz > /dev/null
> > +          DIR_NAME=$(tar -tf dpdk-$DPDK_VER.tar.xz | head -1 | cut -f1
> -d"/")
> > +          mv ${DIR_NAME} dpdk-src
> > +          pushd dpdk-src
> > +      fi
> > +
> > +      # 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"
> > +
> > +      # Disable building DPDK unit tests. Not needed for OVS build or
> tests.
> > +      DPDK_OPTS="$DPDK_OPTS -Dtests=false"
> > +
> > +      # Disable DPDK developer mode, this results in less build checks
> and less
> > +      # meson verbose outputs.
> > +      DPDK_OPTS="$DPDK_OPTS -Ddeveloper_mode=disabled"
> > +
> > +      # OVS compilation and the "ovn-system-dpdk" unit tests (run in
> the CI)
> > +      # only depend on virtio/tap drivers.
> > +      # We can disable all remaining drivers to save compilation time.
> > +      DPDK_OPTS="$DPDK_OPTS
> -Denable_drivers=net/null,net/tap,net/virtio"
> > +      # 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=$DPDK_INSTALL_DIR"
> > +
> > +      meson $DPDK_OPTS build
> > +      ninja -C build
> > +      ninja -C build install
> > +      popd
> > +
> > +      # Remove examples sources.
> > +      rm -rf $DPDK_INSTALL_DIR/share/dpdk/examples
> > +
> > +      echo "${DPDK_VER}" > ${VERSION_FILE}
> > +}
> > +
> >  compile_sparse
> >  compile_openbfdd
> >  install_python_dep
> > +build_dpdk
> > diff --git a/utilities/containers/py-requirements.txt
> b/utilities/containers/py-requirements.txt
> > index a8e8f17da..7b12b4ab5 100644
> > --- a/utilities/containers/py-requirements.txt
> > +++ b/utilities/containers/py-requirements.txt
> > @@ -1,4 +1,5 @@
> >  flake8>=6.1.0
> > +meson==0.53.2
> >  scapy
> >  sphinx
> >  setuptools
> > diff --git a/utilities/containers/ubuntu/Dockerfile
> b/utilities/containers/ubuntu/Dockerfile
> > index 82fa0d715..7cf075122 100755
> > --- a/utilities/containers/ubuntu/Dockerfile
> > +++ b/utilities/containers/ubuntu/Dockerfile
> > @@ -33,6 +33,7 @@ RUN apt update -y \
> >          llvm-dev \
> >          ncat \
> >          net-tools \
> > +        ninja-build \
> >          python3-dev \
> >          python3-pip \
> >          selinux-policy-dev \
> > --
> > 2.45.1
>
>
Thanks,
Ales

-- 

Ales Musil

Senior Software Engineer - OVN Core

Red Hat EMEA <https://www.redhat.com>

amu...@redhat.com
<https://red.ht/sig>
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to