xref: /spdk/test/scheduler/isolate_cores.sh (revision 8571999d826071a4793ae93dc583715f292620f7)
1588dfe31SMichal Berger#  SPDX-License-Identifier: BSD-3-Clause
2588dfe31SMichal Berger#  Copyright (C) 2020 Intel Corporation.
3588dfe31SMichal Berger#  All rights reserved.
4588dfe31SMichal Berger
5da9946a7SMichal Berger# Select cores for the test
6da9946a7SMichal Bergerxtrace_disable
7da9946a7SMichal Berger
8da9946a7SMichal Bergersource "$testdir/common.sh"
9da9946a7SMichal Berger
10977a5357SMichal Bergerrestore_cgroups() {
11977a5357SMichal Berger	xtrace_disable
12*8571999dSMichal Berger	remove_cpuset_cgroup
13977a5357SMichal Berger	xtrace_restore
14977a5357SMichal Berger}
15977a5357SMichal Berger
16977a5357SMichal Bergertrap "restore_cgroups" EXIT
17977a5357SMichal Berger
18da9946a7SMichal Berger# Number of cpus to include in the mask
19da9946a7SMichal BergerNUM_CPUS=${NUM_CPUS:-8}
20da9946a7SMichal Berger
21977a5357SMichal Bergerinit_cpuset_cgroup
22da9946a7SMichal Bergermap_cpus
23da9946a7SMichal Berger
24da9946a7SMichal Berger# Build core mask. Avoid all CPUs that may be offline and skip cpu0
25da9946a7SMichal Berger# (and all its potential thread siblings) as it's already doing an
26da9946a7SMichal Berger# extra work for the kernel.
27da9946a7SMichal Bergerdenied_list $(get_cpus "${cpu_node_map[0]}" "${cpu_core_map[0]}")
28da9946a7SMichal Berger# If there are any isolated cpus (as defined on the kernel cmdline
29da9946a7SMichal Berger# with isolcpus) they take the priority. We fill up the list up to
30da9946a7SMichal Berger# NUM_CPUS, applying filtering as per the denied list. All cpus are
31da9946a7SMichal Berger# taken from node0.
32da9946a7SMichal Bergerallowed_list "$NUM_CPUS" 0
33da9946a7SMichal Berger
34da9946a7SMichal Berger# Assign proper resources to the cpuset/spdk
35da9946a7SMichal Bergerspdk_cpus=("${allowed[@]}")
36da9946a7SMichal Bergerspdk_cpus_csv=$(fold_array_onto_string "${spdk_cpus[@]}")
37c9c7c281SJosh Sorefspdk_cpumask=$(mask_cpus "${spdk_cpus[@]}")
38da9946a7SMichal Bergerspdk_main_core=${spdk_cpus[0]}
39da9946a7SMichal Bergerspdk_cpus_mems=0
40da9946a7SMichal Berger
41da9946a7SMichal Berger# Build list of remaining cpus for posterity
42da9946a7SMichal Bergerdenied_list "${spdk_cpus[@]}"
43da9946a7SMichal Bergerfold_list_onto_array allowed "${cpus[@]}"
44da9946a7SMichal Bergerfilter_allowed_list
45da9946a7SMichal Berger
46da9946a7SMichal Bergerall_cpus=("${allowed[@]}")
47da9946a7SMichal Bergerall_cpus_csv=$(fold_array_onto_string "${all_cpus[@]}")
48c9c7c281SJosh Sorefall_cpumask=$(mask_cpus "${all_cpus[@]}")
49977a5357SMichal Bergerall_cpus_mems=0
50977a5357SMichal Berger
51*8571999dSMichal Berger# For cgroupv2 it's required we jump first to the root cgroup ...
52*8571999dSMichal Bergermove_proc "$$" "/" "" cgroup.procs
53*8571999dSMichal Berger# ... so we can now settle in a dedicated cgroup /cpuset
54*8571999dSMichal Bergermove_proc "$$" "/cpuset" "" cgroup.procs
55*8571999dSMichal Berger
56*8571999dSMichal Bergerset_cgroup_attr "/cpuset" cpuset.cpus "$spdk_cpus_csv"
57*8571999dSMichal Bergerset_cgroup_attr "/cpuset" cpuset.mems "$spdk_cpus_mems"
58da9946a7SMichal Berger
59da9946a7SMichal Bergerexport \
60c9c7c281SJosh Soref	"spdk_cpumask=$spdk_cpumask" \
61da9946a7SMichal Berger	"spdk_cpus_csv=$spdk_cpus_csv" \
62da9946a7SMichal Berger	"spdk_cpus_no=${#spdk_cpus[@]}" \
63da9946a7SMichal Berger	"spdk_main_core=$spdk_main_core" \
64c9c7c281SJosh Soref	"all_cpumask=$all_cpumask" \
65da9946a7SMichal Berger	"all_cpus_csv=$all_cpus_csv"
66da9946a7SMichal Berger
67da9946a7SMichal Bergerxtrace_restore
68