前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ftrace在应用上的使用

ftrace在应用上的使用

作者头像
233333
发布2023-10-17 14:14:17
1590
发布2023-10-17 14:14:17
举报

之前介绍通过命令行配置和使用ftrace功能,但是实际中,我们也会希望抓C/C++程序中某段代码的调度情况。笔者前不久就遇到这种问题,某个函数调用时延概率超过100ms,是为什么?这时候就需要在他们代码中使能ftrace抓执行此函数时候,任务的调度情况。

观察某段代码执行过程中的情况,ftrace提供了trace markers功能,可通过写入trace_marker接口在ftrace中留下记录。如下

代码语言:javascript
复制
[tracing]# echo hello world > trace_marker

    [tracing]# cat trace

    # tracer: nop

    #

    #           TASK-PID    CPU#    TIMESTAMP  FUNCTION

    #              | |       |          |         |

               <...>-3718  [001]  5546.183420: 0: hello world

利用tracing_on和trace_marker接口,可以很好的trace任务的执行情况(前提是任务源码可见)。

代码语言:javascript
复制
int main()

{

    int fd_mark = open("/sys/kernel/debug/tracing/trace_marker", O_CREAT|O_RDWR, 0666);

    int fd_trace = open("/sys/kernel/debug/tracing/tracing_on", O_CREAT|O_RDWR, 0666);

    /* enable trace */

    write(fd_trace, "1", 2);

    /* add trace mark */

    write(fd_mark, "start time", 11);

    /* Run something */



    /* add trace mark */

    write(fd_mark, "end time", 11);

    /* disable trace */

    write(fd_trace, "0", 2);

    close(fd_mark);

    close(fd_trace);

}

可参考如上代码,在自己程序中动态使能和关闭ftrace,并在希望的位置添加markers。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-10-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档