Thread (89 messages) flat view 89 messages, 6 authors, 2019-01-25

Re: [PATCH v6 09/16] sched/cpufreq: uclamp: Add utilization clamping for RT tasks

From: Peter Zijlstra <peterz@infradead.org>
Date: 2019-01-24 15:31:14
Also in: linux-pm, lkml

On Thu, Jan 24, 2019 at 12:30:09PM +0000, Patrick Bellasi wrote:
quoted
So I'll have to go over the code again, but I'm wondering why you're
changing uclamp_se::bucket_id on a runnable task.
We change only the "requested" value, not the "effective" one.
quoted
Ideally you keep bucket_id invariant between enqueue and dequeue; then
dequeue knows where we put it.
Right, that's what we do for the "effective" value.
So the problem I have is that you first introduce uclamp_se::value and
use that all over the code, and then introduce effective and change all
the usage sites.

That seems daft. Why not keep all the code as-is and add orig_value.
quoted
Now I suppose actually determining bucket_id is 'expensive' (it
certainly is with the whole mapping scheme, but even that integer
division is not nice), so we'd like to precompute the bucket_id.
Yes, although the complexity is mostly in the composition logic
described above not on mapping at all. We have "mapping" overheads
only when we change a "request" value and that's from slow-paths.
It's weird though. Esp. when combined with that mapping logic, because
then you get to use additional maps that are not in fact ever used.
quoted
We can update uclamp_se::value and set uclamp_se::changed, and then the
next enqueue will (unlikely) test-and-clear changed and recompute the
bucket_id.
This mean will lazy update the "requested" bucket_id by deferring its
computation at enqueue time. Which saves us a copy of the bucket_id,
i.e. we will have only the "effective" value updated at enqueue time.

But...
quoted
Would that not be simpler?
... although being simpler it does not fully exploit the slow-path,
a syscall which is usually running from a different process context
(system management software).

It also fits better for lazy updates but, in the cgroup case, where we
wanna enforce an update ASAP for RUNNABLE tasks, we will still have to
do the updates from the slow-path.

Will look better into this simplification while working on v7, perhaps
the linear mapping can really help in that too.
OK. So mostly my complaint is that it seems to do things odd for ill
explained reasons.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help