From 6317f92120bba15c6ea8ee02c47ebff4afb5c53c Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 6 Apr 2021 10:42:53 -0400 Subject: 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 08ef18f..facf9ba 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 7a5e94a..9de06d1 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}") -- cgit v0.12 From 3fd2cffb4d4649f7773297d5af7a6bda5ef9a69b Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 6 Apr 2021 10:43:49 -0400 Subject: 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 6402a5d..e7a0985 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 9de06d1..6576c26 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( -- cgit v0.12