[rtems commit] score: Fix scheduler helping implementation

Sebastian Huber sebh at rtems.org
Thu Jul 10 14:56:49 UTC 2014


Module:    rtems
Branch:    master
Commit:    27783f6ca8683eaf4826e777963c32a63f55da31
Changeset: http://git.rtems.org/rtems/commit/?id=27783f6ca8683eaf4826e777963c32a63f55da31

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Thu Jul 10 14:27:42 2014 +0200

score: Fix scheduler helping implementation

Do not extract the idle threads from the ready set so that there is
always a thread available for comparison.

---

 .../include/rtems/score/schedulerprioritysmpimpl.h |   22 -
 cpukit/score/include/rtems/score/schedulersmp.h    |    4 +
 .../score/include/rtems/score/schedulersmpimpl.h   |   59 +--
 cpukit/score/src/schedulerpriorityaffinitysmp.c    |   19 +-
 cpukit/score/src/schedulerprioritysmp.c            |   16 +-
 cpukit/score/src/schedulersimplesmp.c              |   38 +--
 testsuites/smptests/smpmrsp01/init.c               |   14 +
 testsuites/smptests/smpmrsp01/smpmrsp01.scn        |  482 ++++++++++----------
 8 files changed, 294 insertions(+), 360 deletions(-)

diff --git a/cpukit/score/include/rtems/score/schedulerprioritysmpimpl.h b/cpukit/score/include/rtems/score/schedulerprioritysmpimpl.h
index bb200b4..9ae0103 100644
--- a/cpukit/score/include/rtems/score/schedulerprioritysmpimpl.h
+++ b/cpukit/score/include/rtems/score/schedulerprioritysmpimpl.h
@@ -148,28 +148,6 @@ static inline void _Scheduler_priority_SMP_Extract_from_ready(
   );
 }
 
