跳转至

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 内核跟踪缓冲区的内容
  • 使用方法
    1. trace-cmd start [OPTIONS]
    2. trace-cmd show [OPTIONS]
    3. 最后 trace-cmd stop [OPTIONS]
    4. 可选 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