Thread (84 messages) 84 messages, 6 authors, 2019-03-19

Re: [PATCH v7 01/15] sched/core: uclamp: Add CPU's clamp buckets refcounting

From: Peter Zijlstra <peterz@infradead.org>
Date: 2019-03-13 08:20:22
Also in: linux-pm, lkml

On Tue, Mar 12, 2019 at 03:50:43PM +0000, Patrick Bellasi wrote:
On 12-Mar 16:20, Peter Zijlstra wrote:
quoted
On Fri, Feb 08, 2019 at 10:05:40AM +0000, Patrick Bellasi wrote:
quoted
+/* Integer ceil-rounded range for each bucket */
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^
quoted
quoted
+#define UCLAMP_BUCKET_DELTA ((SCHED_CAPACITY_SCALE / UCLAMP_BUCKETS) + 1)
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

simply do not match.
quoted
Uhm, should that not me ((x+y-1)/y), aka. DIV_ROUND_UP(x,y) ?
Well, there is certainly some rounding to be done...
quoted
The above would give 4 for 9/3, which is clearly buggered.
.. still the math above should work fine within the boundaries we
define for UCLAMP_BUCKET_DELTA (5..20 groups) and considering that
SCHED_CAPACITY_SCALE will never be smaller then 1024.
That's a very poor reason to write utter nonsense :-)
The above is designed to shrink the topmost bucket wrt all the others
but it will never be smaller than ~30%.
30% sounds like a lot, esp. for this range.
Here are the start values computed for each bucket using the math
above and the computed shrinking percentage for the topmost bucket:
If you use a regular rounding, the error is _much_ smaller:

$ for ((x=5;x<21;x++)) ; do let d=(1024+x/2)/x; let s=(x-1)*d; let e=1024-s; let p=100*(d-e)/d; echo $x $d $s $e $p%; done
5 205 820 204 0%
6 171 855 169 1%
7 146 876 148 -1%
8 128 896 128 0%
9 114 912 112 1%
10 102 918 106 -3%
11 93 930 94 -1%
12 85 935 89 -4%
13 79 948 76 3%
14 73 949 75 -2%
15 68 952 72 -5%
16 64 960 64 0%
17 60 960 64 -6%
18 57 969 55 3%
19 54 972 52 3%
20 51 969 55 -7%

Funnily enough, we have a helper for that too: DIV_ROUND_CLOSEST().

Now, if we go further, the error will obviously increase because we run
out of precision, but even there, regular rounding will be better than
either floor or ceil.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help