- 论坛徽章:
- 0
|
当1-15核全部down时, cpu online 位图是 1, 当1核起来后cpu online 是 3(即二进制的 11), 应该是正确的。
但启动cpu2时有问题, 我加了一些打印大致如下:
/ # echo 1 > /sys/devices/system/cpu/cpu2/online //此命令表示准备启动 cpu2。调用函数顺序大概为 _cpu_up -> raw_notifier_call_chain -> notifier_call_chain -〉 nb->notifier_call 调用注册的回调函数。
go in _cpu_up, cpu=2, smp_processor_id=1 // 这里表示当前cpu是1, 准备在cpu1上启动cpu2
notifier_call : ffffffff8103226f , cpu=2, smp_processor_id=1 // cpu1调用注册的回调函数migration_call( ffffffff8103226f )。按道理调用后会有打印,但一直也没有。 从此cpu1上再也没有任何打印了。
notifier_call : ffffffff81050de0 , cpu=686702604, smp_processor_id=0 //从这里开始只有 cpu0 上的打印, 调用 tick_notify(ffffffff81050de0 ). smp_processor_id=0 表示当前cpu为0; cpu=686702604 打印有误,不关注。
notifier_call : ffffffff81050de0 , cpu=686702604, smp_processor_id=0
notifier_call : ffffffff81050de0 , cpu=686702604, smp_processor_id=0
notifier_call : ffffffff81050de0 , cpu=686702604, smp_processor_id=0
notifier_call : ffffffff81050de0 , cpu=686702604, smp_processor_id=0
in tick_notify, reason=4, cpu = 0, smp_processor_id=0
in tick notify, cpu id = 0, dump stack....
Call Trace: // 调用tick_notify时,我将堆栈打印出来了,表明是idle状态。 但这里有 start_kernel, 这里表示内核重起了吗?
[<ffffffff81050e4a>] tick_notify+0x6a/0x3e2
[<ffffffff81045d35>] notifier_call_chain+0xa3/0xff
[<ffffffff81050b57>] clockevents_notify+0x24/0x6c
[<ffffffff8119fa50>] acpi_processor_idle+0x2ba/0x466
[<ffffffff8119f796>] acpi_processor_idle+0x0/0x466
[<ffffffff8100896b>] cpu_idle+0xa3/0xcb
[<ffffffff815d08c5>] start_kernel+0x2fe/0x30a
[<ffffffff815d0165>] _sinittext+0x165/0x170
notifier_call : ffffffff81050de0 , cpu=686702604, smp_processor_id=0
notifier_call : ffffffff81050de0 , cpu=686702604, smp_processor_id=0
notifier_call : ffffffff81050de0 , cpu=686702604, smp_processor_id=0
notifier_call : ffffffff81050de0 , cpu=686702604, smp_processor_id=0
notifier_call : ffffffff81050de0 , cpu=686702604, smp_processor_id=0
notifier_call : ffffffff81050de0 , cpu=686702604, smp_processor_id=0 |
|