ftrace(二、关键文件介绍)

关键的文件介绍(用到再添加用法)

  1. 指定要跟踪的函数

    echo :mod:c1 > set_ftrace_filter #跟踪c1中的函数,前提是c1要在内核中加载
    #也可以指定函数进行跟踪
    echo hello_init > set_ftrace_filter
    

    ftrace(二、关键文件介绍)

    ftrace(二、关键文件介绍)

  2. 显示和配置当前的tracer

    cat available_tracers
    cat current_tracer 
    echo function_graph > current_tracer 
    cat current_tracer 
    

    ftrace(二、关键文件介绍)

  3. 开关trace

    echo 0 > tracing_on #关闭 
    echo 1 > tracing_on #打开
    

    ftrace(二、关键文件介绍)

  4. 查看跟踪的信息

    ftrace(二、关键文件介绍)

  5. 全部的文件介绍

    current_tracer:配置和显示当前使能tracer。可用tracer见available_tracers;
    available_tracers:显示系统支持的tracer。
    tracing_on:使能写trace日志到ring buffer的开关,同时也可cat查看是否使能。echo 0表示关闭,echo 1表示打开。注意这里是总开关的概念,如果current_tracer或event都未使能(配置为空和关闭event开关),那么就算这里写1使能,trace文件也是空的;如果配置了current_tracer和event,这个接口相当于总开关。
    trace:保存trace记录,cat trace查看跟踪记录。注意这里是临时存放buffer,有空间大小限制,如果超了会被覆盖。
    buffer_size_kb:用于设置和显示单个CPU所使用的跟踪缓存的大小。跟踪缓存为RingBuffer形式,如果跟踪太多,旧的信息会被新的跟踪信息覆盖掉。默认size通常是一个页(4K)。每个cpu的buffer size配置在per_cpu/cpu0/buffer_size_kb,percpu配置后,此文件显示"X"。
    buffer_total_size_kb:显示所有的跟踪缓存大小,不同之处在于buffer_size_kb是单个CPU的,buffer_total_size_kb是所有CPU的和。
    trace_pipe:输出和trace一样的内容,输出实时tracing日志,这样就避免了RingBuffer的溢出。cat trace_pipe > trace.txt &保存文件,但是cat时候会带来一些性能损耗。
    trace_options:控制Trace打印内容格式或者设置跟踪器,可以通过trace_options添加很多附加信息。
    options:目录文件,里面是每个trace options的文件,和trace_options对应,可以通过echo 0/1使能options。
    tracing_max_latency:记录某些Tracer的最大延时。比如interrupts的最大延时关闭后,会记录在这里。可以echo值到此文件,然后遇到比设置值更大的延迟才会更新。
    tracing_thresh:延时记录Trace的阈值,当延时超过此值时才开始记录Trace。单位是ms,只有非0才起作用
    free_buffer:此文件用于在一个进程被关闭后,同时释放RingBuffer内存,并将调整大小到最小值。
    tracing_cpumask:可以通过此文件设置跟踪指定CPU,二进制格式。
    set_ftrace_filter:指定要跟踪的函数,可跟踪函数见available_filter_functions
    set_ftrace_notrace:指定不跟踪的函数,缺省为空。
    set_ftrace_pid:tracer将只追踪写入此文件PID的对应的进程。"function-fork" option设置后,pid对应进程创建的子进程也会自动跟踪。
    set_event_pid:tracer将只追踪写入此文件PID的对应进程的event。"event-fork" option设置后,pid对应进程创建的子进程event也会自动跟踪。
    set_graph_function:function_graph tracer将只跟踪此文件配置的函数,缺省对所有函数都追踪。
    set_graph_notrace:function_graph tracer不跟踪特定的函数嵌套调用。
    available_filter_functions:显示可以跟踪的functions。
    dyn_ftrace_total_info:debug使用,显示available_filter_functins中跟中函数的数目,两者一致
    enabled_functions:显示回调函数。
    function_profile_enabled:使能trace_stat/function<cpu> 的统计信息功能,统计包括function/hit/Time/Avg等信息。
    trace_stat:存放不同tracing状态的目录
    kprobe_events:Enable dynamic trace points. See kprobetrace.txt.
    kprobe_profile:Dynamic trace points stats. See kprobetrace.txt.
    max_graph_depth:function graph tracer使用,配置函数嵌套的最大深度。
    printk_formats:提供给工具读取原始格式trace的文件。
    saved_cmdlines:ftrace会存放pid的comms在一个pid mappings,在显示event时候同时显示comm,这里可以配置pid对应的comm,如果配置,显示类似<idle>-0,否则<...>-0。
    saved_cmdlines_size:saved_cmdlines的数目
    saved_tgids:If the option "record-tgid" is set, on each scheduling context switch the Task Group ID of a task is saved in a table mapping the PID of the thread to its TGID. By default, the "record-tgid" option is disabled.
    snapshot:是对trace的snapshot。
                                  echo 0清空缓存,并释放对应内存。
                                  echo 1进行对当前trace进行snapshot,如没有内存则分配。
                                  echo 2清空缓存,不释放也不分配内存。
    stack_max_size:当使用stack跟踪器时,记录产生过的最大stack size
    stack_trace:显示stack的back trace
    stack_trace_filter:设置stack tracer不检查的函数名称
    
    trace_clock:配置trace日志中"timestamp"列的时钟,默认使用local时钟。
    	local:默认时钟,在每CPU中快速且精准,但是可能不会在各个CPU之间同步;
    	global:各CPU间同步,但是比local慢;
    	counter:并不是时钟,而是一个原子计数器。数值一直+1,但是所有cpu是同步的。主要用处是分析不同cpu发生的events;
    	uptime:time stamp和jiffies counter根据boot time;
    	perf:clock跟perf使用一致。
    	x86-tsc:非系统自己时钟。比如x86有TSC cycle clock;
    	ppc-tb:使用powerpc的基础时钟寄存器值;
    	mono:使用fast monotonic clock (CLOCK_MONOTONIC)
    	mono_raw:使用raw monotonic clock (CLOCK_MONOTONIC_RAW)
    	boot:使用boot clock (CLOCK_BOOTTIME)。
    
    trace_marker:从用户态写trace mark到ftrace中,可以做一个标记到trace。
    trace_marker_raw:以二进制格式写入到trace中。
    uprobe_events:Add dynamic tracepoints in programs.See uprobetracer.rst
    uprobe_profile:Uprobe statistics. See uprobetrace.txt
    instances:创建不同的trace buffer实例,可以在不同的trace buffers中分开记录。
    events:系统Trace events目录,在每个events下面都有enable、filter和fotmat。enable是开关;format是events的格式,然后根据格式设置 filter。
    set_event:将Trace events名称直接写入set_event就可以打开。
    available_events:列出系统中所有可用的Trace events,分两个层级,用冒号隔开。
    per_cpu:
    per_cpu/cpu0/buffer_size_kb:配置per_cpu的buffer空间
    per_cpu/cpu0/trace:当前CPU的trace文件。
    per_cpu/cpu0/trace_pipe:当前CPU的trace_pipe文件。
    per_cpu/cpu0/trace_pipe_raw:当前CPU的trace_pipe_raw
    per_cpu/cpu0/snapshot:当前CPU的snapshot
    per_cpu/cpu0/snapshot_raw:当前CPU的snapshot_raw
    per_cpu/cpu0/stats:当前CPU的trace统计信息
    
上一篇:在packet tracer上实现RIP实验


下一篇:开源分布式跟踪方案概览