diff options
author | Ingo Molnar <mingo@elte.hu> | 2007-09-19 17:34:46 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2007-09-19 17:34:46 -0400 |
commit | 1799e35d5baab6e06168b46cc78b968e728ea3d1 (patch) | |
tree | cccf64a62fa9106aa18253371b675925c0582bab /kernel/sched.c | |
parent | a88a8eff1e6e32d3288986a9d36c6a449c032d3a (diff) |
sched: add /proc/sys/kernel/sched_compat_yield
add /proc/sys/kernel/sched_compat_yield to make sys_sched_yield()
more agressive, by moving the yielding task to the last position
in the rbtree.
with sched_compat_yield=0:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2539 mingo 20 0 1576 252 204 R 50 0.0 0:02.03 loop_yield
2541 mingo 20 0 1576 244 196 R 50 0.0 0:02.05 loop
with sched_compat_yield=1:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2584 mingo 20 0 1576 248 196 R 99 0.0 0:52.45 loop
2582 mingo 20 0 1576 256 204 R 0 0.0 0:00.00 loop_yield
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Diffstat (limited to 'kernel/sched.c')
-rw-r--r-- | kernel/sched.c | 5 |
1 files changed, 1 insertions, 4 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index deeb1f8e0c30..63e0971c8fbb 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -4550,10 +4550,7 @@ asmlinkage long sys_sched_yield(void) | |||
4550 | struct rq *rq = this_rq_lock(); | 4550 | struct rq *rq = this_rq_lock(); |
4551 | 4551 | ||
4552 | schedstat_inc(rq, yld_cnt); | 4552 | schedstat_inc(rq, yld_cnt); |
4553 | if (unlikely(rq->nr_running == 1)) | 4553 | current->sched_class->yield_task(rq, current); |
4554 | schedstat_inc(rq, yld_act_empty); | ||
4555 | else | ||
4556 | current->sched_class->yield_task(rq, current); | ||
4557 | 4554 | ||
4558 | /* | 4555 | /* |
4559 | * Since we are going to call schedule() anyway, there's | 4556 | * Since we are going to call schedule() anyway, there's |