首页 > 其他分享 >ftrace学习 —— user_events的用法

ftrace学习 —— user_events的用法

时间:2023-06-11 17:12:44浏览次数:62  
标签:__ ftrace events unreg enable user Input reg

参考

https://docs.kernel.org/trace/user_events.html

测试程序

samples/user_events/example.c
tools/testing/selftests/user_events/ftrace_test.c

正文

通过user_event可以实现对应用程序的跟踪,类似linux内核中的tracepoint那样。相似的方法还有借助/sys/kernel/debug/tracing/trace_marker,不过,user_event提供的方法功能更加强大,可以配合perf等工具使用。

要使用user_event,大致要经过:注册、使能跟踪、写入跟踪信息、读取跟踪信息、关闭跟踪、反注册、删除。需要用到的文件节点主要是:/sys/kernel/tracing/user_events_data

注册和反注册

注册阶段用到的结构体是user_reg:

struct user_reg {
      /* Input:固定为sizeof(user_reg)*/
      __u32 size;

      /* Input: 使用下面的enable_addr的哪个bit来显示使能状态 */
      __u8 enable_bit;

      /* Input: 下面的enable_addr的字节长度,4或者8 */
      __u8 enable_size;

      /* Input: 目前还用不到,设置为0即可 */
      __u16 flags;

      /* Input: 应用通过这个地址来查看该user_event事件是否使能*/
      __u64 enable_addr;

      /* Input: 事件描述信息*/
      __u64 name_args;

      /* Output: 应用通过该事件索引向内核中写入事件内容 */
      __u32 write_index;
} __attribute__((__packed__));

反注册用到的结构体是:

struct user_unreg {
      /* Input: 固定为sizeof(user_unreg) */
      __u32 size;

      /* Input: Bit to unregister */
      __u8 disable_bit;

      /* Input: Reserved, set to 0 */
      __u8 __reserved;

      /* Input: Reserved, set to 0 */
      __u16 __reserved2;

      /* Input: Address to unregister */
      __u64 disable_addr;
} __attribute__((__packed__));

比如以下面的代码为例:

	// 这两个结构体必须初始化为0
	struct user_reg reg = {0};
	struct user_unreg unreg = {0};
	u32 check;

	reg.size = sizeof(reg);
	reg.name_args = (__u64)"__test_event0 u32 id; u32 age; char type; char[32] name";
	reg.enable_bit = 31; // 通过check的bit31来查看使能状态
	reg.enable_addr = (__u64)✓
	reg.enable_size = sizeof(check);

	unreg.size = sizeof(unreg);
	unreg.disable_bit = 31;
	unreg.disable_addr = (__u64)✓

	reg.size = sizeof(reg);
	reg.name_args = (__u64)"__test_event1 u32 id";
	reg.enable_bit = 30; // 通过check的bit30来查看使能状态
	reg.enable_addr = (__u64)check;
	reg.enable_size = sizeof(check);

	unreg.size = sizeof(unreg);
	unreg.disable_bit = 30;
	unreg.disable_addr = (__u64)✓

标签:__,ftrace,events,unreg,enable,user,Input,reg
From: https://www.cnblogs.com/pengdonglin137/p/17473199.html

相关文章

  • Shellcode Execution in a Local Process with QueueUserAPC and NtTestAlert(nim学习
    ShellcodeExecutioninaLocalProcesswithQueueUserAPCandNtTestAlertAPC队列异步过程调用(APC)队列是一个与线程关联的队列,用于存储要在该线程上下文中异步执行的函数。操作系统内核会跟踪每个线程的APC队列,并在适当的时机触发队列中挂起的函数。APC队列通常用于实现线......
  • 基于python-统计所有AWS-EC2的Events-事件信息-并进行邮件通知
    关于AWS的EC2,我们可以有时间会收到一些官方邮件,提示让在指定的时间之前在console界面stop一次,或者重启一次,完成底层维护其实这些Events事件,在Console的EC2服务界面左侧菜单的Events下也可以看到的,如下图所示其中Eventstatus为Completed就是我们已经完成了的,Scheduled的为计......
  • Speed Create 服务条款 (End User License Agreement, EULA)
    1.接受条款通过使用SpeedCreate(以下简称“我们”或“SpeedCreate”)提供的服务,您同意遵守以下服务条款(以下简称“条款”)。如果您不同意这些条款,请不要使用我们的服务。2.服务描述SpeedCreate提供一种在线创作工具,用户可以使用它来快速创建和分享内容。我们的服务可能会随......
  • Docker CLI docker events 常用命令
    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍DockerCLI中d......
  • SC-FEGAN: Face Editing Generative Adversarial Network with User’s Sketch and Co
    SC-FEGAN:FaceEditingGenerativeAdversarialNetworkwithUser’sSketchandColorhttps://github.com/run-youngjoo/SC-FEGANhttps://arxiv.org/abs/1902.06838基于GAN的人脸编辑,效果非常好,应用点非常新颖。总的来说,效果非常好,包括很多细节都能够进行编辑。就创新点来讲,就是......
  • vue2.0运行导入的项目出现node:events:491 throw er; // Unhandled ‘error‘ event错
    错误提示:Apprunningat: -Local: http://localhost:8080/ -Network:unavailable Notethatthedevelopmentbuildisnotoptimized. Tocreateaproductionbuild,runnpmrunbuild.node:events:491 thrower;//Unhandled'error'event在尝试过关闭占用端......
  • vue2.0运行导入的项目出现node:events:491 throw er; // Unhandled ‘error‘ event错
    错误提示:Apprunningat: -Local: http://localhost:8080/ -Network:unavailable Notethatthedevelopmentbuildisnotoptimized. Tocreateaproductionbuild,runnpmrunbuild.node:events:491 thrower;//Unhandled'error'event在尝试过关闭占用端......
  • HDFS Users Guide
    HDFSUsersGuideHDFSUsersGuidePurposeOverviewPrerequisitesWebInterfaceShellCommandsDFSAdminCommandSecondaryNameNodeCheckpointNodeBackupNodeImportCheckpointBalancerRackAwarenessSafemodefsckfetchdtRecoveryModeUpgradeandRollbackDataNodeHotSwap......
  • nginx代理webSocket 和eventSource 相关配置
    文章转载自: https://blog.csdn.net/Embrace924/article/details/92649471nginx代理webSocket和eventSource请求超时连接不通但是本地可以nginx代理出了问题不能普通代理一样要先发起普通请求代理然后通过一些属性再次转换#常用配置location/api/{    proxy_pas......
  • ftrace irqs跟踪器
    当中断被关闭(俗称关中断)了,CPU就不能响应其他的事件,如果这时有一个鼠标中断,要在下一次开中断时才能响应这个鼠标中断,这段延迟称为中断延迟。向current_tracer文件写入irqsoff字符串即可打开irqsoff来跟踪中断延迟。[root@linuxtracing]#pwd/sys/kernel/debug/tracing[roo......