发生workqueue,使用ftrace抓取当前系统状态

  1. 场景:
    系统20s左右,uart无输出,发生workqueue;

  2. 使用ftrace命令:

echo 1 >/proc/sys/kernel/ftrace_dump_on_oops
echo 1 > /proc/sys/kernel/hardlockup_panic
echo 1 > /proc/sys/kernel/softlockup_panic
echo 4000 > /sys/kernel/debug/tracing/buffer_size_kb
echo 0 > /sys/kernel/debug/tracing/events/enable
echo 1 > /sys/kernel/debug/tracing/events/irq/enable
echo 1 > /sys/kernel/debug/tracing/events/sched/sched_switch/enable
> /sys/kernel/debug/tracing/trace
echo 1 > /sys/kernel/debug/tracing/tracing_on

–>需要修改config,保证tracing的节点在,并且设置成功

  1. 添加panic函数到print_other_cpu_stall,在出现问题后,打印出当前每个cpu上task的状态
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
@@ -1381,6 +1381,7 @@ static void print_other_cpu_stall(struct rcu_state *rsp, unsigned long gpnum)
        }
 
        print_cpu_stall_info_end();
+       panic("Debug -----------");
        for_each_possible_cpu(cpu)
                totqlen += per_cpu_ptr(rsp->rda, cpu)->qlen;
        pr_cont("(detected by %d, t=%ld jiffies, g=%ld, c=%ld, q=%lu)\n“”

验证设置是否正确:

  1. echo x > /proc/sysrq-trigger 看串口输出,是否有call trace和ftrace log打印?

Note: 建议关闭watchdog,否则系统一直不喂狗,重启;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值