trace-cmd
trace-cmd是ftrace的前端工具,主要为了简化trace的操作。
 
1 安装 trace-cmd
- yum 安装:
yum install -y trace-cmd 
2 trace-cmd 命令
2.1 trace-cmd list
- 功能:显示可用的 tracer、plugins、 events 或 Ftrace options
 
- 语法:
trace-cmd list [OPTIONS]
-e : 列出可用事件 
-s :列出可用的 event systems 
-t :列出可用的 tracers 
-p :同 -t 选项 
-o :列出本地系统上配置的可用 Ftrace 选项 
-f [regex] :列出可用的 filter functions 
 
- 示例
 
➜  trace-cmd list -t
timerlat osnoise hwlat blk function_graph wakeup_dl wakeup_rt wakeup function nop
 
2.2 trace-cmd record
- 功能:记录命令将设置 Ftrace Linux 内核跟踪器以记录命令执行时发生的指定插件或事件。如果没有给出命令,那么它会记录直到用户按下 Ctrl-C。会生成 trace.dat 文件。
 
- 语法:
trace-cmd record [OPTIONS] [command]
-p tracer :指定跟踪器,trace-cmd list -p/-t 显示的,比如 functioon、function_graph 
-e event :指定事件,trace-cmd list -e 显示的,比如, 
-v :不使用某事件,常用在这种场景,比如 :-e sched -v -e "*stat\*" 
-P pid :指定进程号 
 
2.3 trace-cmd report
- 功能:显示 trace-cmd record 产生的数据
 
- 语法:
trace-cmd report [OPTIONS] [input-file] 
2.4 trace-cmd start/stop/show/clear
- 功能:
start :在记录的情况下启动 Ftrace Linux 内核跟踪程序(与 record 的区别在于,不生成 trace. dat 文件, 直接写入 ring buffer) 
show :显示 Ftrace Linux 内核跟踪缓冲区的内容 
stop :停止 Ftrace Linux 内核跟踪程序写入环形缓冲区 
clear :清除 Ftrace Linux 内核跟踪缓冲区的内容 
 
- 使用方法
- 先 
trace-cmd start [OPTIONS] 
- 在 
trace-cmd show [OPTIONS] 
- 最后 
trace-cmd stop [OPTIONS] 
- 可选 
trace-cmd clear [OPTIONS] 
 
- 示例
 
➜  trace-cmd start  -p function
  plugin 'function'
➜  trace-cmd show |head -20
# tracer: function
#
# entries-in-buffer/entries-written: 205044/1161319   #P:4
#
#                                _-----=> irqs-off
#                               / _----=> need-resched
#                              | / _---=> hardirq/softirq
#                              || / _--=> preempt-depth
#                              ||| /     delay
#           TASK-PID     CPU#  ||||   TIMESTAMP  FUNCTION
#              | |         |   ||||      |         |
            bash-4376    [000] ...1 10839.329183: seccomp_filter_release <-release_task
            bash-4376    [000] ...1 10839.329183: __seccomp_filter_orphan <-seccomp_filter_release
            bash-4376    [000] ...1 10839.329183: __put_seccomp_filter <-release_task
            bash-4376    [000] ...1 10839.329183: proc_flush_pid <-release_task
            bash-4376    [000] ...1 10839.329183: proc_invalidate_siblings_dcache <-release_task
            bash-4376    [000] ...1 10839.329184: __rcu_read_lock <-proc_invalidate_siblings_dcache
            bash-4376    [000] ...1 10839.329184: __rcu_read_unlock <-release_task
            bash-4376    [000] ...1 10839.329184: put_pid <-release_task
            bash-4376    [000] ...1 10839.329184: put_pid.part.0 <-release_task
➜  trace-cmd stop
➜  trace-cmd clear