宫颈糜烂的原因

注册

 

发新话题 回复该主题

LinuxTraceEvent我 [复制链接]

1#
北京哪有治白癜风的医院 http://m.39.net/pf/a_4781959.html

TraceEvent是内核中一种探测的机制,据说在不使能的时候是没有损耗的。据说使用起来挺简单,但是要看懂着实需要花些力气。

例子

从例子中学习,一般都是比较好的方法。内核开发者也比较nice,在内核源码samples/trace_events目录下就有这么一个例子。

其中文件一共有三个:

这个例子以内核模块的形式存在,所以只要执行make就可以编译完成。

总的来说,要定义和使用tracepoint,只要做两点。

用TRACE_EVENT来定义一个新的tracepoint

在需要的地方,使用函数trace_XXX打印输出

有了例子我们就要跑一跑,来看看如何使用的。

首先我们要编译出我们的例子,这时候需要加上打开两个编译配置

CONFIG_SAMPLES

CONFIGSAMPLETRACE_EVENTS

编译

makeM=samples/trace_events

然后加载这个例子模块

modprobetrace-events-sample

因为用户接口在debugfs上,所以还要确保debugfs挂载了。

mount-tdebugfsnone/sys/kernel/debug/

此时我们就能在/sys/kernel/debug/tracing/events/sample-trace/目录下看到该模块创建好的traceevent了。

接下来,我们就可以打开这个探测时间,并且查看探测的输出了。

cd/sys/kernel/debug/tracing

echo1events/sample-trace/enable

cattrace

echo0events/sample-trace/enable

通过cattrace观察,可以看出系统运行时的一些状态。

让我们进一步再来看看events/sample-trace这个目录:

可以看到

目录名称sample-trace由TRACE_SYSTEM这个宏定义,所以通过查找这个宏,就能知道有多少events的大类

每一个TRACE_EVENT都有一个自己的目录

源文件中trace_XXX的函数就是执行探测记录的地方了。那么这些函数是怎么定义的呢?

TRACE_EVENT定义

看完了例子,我们就该看代码实现了。讲真,这是我见过的最长的宏展开了。之前在qemu上看到的那个hmp-

分享 转发
TOP
发新话题 回复该主题