因此return_to_handler这个函数主要就是为了保护上下文 这里保存了x0~x7寄存器,因为这些寄存器在aarch64的abi规则中属于caller保存的寄存器,也就是callee函数可以随意修改,而不考虑其父函数是否还需要使用原来的值,由于return_to_handle没有父函数(也就是它的跳转不是编译器对c语言处理的结果),因此这里需要无脑保存所有...
类似于C语言的#if DEBUG部分,不开启的话,不占用任何系统开销; 内核里常遇到以"trace_"开头的函数,比如CFS调度器里de update_curr()函数 static void update_curr(struct cfs_rq *cfs_rq) { ... update_min_vruntime(cfs_rq); if (entity_is_task(curr)) { struct task_struct *curtask = task_of...
function:跟踪内核函数执行情况。 function_graph:可以显示类似 C 语言的函数调用关系图,比较直观。 wakeup:跟踪进程唤醒信息。 irqsoff:跟踪关闭中断信息,并记录关闭的最大时长。 preemptoff:跟踪关闭禁止抢占信息,并记录关闭的最大时长。 preemptirqsoff:综合了 irqoff 和 preemptoff 两个功能。 sched_switch:对内核...
function:跟踪内核函数执行情况。 function_graph:可以显示类似 C 语言的函数调用关系图,比较直观。 wakeup:跟踪进程唤醒信息。 irqsoff:跟踪关闭中断信息,并记录关闭的最大时长。 preemptoff:跟踪关闭禁止抢占信息,并记录关闭的最大时长。 preemptirqsoff:综合了 irqoff 和 preemptoff 两个功能。 sched_switch:对内核...
我们前面说到了X0~X7是默认用来进行参数传递的。在跳转到prepare_ftrace_return之前,先准备一下传入参数。这里面的prepare_ftrace_return函数是C语言的,我们看一下这个函数的3个输入参数。 voidprepare_ftrace_return(unsignedlong*parent,unsignedlongself_addr,unsignedlongframe_pointer) ...
跟踪点的位置比较固定,一般为内核开发者添加,可以理解为C语言中的#if DEBUG部分。如果运行时不开启DEBUG,不占用任何系统开销。 trace event使用方法 set_event接口 /sys/kernel/debug/tracing/available_events定义了当前支持的trace event。 root@firefly:/sys/kernel/debug/tracing# cat available_events ...
下面可以只在在C语言中调用,关闭ftrace. 一般在应用层加点条件,当出现问题时自动关闭ftrace system("echo 0 > /sys/kernel/debug/tracing/tracing_on"); 2:Strace 在本次问题分析过程中,strace的作用没有体现出来。从一开始测试现象得出来的结论,大家一致认为是系统内核出了问题。所以strace用的不多。只是在分析...
function_graph:可以显示类似C语言的函数调用关系图,比较直观。 wakeup:跟踪进程唤醒信息。 irqsoff:跟踪关闭中断信息,并记录关闭的最大时长。 preemptoff:跟踪关闭禁止抢占信息,并记录关闭的最大时长。 preemptirqsoff:综合了irqoff和preemptoff两个功能。
设置要清晰显示调用关系的函数,显示的信息结构类似于 C 语言代码,这样在分析内核运作流程时会更加直观一些。在使用 function_graph 跟踪器时使用;缺省为对所有函数都生成调用关系序列,可以通过写该文件来指定需要特别关注的函数。 echofunction_graph>current_tracer ...
5、linux 调试追踪框架之 ftrace 的用法实践以及案例, 视频播放量 13353、弹幕量 10、点赞数 265、投硬币枚数 158、收藏人数 425、转发人数 31, 视频作者 简说linux, 作者简介 简叔,研发主管、程序员,以精湛的linux 内核技术,赋能我司云计算和大数据产品。,相关视频:4