On Wed, Jul 12, 2023 at 11:32 PM Ilya Maximets <[email protected]> wrote:
>
> On 6/27/23 12:11, Frode Nordahl wrote:
> > The autopkgtests [0][1] are relevant in an upstream context
> > because an Open vSwitch contributor may want to have a quick
> > way of running the upstream system testsuites on recent
> > Debian/Ubuntu releases in an automated and contained manner.
> >
> > During the Debian/Ubuntu/upstream package source sync work [2], a
> > relatively naive autopkgtest was added.  It had been around since
> > Open vSwitch was initially packaged many years ago.
> >
> > Replace the autopkgtest with a test that runs all the upstream
> > system testsuites instead.
> >
> > To run the autopkgtest, take a look at [1] for prerequisites then:
> >
> >     ./boot.sh && \
> >         ./configure \
> >             --prefix=/usr \
> >             --localstatedir=/var \
> >             --sysconfdir=/etc \
> >             --with-dpdk=shared && \
> >         make debian-source
> >     autopkgtest \
> >         --env DEB_BUILD_OPTIONS="nocheck parallel=32" \
> >         openvswitch_3.1.90-1.dsc \
> >         -- qemu \
> >             --cpus 32 \
> >             --ram-size 8129 \
> >             autopkgtest-mantic-amd64.img
> >
> > This patch also adds Cirrus CI jobs that run these tests.
> >
> > 0: https://wiki.debian.org/ContinuousIntegration/autopkgtest
> > 1: https://packaging.ubuntu.com/html/auto-pkg-test.html
> > 2: https://mail.openvswitch.org/pipermail/ovs-dev/2022-July/396219.html
> >
> > Signed-off-by: Frode Nordahl <[email protected]>
>
> Hi, Frode.  Thanks for the patch!
> Though it looks like there are 3 separate changes:
>  - make debian-source
>  - autopkgtest
>  - CI
>
> Could you split the patch in 3?

Yes, that makes sense.

> I also find it a bit confusing that DPDK test is running AF_XDP
> testsuite as well.  May not be needed?

I added that mostly to confirm that building a packaged binary that
supported both DPDK and AF_XDP works as expected, as I missed
supporting that in an earlier iteration of this series. I guess now
that we have established that it works, we don't really need to keep
validating that for every run. Will remove it.

> Also, it looks like tests are taking less than half of the runtime
> in CI.  Is there a way to re-use the build for multiple tests maybe?
> I'm not sure.

There is usually some way to share artifacts across runs, I'll check
what Cirrus can provide us with here. Thank you for the suggestion.

