hrev44150 adds 1 changeset to branch 'master' old head: 229e112eb4a2e83edd4e7bb44f3a265f1b4681fa new head: 44c3c034122cd698fd6dc4288327e406cd4b3e1c ---------------------------------------------------------------------------- 44c3c03: scheduler: Don't setup the quantumTimer for idle thread Let's say the timer is waken up when its hook is called. This patch reduces ~41% wakeups during idle Signed-off-by: Fredrik Holmqvist <fredrik.holmqvist@xxxxxxxxx> [ Yongcong Du <ycdu.vmcore@xxxxxxxxx> ] ---------------------------------------------------------------------------- Revision: hrev44150 Commit: 44c3c034122cd698fd6dc4288327e406cd4b3e1c URL: http://cgit.haiku-os.org/haiku/commit/?id=44c3c03 Author: Yongcong Du <ycdu.vmcore@xxxxxxxxx> Date: Sun May 13 13:43:08 2012 UTC Committer: Fredrik Holmqvist <fredrik.holmqvist@xxxxxxxxx> Commit-Date: Sun May 13 17:06:47 2012 UTC ---------------------------------------------------------------------------- 3 files changed, 9 insertions(+), 6 deletions(-) src/system/kernel/scheduler/scheduler_affine.cpp | 5 +++-- src/system/kernel/scheduler/scheduler_simple.cpp | 5 +++-- .../kernel/scheduler/scheduler_simple_smp.cpp | 5 +++-- ---------------------------------------------------------------------------- diff --git a/src/system/kernel/scheduler/scheduler_affine.cpp b/src/system/kernel/scheduler/scheduler_affine.cpp index 721b9af..b504803 100644 --- a/src/system/kernel/scheduler/scheduler_affine.cpp +++ b/src/system/kernel/scheduler/scheduler_affine.cpp @@ -500,8 +500,9 @@ affine_reschedule(void) && nextThread->priority < B_NORMAL_PRIORITY) quantum = kMaxThreadQuantum; - add_timer(quantumTimer, &reschedule_event, quantum, - B_ONE_SHOT_RELATIVE_TIMER | B_TIMER_ACQUIRE_SCHEDULER_LOCK); + if (!thread_is_idle_thread(nextThread)) + add_timer(quantumTimer, &reschedule_event, quantum, + B_ONE_SHOT_RELATIVE_TIMER | B_TIMER_ACQUIRE_SCHEDULER_LOCK); if (nextThread != oldThread) scheduler_switch_thread(oldThread, nextThread); diff --git a/src/system/kernel/scheduler/scheduler_simple.cpp b/src/system/kernel/scheduler/scheduler_simple.cpp index 2b1acc9..42e6919 100644 --- a/src/system/kernel/scheduler/scheduler_simple.cpp +++ b/src/system/kernel/scheduler/scheduler_simple.cpp @@ -324,8 +324,9 @@ simple_reschedule(void) cancel_timer(quantumTimer); oldThread->cpu->preempted = 0; - add_timer(quantumTimer, &reschedule_event, quantum, - B_ONE_SHOT_RELATIVE_TIMER | B_TIMER_ACQUIRE_SCHEDULER_LOCK); + if (!thread_is_idle_thread(nextThread)) + add_timer(quantumTimer, &reschedule_event, quantum, + B_ONE_SHOT_RELATIVE_TIMER | B_TIMER_ACQUIRE_SCHEDULER_LOCK); if (nextThread != oldThread) scheduler_switch_thread(oldThread, nextThread); diff --git a/src/system/kernel/scheduler/scheduler_simple_smp.cpp b/src/system/kernel/scheduler/scheduler_simple_smp.cpp index 721860a..ff3e3d2 100644 --- a/src/system/kernel/scheduler/scheduler_simple_smp.cpp +++ b/src/system/kernel/scheduler/scheduler_simple_smp.cpp @@ -423,8 +423,9 @@ reschedule(void) cancel_timer(quantumTimer); oldThread->cpu->preempted = 0; - add_timer(quantumTimer, &reschedule_event, quantum, - B_ONE_SHOT_RELATIVE_TIMER | B_TIMER_ACQUIRE_SCHEDULER_LOCK); + if (!thread_is_idle_thread(nextThread)) + add_timer(quantumTimer, &reschedule_event, quantum, + B_ONE_SHOT_RELATIVE_TIMER | B_TIMER_ACQUIRE_SCHEDULER_LOCK); if (nextThread != oldThread) scheduler_switch_thread(oldThread, nextThread);