[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <316507033.21078.1583597207356.JavaMail.zimbra@efficios.com>
Date: Sat, 7 Mar 2020 11:06:47 -0500 (EST)
From: Mathieu Desnoyers <mathieu.desnoyers@...icios.com>
To: Tejun Heo <tj@...nel.org>
Cc: Li Zefan <lizefan@...wei.com>, cgroups <cgroups@...r.kernel.org>,
linux-kernel <linux-kernel@...r.kernel.org>,
Peter Zijlstra <peterz@...radead.org>,
Ingo Molnar <mingo@...nel.org>,
Valentin Schneider <valentin.schneider@....com>,
Thomas Gleixner <tglx@...utronix.de>
Subject: Re: [regression] cpuset: offlined CPUs removed from affinity masks
----- On Feb 19, 2020, at 11:12 AM, Tejun Heo tj@...nel.org wrote:
> On Wed, Feb 19, 2020 at 11:08:39AM -0500, Mathieu Desnoyers wrote:
>> I wonder if applying the online cpu masks to the per-thread affinity mask
>> is the correct approach ? I suspect what we may be looking for here is to keep
>
> Oh, the whole thing is wrong.
>
>> the affinity mask independent of cpu hotplug, and look-up both the per-thread
>> affinity mask and the online cpu mask whenever the scheduler needs to perform
>> "is_cpu_allowed()" to check task placement.
>
> Yes, that's what it should have done from the get-go. The way it's
> implemented now, maybe we can avoid some specific cases like cpuset
> not being used at all but it'll constantly get in the way if you're
> expecting thread affinity to retain its value across offlines.
Looking into solving this, one key issue seems to get in the way: cpuset
appear to care about not allowing to create a cpuset which has no currently
active CPU where to run, e.g.:
# it is forbidden to create an empty cpuset if the cpu is offlined first:
mkdir /sys/fs/cgroup/cpuset/test
echo 2 > /sys/fs/cgroup/cpuset/test/cpusets.cpus
cat /sys/fs/cgroup/cpuset/test/cpusets.cpu
2
echo 0 > /sys/devices/system/cpu/cpu1/online
echo 1 > /sys/fs/cgroup/cpuset/test/cpuset.cpus
bash: echo: write error: Invalid argument
cat /sys/fs/cgroup/cpuset/test/cpusets.cpu
2
# but it's perfectly fine to generate this empty cpuset by offlining
# a cpu _after_ creating the cpuset:
echo 0 > /sys/devices/system/cpu/cpu2/online
cat /sys/fs/cgroup/cpuset/test/cpusets.cpu
<----- empty (nothing)
Some further testing seems to show that tasks belonging to that empty
cpuset are placed anywhere on active cpus.
Clearly, there is an intent that cpusets take the active mask into
account to prohibit creating an empty cpuset, but nothing prevents
cpu hotplug from creating an empty cpuset.
I wonder how to solve this inconsistency ?
Thanks,
Mathieu
--
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
Powered by blists - more mailing lists