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