【问题标题】:Function_graph cannot track a specific functionFunction_graph 无法跟踪特定函数
【发布时间】:2023-01-22 15:26:33
【问题描述】:

当我使用Function_graph 跟踪do_sys_open () 函数时,我发现它不起作用。 Linux 版本 4.4.194

echo  function_graph  > current_tracer 
echo do_sys_open > set_graph_function
echo 1 > tracing_on
cat trace

root@firefly:/sys/kernel/debug/tracing# cat  set_ftrace_filter  | grep do_sys_open 
do_sys_open
root@firefly:/sys/kernel/debug/tracing# cat trace
# tracer: function_graph
#
# CPU  DURATION                  FUNCTION CALLS
# |     |   |                     |   |   |   |
 1)   0.583 us    |                        } /* cpu_needs_another_gp */
 1)   0.583 us    |                        rcu_all_qs();
 1) + 29.750 us   |                      } /* rcu_check_callbacks */
 1)               |                      scheduler_tick() {
 1)               |                        _raw_spin_lock() {
 1)   0.583 us    |                          do_raw_spin_lock();
 1)   5.833 us    |                        }
 1)   0.875 us    |                        update_rq_clock();
 1)               |                        task_tick_fair() {
 1)               |                          update_curr() {
 1)   0.583 us    |                            update_min_vruntime();
 1)   0.875 us    |                            cpuacct_charge();
 1) + 11.375 us   |                          }
 1)   0.583 us    |                          cpufreq_scale_freq_capacity();
 1)               |                          scale_cpu_capacity() {
 1)   0.583 us    |                            cpufreq_scale_max_freq_capacity();
 1)   5.541 us    |                          }
 1)   0.583 us    |                          __compute_runnable_contrib();
 1)   0.583 us    |                          cpufreq_scale_freq_capacity();
 1)               |                          scale_cpu_capacity() {
 1)   0.291 us    |                            cpufreq_scale_max_freq_capacity();
 1)   5.542 us    |                          }
 1)   0.583 us    |                          update_cfs_shares();
 1)   0.583 us    |                          hrtimer_active();
 1)               |                          sched_slice.isra.8() {
 1)   0.584 us    |                            __calc_delta();
 1)   5.833 us    |                          }
 1)   0.583 us    |                          __cpu_overutilized.constprop.22();

似乎它输出了所有的跟踪功能。

如何让function_graph只输出特定函数的trace?

【问题讨论】:

    标签: linux linux-kernel ebpf ftrace


    【解决方案1】:

    您可以使用跟踪目录中的 set_ftrace_filter 文件来过滤跟踪哪些函数。例如,要仅跟踪 do_sys_open() 函数,您可以运行以下命令:

    echo do_sys_open > set_ftrace_filter
    

    您还可以通过用逗号分隔多个函数来过滤它们。例如,要跟踪 do_sys_open 和 do_sys_write,您可以运行:

    echo do_sys_open,do_sys_write > set_ftrace_filter
    

    您还可以使用通配符来过滤匹配特定模式的函数。例如,要跟踪所有以“do_sys_”开头的函数:

    echo do_sys_* > set_ftrace_filter
    

    值得注意的是,您需要在启动跟踪器之后和开始跟踪之前运行此命令。

    【讨论】:

      猜你喜欢
      • 2013-02-22
      • 2018-04-20
      • 2016-11-30
      • 2012-12-07
      • 2014-10-11
      • 1970-01-01
      • 1970-01-01
      • 2016-01-06
      • 1970-01-01
      相关资源
      最近更新 更多