zoukankan      html  css  js  c++  java
  • ftrace 详解

    http://www.ibm.com/developerworks/cn/linux/l-cn-ftrace/

    http://www.ibm.com/developerworks/cn/linux/l-cn-ftrace1/

     
     
     
    http://www.cnblogs.com/pengdonglin137/p/4752303.html
     
    http://www.cnblogs.com/openix/p/4163995.html
    http://www.cnblogs.com/openix/category/641946.html
     
    http://www.cnblogs.com/jefree/p/4439022.html
     

    http://www.cnblogs.com/pengdonglin137/articles/4752082.html 

     
     

    基本使用

    1. 编译内核

    ref:http://www.omappedia.org/wiki/Installing_and_Using_Ftrace
    ===================================================
    Kernel configuration & Re-build

    Kernel Hacking -> Tracers -> FUNCTION_TRACER
    Kernel Hacking -> Tracers -> FUNCTION_GRAPH_TRACER (if possible)
    Kernel Hacking -> Tracers -> STACK_TRACER  //  Trace max stack
    Kernel Hacking -> Tracers -> DYNAMIC_FTRACE // enable/disable ftrace tracepoints dynamically

    2. mount debugfs

    mount -t debugfs nodev /sys/kernel/debug

    3. 选择ftrace

    echo function > /sys/kernel/debug/tracing/current_tracer

    cat /sys/kernel/debug/tracing/available_tracers 可以显示可用的tracer

    blk mmiotrace function_graph wakeup_rt wakeup function nop

    现在有这些种类的trace。

    ftrace主要用来观察函数调用情况。

    4. 选择需要trace的函数

    echo func_name > set_ftrace_filter

    echo ':mod:e1000e' > set_ftrace_filter

    追踪e1000e模块中的函数

    5. 启动/关闭 trace

    echo 1 > tracing_on

    echo 0 > tracing_on

    6. 输出

    在文件 /sys/kernel/debug/tracing/trace中, 这个是静态的。

    /sys/kernel/debug/tracing/trace_pipe 是动态的,数据读过后就不会再显示。且会block。

    7. 输出格式

    输出的格式可以在trace_options文件中,做些小调整。

    cat trace_options 可以显示所有能做调整的选项。

    echo noprint-parent > trace_options 

    就不会显示谁调用了该函数

    echo sym-offset > trace_options

    除了显示函数的名字,还会显示函数的offset

    实例操作

    1. function 的例子

    从代码中看到有 dev_activate() 和 dev_deactivate() 分别在链路开启和断开时候被调用。

    不过不确定是不是这样,之前的话需要在代码中加上printk,编译,换新的内核才能看到效果。

    现在用ftrace来试试

    echo function > current_tracer

    echo dev_activate > set_ftrace_filter

    echo dev_deactivate >> set_ftrace_filter

    echo 1 > tracing_on

    然后插拔网线,可以看到这两个函数确实被调用到。

    2. function_graph 的例子

    echo function_graph > current_tracer

    echo dev_activate > set_graph_function

    echo dev_deactivate >> set_graph_function

    echo 3 > max_graph_depth

    echo 1 > tracing_on

    好了,这样可以看到一些函数调用过程。

  • 相关阅读:
    POJ 3140 Contestants Division (树形DP,简单)
    POJ 2378 Tree Cutting (树的重心,微变形)
    js数据类型--对象&数组
    关于JS call apply 对象、对象实例、prototype、Constructor、__proto__
    JS模块化编程(四)--require应用
    JS模块化编程(三)
    利用VS正则替换删除文本行首数据等字符
    JS模块化编程(二)
    JS模块化编程(一)
    js继承
  • 原文地址:https://www.cnblogs.com/zengkefu/p/6372216.html
Copyright © 2011-2022 走看看