From 6317f92120bba15c6ea8ee02c47ebff4afb5c53c Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 6 Apr 2021 10:42:53 -0400 Subject: [PATCH 1/2] ci: pay attention to the machine load when running tests CMake's test suite is sensitive to machine load and can cause spurious timeouts. To acknowledge this, prevent CTest from spawning tests into a busy machine. --- .gitlab/ci/ctest_test.cmake | 1 + .gitlab/ci/ctest_test_external.cmake | 1 + 2 files changed, 2 insertions(+) diff --git a/.gitlab/ci/ctest_test.cmake b/.gitlab/ci/ctest_test.cmake index 08ef18f192..facf9ba4ba 100644 --- a/.gitlab/ci/ctest_test.cmake +++ b/.gitlab/ci/ctest_test.cmake @@ -19,6 +19,7 @@ endif () include("${CMAKE_CURRENT_LIST_DIR}/ctest_exclusions.cmake") ctest_test( PARALLEL_LEVEL "${nproc}" + TEST_LOAD "${nproc}" RETURN_VALUE test_result EXCLUDE "${test_exclusions}") ctest_submit(PARTS Test) diff --git a/.gitlab/ci/ctest_test_external.cmake b/.gitlab/ci/ctest_test_external.cmake index 7a5e94a15d..9de06d1bc5 100644 --- a/.gitlab/ci/ctest_test_external.cmake +++ b/.gitlab/ci/ctest_test_external.cmake @@ -71,6 +71,7 @@ endif () include("${CMAKE_CURRENT_LIST_DIR}/ctest_exclusions.cmake") ctest_test( PARALLEL_LEVEL "${nproc}" + TEST_LOAD "${nproc}" RETURN_VALUE test_result ${ctest_label_args} EXCLUDE "${test_exclusions}") From 3fd2cffb4d4649f7773297d5af7a6bda5ef9a69b Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 6 Apr 2021 10:43:49 -0400 Subject: [PATCH 2/2] ci: limit builds by machine load To avoid starving test jobs, the build jobs should also back off if there is a lot of machine load. --- .gitlab/ci/ctest_build.cmake | 14 +++++++++++--- .gitlab/ci/ctest_test_external.cmake | 4 +++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/.gitlab/ci/ctest_build.cmake b/.gitlab/ci/ctest_build.cmake index 6402a5d206..e7a0985b7f 100644 --- a/.gitlab/ci/ctest_build.cmake +++ b/.gitlab/ci/ctest_build.cmake @@ -8,10 +8,18 @@ ctest_read_custom_files("${CTEST_BINARY_DIRECTORY}") # Pick up from where the configure left off. ctest_start(APPEND) +include(ProcessorCount) +ProcessorCount(nproc) +if (NOT "$ENV{CTEST_MAX_PARALLELISM}" STREQUAL "") + if (nproc GREATER "$ENV{CTEST_MAX_PARALLELISM}") + set(nproc "$ENV{CTEST_MAX_PARALLELISM}") + endif () +endif () + if (CTEST_CMAKE_GENERATOR STREQUAL "Unix Makefiles") - include(ProcessorCount) - ProcessorCount(nproc) - set(CTEST_BUILD_FLAGS "-j${nproc}") + set(CTEST_BUILD_FLAGS "-j${nproc} -l${nproc}") +elseif (CTEST_CMAKE_GENERATOR MATCHES "Ninja") + set(CTEST_BUILD_FLAGS "-l${nproc}") endif () ctest_build( diff --git a/.gitlab/ci/ctest_test_external.cmake b/.gitlab/ci/ctest_test_external.cmake index 9de06d1bc5..6576c26329 100644 --- a/.gitlab/ci/ctest_test_external.cmake +++ b/.gitlab/ci/ctest_test_external.cmake @@ -42,7 +42,9 @@ if (NOT "$ENV{CTEST_MAX_PARALLELISM}" STREQUAL "") endif () if (CTEST_CMAKE_GENERATOR STREQUAL "Unix Makefiles") - set(CTEST_BUILD_FLAGS "-j${nproc}") + set(CTEST_BUILD_FLAGS "-j${nproc} -l${nproc}") +elseif (CTEST_CMAKE_GENERATOR MATCHES "Ninja") + set(CTEST_BUILD_FLAGS "-l${nproc}") endif () ctest_build(