禁止RCU看门狗
在内核调试时,如果将内核中断下来停止太久,可能激活内核看门狗机制,引发内核崩溃,影响调试。
[ 6480.723298000] rcu: rcu_sched kthread starved for 9523 jiffies! g246065 f0x0 RCU_GP_WAIT_FQS(5) ->state=0x402 ->cpu=1[ 6480.723301500] rcu: Unless rcu_sched kthread gets sufficient CPU time, OOM is now expected behavior.
[ 6480.723304708] rcu: RCU grace-period kthread stack dump:
[ 6480.723308208] task:rcu_sched state:I stack: 0 pid: 12 ppid: 2 flags:0x00000008
对于此问题,可以通过ndb的扩展命令来禁止看门狗。
!ndx.dog off
!ndx.dog off
Searching ndx in \\?\C:\NanoCode\exts;....
rcu_cpu_stall_suppress = 1
如果上述命令不工作,那么可以用如下方法手动禁止:
x lk!rcu_cpu_stall_suppress
ffffffc0`13269eb4 lk!rcu_cpu_stall_suppress
找到用于抑制看门狗的内核变量地址。
使用dd命令进行观察,它的当前值一般为0
dd ffffffc0`13269eb4
ffffffc0`13269eb4 00000000 0000003c 00000000 00000000
ffffffc0`13269ec4 00000001 00000001 00000001 00000001
ffffffc0`13269ed4 00000000 00000002 00000000 e9d1333c
ffffffc0`13269ee4 a5e66a0d 964b1923 d4fed71a 86b0dd6e
ffffffc0`13269ef4 273b4000 3acbeb51 98506414 0e1405f8
ffffffc0`13269f04 ab8d0c8a 47b8192d 9ceb367b 88d19cbf
ffffffc0`13269f14 3dbc36e1 df2539e7 ab293a08 56edc662
ffffffc0`13269f24 f60adc52 6f2086f7 8294c85c dcb923b5
使用ed命令将其修改为1
ed ffffffc013269eb4 1
再次观察确认:
dd ffffffc0
13269eb4
ffffffc013269eb4 00000001 0000003c 00000000 00000000
ffffffc0
13269ec4 00000001 00000001 00000001 00000001
ffffffc013269ed4 00000000 00000002 00000000 e9d1333c
ffffffc0
13269ee4 a5e66a0d 964b1923 d4fed71a 86b0dd6e
ffffffc013269ef4 273b4000 3acbeb51 98506414 0e1405f8
ffffffc0
13269f04 ab8d0c8a 47b8192d 9ceb367b 88d19cbf
ffffffc013269f14 3dbc36e1 df2539e7 ab293a08 56edc662
ffffffc0
13269f24 f60adc52 6f2086f7 8294c85c dcb923b5c
dd ffffffc0`13269eb4
ffffffc0`13269eb4 00000001 0000003c 00000000 00000000
ffffffc0`13269ec4 00000001 00000001 00000001 00000001
ffffffc0`13269ed4 00000000 00000002 00000000 e9d1333c
ffffffc0`13269ee4 a5e66a0d 964b1923 d4fed71a 86b0dd6e
ffffffc0`13269ef4 273b4000 3acbeb51 98506414 0e1405f8
ffffffc0`13269f04 ab8d0c8a 47b8192d 9ceb367b 88d19cbf
ffffffc0`13269f14 3dbc36e1 df2539e7 ab293a08 56edc662
ffffffc0`13269f24 f60adc52 6f2086f7 8294c85c dcb923b5
这个变量后面的0x3c是看门狗的超时毫秒数,默认为60毫秒。
extern int rcu_cpu_stall_suppress;
extern int rcu_cpu_stall_timeout;
最后编辑:Zhang Yinkui 更新时间:2024-12-20 17:01