Task group cleanups and optimizations (was: Re: [RFC 00/60] Coscheduling for Linux)

From: Jan H. SchÃnherr
Date: Sat Sep 15 2018 - 04:48:36 EST


On 09/14/2018 06:25 PM, Jan H. SchÃnherr wrote:
> On 09/14/2018 01:12 PM, Peter Zijlstra wrote:
>>
>> There are known scalability problems with the existing cgroup muck; you
>> just made things a ton worse. The existing cgroup overhead is
>> significant, you also made that many times worse.
>>
>> The cgroup stuff needs cleanups and optimization, not this.

[...]

> With respect to the need of cleanups and optimizations: I agree, that
> task groups are a bit messy. For example, here's my current wish list
> off the top of my head:
>
> a) lazy scheduler operations; for example: when dequeuing a task, don't bother
> walking up the task group hierarchy to dequeue all the SEs -- do it lazily
> when encountering an empty CFS RQ during picking when we hold the lock anyway.
>
> b) ability to move CFS RQs between CPUs: someone changed the affinity of
> a cpuset? No problem, just attach the runqueue with all the tasks elsewhere.
> No need to touch each and every task.
>
> c) light-weight task groups: don't allocate a runqueue for every CPU in the
> system, when it is known that tasks in the task group will only ever run
> on at most two CPUs, or so. (And while there is of course a use case for
> VMs in this, another class of use cases are auxiliary tasks, see eg, [1-5].)
>
> Is this the level of optimizations, you're thinking about? Or do you want
> to throw away the whole nested CFS RQ experience in the code?

I guess, it would be possible to flatten the task group hierarchy, that is usually
created when nesting cgroups. That is, enqueue task group SEs always within the
root task group.

That should take away much of the (runtime-)overhead, no?

The calculation of shares would need to be a different kind of complex than it is
now. But that might be manageable.

CFS bandwidth control would also need to change significantly as we would now
have to dequeue/enqueue nested cgroups below a throttled/unthrottled hierarchy.
Unless *those* task groups don't participate in this flattening.

(And probably lots of other stuff, I didn't think about right now.)

Regards
Jan