-
Notifications
You must be signed in to change notification settings - Fork 619
os/kernel/sched: Development of CPU ON/OFF function. #7059
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
7648a32 to
53045b0
Compare
os/kernel/sched/sched_cpuoff.c
Outdated
| if(CPU_ISSET(cpu, &g_active_cpus_mask)) { | ||
| //check migrate flag migrate all task off of CPU if set. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could you please move CPU_CLR(cpu, &g_active_cpus_mask) here from sched_migrate_tasks?
same location of CLR and SET is better.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ok, I'll include this in sched_cpuoff.c and remove it from sched_migrate_tasks.c
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is done and changes pushed to branch.
os/kernel/sched/sched_cpuon.c
Outdated
| /* Lock the scheduler and disable interrupts to ensure atomicity | ||
| * throughout this critical operation. | ||
| */ | ||
| flags = enter_critical_section(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
some section is protecting using spin_lock
and here, it's protected using enter_critical_section.
Could you please let me know what is difference??
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
spin_lock is used to ensure only one CPU is performing turn OFF/ON operation at time.
enter_critical_section ensures the CPU which is executing code doesn't get interrupted while actually performing the requested operation.
os/kernel/sched/sched_cpuoff.c
Outdated
| if(spin_trylock(&g_cpuhp_lock[cpu]) == SP_LOCKED) { | ||
| slldbg("CPU state change is already in progress\n"); | ||
| return -EBUSY; | ||
| } | ||
|
|
||
| spin_lock(&g_state_transition_lock); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could you please check below case?
CPU0 - call sched_cpuoff(1) - sched_cpuon(1) repeated.
CPU1 - call enter_critical_section() - up_cpu_pause(0) - up_cpu_resume(0) - leave_critical_section() in IRQ repeated.
Please check if spin_lock is enough and if we need masking IRQ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have done this testing it works well, after modifying code according to review comments, I'll run test again and update PR description with results.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
os/kernel/sched/sched_cpuon.c
Outdated
|
|
||
| int sched_cpuon(int cpu) | ||
| { | ||
| if(spin_trylock(&g_cpuhp_lock[cpu]) == SP_LOCKED) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if (
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
os/kernel/sched/sched_cpuon.c
Outdated
| } | ||
|
|
||
| if(!CPU_ISSET(cpu,&g_active_cpus_mask)) { | ||
| ret = up_cpu_on(cpu); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please move it also into critical_section.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
os/kernel/sched/sched_cpuoff.c
Outdated
| if(spin_trylock(&g_cpuhp_lock[cpu]) == SP_LOCKED) { | ||
| slldbg("CPU state change is already in progress\n"); | ||
| return -EBUSY; | ||
| } | ||
|
|
||
| spin_lock(&g_state_transition_lock); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
please check below also.
if we have 4core,
- cpu1 call cpuoff(2) in IRQ
- cpu2 call cpuoff(1) in IRQ
it looks deadlock..
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We have now moved to single spin_lock to ensure only one CPU performs the operation at a time.
os/kernel/sched/sched_cpuoff.c
Outdated
| int sched_cpuoff(int cpu, bool migrate) | ||
| { | ||
| if(spin_trylock(&g_cpuhp_lock[cpu]) == SP_LOCKED) { | ||
| slldbg("CPU state change is already in progress\n"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it will be called in idle thread.
lldbg is better for debugging.
but we won't not enable default
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ewoodev I don't get why lldbg is better in the idle. Could you elaborate more?
os/kernel/sched/sched_cpuoff.c
Outdated
| if (cpu == this_cpu()) { | ||
| slldbg("Cannot turn off this CPU from itself: %d\n", cpu); | ||
| ret = -EINVAL; | ||
| goto errout_with_global_lock; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you need to lock them before input validations?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Validation order is changed
Is there any limitation on usages? Could you elaborate them more? |
c06411c to
2106089
Compare
os/kernel/sched/sched_cpuoff.c
Outdated
| } | ||
| } | ||
| //Call up_cpu_off function | ||
| flags = enter_critical_section(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
sched_migrate_tasks is also using enter_critical_section.
How about include it also.?
i mean
flags = enter_critical_section();
CPU_CLR(cpu, &g_active_cpus_mask);
// leave_critical_section(flags); <--------remove
ret = sched_migrate_tasks(cpu);
// flags = enter_critical_section(); <--------remove
ret = up_cpu_off(cpu);
leave_critical_section(flags);There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
sched_migrate_tasks is also using enter_critical_section.
How about include it also.?
i mean
flags = enter_critical_section(); CPU_CLR(cpu, &g_active_cpus_mask); // leave_critical_section(flags); <--------remove ret = sched_migrate_tasks(cpu); // flags = enter_critical_section(); <--------remove ret = up_cpu_off(cpu); leave_critical_section(flags);
Done
2106089 to
3ad9d39
Compare
os/kernel/sched/sched_cpuoff.c
Outdated
| * | ||
| ****************************************************************************/ | ||
|
|
||
| int sched_cpuoff(int cpu, bool migrate) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we don't need to seperate not migration case.
up_cpu_off api is needed idle state.
it means, we need to do migrate task everycase.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We always leave idle task in CPU's assigned list, which means when CPU is running only idle task then there is no need of calling task migration.
I'll modify code like this:
FAR struct tcb_s *tcb; tcb = current_task(cpu); bool migrate = (tcb->pid != cpu);
before taking lock and remove the flag from function parameter.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is done.
os/kernel/sched/sched_cpuoff.c
Outdated
| * Request to bring a CPU to power off state. | ||
| * | ||
| * Input Parameters: | ||
| * cpu - The CPU index to turn of |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
of -> off
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ok, done
2fdcd29 to
0bc6567
Compare
os/kernel/sched/sched_cpuoff.c
Outdated
| FAR struct tcb_s *tcb; | ||
| tcb = current_task(cpu); | ||
| bool migrate = (tcb->pid != cpu); | ||
|
|
||
| if (spin_trylock(&g_state_transition_lock) == SP_LOCKED) { | ||
| return -EBUSY; | ||
| } | ||
|
|
||
| irqstate_t flags; | ||
| int ret = OK; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
minor,
Could you please move variable declaration to the top of the function.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This code will be removed from this PR, according to discussion.
8cba618 to
d7f04b7
Compare
This commit is to move CPU mask clearing code from sched_migrate_tasks.c to sched_cpuoff.c
This is done to keep the functionality at common place.
Signed-Off By: Vivek Jain (vivek1.j@samsung.com)
d7f04b7 to
d1a1c47
Compare
os/kernel/sched/sched_cpuoff.c
Outdated
| ret = sched_migrate_tasks(cpu); | ||
| if (ret != 0) { | ||
| leave_critical_section(flags); | ||
| goto errout_with_global_lock; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we have to restore g_active_cpus_mask in migration fail case.
CPU_SET(cpu, &g_active_cpus_mask);
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This code will be removed from this PR according to latest discussion.
os/kernel/sched/sched_cpuoff.c
Outdated
| //check migrate flag migrate all task off of CPU if set. | ||
| if (migrate) { | ||
| ret = sched_migrate_tasks(cpu); | ||
| if (ret != 0) { | ||
| leave_critical_section(flags); | ||
| goto errout_with_global_lock; | ||
| } | ||
| //since we have migrated the tasks, we need to consider leaving critical section | ||
| //this is required because task migration required to pause CPU. | ||
| //the interrupt will not return until we leave critical section. | ||
| //this will prevent cpu off operation to complete successfully. | ||
| leave_critical_section(flags); | ||
| flags = enter_critical_section(); | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As our disscussion, Please remove this code in this PR.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
os/kernel/Kconfig
Outdated
| config CPU_MANAGER | ||
| bool "CPU Manager" | ||
| default n | ||
| ---help--- | ||
| Enable the CPU Manager module which provides a centralized | ||
| interface for handling CPU on and off operations both from user | ||
| applications (via CPU driver) and from the PM idle logic. | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
config CPU_HOTPLUG
bool "CPU Hotplug"
default n
depends on PM
---help---
This will register an additional Software Generated Interrupt (SGI)
for CPU Hotplug when system goes low power mode (ie. Power Gating)
we have already config for cpu on/off. How about merge to it?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done, using CPU_HOTPLUG now
*Add sched_cpuon and sched_cpuoff API to Scheduler
*sched_cpuon: Turns previously off CPU (1 ... N) to on.
*sched_cpuoff: Turns previously on CPU (1 ... N) to off, after migrating tasks to other CPUs.
Signed-Off By: Vivek Jain (vivek1.j@samsung.com)
d1a1c47 to
9f14032
Compare
Test Results
TASH>>cputest
TASH>>Main[0]: Running on CPU0
Scheduler API Test Application
=== Creating Worker Threads ===
Running with AMP configuration
Thread[1]: Started
Thread[1]: Running on CPU0
Thread 1 created
Thread[2]: Started
Thread[2]: Running on CPU1
Thread 2 created
Thread[3]: Started
Thread[3]: Running on CPU0
Thread 3 created
Thread[4]: Started
Thread[4]: Running on CPU1
Thread 4 created
Thread[5]: Started
Thread[5]: Running on CPU0
Thread 5 created
Thread[6]: Started
Thread[6]: Running on CPU1
Thread 6 created
Thread[7]: Started
Thread[7]: Running on CPU0
Thread 7 created
Thread[8]: Started
Thread[8]: Running on CPU1
Thread 8 created
=== Testing Invalid Parameters ===
Test 1: Attempting to turn off CPU 0 (should fail)
SUCCESS: sched_cpuoff(0) correctly failed with ret=-22
Test 2: Attempting to turn on CPU 0 (should fail)
SUCCESS: sched_cpuon(0) correctly failed with ret=-22
Test 3: Attempting to turn off invalid CPU number (should fail)
SUCCESS: sched_cpuoff(invalid_cpu) correctly failed with ret=-22
Test 4: Attempting to turn on invalid CPU number (should fail)
SUCCESS: sched_cpuon(invalid_cpu) correctly failed with ret=-22
Test 5: Attempting to turn off negative CPU number (should fail)
SUCCESS: sched_cpuoff(-1) correctly failed with ret=-22
Test 6: Attempting to turn on negative CPU number (should fail)
SUCCESS: sched_cpuon(-1) correctly failed with ret=-22
=== Invalid Parameter Tests Completed Successfully ===
=== CPU Hotplug Test ===
Testing CPU 1 hotplug for 100 iterations
Iteration 1: Turning off CPU 1
Thread[8]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[4]: Now running on CPU0
Iteration 1: Turning on CPU 1
Thread[8]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 1: Completed
Iteration 2: Turning off CPU 1
Thread[8]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[4]: Now running on CPU0
Iteration 2: Turning on CPU 1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Iteration 2: Completed
Iteration 3: Turning off CPU 1
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 3: Turning on CPU 1
Thread[6]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[2]: Now running on CPU1
Iteration 3: Completed
Iteration 4: Turning off CPU 1
Thread[6]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[2]: Now running on CPU0
Iteration 4: Turning on CPU 1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 4: Completed
Iteration 5: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Iteration 5: Turning on CPU 1
Thread[8]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 5: Completed
Iteration 6: Turning off CPU 1
Thread[8]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[4]: Now running on CPU0
Iteration 6: Turning on CPU 1
Thread[6]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[2]: Now running on CPU1
Iteration 6: Completed
Iteration 7: Turning off CPU 1
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 7: Turning on CPU 1
Thread[6]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[2]: Now running on CPU1
Iteration 7: Completed
Iteration 8: Turning off CPU 1
Thread[6]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[2]: Now running on CPU0
Iteration 8: Turning on CPU 1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 8: Completed
Iteration 9: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Iteration 9: Turning on CPU 1
Thread[8]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 9: Completed
Iteration 10: Turning off CPU 1
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 10: Turning on CPU 1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 10: Completed
Iteration 11: Turning off CPU 1
Thread[6]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[2]: Now running on CPU0
Iteration 11: Turning on CPU 1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 11: Completed
Iteration 12: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Iteration 12: Turning on CPU 1
Thread[8]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 12: Completed
Iteration 13: Turning off CPU 1
Thread[8]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[4]: Now running on CPU0
Iteration 13: Turning on CPU 1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Iteration 13: Completed
Iteration 14: Turning off CPU 1
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 14: Turning on CPU 1
Thread[6]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[2]: Now running on CPU1
Iteration 14: Completed
Iteration 15: Turning off CPU 1
Thread[6]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[2]: Now running on CPU0
Iteration 15: Turning on CPU 1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 15: Completed
Iteration 16: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Iteration 16: Turning on CPU 1
Thread[8]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 16: Completed
Iteration 17: Turning off CPU 1
Thread[8]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[4]: Now running on CPU0
Iteration 17: Turning on CPU 1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Iteration 17: Completed
Iteration 18: Turning off CPU 1
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 18: Turning on CPU 1
Thread[6]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[2]: Now running on CPU1
Iteration 18: Completed
Iteration 19: Turning off CPU 1
Thread[6]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[2]: Now running on CPU0
Iteration 19: Turning on CPU 1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 19: Completed
Iteration 20: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Iteration 20: Turning on CPU 1
Thread[8]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 20: Completed
Iteration 21: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Iteration 21: Turning on CPU 1
Thread[8]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 21: Completed
Iteration 22: Turning off CPU 1
Thread[8]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[4]: Now running on CPU0
Iteration 22: Turning on CPU 1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Iteration 22: Completed
Iteration 23: Turning off CPU 1
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 23: Turning on CPU 1
Thread[6]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[2]: Now running on CPU1
Iteration 23: Completed
Iteration 24: Turning off CPU 1
Thread[6]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[2]: Now running on CPU0
Iteration 24: Turning on CPU 1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 24: Completed
Iteration 25: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Iteration 25: Turning on CPU 1
Thread[8]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 25: Completed
Iteration 26: Turning off CPU 1
Thread[8]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[4]: Now running on CPU0
Iteration 26: Turning on CPU 1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Iteration 26: Completed
Iteration 27: Turning off CPU 1
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 27: Turning on CPU 1
Thread[6]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[2]: Now running on CPU1
Iteration 27: Completed
Iteration 28: Turning off CPU 1
Thread[6]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[2]: Now running on CPU0
Iteration 28: Turning on CPU 1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 28: Completed
Iteration 29: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Iteration 29: Turning on CPU 1
Thread[8]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 29: Completed
Iteration 30: Turning off CPU 1
Thread[8]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[4]: Now running on CPU0
Iteration 30: Turning on CPU 1
Thread[4]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[8]: Now running on CPU1
Iteration 30: Completed
Iteration 31: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 31: Turning on CPU 1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 31: Completed
Iteration 32: Turning off CPU 1
Thread[6]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Iteration 32: Turning on CPU 1
Thread[2]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 32: Completed
Iteration 33: Turning off CPU 1
Thread[2]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[6]: Now running on CPU0
Iteration 33: Turning on CPU 1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Iteration 33: Completed
Iteration 34: Turning off CPU 1
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[2]: Now running on CPU0
Iteration 34: Turning on CPU 1
Thread[4]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[8]: Now running on CPU1
Iteration 34: Completed
Iteration 35: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 35: Turning on CPU 1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 35: Completed
Iteration 36: Turning off CPU 1
Thread[6]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Iteration 36: Turning on CPU 1
Thread[2]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 36: Completed
Iteration 37: Turning off CPU 1
Thread[2]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[6]: Now running on CPU0
Iteration 37: Turning on CPU 1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Iteration 37: Completed
Iteration 38: Turning off CPU 1
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[2]: Now running on CPU0
Iteration 38: Turning on CPU 1
Thread[4]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[8]: Now running on CPU1
Iteration 38: Completed
Iteration 39: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 39: Turning on CPU 1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 39: Completed
Iteration 40: Turning off CPU 1
Thread[6]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Iteration 40: Turning on CPU 1
Thread[2]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 40: Completed
Iteration 41: Turning off CPU 1
Thread[2]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[6]: Now running on CPU0
Iteration 41: Turning on CPU 1
Thread[8]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 41: Completed
Iteration 42: Turning off CPU 1
Thread[2]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[6]: Now running on CPU0
Iteration 42: Turning on CPU 1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Iteration 42: Completed
Iteration 43: Turning off CPU 1
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[2]: Now running on CPU0
Iteration 43: Turning on CPU 1
Thread[4]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[8]: Now running on CPU1
Iteration 43: Completed
Iteration 44: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 44: Turning on CPU 1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 44: Completed
Iteration 45: Turning off CPU 1
Thread[6]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Iteration 45: Turning on CPU 1
Thread[2]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 45: Completed
Iteration 46: Turning off CPU 1
Thread[2]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[6]: Now running on CPU0
Iteration 46: Turning on CPU 1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Iteration 46: Completed
Iteration 47: Turning off CPU 1
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[2]: Now running on CPU0
Iteration 47: Turning on CPU 1
Thread[4]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[8]: Now running on CPU1
Iteration 47: Completed
Iteration 48: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 48: Turning on CPU 1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 48: Completed
Iteration 49: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 49: Turning on CPU 1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 49: Completed
Iteration 50: Turning off CPU 1
Thread[6]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Iteration 50: Turning on CPU 1
Thread[2]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 50: Completed
Iteration 51: Turning off CPU 1
Thread[2]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[6]: Now running on CPU0
Iteration 51: Turning on CPU 1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Iteration 51: Completed
Iteration 52: Turning off CPU 1
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[2]: Now running on CPU0
Iteration 52: Turning on CPU 1
Thread[4]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[8]: Now running on CPU1
Iteration 52: Completed
Iteration 53: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 53: Turning on CPU 1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 53: Completed
Iteration 54: Turning off CPU 1
Thread[8]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[4]: Now running on CPU0
Iteration 54: Turning on CPU 1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Iteration 54: Completed
Iteration 55: Turning off CPU 1
Thread[6]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 55: Turning on CPU 1
Thread[2]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 55: Completed
Iteration 56: Turning off CPU 1
Thread[2]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[6]: Now running on CPU0
Iteration 56: Turning on CPU 1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Iteration 56: Completed
Iteration 57: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[2]: Now running on CPU0
Iteration 57: Turning on CPU 1
Thread[8]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 57: Completed
Iteration 58: Turning off CPU 1
Thread[8]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[4]: Now running on CPU0
Iteration 58: Turning on CPU 1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Iteration 58: Completed
Iteration 59: Turning off CPU 1
Thread[6]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 59: Turning on CPU 1
Thread[2]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 59: Completed
Iteration 60: Turning off CPU 1
Thread[2]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[6]: Now running on CPU0
Iteration 60: Turning on CPU 1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Iteration 60: Completed
Iteration 61: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[2]: Now running on CPU0
Iteration 61: Turning on CPU 1
Thread[8]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 61: Completed
Iteration 62: Turning off CPU 1
Thread[8]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[4]: Now running on CPU0
Iteration 62: Turning on CPU 1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Iteration 62: Completed
Iteration 63: Turning off CPU 1
Thread[6]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 63: Turning on CPU 1
Thread[2]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 63: Completed
Iteration 64: Turning off CPU 1
Thread[2]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[6]: Now running on CPU0
Iteration 64: Turning on CPU 1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[2]: Now running on CPU1
Iteration 64: Completed
Iteration 65: Turning off CPU 1
Thread[8]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[4]: Now running on CPU0
Iteration 65: Turning on CPU 1
Thread[2]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 65: Completed
Iteration 66: Turning off CPU 1
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Iteration 66: Turning on CPU 1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 66: Completed
Iteration 67: Turning off CPU 1
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Iteration 67: Turning on CPU 1
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[8]: Now running on CPU1
Iteration 67: Completed
Iteration 68: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 68: Turning on CPU 1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 68: Completed
Iteration 69: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 69: Turning on CPU 1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 69: Completed
Iteration 70: Turning off CPU 1
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Iteration 70: Turning on CPU 1
Thread[6]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU1
Iteration 70: Completed
Iteration 71: Turning off CPU 1
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Iteration 71: Turning on CPU 1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 71: Completed
Iteration 72: Turning off CPU 1
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Iteration 72: Turning on CPU 1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 72: Completed
Iteration 73: Turning off CPU 1
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Iteration 73: Turning on CPU 1
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 73: Completed
Iteration 74: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 74: Turning on CPU 1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 74: Completed
Iteration 75: Turning off CPU 1
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Iteration 75: Turning on CPU 1
Thread[6]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU1
Iteration 75: Completed
Iteration 76: Turning off CPU 1
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Iteration 76: Turning on CPU 1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 76: Completed
Iteration 77: Turning off CPU 1
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Iteration 77: Turning on CPU 1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 77: Completed
Iteration 78: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 78: Turning on CPU 1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 78: Completed
Iteration 79: Turning off CPU 1
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Iteration 79: Turning on CPU 1
Thread[6]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU1
Iteration 79: Completed
Iteration 80: Turning off CPU 1
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Iteration 80: Turning on CPU 1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 80: Completed
Iteration 81: Turning off CPU 1
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Iteration 81: Turning on CPU 1
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[8]: Now running on CPU1
Iteration 81: Completed
Iteration 82: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 82: Turning on CPU 1
Thread[2]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 82: Completed
Iteration 83: Turning off CPU 1
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Iteration 83: Turning on CPU 1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 83: Completed
Iteration 84: Turning off CPU 1
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Iteration 84: Turning on CPU 1
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[8]: Now running on CPU1
Iteration 84: Completed
Iteration 85: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 85: Turning on CPU 1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 85: Completed
Iteration 86: Turning off CPU 1
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Iteration 86: Turning on CPU 1
Thread[6]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU1
Iteration 86: Completed
Iteration 87: Turning off CPU 1
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Iteration 87: Turning on CPU 1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 87: Completed
Iteration 88: Turning off CPU 1
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Iteration 88: Turning on CPU 1
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[8]: Now running on CPU1
Iteration 88: Completed
Iteration 89: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 89: Turning on CPU 1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 89: Completed
Iteration 90: Turning off CPU 1
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Iteration 90: Turning on CPU 1
Thread[6]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU1
Iteration 90: Completed
Iteration 91: Turning off CPU 1
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Iteration 91: Turning on CPU 1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 91: Completed
Iteration 92: Turning off CPU 1
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Iteration 92: Turning on CPU 1
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[8]: Now running on CPU1
Iteration 92: Completed
Iteration 93: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 93: Turning on CPU 1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 93: Completed
Iteration 94: Turning off CPU 1
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Iteration 94: Turning on CPU 1
Thread[6]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU1
Iteration 94: Completed
Iteration 95: Turning off CPU 1
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Iteration 95: Turning on CPU 1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Iteration 95: Completed
Iteration 96: Turning off CPU 1
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Iteration 96: Turning on CPU 1
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[8]: Now running on CPU1
Iteration 96: Completed
Iteration 97: Turning off CPU 1
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Iteration 97: Turning on CPU 1
Thread[6]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU1
Iteration 97: Completed
Iteration 98: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 98: Turning on CPU 1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[8]: Now running on CPU1
Iteration 98: Completed
Iteration 99: Turning off CPU 1
Thread[4]: Now running on CPU0
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Iteration 99: Turning on CPU 1
Thread[2]: Now running on CPU1
Thread[6]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Iteration 99: Completed
Iteration 100: Turning off CPU 1
Thread[2]: Now running on CPU0
Thread[6]: Now running on CPU0
Thread[8]: Now running on CPU0
Thread[4]: Now running on CPU0
Iteration 100: Turning on CPU 1
Thread[6]: Now running on CPU1
Thread[8]: Now running on CPU1
Thread[4]: Now running on CPU1
Thread[2]: Now running on CPU1
Iteration 100: Completed
=== CPU Hotplug Test Completed Successfully ===
=== Cleaning up threads ===
Thread[1]: Done
Thread[4]: Done
Thread[2]: Done
Thread[6]: Done
Thread[8]: Done
Thread[7]: Done
Thread[3]: Done
Thread[5]: Done
=== Test Completed Successfully ===
Signed-Off By: Vivek Jain (vivek1.j@samsung.com)