diff --git a/test/threads.jl b/test/threads.jl index dde50590ae08b..5cf0977a58977 100644 --- a/test/threads.jl +++ b/test/threads.jl @@ -4,6 +4,8 @@ using Test using Base.Threads +include("print_process_affinity.jl") # import `uv_thread_getaffinity` + # simple sanity tests for locks under cooperative concurrent access let lk = ReentrantLock() c1 = Event() @@ -96,9 +98,10 @@ end const AFFINITY_SUPPORTED = (Sys.islinux() || Sys.iswindows()) && !running_under_rr() if AFFINITY_SUPPORTED - if Sys.CPU_THREADS > 1 - @test run_with_affinity([2]) == "2" - @test run_with_affinity([1, 2]) == "1,2" + allowed_cpus = findall(uv_thread_getaffinity()) + if length(allowed_cpus) ≥ 2 + @test run_with_affinity(allowed_cpus[1:1]) == "$(allowed_cpus[1])" + @test run_with_affinity(allowed_cpus[1:2]) == "$(allowed_cpus[1]),$(allowed_cpus[2])" end end @@ -113,18 +116,21 @@ function get_nthreads(options = ``; cpus = nothing) end @testset "nthreads determined based on CPU affinity" begin - if AFFINITY_SUPPORTED && Sys.CPU_THREADS ≥ 2 - @test get_nthreads() ≥ 2 - @test get_nthreads(cpus = [1]) == 1 - @test get_nthreads(cpus = [2]) == 1 - @test get_nthreads(cpus = [1, 2]) == 2 - @test get_nthreads(`-t1`, cpus = [1]) == 1 - @test get_nthreads(`-t1`, cpus = [2]) == 1 - @test get_nthreads(`-t1`, cpus = [1, 2]) == 1 + if AFFINITY_SUPPORTED + allowed_cpus = findall(uv_thread_getaffinity()) + if length(allowed_cpus) ≥ 2 + @test get_nthreads() ≥ 2 + @test get_nthreads(cpus = allowed_cpus[1:1]) == 1 + @test get_nthreads(cpus = allowed_cpus[2:2]) == 1 + @test get_nthreads(cpus = allowed_cpus[1:2]) == 2 + @test get_nthreads(`-t1`, cpus = allowed_cpus[1:1]) == 1 + @test get_nthreads(`-t1`, cpus = allowed_cpus[2:2]) == 1 + @test get_nthreads(`-t1`, cpus = allowed_cpus[1:2]) == 1 - if Sys.CPU_THREADS ≥ 3 - @test get_nthreads(cpus = [1, 3]) == 2 - @test get_nthreads(cpus = [2, 3]) == 2 + if length(allowed_cpus) ≥ 3 + @test get_nthreads(cpus = allowed_cpus[1:2:3]) == 2 + @test get_nthreads(cpus = allowed_cpus[2:3]) == 2 + end end end end