summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-07-10 14:27:42 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-07-10 15:29:57 +0200
commit27783f6ca8683eaf4826e777963c32a63f55da31 (patch)
tree45a3294eb7cfd6bae51e1cb1661f699b0e23d6e8
parentscore: Fix assertions (diff)
downloadrtems-27783f6ca8683eaf4826e777963c32a63f55da31.tar.bz2
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.
-rw-r--r--cpukit/score/include/rtems/score/schedulerprioritysmpimpl.h22
-rw-r--r--cpukit/score/include/rtems/score/schedulersmp.h4
-rw-r--r--cpukit/score/include/rtems/score/schedulersmpimpl.h59
-rw-r--r--cpukit/score/src/schedulerpriorityaffinitysmp.c19
-rw-r--r--cpukit/score/src/schedulerprioritysmp.c16
-rw-r--r--cpukit/score/src/schedulersimplesmp.c38
-rw-r--r--testsuites/smptests/smpmrsp01/init.c14
-rw-r--r--testsuites/smptests/smpmrsp01/smpmrsp01.scn482
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 bb200b4641..9ae01038b6 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 a58417a268..9e11488584 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 a4890df4d0..156307db24 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 39a0a481ea..41e44a0834 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 93d1c76d30..c08799f270 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 733f3dbe9f..0f05a7da81 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 ce22c25d17..bfa5d982df 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 bbae93a381..3315db174b 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 ***