On 24 Jun 2024, at 15:52, Ales Musil wrote:

> On Mon, Jun 24, 2024 at 1:59 PM Eelco Chaudron <[email protected]> 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 <[email protected]>
>>
>> Hi Ales,
>>
>> The change in general looks good. Two small nit comments, but anyway I
>> think the patch is good.
>>
>> Acked-by: Eelco Chaudron <[email protected]>
>>
>> //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.

ACK, sound fine to me.

>>> +
>>>  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>
>
> [email protected]
> <https://red.ht/sig>

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to