From 4f956cf43ad8f57181df11506298d0f8d511d08a Mon Sep 17 00:00:00 2001 From: Tamir Duberstein Date: Wed, 30 Sep 2026 10:20:35 -0400 Subject: [PATCH] ci: use twice the CPU count on both providers GitHub Actions sets JOBS to ten regardless of runner size, while GitLab CI uses the detected CPU count. Use twice the CPU count for Make and prove on both providers, doubling GitLab's job count. Five GitHub Actions attempts per policy, with the long tests enabled, gave these sums of per-job median successful build/test-step times (minutes; four or five samples per job) [1-3]: Fixed 10 CPU count 2x CPU count Linux Make 278.9 273.9 259.9 macOS Make 94.5 119.1 99.8 Windows Make 102.2 103.8 100.8 Workflow overhead is excluded; Windows runner images varied. Use twice the CPU count to scale concurrency with runner size while avoiding the larger macOS slowdown observed with one job per CPU. Compared with ten jobs, this trades a lower Linux total for a higher macOS total. Keep GitLab's Linux and Windows CPU queries. On macOS, use the native sysctl command on both providers so CPU detection does not depend on GNU coreutils. Link: https://github.com/tamird/git/actions/runs/36070869894/attempts/1 [1] Link: https://github.com/tamird/git/actions/runs/36070867524/attempts/1 [2] Link: https://github.com/tamird/git/actions/runs/36070867647/attempts/1 [3] Assisted-by: LLM Signed-off-by: Tamir Duberstein Signed-off-by: Junio C Hamano --- ci/lib.sh | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/ci/lib.sh b/ci/lib.sh index b939110a6e..131d18217a 100755 --- a/ci/lib.sh +++ b/ci/lib.sh @@ -226,7 +226,6 @@ then cache_dir="$HOME/none" GIT_TEST_OPTS="--github-workflow-markup" - JOBS=10 distro=$(echo "$CI_JOB_IMAGE" | tr : -) elif test true = "$GITLAB_CI" @@ -242,7 +241,6 @@ then case "$OS,$CI_JOB_IMAGE" in Windows_NT,*) CI_OS_NAME=windows - JOBS=$NUMBER_OF_PROCESSORS ;; *,macos-*) # GitLab CI has Python installed via multiple package managers, @@ -252,11 +250,9 @@ then export PATH="$(brew --prefix)/bin:$PATH" CI_OS_NAME=osx - JOBS=$(nproc) ;; *,almalinux:*|*,alpine:*|*,debian:*|*,fedora:*|*,ubuntu:*|*,i386/ubuntu:*) CI_OS_NAME=linux - JOBS=$(nproc) ;; *) echo "Could not identify OS image" >&2 @@ -283,6 +279,19 @@ else exit 1 fi +case "$CI_OS_NAME" in +windows|windows_nt) + JOBS=$NUMBER_OF_PROCESSORS + ;; +osx) + JOBS=$(sysctl -n hw.logicalcpu) + ;; +*) + JOBS=$(nproc) + ;; +esac +JOBS=$((2 * JOBS)) + MAKEFLAGS="$MAKEFLAGS --jobs=$JOBS" GIT_PROVE_OPTS="--timer --jobs $JOBS"