Messages in this thread | | | From | Paul Turner <> | Date | Mon, 6 May 2013 11:34:24 -0700 | Subject | Re: [PATCH v5 5/7] sched: compute runnable load avg in cpu_load and cpu_avg_load_per_task |
| |
On Mon, May 6, 2013 at 8:00 AM, Alex Shi <alex.shi@intel.com> wrote: >> >> blocked_load_avg is the expected "to wake" contribution from tasks >> already assigned to this rq. >> >> e.g. this could be: >> load = this_rq->cfs.runnable_load_avg + this_rq->cfs.blocked_load_avg; > > Current load balance doesn't consider slept task's load which is > represented by blocked_load_avg. And the slept task is not on_rq, so > consider it in load balance is a little strange.
The load-balancer has a longer time horizon; think of blocked_loag_avg to be a signal for the load, already assigned to this cpu, which is expected to appear (within roughly the next quantum).
Consider the following scenario:
tasks: A,B (40% busy), C (90% busy)
Suppose we have: CPU 0: CPU 1: A C B
Then, when C blocks the load balancer ticks.
If we considered only runnable_load then A or B would be eligible for migration to CPU 1, which is essentially where we are today.
> > But your concern is worth to try. I will change the patchset and give > the testing results. > >> >> Although, in general I have a major concern with the current implementation: >> >> The entire reason for stability with the bottom up averages is that >> when load migrates between cpus we are able to migrate it between the >> tracked sums. >> >> Stuffing observed averages of these into the load_idxs loses that >> mobility; we will have to stall (as we do today for idx > 0) before we >> can recognize that a cpu's load has truly left it; this is a very >> similar problem to the need to stably track this for group shares >> computation. >> >> To that end, I would rather see the load_idx disappear completely: >> (a) We can calculate the imbalance purely from delta (runnable_avg + >> blocked_avg) >> (b) It eliminates a bad tunable. > > I also show the similar concern of load_idx months ago. seems overlooked. :) >> >>> - return cpu_rq(cpu)->load.weight; >>> + return (unsigned long)cpu_rq(cpu)->cfs.runnable_load_avg; >> >> Isn't this going to truncate on the 32-bit case? > > I guess not, the old load.weight is unsigned long, and runnable_load_avg > is smaller than the load.weight. so it should be fine. > > btw, according to above reason, guess move runnable_load_avg to > 'unsigned long' type is ok, do you think so? >
Hmm, so long as it's unsigned long and not u32 that should be OK.
From a technical standpoint: We make the argument that we run out of address space before we can overflow load.weight in the 32-bit case, we can make the same argument here.
> > -- > Thanks > Alex
| |