From 70dd26c8cb9e3cd526121a1471f6e4a7e76e3659 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mos=C3=A8=20Giordano?= <765740+giordano@users.noreply.github.com> Date: Mon, 23 Feb 2026 21:49:51 +0100 Subject: [PATCH 1/2] Avoid overflow on 32-bit systems --- src/ParallelTestRunner.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ParallelTestRunner.jl b/src/ParallelTestRunner.jl index fc13cc0..8d1ed7b 100644 --- a/src/ParallelTestRunner.jl +++ b/src/ParallelTestRunner.jl @@ -49,7 +49,7 @@ function get_max_worker_rss() mb = if haskey(ENV, "JULIA_TEST_MAXRSS_MB") parse(Int, ENV["JULIA_TEST_MAXRSS_MB"]) elseif Sys.WORD_SIZE == 64 - Sys.total_memory() > 8*2^30 ? 3800 : 3000 + Sys.total_memory() > 8*Int64(2)^30 ? 3800 : 3000 else # Assume that we only have 3.5GB available to a single process, and that a single # test can take up to 2GB of RSS. This means that we should instruct the test @@ -389,7 +389,7 @@ Determine default number of parallel jobs. """ function default_njobs(; cpu_threads = Sys.CPU_THREADS, free_memory = available_memory()) jobs = cpu_threads - memory_jobs = Int64(free_memory) ÷ (2 * 2^30) + memory_jobs = Int64(free_memory) ÷ (2 * Int64(2)^30) return max(1, min(jobs, memory_jobs)) end From 24d63951838e871ea8c1b1e495bfcd7c4d9cde9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mos=C3=A8=20Giordano?= Date: Tue, 24 Feb 2026 00:22:51 +0000 Subject: [PATCH 2/2] Add tests for overflow in `default_njobs` --- test/runtests.jl | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/runtests.jl b/test/runtests.jl index 040db00..213075a 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -24,6 +24,15 @@ cd(@__DIR__) @test isfile(ParallelTestRunner.get_history_file(ParallelTestRunner)) end +@testset "default njobs" begin + @test ParallelTestRunner.default_njobs(; cpu_threads=4, free_memory=UInt64(2) ^ 28) == 1 + @test ParallelTestRunner.default_njobs(; cpu_threads=4, free_memory=UInt64(2) ^ 30) == 1 + @test ParallelTestRunner.default_njobs(; cpu_threads=4, free_memory=UInt64(2) ^ 31) == 1 + @test ParallelTestRunner.default_njobs(; cpu_threads=4, free_memory=UInt64(2) ^ 32) == 2 + @test ParallelTestRunner.default_njobs(; cpu_threads=4, free_memory=UInt64(2) ^ 33) == 4 + @test ParallelTestRunner.default_njobs(; cpu_threads=4, free_memory=UInt64(2) ^ 34) == 4 +end + @testset "subdir use" begin d = @__DIR__ testsuite = find_tests(d)