首页 > 其他分享 >ftrace在应用上的使用

ftrace在应用上的使用

时间:2023-10-10 10:25:50浏览次数:35  
标签:ftrace trace tracing mark fd 应用 使用 marker

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

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


[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任务的执行情况(前提是任务源码可见)。


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。

标签:ftrace,trace,tracing,mark,fd,应用,使用,marker
From: https://www.cnblogs.com/linhaostudy/p/17753922.html

相关文章

  • 8种品牌PLC单片机使用Socket编程实现以太网开放式通信服务器视频教程
    8种品牌PLC单片机使用Socket编程实现以太网开放式通信服务器视频教程一、罗克韦尔ABMicro850系列PLC实现ModbusTCP以太网通信协议​服务器视频教程:罗克韦尔ABMicro850系列PLC做ModbusTCP以太网通信服务器、以太网调试助手和ModbusPoll调试助手做ModbusTCP以太网通信客户端,......
  • C# DataTable使用方法详解
    在项目中常常常使用到DataTable,假设DataTable使用得当,不仅能使程序简洁有用,并且可以提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结。1、添加引用1using System.Data;2、创建表1234//创建一个空表DataTabledt=n......
  • python接口自动化之request请求,如何使用 Python调用 API?
    Python实战|如何使用Python调用API一、HTTP 请求HTTP 请求是在 HTTP 协议下的一种数据格式,用于向服务器发送请求,其通常由请求行、请求头和请求体三部分构成,请求头和请求体之间用空行隔开,其中各部分包含的信息如下:请求行 (Request Line):包括请求方法 (GET请求、POST请......
  • 01 | vim的一些使用说明
    我们在使用vim编写C或者C++的代码的时候,没有自动提示很影响编辑体验。那么我建议安装YCM插件,本文是基于安装完毕该插件的情况下,依然没有头文件自动提示的情况进行说明。YCM插件有三个头文件提示来源。vim自带的ctags机制vim打开的文件夹内的compile_commands.j......
  • C# Winform ComboBox使用笔记
    ComboBox添加元素//添加元素到ComboBoxcomboBox1.Items.Add("元素1");comboBox1.Items.Add("元素2");comboBox1.Items.Add("元素3");for(inti=4;i<6;i++){comboBox1.Items.Add($"元素{i}");}//设置默认显示的项comboBox1.Selecte......
  • 使用C#在Windows上压缩文件
    使用C#通过Zip实现文件的压缩可以设置输出文件的路径也可以留空,留空则会在压缩文件创建一个同名的.压缩包可以设置压缩包的密码可以设置压缩包的加密方式(ASE-256),可以使用LZMA但是加密码会报错可以设置压缩包的格式(zip),可以使用7z但是加密码会报错添加了密码最大长度的限......
  • 浅谈locust 性能压测使用
    1.基本介绍Locust是一个开源的负载测试工具,用于模拟大量用户并发访问一个系统或服务,以评估其性能和稳定性。编写语言为Python,可通过Python来自定义构建性能压测场景脚本。Locust支持分布式负载测试,可以通过多个机器协同工作来模拟大量用户并发访问。并提供了一个Web界面,可以实......
  • js_使用js读取link外部样式
    <linkrel="stylesheet"href="https://at.alicdn.com/t/c/font_1826665_p96ije5uc2f.css"crossorigin>varlinkStyle=document.getElementsByTagName("link")[0];varsheet=linkStyle.sheet||linkStyle.styleSheet;letreg=......
  • Docker基本使用
     虚拟机:通过虚拟化技术模拟真实的硬件从而创建出来的一台拥有完整功能的逻辑计算机。Docker容器:docker容器也是一种虚拟化技术,和传统虚拟化不一样的是docker只模拟一个程序最核心的运行环境,所以十分小巧,启动更快。Docker虚拟化技术和传统虚拟化技术架构对比:对比特点虚......
  • 12-串行接口的进阶应用
    串行接口的进阶应用由上可知:​ 应用高四位来判断控制灯光,所以应用高四位对比,将第四位置0进行对比用switch语句,进行判断,将为A时,保留低四位,取反将高四位置1​ 将为B时,保留高四位,取反将低四位置1,向左移动4位#include<REGX52.H>sfrAUXR=0x8E;unsignedcharcommand......