[haiku-commits] haiku: hrev44150 - src/system/kernel/scheduler

  • From: fredrik.holmqvist@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sun, 13 May 2012 19:07:06 +0200 (CEST)

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);


Other related posts: