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

Re: [PATCH v6 10/16] sched/core: Add uclamp_util_with()

From: Peter Zijlstra <peterz@infradead.org>
Date: 2019-01-23 19:22:09
Also in: linux-pm, lkml

On Wed, Jan 23, 2019 at 02:51:06PM +0000, Patrick Bellasi wrote:
On 23-Jan 14:33, Peter Zijlstra wrote:
quoted
On Tue, Jan 15, 2019 at 10:15:07AM +0000, Patrick Bellasi wrote:
quoted
+static __always_inline
+unsigned int uclamp_util_with(struct rq *rq, unsigned int util,
+			      struct task_struct *p)
 {
 	unsigned int min_util = READ_ONCE(rq->uclamp[UCLAMP_MIN].value);
 	unsigned int max_util = READ_ONCE(rq->uclamp[UCLAMP_MAX].value);
 
+	if (p) {
+		min_util = max(min_util, uclamp_effective_value(p, UCLAMP_MIN));
+		max_util = max(max_util, uclamp_effective_value(p, UCLAMP_MAX));
+	}
+
Like I think you mentioned earlier; this doesn't look right at all.
What we wanna do here is to compute what _will_ be the clamp values of
a CPU if we enqueue *p on it.

The code above starts from the current CPU clamp value and mimics what
uclamp will do in case we move the task there... which is always a max
aggregation.
Ah, then I misunderstood the purpose of this function.
quoted
Should that not be something like:

	lo = READ_ONCE(rq->uclamp[UCLAMP_MIN].value);
	hi = READ_ONCE(rq->uclamp[UCLAMP_MAX].value);

	min_util = clamp(uclamp_effective(p, UCLAMP_MIN), lo, hi);
	max_util = clamp(uclamp_effective(p, UCLAMP_MAX), lo, hi);
Here you end up with a restriction of the task clamp (effective)
clamps values considering the CPU clamps... which is different.

Why do you think we should do that?... perhaps I'm missing something.
I was left with the impression from patch 7 that we don't compose clamps
right and throught that was what this code was supposed to do.

I'll have another look at this patch.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help