On 2025/11/15 0:15, Michal Koutný wrote:
> On Fri, Nov 14, 2025 at 02:24:48PM +0800, Sun Shaojie <[email protected]> 
> wrote:
>> The desired outcome is that after step #5, although B1 writes "0-3" to 
>> cpuset.cpus, A1 can still remain as "root", and B1 ends up with effective 
>> CPUs of 2-3. In summary, We want to avoid A1's invalidation when B1 
>> changes its cpuset.cpus. Because cgroup v2 allows the effective CPU mask 
>> of a cpuset to differ from its requested mask.
> 
> So the new list of reasons why configured cpuset's cpus change are:
> - hotplug,
> - ancestor's config change,
> - stealing by a sibling (new).
> 
> IIUC, the patch proposes this behavior:
> 
>   echo root >A1.cpuset.partition
>   echo 0-1 >A1.cpuset.cpus
>   
>   echo root >B1.cpuset.partition
>   echo 1-2 >B1.cpuset.cpus    # invalidates A1
>   
>   echo 0-1 >A1.cpuset.cpus    # invalidates B1
>   
>   ping-pong over CPU 1 ad libitum
> 
> I think the right (tm) behavior would be not to depend on the order in
> which config is applied to siblings, i.e.
> 
>   echo root >A1.cpuset.partition
>   echo 0-1 >A1.cpuset.cpus
>   
>   echo root >B1.cpuset.partition
>   echo 1-2 >B1.cpuset.cpus    # invalidates both A1 and B1
> 
>   echo 0-1 >A1.cpuset.cpus    # no change anymore
> 
> (I hope my example sheds some light on my understanding of the situation
> and desired behavior.)

Before applying the patch, the behavior I got:

        # cd /sys/fs/cgroup/
        # mkdir A1
        # mkdir B1
        # echo root > A1/cpuset.cpus.partition
        # echo 0-1 > A1/cpuset.cpus
        # cat A1/cpuset.cpus.partition
        root
        # echo root > B1/cpuset.cpus.partition
        # echo 1-2 > B1/cpuset.cpus  # A1 is exclusive, invalidate both A1 and 
B1
        # cat A1/cpuset.cpus.partition
        root invalid
        # cat B1/cpuset.cpus.partition
        root invalid (cpuset.cpus and cpuset.cpus.exclusive are empty)
        # echo root > B1/cpuset.cpus.partition
        # cat B1/cpuset.cpus.partition
        root invalid (Cpu list in cpuset.cpus not exclusive)
        # echo root > A1/cpuset.cpus.partition
        # cat A1/cpuset.cpus.partition
        root invalid (Cpu list in cpuset.cpus not exclusive)
        #

After applying the patch, the behavior I got:

        # cd /sys/fs/cgroup/
        # mkdir A1
        #  mkdir B1
        # echo root > A1/cpuset.cpus.partition
        # echo 0-1 > A1/cpuset.cpus
        # cat A1/cpuset.cpus.partition
        root
        # echo root > B1/cpuset.cpus.partition
        # echo 1-2 > B1/cpuset.cpus # A1 is exclusive, B1 is going to be 
exclusive
        # cat A1/cpuset.cpus.partition
        root
        # cat B1/cpuset.cpus.partition # A1 and B1 should be invalid.
        root
        # echo member > B1/cpuset.cpus.partition
        # echo root > B1/cpuset.cpus.partition
        # cat A1/cpuset.cpus.partition
        root
        # cat B1/cpuset.cpus.partition
        root invalid (Cpu list in cpuset.cpus not exclusive)
        # echo member > A1/cpuset.cpus.partition
        # echo root > B1/cpuset.cpus.partition
        # echo root > A1/cpuset.cpus.partition
        # cat A1/cpuset.cpus.partition
        root invalid (Cpu list in cpuset.cpus not exclusive)
        # cat B1/cpuset.cpus.partition
        root

After applying the patch, The result is unexpected.

-- 
Best regards,
Ridong


Reply via email to