Skip to content

Commit

Permalink
More flexible test affinity setting (#44677)
Browse files Browse the repository at this point in the history
* More flexibly test affinity setting

When running on a machine with `cpusets` applied, we are unable to
assign CPU affinity to CPUs 1 and 2; we may be locked to CPUs 9-16, for
example.  So we must inspect what our current cpumask is, and from that
select CPUs that we can safely assign affinity to in our tests.

* Import `uv_thread_getaffinity` from `print_process_affinity.jl`

* Call `uv_thread_getaffinity` only if `AFFINITY_SUPPORTED`

* Fix a syntax error

Co-authored-by: Takafumi Arakaki <aka.tkf@gmail.com>
  • Loading branch information
staticfloat and tkf authored Mar 21, 2022
1 parent 1eae65b commit 32b1305
Showing 1 changed file with 20 additions and 14 deletions.
34 changes: 20 additions & 14 deletions test/threads.jl
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down Expand Up @@ -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

Expand All @@ -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
Expand Down

0 comments on commit 32b1305

Please sign in to comment.