diff options
author | Peter Zijlstra <a.p.zijlstra@chello.nl> | 2007-10-15 17:00:05 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2007-10-15 17:00:05 +0200 |
commit | 94dfb5e75ef59068a8cf68fa6e18f25ebdcd20b9 (patch) | |
tree | 3ff5c162ffbc0e796db250f8a0562292118829f3 /kernel/sched_fair.c | |
parent | sched: remove SCHED_FEAT_SKIP_INITIAL (diff) | |
download | linux-94dfb5e75ef59068a8cf68fa6e18f25ebdcd20b9.tar.xz linux-94dfb5e75ef59068a8cf68fa6e18f25ebdcd20b9.zip |
sched: add tree based averages
add support for tree based vruntime averages.
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Mike Galbraith <efault@gmx.de>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel/sched_fair.c')
-rw-r--r-- | kernel/sched_fair.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c index c8c6b0561391..86e5e8c5d101 100644 --- a/kernel/sched_fair.c +++ b/kernel/sched_fair.c @@ -547,16 +547,22 @@ static void enqueue_sleeper(struct cfs_rq *cfs_rq, struct sched_entity *se) static void place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int initial) { - struct sched_entity *last = __pick_last_entity(cfs_rq); u64 min_runtime, latency; min_runtime = cfs_rq->min_vruntime; - if (last) { - min_runtime += last->vruntime; - min_runtime >>= 1; - if (initial && sched_feat(START_DEBIT)) - min_runtime += sysctl_sched_latency/2; - } + + if (sched_feat(USE_TREE_AVG)) { + struct sched_entity *last = __pick_last_entity(cfs_rq); + if (last) { + min_runtime = __pick_next_entity(cfs_rq)->vruntime; + min_runtime += last->vruntime; + min_runtime >>= 1; + } + } else if (sched_feat(APPROX_AVG)) + min_runtime += sysctl_sched_latency/2; + + if (initial && sched_feat(START_DEBIT)) + min_runtime += sched_slice(cfs_rq, se); if (!initial && sched_feat(NEW_FAIR_SLEEPERS)) { latency = sysctl_sched_latency; |