> > ---
> >  .cirrus.yml                            | 102 ++++++++++++++
> >  .gitignore                             |   1 +
> >  Documentation/intro/install/debian.rst |  23 +++-
> >  debian/automake.mk                     |  33 ++++-
> >  debian/rules                           |   5 +
> >  debian/tests/afxdp                     |   1 +
> >  debian/tests/control                   |  41 +++++-
> >  debian/tests/dpdk                      |  46 +------
> >  debian/tests/kmod                      |   1 +
> >  debian/tests/offloads                  |   1 +
> >  debian/tests/openflow.py               |  66 ---------
> >  debian/tests/run-tests.sh              | 183 +++++++++++++++++++++++++
> >  debian/tests/userspace                 |   1 +
> >  debian/tests/vanilla                   |  29 ----
> >  14 files changed, 380 insertions(+), 153 deletions(-)
> >  create mode 120000 debian/tests/afxdp
> >  mode change 100755 => 120000 debian/tests/dpdk
> >  create mode 120000 debian/tests/kmod
> >  create mode 120000 debian/tests/offloads
> >  delete mode 100755 debian/tests/openflow.py
> >  create mode 100755 debian/tests/run-tests.sh
> >  create mode 120000 debian/tests/userspace
> >  delete mode 100755 debian/tests/vanilla
> >
> > diff --git a/.cirrus.yml b/.cirrus.yml
> > index 952d96431..7d3ae86d9 100644
> > --- a/.cirrus.yml
> > +++ b/.cirrus.yml
> > @@ -32,3 +32,105 @@ freebsd_build_task:
> >    check_script:
> >      - gmake -j8 check TESTSUITEFLAGS=-j8 RECHECK=yes
> >                  || { cat ./tests/testsuite.log; exit 1; }
> > +
> > +# This tests both the upstream OVS Debian packaging recipe and executes 
> > all the
> > +# system testsuites on Ubuntu.
> > +ubuntu_autopkgtest_latest_task:
> > +
> > +  compute_engine_instance:
> > +    image_project: ubuntu-os-cloud
> > +    image: family/ubuntu-2304-amd64
> > +    platform: linux
> > +    cpu: 4
> > +    memory: 4G
> > +
> > +  env:
> > +    DEPENDENCIES: |
> > +      build-essential fakeroot dpkg-dev devscripts equivs autopkgtest 
> > autodep8
> > +      libbpf-dev libxdp-dev
> > +    DPDK: shared
> > +    matrix:
> > +      TEST_NAME: afxdp
> > +      TEST_NAME: dpdk
> > +      TEST_NAME: kmod
> > +      # Pending resolution of https://launchpad.net/bugs/2020677
> > +      # TEST_NAME: offloads
> > +      TEST_NAME: userspace
> > +
> > +  prepare_script: |
> > +    apt-get update
> > +    if [ "${DPDK}" = no ]; then
> > +        echo "Skipping DPDK dependency."
> > +    else
> > +        apt-get -y install libdpdk-dev
> > +    fi
> > +    apt-get --yes install linux-headers-$(uname -r) ${DEPENDENCIES}
> > +
> > +  configure_script: |
> > +    ./boot.sh
> > +    ./configure \
> > +        --prefix=/usr \
> > +        --localstatedir=/var \
> > +        --sysconfdir=/etc \
> > +        --with-dpdk=${DPDK}
> > +
> > +  build_script:
> > +    - make debian-source
> > +
> > +  check_script: |
> > +    if [ "${DPDK}" = "no" ]; then
> > +        deb_dpdk_build_opt="nodpdk"
> > +    else
> > +        deb_dpdk_build_opt=""
> > +    fi
> > +    autopkgtest \
> > +        --env DEB_BUILD_OPTIONS="nocheck parallel=8 ${deb_dpdk_build_opt}" 
> > \
> > +        --test-name $TEST_NAME \
> > +        *.dsc \
> > +        -- null
> > +
> > +ubuntu_autopkgtest_lts_task:
> > +
> > +  compute_engine_instance:
> > +    image_project: ubuntu-os-cloud
> > +    image: family/ubuntu-2204-lts
> > +    platform: linux
> > +    cpu: 4
> > +    memory: 4G
> > +
> > +  env:
> > +    DEPENDENCIES: |
> > +      build-essential fakeroot dpkg-dev devscripts equivs autopkgtest 
> > autodep8
> > +    DPDK: no
> > +    matrix:
> > +      TEST_NAME: kmod
> > +      # Pending resolution of https://launchpad.net/bugs/2020677
> > +      # TEST_NAME: offloads
> > +      TEST_NAME: userspace
> > +
> > +  prepare_script: |
> > +    apt-get update
> > +    apt-get --yes install linux-headers-$(uname -r) ${DEPENDENCIES}
> > +
> > +  configure_script: |
> > +    ./boot.sh
> > +    ./configure \
> > +        --prefix=/usr \
> > +        --localstatedir=/var \
> > +        --sysconfdir=/etc \
> > +        --with-dpdk=${DPDK}
> > +
> > +  build_script:
> > +    - make debian-source
> > +
> > +  check_script: |
> > +    if [ "${DPDK}" = "no" ]; then
> > +        deb_dpdk_build_opt="nodpdk"
> > +    else
> > +        deb_dpdk_build_opt=""
> > +    fi
> > +    autopkgtest \
> > +        --env DEB_BUILD_OPTIONS="nocheck parallel=8 ${deb_dpdk_build_opt}" 
> > \
> > +        --test-name $TEST_NAME \
> > +        *.dsc \
> > +        -- null
>
> There seems to be some duplication here.  Maybe we can just define
> a matrix with 6 sets of variables?  Each set with an image family
> and a test name?  Maybe also CPU number.  The only test that needs
> 4 cores is DPDK.  And we have 16 cores available in parallel.  We
> can run 5 jobs with 2 cores each and 1 job with 4 cores.  This way
> we'll be able to run all the jobs in parallel saving a noticeable
> amount of time.
>
> What do you think?

Yes, I did not like the duplication either, but after staring at the
Cirrus CI docs for a while, I did not really find a good way to do it,
and I also wanted feedback on the idea before spending more time on
it.

> We may also try to use the templating functionality to avoid
> duplication at least:
>   
> https://cirrus-ci.org/guide/tips-and-tricks/#sharing-configuration-between-tasks

Ah, thank you for this pointer, I did not find that the last time I
looked at it.

I'll come up with an improved version and send a new proposal, thank
you for your feedback, much appreciated!

-- 
Frode Nordahl

> Best regards, Ilya Maximets.
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to