Skip to content

Commit

Permalink
More flexibly test affinity setting
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
staticfloat committed Mar 19, 2022
1 parent 802f3a3 commit 8759728
Showing 1 changed file with 15 additions and 13 deletions.
28 changes: 15 additions & 13 deletions test/threads.jl
Original file line number Diff line number Diff line change
Expand Up @@ -96,9 +96,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 +114,19 @@ function get_nthreads(options = ``; cpus = nothing)
end

@testset "nthreads determined based on CPU affinity" begin
if AFFINITY_SUPPORTED && Sys.CPU_THREADS 2
allowed_cpus = findall(uv_thread_getaffinity())
if AFFINITY_SUPPORTED && length(allowed_cpus) 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
@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
Expand Down

0 comments on commit 8759728

Please sign in to comment.