Re: [PATCH v4] sched: automated per session task groups

From: Paul Turner
Date: Fri Dec 03 2010 - 00:12:06 EST


On 11/30/10 22:16, Mike Galbraith wrote:
On Tue, 2010-11-30 at 19:39 -0800, Paul Turner wrote:
On 11/28/10 06:24, Mike Galbraith wrote:

Something else is seriously wrong though. 36.1 with attached (plus
sched, cgroup: Fixup broken cgroup movement) works a treat, whereas
37.git and tip with fixlet below both suck rocks. With a make -j40
running, wakeup-latency is showing latencies of>100ms, amarok skips,
mouse lurches badly.. generally horrid. Something went south.

I'm looking at this.

The share:share ratios looked good in static testing, but perhaps we
need a little more wake-up boost to improve interactivity.

Yeah, feels like a wakeup issue. I too did a (brief) static test, and
that looked ok.

-Mike


Hey Mike,

Does something like the below help?

We're quick to drive the load_contribution up (to avoid over-commit). However on sleepy workloads this results in lots of weight being stranded (since it reaches maximum contribution instantaneously but decays slowly) as the thread migrates between cpus.

Avoid this by averaging "up" in the wake-up direction as well as the sleep.

We also get a boost from the fact that we use the instantaneous weight in computing the actual received shares.

I actually don't have a desktop setup handy to test "interactivity" (sad but true -- working on grabbing one). But it looks better on under synthetic load.

- Paul

===================================================================
--- tip.orig/kernel/sched_fair.c
+++ tip/kernel/sched_fair.c
@@ -743,12 +743,19 @@ static void update_cfs_load(struct cfs_r
return;

now = rq_of(cfs_rq)->clock;
- delta = now - cfs_rq->load_stamp;
+
+ if (likely(cfs_rq->load_stamp))
+ delta = now - cfs_rq->load_stamp;
+ else {
+ /* avoid large initial delta and initialize load_period */
+ delta = 1;
+ cfs_rq->load_stamp = 1;
+ }

/* truncate load history at 4 idle periods */
if (cfs_rq->load_stamp > cfs_rq->load_last &&
now - cfs_rq->load_last > 4 * period) {
- cfs_rq->load_period = 0;
+ cfs_rq->load_period = period/2;
cfs_rq->load_avg = 0;
}
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/