Messages in this thread | | | From | Paul Turner <> | Date | Tue, 2 Oct 2012 14:14:14 -0700 | Subject | Re: [patch 11/16] sched: replace update_shares weight distribution with per-entity computation |
| |
On Mon, Sep 24, 2012 at 1:39 PM, Benjamin Segall <bsegall@google.com> wrote: > blocked_load_avg ~= \sum_child child.runnable_avg_sum/child.runnable_avg_period * child.weight > > The thought was: So if all the children have hit zero runnable_avg_sum > (or in the case of a child task, will when they wake up), then > blocked_avg sum should also hit zero at the same and we're in theory > fine. > > However, child load can be significantly larger than even the maximum > value of runnable_avg_sum (and you can get a full contribution off a new > task with only one tick of runnable_avg_sum anyway...), so > runnable_avg_sum can hit zero first due to rounding. We should case on > runnable_avg_sum || blocked_load_avg.
Clipping blocked_load_avg when runnable_avg_sum goes to zero is sufficient. At this point we cannot contribute to our parent anyway.
> > > As a side note, currently decay_load uses SRR, which means none of these > will hit zero anyway if updates occur more often than once per 32ms. I'm > not sure how we missed /that/, but fixes incoming.
Egads, fixed. We definitely used to have that, I think it got lost in the "clean everything up, break it into a series, and make it pretty" step. Perhaps that explains why some of the numbers in the previous table were a little different.
> > Thanks, > Ben >
| |