Re: [PATCH RFC 0/8] SCHED_DEADLINE freq/cpu invariance and OPP selection

From: Juri Lelli
Date: Wed May 24 2017 - 05:51:52 EST


On 24/05/17 11:41, Peter Zijlstra wrote:
> On Wed, May 24, 2017 at 10:25:05AM +0100, Juri Lelli wrote:
> > Hi,
> >
> > On 23/05/17 22:23, Peter Zijlstra wrote:
> > > On Tue, May 23, 2017 at 09:53:43AM +0100, Juri Lelli wrote:
> > >
> > > > A point that is still very much up for discussion (more that the others :) is
> > > > how we implement frequency/cpu scaling. SCHED_FLAG_RECLAIM tasks only need
> > > > grub_reclaim(), as the function already scales their reservation runtime
> > > > considering other reservations and maximum bandwidth a CPU has to offer.
> > > > However, for normal !RECLAIM tasks multiple things can be implemented which
> > > > seem to make sense:
> > > >
> > > > - don't scale at all: normal tasks will only get a % of CPU _time_ as granted
> > > > by AC
> > > > - go to max as soon as a normal task in enqueued: this because dimensioning of
> > > > parameters is usually done at max OPP/biggest CPU and normal task assume
> > > > that this is always the condition when they run
> > > > - scale runtime acconding to current frequency and max CPU capacity: this is
> > > > what this set is currently implementing
> > > >
> > > > Opinions?
> > >
> > >
> > > So I'm terribly confused...
> > >
> > > By using the active bandwidth to select frequency we effectively
> > > reduce idle time (to 0 if we had infinite granular frequency steps and
> > > no margins).
> > >
> > > So !RECLAIM works as expected. They get the time they reserved, since
> > > that was taken into account by active bandwidth.
> > >
> >
> > This was my impression as well, but Luca (and please Luca correct me if
> > I misunderstood your point) argued (in an off-line discussion ahead of
> > this posting) that !reclaim tasks might not be interested in reclaiming
> > *at all*. Since scaling frequency down is another way of effectively
> > reclaiming unused bandwidth (the other being sharing unused bandwidth
> > among reservations while keeping frequency at max), !reclaim tasks could
> > not be interested in frequency scaling (my first point above) or require
> > frequency to be always at max (second point above).
> >
> > Does this help claryfing a bit? :)
>
> No ;-) As you said, confusion++.
>
> A !RECLAIM task doesn't care (cannot care, should not care etc..) about
> any bandwidth not allocated to itself. Therefore it should/must/etc..
> not have any opinion on what we do with 'spare' bandwidth.
>

Agreed. However, problem seems to be that

- in my opinion (current implementation) this translated into scaling
runtime considering current freq and cpu-max-capacity; and this is
required when frequency scaling is enabled and we still want to meet
a task's guaranteed bandwidth

- Luca seemed instead to be inclined to say that, if we scale runtime
for !reclaim tasks, such tasks are basically allowed to run for more
time (when frequency is lower than max) by using some of the
bandwidth not allocated to themselves