使用trace-cmd进行追踪
trace-cmd命令中也有一些子命令,但只要有trace-cmd record命令和trace-cmd report,就可以使用ftrace的基本功能。例如,下列命令就可以同时与记录函数追踪器和进程调度程序相关的事件。(停止追踪时按Ctrl+C快捷键。)
trace-cmd record-p function-e'sched:*'
向trace-cmd的-p选项指定插件追踪器的名称,与向ftrace的current_tracer指定的内容相同。按照向ftrace的set_event指定的相同格式,向-e选项指定事件名称。事件的过滤器可以使用-f选项来指定。指定多个事件时,要在事件后面接着指定过滤器。例如,下列命令就是向irq_handler_entry事件指定“irq>=10”过滤器,向irq_handler_exit事件指定“ret==0”。
trace-cmd record-e irq_handler_entry-f"irq>=10"-e irq_handler_exit-f"ret==0"
在trace-cmd中还可以进行仅使用ftrace时难以控制的指定。在执行特定的用户命令期间,也可以仅获取该进程相关的事件。例如,下列命令仅在执行ls命令期间运行函数追踪器和进程调度程序的相关事件,仅追踪ls命令的相关事件(-F选项)。ls命令结束后,追踪也自动结束。
trace-cmd record-p function-e'sched:*'-F ls
获取的数据记录在执行目录的trace.dat文件中(记录的位置可以使用-o选项来更改)。这个数据文件包含获取追踪时的系统信息(定义的事件或内核的符号信息等)。另外,追踪数据是作为二进制数据记录的,因此要使用trace-cmd report将内容进行整理再读出。
trace-cmd report
version=6
cpus=2
ls-25316[000]7031.618254:function:fsnotify_
modify<—vfs_write
ls-25316[000]7031.618258:function:inotify_
inode_queue_event<—fsnotify_modify
ls-25316[000]7031.618258:function:fsnotify_
parent<—fsnotify_modify
ls-25316[000]7031.618258:function:__
fsnotify_parent<—fsnotify_parent
ls-25316[000]7031.618259:function:inotify_
dentry_parent_queue_event<—fsnotify_parent
ls-25316[000]7031.618259:function:fsnotify
<—fsnotify_modify
ls-25316[000]7031.618260:function:fput_
light<—sys_write
ls-25316[000]7031.618260:function:audit_
syscall_exit<—sysret_audit
……