From: Guopeng Zhang <guopeng.zhang@linux.dev>
To: "Waiman Long" <longman@redhat.com>,
"Ridong Chen" <ridong.chen@linux.dev>,
"Tejun Heo" <tj@kernel.org>,
"Johannes Weiner" <hannes@cmpxchg.org>,
"Michal Koutný" <mkoutny@suse.com>,
"Shuah Khan" <shuah@kernel.org>
Cc: cgroups@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-kselftest@vger.kernel.org, Hui Peng <benquike@gmail.com>
Subject: Re: [PATCH-next v2 5/6] selftests/cgroup: Add tests for housekeeping check
Date: Sun, 11 Oct 2026 16:48:20 +0800 [thread overview]
Message-ID: <c7bf4584-0a47-445b-af10-4b1a29e9cdec@linux.dev> (raw)
In-Reply-To: <20261010221938.243859-6-longman@redhat.com>
在 2026/10/11 06:19, Waiman Long 写道:
> Whenever a partition is enabled or the cpumask of a valid partition
> changes, a housekeeping check will be performed to ensure that the
> change won't violate the imposed housekeeping constraints. One of the
> constraints is that a boot-time isolated CPU will not be used to form
> a non-isolated root partition. This requires the presence of boot-time
> isolated CPUs when a test is run.
>
> The test_cpuset_prs.sh test script is now updated to run a set a
> special housekeeping check tests that will only be run if a suitable
> boot-time isolated CPU is present. This will enable us to detect bugs
> or regressions in the housekeeping checking code though a "isolcpus="
> boot parameter with CPUs beyond CPU 8 must be present.
>
> Adding test to check for exhaustion of all the housekeeping CPUs is
> much harder and so will not be attempted at this time.
>
> This patch also includes a minor fix to the REMOTE_TEST_MATRIX to avoid
> test failure when the -v option is used.
>
> Signed-off-by: Waiman Long <longman@redhat.com>
> ---
> .../selftests/cgroup/test_cpuset_prs.sh | 109 ++++++++++++++----
> 1 file changed, 87 insertions(+), 22 deletions(-)
>
> diff --git a/tools/testing/selftests/cgroup/test_cpuset_prs.sh b/tools/testing/selftests/cgroup/test_cpuset_prs.sh
> index 7efd5e645767..3d392e8c66aa 100755
> --- a/tools/testing/selftests/cgroup/test_cpuset_prs.sh
> +++ b/tools/testing/selftests/cgroup/test_cpuset_prs.sh
> @@ -86,26 +86,37 @@ echo "" > test/cpuset.cpus
>
> #
> # If isolated CPUs have been reserved at boot time (as shown in
> -# cpuset.cpus.isolated), these isolated CPUs should be outside of CPUs 0-8
> -# that will be used by this script for testing purpose. If not, some of
> -# the tests may fail incorrectly. Wait a bit and retry again just in case
> -# these isolated CPUs are leftover from previous run and have just been
> -# cleaned up earlier in this script.
> +# /sys/devices/system/cpu/isolated), these isolated CPUs should be outside of
> +# CPUs 0-8 that will be used by this script for testing purpose. If not, some
> +# of the tests may fail incorrectly.
> #
> -# These pre-isolated CPUs should stay in an isolated state throughout the
> +# The current set of isolated CPUs (as shown in cpuset.cpus.isolated) should
> +# be the same as the boot value. If not, wait a bit and retry again just in
> +# case these isolated CPUs are leftover from previous run and have just been
> +# cleaned up earlier in this script. If they still don't match, we report an
> +# warning and skip the test.
> +#
> +# These boot isolated CPUs should stay in an isolated state throughout the
> # testing process for now.
> #
> -BOOT_ISOLCPUS=$(cat $CGROUP2/cpuset.cpus.isolated)
> +BOOT_ISOLCPUS=$(cat /sys/devices/system/cpu/isolated)
> +CURRENT_ISOLCPUS=$(cat $CGROUP2/cpuset.cpus.isolated)
> +FIRST_ISOLCPUS=
> +TEST_ISOLCPUS=
> +
> [[ -n "$BOOT_ISOLCPUS" ]] && {
> + FIRST_ISOLCPUS=$(echo $BOOT_ISOLCPUS | sed -e "s/[,-].*//")
> + [[ $FIRST_ISOLCPUS -le 8 ]] &&
> + skip_test "Boot-isolated CPUs ($BOOT_ISOLCPUS) overlap CPUs to be tested"
> + echo "Boot-isolated CPUs: $BOOT_ISOLCPUS"
> +}
> +
> +[[ "$BOOT_ISOLCPUS" != "$CURRENT_ISOLCPUS" ]] && {
> sleep 0.5
> - BOOT_ISOLCPUS=$(cat $CGROUP2/cpuset.cpus.isolated)
> + CURRENT_ISOLCPUS=$(cat $CGROUP2/cpuset.cpus.isolated)
> + [[ "$BOOT_ISOLCPUS" != "$CURRENT_ISOLCPUS" ]] &&
> + skip_test "Current isolated CPUs ($CURRENT_ISOLCPUS) don't match boot isolated CPUs!"
> }
> -if [[ -n "$BOOT_ISOLCPUS" ]]
> -then
> - [[ $(echo $BOOT_ISOLCPUS | sed -e "s/[,-].*//") -le 8 ]] &&
> - skip_test "Pre-isolated CPUs ($BOOT_ISOLCPUS) overlap CPUs to be tested"
> - echo "Pre-isolated CPUs: $BOOT_ISOLCPUS"
> -fi
>
> cleanup()
> {
> @@ -202,7 +213,7 @@ test_add_proc()
> #
> # ECPUs - effective CPUs of cpusets
> # Pstate - partition root state
> -# ISOLCPUS - isolated CPUs (<icpus>[,<icpus2>])
> +# ISOLCPUS - isolated CPUs (<icpus>[,<icpus2>] or .)
> #
> # Note that if there are 2 fields in ISOLCPUS, the first one is for
> # sched-debug matching which includes offline CPUs and single-CPU partitions
> @@ -444,6 +455,35 @@ TEST_MATRIX=(
> " C0-3 . . C4-5 X3-5 . . . 1 A1:0-3|B1:4-5"
> )
>
> +# Test matrix with boot time isolated CPUs present for housekeeping check testing
> +ISOLCPUS_TEST_MATRIX=(
> + # old-A1 old-A2 old-A3 old-B1 new-A1 new-A2 new-A3 new-B1 fail ECPUs Pstate ISOLCPUS
> + # ------ ------ ------ ------ ------ ------ ------ ------ ---- ----- ------ --------
> + # A local isolated partition containing boot isolated CPU cannot be
> + # switched to root partition.
> + " C1-2,I:P2 . . . P1 . . . 0 A1:1-2,I A1:P-1 ."
> +
> + # A remote isolated partition containing boot isolated CPU cannot be
> + # switched to root partition.
> + " X1-2,I CX1-2,I:P2 . . . P1 . . 0 A2:1-2,I A2:P-1 ."
> +
> + # A local isolated partition with a boot isolated CPU distributed to a
> + # child isolated partition also cannot be switched to a root partition.
> + " C1-3,I:P2 C1,I:P2 . . P1 . . . 0 A1:1-3,I|A2:1,I A1:P-1|A2:P-2 ."
> +
> + # A remote isolated partition with a boot isolated CPU distributed to a
> + # child isolated partition also cannot be switched to a root partition.
> + " X1-3,I C1-3,I:P2 C1,I:P2 . . P1 . . 0 A2:1-3,I|A3:1,I A2:P-1|A3:P-2 ."
> +
> + # The cpumask of a local root partition cannot be changed to include a
> + # boot isolated CPU.
> + " C1-2:P1 . . . C2,I . . . 0 A1:2,I A1:P-1 ."
> +
> + # The cpumask of a remote root partition cannot be changed to include a
> + # boot isolated CPU.
> + " CX1-2,I CX1-2:P1 . . . CX2,I . . 0 A1:1-2,I|A2:2,I A2:P-1 ."
> +)
Could we add two invalid-root revival cases with an explicit exclusive
mask here? For example:
# An invalid root must stay invalid when cpus grows but exclusive
# still contains a boot isolated CPU.
" CX1,I:P1 . . . C1-2,I . . . 0 A1:1-2,I A1:P-1 ."
# Growing exclusive must not revive it either.
" C1-2,I:X1,I:P1 . . . X1-2,I . . . 0 A1:1-2,I A1:P-1 ."
Thanks,
Guopeng
> +
> #
> # Cpuset controller remote partition test matrix.
> #
> @@ -496,8 +536,8 @@ REMOTE_TEST_MATRIX=(
> p1:P1|c11:P1|c12:P-1"
> # Narrowing cpuset.cpus to previously sibling-excluded CPUs should
> # not return CPUs that were never actually owned.
> - " C1-4:P1 . C1-2:P1 C1-3:P2 . . \
> - . . . C3 . . p1:4|c11:1-2|c12:3 \
> + " C1-5:P1 . C1-2:P1 C1-3:P2 . . \
> + . . . C3 . . p1:4-5|c11:1-2|c12:3 \
> p1:P1|c11:P1|c12:P2 3"
> # Expanding cpuset.cpus to include a previously sibling-excluded CPU
> # after the sibling has become a member should correctly request it.
> @@ -541,6 +581,27 @@ write_cpu_online()
> pause 0.05
> }
>
> +#
> +# Set the CPUS values
> +# $1 - the passed in cpu parameter
> +#
> +# The special ",I" suffix if present is being replaced by the first boot CPU
> +# and assigned to the "CPUS" variable when the TEST_ISOLCPUS flag is set.
> +# If not, the program will exit with an error.
> +#
> +set_cpus()
> +{
> + local cpus=$1
> + if [[ $(expr "$cpus" : .*,I) -gt 0 ]]
> + then
> + [[ -z "$TEST_ISOLCPUS" ]] &&
> + skip_test "',I' added to non-isolcpus testing matrix!"
> + CPUS=$(echo $cpus | sed -e "s/,I/,$FIRST_ISOLCPUS/")
> + else
> + CPUS=$cpus
> + fi
> +}
> +
> #
> # Set controller state
> # $1 - cgroup directory
> @@ -575,16 +636,16 @@ set_ctrl_state()
> }
> case $CMD in
> X*)
> - CPUS=${CMD#?}
> + set_cpus ${CMD#?}
> COMM="echo $CPUS > $XFILE"
> eval $COMM $REDIRECT
> ;;
> CX*)
> - CPUS=${CMD#??}
> + set_cpus ${CMD#??}
> COMM="echo $CPUS > $CFILE; echo $CPUS > $XFILE"
> eval $COMM $REDIRECT
> ;;
> - C*) CPUS=${CMD#?}
> + C*) set_cpus ${CMD#?}
> COMM="echo $CPUS > $CFILE"
> eval $COMM $REDIRECT
> ;;
> @@ -978,8 +1039,11 @@ run_state_test()
> I=0
> eval CNT="\${#$TEST[@]}"
>
> + # Skip isolcpus specific test matrix if FIRST_ISOLCPUS not defined
> + [[ -n "$TEST_ISOLCPUS" && -z "$FIRST_ISOLCPUS" ]] && return
> +
> reset_cgroup_states
> - console_msg "Running state transition test ..."
> + console_msg "Running state transition test for $TEST ..."
>
> while [[ $I -lt $CNT ]]
> do
> @@ -998,7 +1062,7 @@ run_state_test()
> NEW_A3=$7
> NEW_B1=$8
> RESULT=$9
> - ECPUS=${10}
> + ECPUS=$(echo ${10} | sed -e "s/,I/,${FIRST_ISOLCPUS}/g")
> STATES=${11}
> ICPUS=${12}
>
> @@ -1284,6 +1348,7 @@ test_inotify()
> trap cleanup 0 2 3 6
> run_state_test TEST_MATRIX
> run_remote_state_test REMOTE_TEST_MATRIX
> +TEST_ISOLCPUS=1 run_state_test ISOLCPUS_TEST_MATRIX
> test_isolated
> test_boot_isolated
> test_inotify
next prev parent reply other threads:[~2026-10-11 8:48 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-10 22:19 [PATCH-next v2 0/6] cgroup/cpuset: Fix various housekeeping check problems Waiman Long
2026-10-10 22:19 ` [PATCH-next v2 1/6] cgroup/cpuset: Consolidate isolated_cpus_can_update() into prstate_housekeeping_conflict() Waiman Long
2026-10-11 2:02 ` Ridong Chen
2026-10-11 5:49 ` Guopeng Zhang
2026-10-10 22:19 ` [PATCH-next v2 2/6] cgroup/cpuset: Consider all the exclusive CPUs when doing housekeeping check Waiman Long
2026-10-11 8:34 ` Guopeng Zhang
2026-10-10 22:19 ` [PATCH-next v2 3/6] cgroup/cpuset: Do housekeeping check before converting invalid partition to valid Waiman Long
2026-10-11 2:06 ` Ridong Chen
2026-10-11 6:04 ` Guopeng Zhang
2026-10-10 22:19 ` [PATCH-next v2 4/6] cgroup/cpuset: Properly disabling partition when partition state switching fails Waiman Long
2026-10-11 6:05 ` Guopeng Zhang
2026-10-10 22:19 ` [PATCH-next v2 5/6] selftests/cgroup: Add tests for housekeeping check Waiman Long
2026-10-11 8:48 ` Guopeng Zhang [this message]
2026-10-10 22:19 ` [PATCH-next v2 6/6] selftests/cgroup: Skip test_cpuset_prs.sh test if some required CPUs are offline Waiman Long
2026-10-11 9:00 ` Guopeng Zhang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c7bf4584-0a47-445b-af10-4b1a29e9cdec@linux.dev \
--to=guopeng.zhang@linux.dev \
--cc=benquike@gmail.com \
--cc=cgroups@vger.kernel.org \
--cc=hannes@cmpxchg.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=longman@redhat.com \
--cc=mkoutny@suse.com \
--cc=ridong.chen@linux.dev \
--cc=shuah@kernel.org \
--cc=tj@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®