From 2581b0ad11591afef7bcebeb5483e53d9d403fef Mon Sep 17 00:00:00 2001 From: Ilya Maximets Date: Mon, 5 Aug 2019 15:26:02 +0300 Subject: travis: Combine kernel builds. Single kernel build job takes ~3 minutes in average. Most of this time takes VM spawning and initial configuration. Combining these 24 jobs in 4 allows us to better utilize workers and not waste time on spawning VMs. Before: 24 jobs * 3 minutes = 72 minutes 72 minutes / 5 workers = 14.4 minutes / worker After: 4 jobs * 10 minutes = 40 minutes 40 minutes / 4 workers = 10 minutes / worker + 1 free worker that able to run other jobs at the same time. Signed-off-by: Ilya Maximets Acked-by: Aaron Conole --- .travis.yml | 18 ++++-------------- .travis/linux-build.sh | 46 ++++++++++++++++++++++++++++++++++++---------- 2 files changed, 40 insertions(+), 24 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7fe4bfacf..370b3d0a6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -34,24 +34,14 @@ env: - OPTS="--disable-ssl" - TESTSUITE=1 KERNEL=3.16 - TESTSUITE=1 OPTS="--enable-shared" + - TESTSUITE=1 DPDK=1 + - TESTSUITE=1 LIBS=-ljemalloc + - KERNEL_LIST="5.0 4.20 4.19 4.18 4.17 4.16" + - KERNEL_LIST="4.15 4.14 4.9 4.4 3.19 3.16" - BUILD_ENV="-m32" OPTS="--disable-ssl" - DPDK=1 OPTS="--enable-shared" - - TESTSUITE=1 DPDK=1 - DPDK_SHARED=1 - DPDK_SHARED=1 OPTS="--enable-shared" - - KERNEL=5.0 - - KERNEL=4.20 - - KERNEL=4.19 - - KERNEL=4.18 - - KERNEL=4.17 - - KERNEL=4.16 - - KERNEL=4.15 - - KERNEL=4.14 - - KERNEL=4.9 - - KERNEL=4.4 - - KERNEL=3.19 - - KERNEL=3.16 - - TESTSUITE=1 LIBS=-ljemalloc matrix: include: diff --git a/.travis/linux-build.sh b/.travis/linux-build.sh index 98aa12b22..1577ae516 100755 --- a/.travis/linux-build.sh +++ b/.travis/linux-build.sh @@ -31,6 +31,8 @@ function install_kernel() sed 's/.*\..*\.\(.*\)/\1/' | sort -h | tail -1) version="${1}.${lo_ver}" + rm -rf index* linux-* + url="${base_url}/linux-${version}.tar.xz" # Download kernel sources. Try direct link on CDN failure. wget ${url} || wget ${url} || wget ${url/cdn/www} @@ -117,6 +119,23 @@ function configure_ovs() ./boot.sh && ./configure $* || { cat config.log; exit 1; } } +function build_ovs() +{ + local KERNEL=$1 + + configure_ovs $OPTS + make selinux-policy + + # Only build datapath if we are testing kernel w/o running testsuite + if [ "${KERNEL}" ]; then + pushd datapath + make -j4 + popd + else + make -j4 + fi +} + if [ "$KERNEL" ]; then install_kernel $KERNEL fi @@ -132,18 +151,19 @@ if [ "$DPDK" ] || [ "$DPDK_SHARED" ]; then fi fi -OPTS="$EXTRA_OPTS $*" - if [ "$CC" = "clang" ]; then export OVS_CFLAGS="$CFLAGS -Wno-error=unused-command-line-argument" elif [[ $BUILD_ENV =~ "-m32" ]]; then # Disable sparse for 32bit builds on 64bit machine export OVS_CFLAGS="$CFLAGS $BUILD_ENV" else - OPTS="$OPTS --enable-sparse" + OPTS="--enable-sparse" export OVS_CFLAGS="$CFLAGS $BUILD_ENV $SPARSE_FLAGS" fi +save_OPTS="${OPTS} $*" +OPTS="${EXTRA_OPTS} ${save_OPTS}" + if [ "$TESTSUITE" ]; then # 'distcheck' will reconfigure with required options. # Now we only need to prepare the Makefile without sparse-wrapped CC. @@ -156,14 +176,20 @@ if [ "$TESTSUITE" ]; then exit 1 fi else - configure_ovs $OPTS - make selinux-policy - - # Only build datapath if we are testing kernel w/o running testsuite - if [ "$KERNEL" ]; then - cd datapath + if [ -z "${KERNEL_LIST}" ]; then build_ovs ${KERNEL}; + else + save_EXTRA_OPTS="${EXTRA_OPTS}" + for KERNEL in ${KERNEL_LIST}; do + echo "==============================" + echo "Building with kernel ${KERNEL}" + echo "==============================" + EXTRA_OPTS="${save_EXTRA_OPTS}" + install_kernel ${KERNEL} + OPTS="${EXTRA_OPTS} ${save_OPTS}" + build_ovs ${KERNEL} + make distclean + done fi - make -j4 fi exit 0 -- cgit v1.2.1