Re: [RFC] cgroup TODOs

From: Andy Lutomirski
Date: Thu Sep 20 2012 - 14:40:03 EST


On Thu, Sep 20, 2012 at 11:26 AM, Tejun Heo <tj@xxxxxxxxxx> wrote:
> Hello,
>
> On Wed, Sep 19, 2012 at 06:33:15PM -0700, Andy Lutomirski wrote:
>> [grr. why does gmane scramble addresses?]
>
> You can append /raw to the message url and see the raw mssage.
>
> http://article.gmane.org/gmane.linux.kernel.containers/23802/raw

Thanks!

>
>> > I think this level of flexibility should be enough for most use
>> > cases. If someone disagrees, please voice your objections now.
>>
>> OK, I'll bite.
>>
>> I have a server that has a whole bunch of cores. A small fraction of
>> those cores are general purpose and run whatever they like. The rest
>> are tightly controlled.
>>
>> For simplicity, we have two cpusets that we use. The root allows all
>> cpus. The other one only allows the general purpose cpus. We shove
>> everything into the general-purpose-only cpuset, and then we move
>> special stuff back to root. (We also shove some kernel threads into a
>> non-root cpuset using the 'cset' tool.)
>
> Using root for special stuff probably isn't a good idea and moving
> bound kthreads into !root cgroups is already disallowed.

Agreed. I do it this way because it's easy and it works. I can
change it in the future if needed.

>
>> Enter systemd, which wants a hierarchy corresponding to services. If we
>> were to use it, we might end up violating its hierarchy.
>>
>> Alternatively, if we started using memcg, then we might have some tasks
>> to have more restrictive memory usage but less restrictive cpu usage.
>>
>> As long as we can still pull this off, I'm happy.
>
> IIUC, you basically want just two groups w/ cpuset and use it for
> loose cpu ioslation for high priority jobs. Structure-wise, I don't
> think it's gonna be a problem although using root for special stuff
> would need to change.

Right.

But what happens when multiple hierarchies go away and I lose control
of the structure? If systemd or whatever sticks my whole session or
my service (or however I organize it) into cgroup /whatever, then
either I can put my use-all-cpus tasks into /whatever/everything or I
can step outside the hierarchy and put them into /everything. The
former doesn't work, because

<quote>
The following rules apply to each cpuset:

- Its CPUs and Memory Nodes must be a subset of its parents.
</quote>

The latter might confuse systemd.

My real objection might be to that requirement a cpuset can't be less
restrictive than its parents. Currently I can arrange for a task to
simultaneously have a less restrictive cpuset and a more restrictive
memory limit (or to stick it into a container or whatever). If the
hierarchies have to correspond, this stops working.

--Andy
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/