-static inline Thread_Control *_Scheduler_priority_SMP_Get_idle_thread(
-  Scheduler_Context *context
-)
-{
-  return _Scheduler_SMP_Get_idle_thread(
-    context,
-    _Scheduler_priority_SMP_Extract_from_ready
-  );
-}
-
-static void _Scheduler_priority_SMP_Release_idle_thread(
-  Scheduler_Context *context,
-  Thread_Control    *idle
-)
-{
-  _Scheduler_SMP_Release_idle_thread(
-    context,
-    idle,
-    _Scheduler_priority_SMP_Insert_ready_fifo
-  );
-}
-
 static inline void _Scheduler_priority_SMP_Do_update(
   Scheduler_Context *context,
   Scheduler_Node *node_to_update,
diff --git a/cpukit/score/include/rtems/score/schedulersmp.h b/cpukit/score/include/rtems/score/schedulersmp.h
index a58417a..9e11488 100644
--- a/cpukit/score/include/rtems/score/schedulersmp.h
+++ b/cpukit/score/include/rtems/score/schedulersmp.h
@@ -54,6 +54,10 @@ typedef struct {
 
   /**
    * @brief Chain of the available idle threads.
+   *
+   * Idle threads are used for the scheduler helping protocol.  It is crucial
+   * that the idle threads preserve their relative order.  This is the case for
+   * this priority based scheduler.
    */
   Chain_Control Idle_threads;
 } Scheduler_SMP_Context;
diff --git a/cpukit/score/include/rtems/score/schedulersmpimpl.h b/cpukit/score/include/rtems/score/schedulersmpimpl.h
index a4890df..156307d 100644
--- a/cpukit/score/include/rtems/score/schedulersmpimpl.h
+++ b/cpukit/score/include/rtems/score/schedulersmpimpl.h
@@ -425,16 +425,12 @@ static inline bool _Scheduler_SMP_Is_processor_owned_by_us(
 }
 
 static inline Thread_Control *_Scheduler_SMP_Get_idle_thread(
-  Scheduler_Context     *context,
-  Scheduler_SMP_Extract  extract_from_ready
+  Scheduler_Context *context
 )
 {
   Scheduler_SMP_Context *self = _Scheduler_SMP_Get_self( context );
   Thread_Control *idle = (Thread_Control *)
     _Chain_Get_first_unprotected( &self->Idle_threads );
-  Scheduler_Node *own_node = _Scheduler_Thread_get_own_node( idle );
-
-  ( *extract_from_ready )( &self->Base, own_node );
 
   _Assert( &idle->Object.Node != _Chain_Tail( &self->Idle_threads ) );
 
@@ -442,16 +438,13 @@ static inline Thread_Control *_Scheduler_SMP_Get_idle_thread(
 }
 
 static inline void _Scheduler_SMP_Release_idle_thread(
-  Scheduler_Context    *context,
-  Thread_Control       *idle,
-  Scheduler_SMP_Insert  insert_ready
+  Scheduler_Context *context,
+  Thread_Control    *idle
 )
 {
   Scheduler_SMP_Context *self = _Scheduler_SMP_Get_self( context );
-  Scheduler_Node *own_node = _Scheduler_Thread_get_own_node( idle );
 
   _Chain_Prepend_unprotected( &self->Idle_threads, &idle->Object.Node );
-  ( *insert_ready )( context, own_node );
 }
 
 static inline void _Scheduler_SMP_Allocate_processor_lazy(
@@ -536,8 +529,7 @@ static inline Thread_Control *_Scheduler_SMP_Enqueue_to_scheduled(
   Scheduler_Node                   *lowest_scheduled,
   Scheduler_SMP_Insert              insert_scheduled,
   Scheduler_SMP_Move                move_from_scheduled_to_ready,
-  Scheduler_SMP_Allocate_processor  allocate_processor,
-  Scheduler_Release_idle_thread     release_idle_thread
+  Scheduler_SMP_Allocate_processor  allocate_processor
 )
 {
   Thread_Control *user = _Scheduler_Node_get_user( node );
@@ -570,7 +562,7 @@ static inline Thread_Control *_Scheduler_SMP_Enqueue_to_scheduled(
   idle = _Scheduler_Release_idle_thread(
     context,
     lowest_scheduled,
-    release_idle_thread
+    _Scheduler_SMP_Release_idle_thread
   );
   if ( idle == NULL ) {
     needs_help = lowest_scheduled_user;
@@ -603,7 +595,6 @@ static inline Thread_Control *_Scheduler_SMP_Enqueue_to_scheduled(
  *   if this pointer is passed as the second argument to the order function.
  * @param[in] allocate_processor Function to allocate a processor to a node
  *   based on the rules of the scheduler.
- * @param[in] release_idle_thread Function to release an idle thread.
  */
 static inline Thread_Control *_Scheduler_SMP_Enqueue_ordered(
   Scheduler_Context                  *context,
@@ -614,8 +605,7 @@ static inline Thread_Control *_Scheduler_SMP_Enqueue_ordered(
   Scheduler_SMP_Insert                insert_scheduled,
   Scheduler_SMP_Move                  move_from_scheduled_to_ready,
   Scheduler_SMP_Get_lowest_scheduled  get_lowest_scheduled,
-  Scheduler_SMP_Allocate_processor    allocate_processor,
-  Scheduler_Release_idle_thread       release_idle_thread
+  Scheduler_SMP_Allocate_processor    allocate_processor
 )
 {
   Scheduler_Node *lowest_scheduled =
@@ -628,8 +618,7 @@ static inline Thread_Control *_Scheduler_SMP_Enqueue_ordered(
       lowest_scheduled,
       insert_scheduled,
       move_from_scheduled_to_ready,
-      allocate_processor,
-      release_idle_thread
+      allocate_processor
     );
   } else {
     ( *insert_ready )( context, node );
@@ -656,8 +645,6 @@ static inline Thread_Control *_Scheduler_SMP_Enqueue_ordered(
  *   of ready nodes to the set of scheduled nodes.
  * @param[in] allocate_processor Function to allocate a processor to a node
  *   based on the rules of the scheduler.
- * @param[in] get_idle_thread Function to get an idle thread.
- * @param[in] release_idle_thread Function to release an idle thread.
  */
 static inline Thread_Control *_Scheduler_SMP_Enqueue_scheduled_ordered(
   Scheduler_Context                *context,
@@ -668,9 +655,7 @@ static inline Thread_Control *_Scheduler_SMP_Enqueue_scheduled_ordered(
   Scheduler_SMP_Insert              insert_ready,
   Scheduler_SMP_Insert              insert_scheduled,
   Scheduler_SMP_Move                move_from_ready_to_scheduled,
-  Scheduler_SMP_Allocate_processor  allocate_processor,
-  Scheduler_Get_idle_thread         get_idle_thread,
-  Scheduler_Release_idle_thread     release_idle_thread
+  Scheduler_SMP_Allocate_processor  allocate_processor
 )
 {
   Thread_Control *needs_help;
@@ -692,7 +677,7 @@ static inline Thread_Control *_Scheduler_SMP_Enqueue_scheduled_ordered(
       _Scheduler_Try_to_schedule_node(
         context,
         highest_ready,
-        get_idle_thread
+        _Scheduler_SMP_Get_idle_thread
       )
     ) {
       Thread_Control *user = _Scheduler_Node_get_user( node );
@@ -717,7 +702,7 @@ static inline Thread_Control *_Scheduler_SMP_Enqueue_scheduled_ordered(
       idle = _Scheduler_Release_idle_thread(
         context,
         node,
-        release_idle_thread
+        _Scheduler_SMP_Release_idle_thread
       );
       if ( idle == NULL ) {
         needs_help = user;
@@ -752,8 +737,7 @@ static inline void _Scheduler_SMP_Schedule_highest_ready(
   Scheduler_SMP_Extract             extract_from_ready,
   Scheduler_SMP_Get_highest_ready   get_highest_ready,
   Scheduler_SMP_Move                move_from_ready_to_scheduled,
-  Scheduler_SMP_Allocate_processor  allocate_processor,
-  Scheduler_Get_idle_thread         get_idle_thread
+  Scheduler_SMP_Allocate_processor  allocate_processor
 )
 {
   while ( true ) {
@@ -763,7 +747,7 @@ static inline void _Scheduler_SMP_Schedule_highest_ready(
       _Scheduler_Try_to_schedule_node(
         context,
         highest_ready,
-        get_idle_thread
+        _Scheduler_SMP_Get_idle_thread
       )
     ) {
       _Scheduler_SMP_Allocate_processor(
@@ -797,7 +781,6 @@ static inline void _Scheduler_SMP_Schedule_highest_ready(
  * @param[in] get_highest_ready Function to get the highest ready node.
  * @param[in] move_from_ready_to_scheduled Function to move a node from the set
  *   of ready nodes to the set of scheduled nodes.
- * @param[in] get_idle_thread Function to get an idle thread.
  */
 static inline void _Scheduler_SMP_Block(
   Scheduler_Context                *context,
@@ -805,8 +788,7 @@ static inline void _Scheduler_SMP_Block(
   Scheduler_SMP_Extract             extract_from_ready,
   Scheduler_SMP_Get_highest_ready   get_highest_ready,
   Scheduler_SMP_Move                move_from_ready_to_scheduled,
-  Scheduler_SMP_Allocate_processor  allocate_processor,
-  Scheduler_Get_idle_thread         get_idle_thread
+  Scheduler_SMP_Allocate_processor  allocate_processor
 )
 {
   Scheduler_SMP_Node *node = _Scheduler_SMP_Thread_get_node( thread );
@@ -815,7 +797,7 @@ static inline void _Scheduler_SMP_Block(
     context,
     &node->Base,
     is_scheduled,
-    get_idle_thread
+    _Scheduler_SMP_Get_idle_thread
   );
 
   if ( block ) {
@@ -830,8 +812,7 @@ static inline void _Scheduler_SMP_Block(
         extract_from_ready,
         get_highest_ready,
         move_from_ready_to_scheduled,
-        allocate_processor,
-        get_idle_thread
+        allocate_processor
       );
     } else {
       ( *extract_from_ready )( context, &node->Base );
@@ -842,8 +823,7 @@ static inline void _Scheduler_SMP_Block(
 static inline Thread_Control *_Scheduler_SMP_Unblock(
   Scheduler_Context             *context,
   Thread_Control                *thread,
-  Scheduler_SMP_Enqueue          enqueue_fifo,
-  Scheduler_Release_idle_thread  release_idle_thread
+  Scheduler_SMP_Enqueue          enqueue_fifo
 )
 {
   Scheduler_SMP_Node *node = _Scheduler_SMP_Thread_get_node( thread );
@@ -853,7 +833,7 @@ static inline Thread_Control *_Scheduler_SMP_Unblock(
     thread,
     &node->Base,
     is_scheduled,
-    release_idle_thread
+    _Scheduler_SMP_Release_idle_thread
   );
   Thread_Control *needs_help;
 
@@ -917,8 +897,7 @@ static inline Thread_Control *_Scheduler_SMP_Ask_for_help(
   Scheduler_Context                  *context,
   Thread_Control                     *offers_help,
   Thread_Control                     *needs_help,
-  Scheduler_SMP_Enqueue               enqueue_fifo,
-  Scheduler_Release_idle_thread       release_idle_thread
+  Scheduler_SMP_Enqueue               enqueue_fifo
 )
 {
   Scheduler_SMP_Node *node = _Scheduler_SMP_Thread_get_own_node( offers_help );
@@ -940,7 +919,7 @@ static inline Thread_Control *_Scheduler_SMP_Ask_for_help(
         offers_help,
         needs_help,
         previous_accepts_help,
-        release_idle_thread
+        _Scheduler_SMP_Release_idle_thread
       );
       break;
     case SCHEDULER_SMP_NODE_BLOCKED:
diff --git a/cpukit/score/src/schedulerpriorityaffinitysmp.c b/cpukit/score/src/schedulerpriorityaffinitysmp.c
index 39a0a48..41e44a0 100644
--- a/cpukit/score/src/schedulerpriorityaffinitysmp.c
+++ b/cpukit/score/src/schedulerpriorityaffinitysmp.c
@@ -231,8 +231,7 @@ void _Scheduler_priority_affinity_SMP_Block(
     _Scheduler_priority_SMP_Extract_from_ready,
     _Scheduler_priority_affinity_SMP_Get_highest_ready,
     _Scheduler_priority_SMP_Move_from_ready_to_scheduled,
-    _Scheduler_SMP_Allocate_processor_exact,
-    _Scheduler_priority_SMP_Get_idle_thread
+    _Scheduler_SMP_Allocate_processor_exact
   );
 
   /*
@@ -314,8 +313,7 @@ static Thread_Control *_Scheduler_priority_affinity_SMP_Enqueue_fifo(
     _Scheduler_SMP_Insert_scheduled_fifo,
     _Scheduler_priority_SMP_Move_from_scheduled_to_ready,
     _Scheduler_priority_affinity_SMP_Get_lowest_scheduled,
-    _Scheduler_SMP_Allocate_processor_exact,
-    _Scheduler_priority_SMP_Release_idle_thread
+    _Scheduler_SMP_Allocate_processor_exact
   );
 }
 
@@ -399,8 +397,7 @@ Thread_Control *_Scheduler_priority_affinity_SMP_Unblock(
   needs_help = _Scheduler_SMP_Unblock(
     context,
     thread,
-    _Scheduler_priority_affinity_SMP_Enqueue_fifo,
-    _Scheduler_priority_SMP_Release_idle_thread
+    _Scheduler_priority_affinity_SMP_Enqueue_fifo
   );
 
   /*
@@ -433,8 +430,7 @@ static Thread_Control *_Scheduler_priority_affinity_SMP_Enqueue_ordered(
     insert_scheduled,
     _Scheduler_priority_SMP_Move_from_scheduled_to_ready,
     _Scheduler_priority_affinity_SMP_Get_lowest_scheduled,
-    _Scheduler_SMP_Allocate_processor_exact,
-    _Scheduler_priority_SMP_Release_idle_thread
+    _Scheduler_SMP_Allocate_processor_exact
   );
 }
 
@@ -482,9 +478,7 @@ _Scheduler_priority_affinity_SMP_Enqueue_scheduled_ordered(
     insert_ready,
     insert_scheduled,
     _Scheduler_priority_SMP_Move_from_ready_to_scheduled,
-    _Scheduler_SMP_Allocate_processor_exact,
-    _Scheduler_priority_SMP_Get_idle_thread,
-    _Scheduler_priority_SMP_Release_idle_thread
+    _Scheduler_SMP_Allocate_processor_exact
   );
 }
 
@@ -572,8 +566,7 @@ Thread_Control *_Scheduler_priority_affinity_SMP_Ask_for_help(
     context,
     offers_help,
     needs_help,
-    _Scheduler_priority_affinity_SMP_Enqueue_fifo,
-    _Scheduler_priority_SMP_Release_idle_thread
+    _Scheduler_priority_affinity_SMP_Enqueue_fifo
   );
 
   _Scheduler_priority_affinity_SMP_Check_for_migrations( context );
diff --git a/cpukit/score/src/schedulerprioritysmp.c b/cpukit/score/src/schedulerprioritysmp.c
index 93d1c76..c08799f 100644
--- a/cpukit/score/src/schedulerprioritysmp.c
+++ b/cpukit/score/src/schedulerprioritysmp.c
@@ -93,8 +93,7 @@ void _Scheduler_priority_SMP_Block(
     _Scheduler_priority_SMP_Extract_from_ready,
     _Scheduler_priority_SMP_Get_highest_ready,
     _Scheduler_priority_SMP_Move_from_ready_to_scheduled,
-    _Scheduler_SMP_Allocate_processor_lazy,
-    _Scheduler_priority_SMP_Get_idle_thread
+    _Scheduler_SMP_Allocate_processor_lazy
   );
 }
 
@@ -116,8 +115,7 @@ static Thread_Control *_Scheduler_priority_SMP_Enqueue_ordered(
     insert_scheduled,
     _Scheduler_priority_SMP_Move_from_scheduled_to_ready,
     _Scheduler_SMP_Get_lowest_scheduled,
-    _Scheduler_SMP_Allocate_processor_lazy,
-    _Scheduler_priority_SMP_Release_idle_thread
+    _Scheduler_SMP_Allocate_processor_lazy
   );
 }
 
@@ -170,9 +168,7 @@ static Thread_Control *_Scheduler_priority_SMP_Enqueue_scheduled_ordered(
     insert_ready,
     insert_scheduled,
     _Scheduler_priority_SMP_Move_from_ready_to_scheduled,
-    _Scheduler_SMP_Allocate_processor_lazy,
-    _Scheduler_priority_SMP_Get_idle_thread,
-    _Scheduler_priority_SMP_Release_idle_thread
+    _Scheduler_SMP_Allocate_processor_lazy
   );
 }
 
@@ -214,8 +210,7 @@ Thread_Control *_Scheduler_priority_SMP_Unblock(
   return _Scheduler_SMP_Unblock(
     context,
     thread,
-    _Scheduler_priority_SMP_Enqueue_fifo,
-    _Scheduler_priority_SMP_Release_idle_thread
+    _Scheduler_priority_SMP_Enqueue_fifo
   );
 }
 
@@ -254,8 +249,7 @@ Thread_Control *_Scheduler_priority_SMP_Ask_for_help(
     context,
     offers_help,
     needs_help,
-    _Scheduler_priority_SMP_Enqueue_fifo,
-    _Scheduler_priority_SMP_Release_idle_thread
+    _Scheduler_priority_SMP_Enqueue_fifo
   );
 }
 
diff --git a/cpukit/score/src/schedulersimplesmp.c b/cpukit/score/src/schedulersimplesmp.c
index 733f3db..0f05a7d 100644
--- a/cpukit/score/src/schedulersimplesmp.c
+++ b/cpukit/score/src/schedulersimplesmp.c
@@ -165,28 +165,6 @@ static void _Scheduler_simple_SMP_Extract_from_ready(
   _Chain_Extract_unprotected( &node_to_extract->Node );
 }
 
-static Thread_Control *_Scheduler_simple_SMP_Get_idle_thread(
-  Scheduler_Context *context
-)
-{
-  return _Scheduler_SMP_Get_idle_thread(
-    context,
-    _Scheduler_simple_SMP_Extract_from_ready
-  );
-}
-
-static void _Scheduler_simple_SMP_Release_idle_thread(
-  Scheduler_Context *context,
-  Thread_Control    *idle
-)
-{
-  _Scheduler_SMP_Release_idle_thread(
-    context,
-    idle,
-    _Scheduler_simple_SMP_Insert_ready_fifo
-  );
-}
-
 void _Scheduler_simple_SMP_Block(
   const Scheduler_Control *scheduler,
   Thread_Control *thread
@@ -200,8 +178,7 @@ void _Scheduler_simple_SMP_Block(
     _Scheduler_simple_SMP_Extract_from_ready,
     _Scheduler_simple_SMP_Get_highest_ready,
     _Scheduler_simple_SMP_Move_from_ready_to_scheduled,
-    _Scheduler_SMP_Allocate_processor_lazy,
-    _Scheduler_simple_SMP_Get_idle_thread
+    _Scheduler_SMP_Allocate_processor_lazy
   );
 }
 
@@ -223,8 +200,7 @@ static Thread_Control *_Scheduler_simple_SMP_Enqueue_ordered(
     insert_scheduled,
     _Scheduler_simple_SMP_Move_from_scheduled_to_ready,
     _Scheduler_SMP_Get_lowest_scheduled,
-    _Scheduler_SMP_Allocate_processor_lazy,
-    _Scheduler_simple_SMP_Release_idle_thread
+    _Scheduler_SMP_Allocate_processor_lazy
   );
 }
 
@@ -277,9 +253,7 @@ static Thread_Control *_Scheduler_simple_SMP_Enqueue_scheduled_ordered(
     insert_ready,
     insert_scheduled,
     _Scheduler_simple_SMP_Move_from_ready_to_scheduled,
-    _Scheduler_SMP_Allocate_processor_lazy,
-    _Scheduler_simple_SMP_Get_idle_thread,
-    _Scheduler_simple_SMP_Release_idle_thread
+    _Scheduler_SMP_Allocate_processor_lazy
   );
 }
 
@@ -321,8 +295,7 @@ Thread_Control *_Scheduler_simple_SMP_Unblock(
   return _Scheduler_SMP_Unblock(
     context,
     thread,
-    _Scheduler_simple_SMP_Enqueue_fifo,
-    _Scheduler_simple_SMP_Release_idle_thread
+    _Scheduler_simple_SMP_Enqueue_fifo
   );
 }
 
@@ -361,8 +334,7 @@ Thread_Control *_Scheduler_simple_SMP_Ask_for_help(
     context,
     offers_help,
     needs_help,
-    _Scheduler_simple_SMP_Enqueue_fifo,
-    _Scheduler_simple_SMP_Release_idle_thread
+    _Scheduler_simple_SMP_Enqueue_fifo
   );
 }
 
diff --git a/testsuites/smptests/smpmrsp01/init.c b/testsuites/smptests/smpmrsp01/init.c
index ce22c25..bfa5d98 100644
--- a/testsuites/smptests/smpmrsp01/init.c
+++ b/testsuites/smptests/smpmrsp01/init.c
@@ -900,9 +900,23 @@ static void test_mrsp_obtain_and_release_with_help(test_context *ctx)
 
   rtems_test_assert(rtems_get_current_processor() == 1);
 
+  /*
+   * With this operation the scheduler instance 0 has now only the main and the
+   * idle threads in the ready set.
+   */
+  sc = rtems_task_suspend(run_task_id);
+  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+  rtems_test_assert(rtems_get_current_processor() == 1);
+
+  change_prio(RTEMS_SELF, 1);
+  change_prio(RTEMS_SELF, 3);
+
   sc = rtems_semaphore_release(ctx->mrsp_ids[0]);
   rtems_test_assert(sc == RTEMS_SUCCESSFUL);
 
+  rtems_test_assert(rtems_get_current_processor() == 0);
+
   assert_prio(RTEMS_SELF, 3);
 
   wait_for_prio(help_task_id, 3);
diff --git a/testsuites/smptests/smpmrsp01/smpmrsp01.scn b/testsuites/smptests/smpmrsp01/smpmrsp01.scn
index bbae93a..3315db1 100644
--- a/testsuites/smptests/smpmrsp01/smpmrsp01.scn
+++ b/testsuites/smptests/smpmrsp01/smpmrsp01.scn
@@ -21,283 +21,283 @@ test MrsP obtain and release with help
 [0]  RUN -> IDLE (prio   2, node MAIN)
 [1] MAIN -> HELP (prio   2, node HELP)
 [1] HELP -> MAIN (prio   2, node HELP)
-[1] MAIN -> HELP (prio   2, node HELP)
 [0] IDLE -> MAIN (prio   3, node MAIN)
+[1] MAIN -> HELP (prio   2, node HELP)
 test MrsP obtain and release
 test MrsP load
 worker[0]
-  sleep = 16
-  timeout = 3420
-  obtain[0] = 2503
-  obtain[1] = 1671
-  obtain[2] = 4446
-  obtain[3] = 2850
-  obtain[4] = 5003
-  obtain[5] = 3793
-  obtain[6] = 5575
-  obtain[7] = 4468
-  obtain[8] = 5326
-  obtain[9] = 4645
-  obtain[10] = 4565
-  obtain[11] = 5082
-  obtain[12] = 4050
-  obtain[13] = 5203
-  obtain[14] = 2945
-  obtain[15] = 5704
-  obtain[16] = 1652
-  obtain[17] = 5870
-  obtain[18] = 1472
-  obtain[19] = 4933
-  obtain[20] = 1136
-  obtain[21] = 3463
-  obtain[22] = 1257
-  obtain[23] = 3230
-  obtain[24] = 823
-  obtain[25] = 2860
-  obtain[26] = 736
-  obtain[27] = 1270
-  obtain[28] = 438
-  obtain[29] = 1273
-  obtain[30] = 378
-  obtain[31] = 422
-  cpu[0] = 116428
-  cpu[1] = 16133
-  cpu[2] = 32982
-  cpu[3] = 32557
+  sleep = 53
+  timeout = 3445
+  obtain[0] = 7240
+  obtain[1] = 5484
+  obtain[2] = 12983
+  obtain[3] = 9453
+  obtain[4] = 16142
+  obtain[5] = 12509
+  obtain[6] = 16471
+  obtain[7] = 14380
+  obtain[8] = 16566
+  obtain[9] = 16192
+  obtain[10] = 14868
+  obtain[11] = 18208
+  obtain[12] = 12505
+  obtain[13] = 19995
+  obtain[14] = 11155
+  obtain[15] = 20684
+  obtain[16] = 7288
+  obtain[17] = 22252
+  obtain[18] = 6476
+  obtain[19] = 18299
+  obtain[20] = 5711
+  obtain[21] = 17063
+  obtain[22] = 4791
+  obtain[23] = 14655
+  obtain[24] = 3452
+  obtain[25] = 10565
+  obtain[26] = 2912
+  obtain[27] = 8142
+  obtain[28] = 2090
+  obtain[29] = 5086
+  obtain[30] = 1145
+  obtain[31] = 1946
+  cpu[0] = 378475
+  cpu[1] = 64814
+  cpu[2] = 132133
+  cpu[3] = 138047
 worker[1]
   sleep = 1
-  timeout = 4
-  obtain[0] = 2
-  obtain[1] = 0
-  obtain[2] = 3
-  obtain[3] = 8
-  obtain[4] = 10
-  obtain[5] = 0
-  obtain[6] = 7
-  obtain[7] = 0
-  obtain[8] = 0
-  obtain[9] = 0
-  obtain[10] = 11
-  obtain[11] = 0
-  obtain[12] = 26
-  obtain[13] = 14
-  obtain[14] = 5
-  obtain[15] = 0
-  obtain[16] = 0
-  obtain[17] = 18
-  obtain[18] = 12
-  obtain[19] = 0
-  obtain[20] = 0
-  obtain[21] = 0
-  obtain[22] = 0
+  timeout = 6
+  obtain[0] = 19
+  obtain[1] = 8
+  obtain[2] = 15
+  obtain[3] = 24
+  obtain[4] = 20
+  obtain[5] = 19
+  obtain[6] = 14
+  obtain[7] = 40
+  obtain[8] = 45
+  obtain[9] = 20
+  obtain[10] = 0
+  obtain[11] = 48
+  obtain[12] = 13
+  obtain[13] = 57
+  obtain[14] = 30
+  obtain[15] = 48
+  obtain[16] = 36
+  obtain[17] = 36
+  obtain[18] = 19
+  obtain[19] = 20
+  obtain[20] = 42
+  obtain[21] = 44
+  obtain[22] = 23
   obtain[23] = 0
   obtain[24] = 0
-  obtain[25] = 0
+  obtain[25] = 26
   obtain[26] = 0
   obtain[27] = 0
   obtain[28] = 0
   obtain[29] = 0
   obtain[30] = 0
   obtain[31] = 0
-  cpu[0] = 140
-  cpu[1] = 24
-  cpu[2] = 33
-  cpu[3] = 36
+  cpu[0] = 650
+  cpu[1] = 92
+  cpu[2] = 379
+  cpu[3] = 212
 worker[2]
-  sleep = 14
-  timeout = 3513
-  obtain[0] = 2474
-  obtain[1] = 1793
-  obtain[2] = 4551
-  obtain[3] = 2833
-  obtain[4] = 5293
-  obtain[5] = 3681
-  obtain[6] = 5309
-  obtain[7] = 4565
-  obtain[8] = 5270
-  obtain[9] = 4610
-  obtain[10] = 4817
-  obtain[11] = 4760
-  obtain[12] = 3858
-  obtain[13] = 5919
-  obtain[14] = 3172
-  obtain[15] = 5286
-  obtain[16] = 1968
-  obtain[17] = 5800
-  obtain[18] = 1768
-  obtain[19] = 4629
-  obtain[20] = 1446
-  obtain[21] = 4109
-  obtain[22] = 1046
-  obtain[23] = 3119
-  obtain[24] = 1012
-  obtain[25] = 2338
-  obtain[26] = 790
-  obtain[27] = 1628
-  obtain[28] = 432
-  obtain[29] = 1281
-  obtain[30] = 270
-  obtain[31] = 418
-  cpu[0] = 15589
-  cpu[1] = 121473
-  cpu[2] = 31797
-  cpu[3] = 31645
+  sleep = 51
+  timeout = 3731
+  obtain[0] = 7182
+  obtain[1] = 5663
+  obtain[2] = 12945
+  obtain[3] = 9229
+  obtain[4] = 15592
+  obtain[5] = 12125
+  obtain[6] = 16767
+  obtain[7] = 14480
+  obtain[8] = 16620
+  obtain[9] = 16098
+  obtain[10] = 16409
+  obtain[11] = 18109
+  obtain[12] = 12995
+  obtain[13] = 19452
+  obtain[14] = 10719
+  obtain[15] = 20024
+  obtain[16] = 7769
+  obtain[17] = 21913
+  obtain[18] = 6636
+  obtain[19] = 18524
+  obtain[20] = 5952
+  obtain[21] = 16411
+  obtain[22] = 5228
+  obtain[23] = 14456
+  obtain[24] = 4292
+  obtain[25] = 11143
+  obtain[26] = 3019
+  obtain[27] = 8023
+  obtain[28] = 2006
+  obtain[29] = 4664
+  obtain[30] = 1109
+  obtain[31] = 1976
+  cpu[0] = 65356
+  cpu[1] = 381723
+  cpu[2] = 133444
+  cpu[3] = 134588
 worker[3]
   sleep = 1
-  timeout = 3
-  obtain[0] = 4
-  obtain[1] = 0
-  obtain[2] = 9
-  obtain[3] = 0
-  obtain[4] = 5
-  obtain[5] = 0
-  obtain[6] = 0
-  obtain[7] = 8
-  obtain[8] = 0
-  obtain[9] = 10
-  obtain[10] = 0
-  obtain[11] = 0
-  obtain[12] = 0
+  timeout = 11
+  obtain[0] = 11
+  obtain[1] = 6
+  obtain[2] = 33
+  obtain[3] = 20
+  obtain[4] = 10
+  obtain[5] = 10
+  obtain[6] = 28
+  obtain[7] = 18
+  obtain[8] = 27
+  obtain[9] = 40
+  obtain[10] = 33
+  obtain[11] = 36
+  obtain[12] = 26
   obtain[13] = 0
-  obtain[14] = 0
+  obtain[14] = 15
   obtain[15] = 16
   obtain[16] = 0
   obtain[17] = 18
   obtain[18] = 0
-  obtain[19] = 0
+  obtain[19] = 42
   obtain[20] = 0
-  obtain[21] = 1
+  obtain[21] = 88
   obtain[22] = 0
   obtain[23] = 24
   obtain[24] = 0
   obtain[25] = 0
   obtain[26] = 0
-  obtain[27] = 0
+  obtain[27] = 28
   obtain[28] = 0
   obtain[29] = 0
-  obtain[30] = 0
+  obtain[30] = 31
   obtain[31] = 0
-  cpu[0] = 22
-  cpu[1] = 123
-  cpu[2] = 7
-  cpu[3] = 39
+  cpu[0] = 136
+  cpu[1] = 573
+  cpu[2] = 291
+  cpu[3] = 121
 worker[4]
-  sleep = 19
-  timeout = 3025
-  obtain[0] = 2574
-  obtain[1] = 1845
-  obtain[2] = 4423
-  obtain[3] = 2985
-  obtain[4] = 5086
-  obtain[5] = 3679
-  obtain[6] = 5286
-  obtain[7] = 4447
-  obtain[8] = 5885
-  obtain[9] = 4771
-  obtain[10] = 4857
-  obtain[11] = 5467
-  obtain[12] = 4554
-  obtain[13] = 5210
-  obtain[14] = 3547
-  obtain[15] = 6169
-  obtain[16] = 2337
-  obtain[17] = 6109
-  obtain[18] = 1797
-  obtain[19] = 5136
-  obtain[20] = 1646
-  obtain[21] = 4251
-  obtain[22] = 1041
-  obtain[23] = 3235
-  obtain[24] = 975
-  obtain[25] = 2961
-  obtain[26] = 739
-  obtain[27] = 1704
-  obtain[28] = 554
-  obtain[29] = 1344
-  obtain[30] = 182
-  obtain[31] = 559
-  cpu[0] = 5617
-  cpu[1] = 5834
-  cpu[2] = 100129
-  cpu[3] = 99149
+  sleep = 47
+  timeout = 3278
+  obtain[0] = 7397
+  obtain[1] = 5723
+  obtain[2] = 13399
+  obtain[3] = 9018
+  obtain[4] = 16575
+  obtain[5] = 12731
+  obtain[6] = 16571
+  obtain[7] = 14376
+  obtain[8] = 16786
+  obtain[9] = 17022
+  obtain[10] = 15889
+  obtain[11] = 19338
+  obtain[12] = 13240
+  obtain[13] = 19055
+  obtain[14] = 11533
+  obtain[15] = 22667
+  obtain[16] = 7521
+  obtain[17] = 21826
+  obtain[18] = 6320
+  obtain[19] = 18522
+  obtain[20] = 6874
+  obtain[21] = 16498
+  obtain[22] = 4983
+  obtain[23] = 14210
+  obtain[24] = 4019
+  obtain[25] = 11510
+  obtain[26] = 3425
+  obtain[27] = 8809
+  obtain[28] = 2002
+  obtain[29] = 5197
+  obtain[30] = 996
+  obtain[31] = 2276
+  cpu[0] = 20729
+  cpu[1] = 19760
+  cpu[2] = 343613
+  cpu[3] = 348561
 worker[5]
-  sleep = 18
-  timeout = 3123
-  obtain[0] = 2439
-  obtain[1] = 1878
-  obtain[2] = 4576
-  obtain[3] = 2938
-  obtain[4] = 5088
-  obtain[5] = 3723
-  obtain[6] = 5611
-  obtain[7] = 4411
-  obtain[8] = 5522
-  obtain[9] = 4893
-  obtain[10] = 4877
-  obtain[11] = 4932
-  obtain[12] = 4263
-  obtain[13] = 5608
-  obtain[14] = 2791
-  obtain[15] = 5905
-  obtain[16] = 1739
-  obtain[17] = 5322
-  obtain[18] = 1892
-  obtain[19] = 5118
-  obtain[20] = 1360
-  obtain[21] = 4764
-  obtain[22] = 1099
-  obtain[23] = 3180
-  obtain[24] = 913
-  obtain[25] = 2612
-  obtain[26] = 807
-  obtain[27] = 1588
-  obtain[28] = 493
-  obtain[29] = 1348
-  obtain[30] = 389
-  obtain[31] = 471
-  cpu[0] = 5554
-  cpu[1] = 6139
-  cpu[2] = 97852
-  cpu[3] = 95573
+  sleep = 61
+  timeout = 3183
+  obtain[0] = 7291
+  obtain[1] = 5782
+  obtain[2] = 13633
+  obtain[3] = 9864
+  obtain[4] = 16465
+  obtain[5] = 12581
+  obtain[6] = 17135
+  obtain[7] = 14616
+  obtain[8] = 16524
+  obtain[9] = 16472
+  obtain[10] = 15194
+  obtain[11] = 18038
+  obtain[12] = 13801
+  obtain[13] = 19959
+  obtain[14] = 11693
+  obtain[15] = 20770
+  obtain[16] = 7328
+  obtain[17] = 23222
+  obtain[18] = 7186
+  obtain[19] = 19739
+  obtain[20] = 6584
+  obtain[21] = 17450
+  obtain[22] = 5241
+  obtain[23] = 14808
+  obtain[24] = 4287
+  obtain[25] = 11387
+  obtain[26] = 3367
+  obtain[27] = 8149
+  obtain[28] = 1887
+  obtain[29] = 4969
+  obtain[30] = 1123
+  obtain[31] = 1695
+  cpu[0] = 19504
+  cpu[1] = 20069
+  cpu[2] = 346015
+  cpu[3] = 350953
 worker[6]
   sleep = 1
-  timeout = 11
-  obtain[0] = 2
-  obtain[1] = 2
-  obtain[2] = 9
-  obtain[3] = 4
-  obtain[4] = 15
-  obtain[5] = 12
-  obtain[6] = 7
-  obtain[7] = 16
-  obtain[8] = 10
-  obtain[9] = 20
-  obtain[10] = 11
-  obtain[11] = 5
-  obtain[12] = 0
-  obtain[13] = 0
-  obtain[14] = 0
-  obtain[15] = 16
-  obtain[16] = 0
-  obtain[17] = 0
-  obtain[18] = 0
-  obtain[19] = 20
-  obtain[20] = 0
-  obtain[21] = 44
-  obtain[22] = 0
-  obtain[23] = 0
+  timeout = 15
+  obtain[0] = 26
+  obtain[1] = 22
+  obtain[2] = 45
+  obtain[3] = 32
+  obtain[4] = 45
+  obtain[5] = 76
+  obtain[6] = 49
+  obtain[7] = 64
+  obtain[8] = 99
+  obtain[9] = 70
+  obtain[10] = 55
+  obtain[11] = 48
+  obtain[12] = 39
+  obtain[13] = 28
+  obtain[14] = 60
+  obtain[15] = 48
+  obtain[16] = 17
+  obtain[17] = 74
+  obtain[18] = 38
+  obtain[19] = 60
+  obtain[20] = 63
+  obtain[21] = 66
+  obtain[22] = 23
+  obtain[23] = 48
   obtain[24] = 0
-  obtain[25] = 7
+  obtain[25] = 78
   obtain[26] = 0
-  obtain[27] = 0
+  obtain[27] = 43
   obtain[28] = 0
   obtain[29] = 0
   obtain[30] = 0
-  obtain[31] = 0
-  cpu[0] = 10
-  cpu[1] = 6
-  cpu[2] = 168
-  cpu[3] = 217
+  obtain[31] = 32
+  cpu[0] = 71
+  cpu[1] = 39
+  cpu[2] = 1333
+  cpu[3] = 1254
 worker[7]
   sleep = 1
   timeout = 0
@@ -337,8 +337,8 @@ worker[7]
   cpu[1] = 0
   cpu[2] = 1
   cpu[3] = 0
-migrations[0] = 110919
-migrations[1] = 110920
-migrations[2] = 109762
-migrations[3] = 112076
+migrations[0] = 437361
+migrations[1] = 437363
+migrations[2] = 441234
+migrations[3] = 433487
 *** END OF TEST SMPMRSP 1 ***



More information about the vc mailing list