Re: [PATCH v5] cpuset: Avoid invalidating sibling partitions on cpuset.cpus conflict.

From: Sun Shaojie

Date: Fri Nov 21 2025 - 05:32:39 EST


Hi, Ridong,

On Thu, 20 Nov 2025 21:45:16, Chen Ridong wrote:
>On 2025/11/20 21:07, Sun Shaojie wrote:
>> I have carefully considered the scenario where parent effective CPUs are
>> empty, which corresponds to the following two cases. (After apply this patch).
>>
>> root cgroup
>> |
>> A1
>> / \
>> A2 A3
>>
>> Case 1:
>> Step:
>> #1> echo "0-1" > A1/cpuset.cpus
>> #2> echo "root" > A1/cpuset.cpus.partition
>> #3> echo "0-1" > A2/cpuset.cpus
>> #4> echo "root" > A2/cpuset.cpus.partition
>>
>> After step #4,
>>
>> | A1 | A2 | A3 |
>> cpus_allowed | 0-1 | 0-1 | |
>> effective_cpus | | 0-1 | |
>> prstate | root | root | member |
>>
>> After step #4, A3's effective CPUs is empty.
>>
>
>That may be a corner case is unexpected.
>
>> #5> echo "0-1" > A3/cpuset.cpus
>>
>
>If we create subdirectories (e.g., A4, A5, ...) under the A1 cpuset and then configure cpuset.cpus
>for A1 (a common usage scenario), processes can no longer be migrated into these subdirectories (A4,
>A5, ...) afterward. However, prior to your patch, this migration was allowed.

Are you referring to creating subdirectories (A4, A5, ...) after step #4?
And what parameters should be configured for A1's cpuset.cpus?
Could you provide a specific example?

Additionally, processes cannot be migrated into a cgroup whose
cpuset.cpus.effective is empty. However, this patch does not modify this behavior.

So why does applying this patch enable such migration?

>> After step #5,
>>
>> | A1 | A2 | A3 |
>> cpus_allowed | 0-1 | 0-1 | 0-1 |
>> effective_cpus | | 0-1 | |
>> prstate | root | root | member |
>>


Thanks,
Sun Shaojie