lkml.org 
[lkml]   [2015]   [Sep]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH 5/6] sched/fair: Get rid of scaling utilization by capacity_orig
    Date
    Yuyang Du <yuyang.du@intel.com> writes:

    > On Mon, Sep 14, 2015 at 10:34:00AM -0700, bsegall@google.com wrote:
    >> >> SCHED_LOAD_RESOLUTION and the non-SLR part of SCHED_LOAD_SHIFT are not
    >> >> required to be the same value and should not be conflated.
    >> >>
    >> >> In particular, since cgroups are on the same timeline as tasks and their
    >> >> shares are not scaled by SCHED_LOAD_SHIFT in any way (but are scaled so
    >> >> that SCHED_LOAD_RESOLUTION is invisible), changing that part of
    >> >> SCHED_LOAD_SHIFT would cause issues, since things can assume that nice-0
    >> >> = 1024. However changing SCHED_LOAD_RESOLUTION would be fine, as that is
    >> >> an internal value to the kernel.
    >> >>
    >> >> In addition, changing the non-SLR part of SCHED_LOAD_SHIFT would require
    >> >> recomputing all of prio_to_weight/wmult for the new NICE_0_LOAD.
    >> >
    >> > I think I follow, but doesn't that mean that the current code is broken
    >> > too? NICE_0_LOAD changes if you change SCHED_LOAD_RESOLUTION:
    >> >
    >> > #define SCHED_LOAD_SHIFT (10 + SCHED_LOAD_RESOLUTION)
    >> > #define SCHED_LOAD_SCALE (1L << SCHED_LOAD_SHIFT)
    >> >
    >> > #define NICE_0_LOAD SCHED_LOAD_SCALE
    >> > #define NICE_0_SHIFT SCHED_LOAD_SHIFT
    >> >
    >> > To me it sounds like we need to define it the other way around:
    >> >
    >> > #define NICE_0_SHIFT 10
    >> > #define NICE_0_LOAD (1L << NICE_0_SHIFT)
    >> >
    >> > and then add any additional resolution bits from there to ensure that
    >> > NICE_0_LOAD and the prio_to_weight/wmult tables are unchanged.
    >>
    >> No, NICE_0_LOAD is supposed to be scale_load(prio_to_weight[nice_0]),
    >> ie including SLR. It has never been clear to me what
    >> SCHED_LOAD_SCALE/SCHED_LOAD_SHIFT were for as opposed to NICE_0_LOAD,
    >> and the new utilization uses of it are entirely unlinked to 1024 == NICE_0
    >
    > Presume your SLR means SCHED_LOAD_RESOLUTION:
    >
    > 1) The introduction of (not redefinition of) SCHED_RESOLUTION_SHIFT does not
    > change anything after macro expansion.
    >
    > 2) The constants in prio_to_weight[] and prio_to_wmult[] are tied to a
    > resolution of 10bits NICE_0, i.e., 1024, I guest it is the user visible
    > part you mentioned, so is the cgroup share.
    >
    > To me, it is all ok. With the SCHED_RESOLUTION_SHIFT, the basic resolution
    > unit, it is just for us to state clearly, the NICE_0's weight has a fixed
    > resolution of SCHED_RESOLUTION_SHIFT, or even add this:
    >
    > #if prio_to_weight[20] != 1 << SCHED_RESOLUTION_SHIFT
    > error "NICE_0 weight not calibrated"
    > #endif
    > /* I can learn, Peter */
    >
    > I guess you are saying we are conflating NICE_0 with NICE_0_LOAD. But to me,
    > they are just integer metrics, needing a resolution respectively. That is it.

    Yes this would change nothing at the moment post-expansion, that's not
    the point. SLR being 10 bits and the nice-0 being 1024 are completely
    and utterly unrelated and the headers should not pretend they need to be
    the same value, any more than there should be a #define that is shared
    with every other use of 1024 in the kernel.


    \
     
     \ /
      Last update: 2015-09-15 19:41    [W:2.232 / U:0.156 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site