本文主要是介绍ftrace stack trace,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
内核栈大小是有限的,为了跟踪内核栈的使用情况,可以使用ftrace stack trace。使能和关闭方法:
echo 1 > /proc/sys/kernel/stack_tracer_enabled
echo 0 > /proc/sys/kernel/stack_tracer_enabled
stack trace的信息输出通过如下的节点上送给用户态:
/sys/kernel/debug/tracing/stack_max_size
/sys/kernel/debug/tracing/stack_trace
/sys/kernel/debug/tracing/stack_trace_filter
使能跟踪一段时间后,可以查看最大栈占用情况,stack_max_size这里打印的是最长栈的size。而在stack_trace 中打印的是最长栈的每个函数占用栈大小的情况,注意这里也只会记录的最长的栈情况。
Depth Size Location (45 entries)----- ---- --------0) 3600 64 __accumulate_pelt_segments+0x5/0x901) 3536 104 __update_load_avg_se+0x20f/0x2f02) 3432 64 update_load_avg+0x4ac/0x6003) 3368 72 enqueue_entity+0x5e/0x6f04) 3296 80 enqueue_task_fair+0x9d/0x4e05) 3216 40 activate_task+0x5f/0xc06) 3176 48 ttwu_do_activate+0x49/0x707) 3128 104 try_to_wake_up+0x1d1/0x5508) 3024 16 wake_up_process+0x15/0x209) 3008 64 insert_work+0xa8/0xd010) 2944 80 __queue_work+0x154/0x40011) 2864 16 __queue_delayed_work+0x66/0x9012) 2848 72 mod_delayed_work_on+0x5e/0x9013) 2776 16 kblockd_mod_delayed_work_on+0x1b/0x2014) 2760 48 __blk_mq_delay_run_hw_queue+0x7c/0x16015) 2712 48 blk_mq_run_hw_queue+0x90/0x11016) 2664 64 blk_mq_sched_insert_requests+0x77/0x10017) 2600 144 blk_mq_flush_plug_list+0x198/0x2e0
stack_trace_filter可以用来过滤一些函数,最对特定函数做跟踪。
这篇关于ftrace stack trace的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!