* Ingo Molnar <[EMAIL PROTECTED]> wrote: > > * Srivatsa Vaddagiri <[EMAIL PROTECTED]> wrote: > > > On Tue, Sep 25, 2007 at 11:13:31AM +0200, Ingo Molnar wrote: > > > ok, i'm too seeing some sort of latency weirdness with > > > CONFIG_FAIR_GROUP_SCHED enabled, _if_ there's Xorg involved which runs > > > under root uid on my box - and hence gets 50% of all CPU time. > > > > > > Srivatsa, any ideas? It could either be an accounting buglet (less > > > likely, seems like the group scheduling bits stick to the 50% splitup > > > nicely), or a preemption buglet. One potential preemption buglet would > > > be for the group scheduler to not properly preempt a running task when a > > > task from another uid is woken? > > > > Yep, I noticed that too. > > > > check_preempt_wakeup() > > { > > ... > > > > if (is_same_group(curr, p)) { > > ^^^^^^^^^^^^^ > > > > resched_task(); > > } > > > > } > > > > Will try a fix to check for preemption at higher levels .. > > i bet fixing this will increase precision of group scheduling as well. > Those long latencies can be thought of as noise as well, and the > fair-scheduling "engine" might not be capable to offset all sources of > noise. So generally, while we allow a certain amount of lag in > preemption decisions (wakeup-granularity, etc.), with which the > fairness engine will cope just fine, we do not want to allow unlimited > lag.
hm, i tried the naive patch. In theory the vruntime of all scheduling entities should be 'compatible' and comparable (that's the point behind using vruntime - the fairness engine drives each vruntime forward and tries to balance them). So the patch below just removes the is_same_group() condition. But i can still see bad (and obvious) latencies with Mike's 2-hogs test: taskset 01 perl -e 'while (1) {}' & nice -19 taskset 02 perl -e 'while (1) {}' & So something's amiss. Ingo -------------------> Subject: sched: group scheduler wakeup latency fix From: Ingo Molnar <[EMAIL PROTECTED]> group scheduler wakeup latency fix. Signed-off-by: Ingo Molnar <[EMAIL PROTECTED]> --- kernel/sched_fair.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) Index: linux/kernel/sched_fair.c =================================================================== --- linux.orig/kernel/sched_fair.c +++ linux/kernel/sched_fair.c @@ -785,6 +785,7 @@ static void check_preempt_wakeup(struct { struct task_struct *curr = rq->curr; struct cfs_rq *cfs_rq = task_cfs_rq(curr); + s64 delta; if (unlikely(rt_prio(p->prio))) { update_rq_clock(rq); @@ -792,12 +793,10 @@ static void check_preempt_wakeup(struct resched_task(curr); return; } - if (is_same_group(curr, p)) { - s64 delta = curr->se.vruntime - p->se.vruntime; + delta = curr->se.vruntime - p->se.vruntime; - if (delta > (s64)sysctl_sched_wakeup_granularity) - resched_task(curr); - } + if (delta > (s64)sysctl_sched_wakeup_granularity) + resched_task(curr); } static struct task_struct *pick_next_task_fair(struct rq *rq) - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/