1. 程式人生 > 其它 >ftrace(二、關鍵檔案介紹)

ftrace(二、關鍵檔案介紹)

關鍵的檔案介紹(用到再新增用法)

  1. 指定要跟蹤的函式

    echo :mod:c1 > set_ftrace_filter #跟蹤c1中的函式,前提是c1要在核心中載入
    #也可以指定函式進行跟蹤
    echo hello_init > set_ftrace_filter
    

    在這裡插入圖片描述

    在這裡插入圖片描述

  2. 顯示和配置當前的tracer

    cat available_tracers
    cat current_tracer 
    echo function_graph > current_tracer 
    cat current_tracer 
    

    在這裡插入圖片描述

  3. 開關trace

    echo 0 > tracing_on #關閉 
    echo
    1 > tracing_on #開啟

    在這裡插入圖片描述

  4. 檢視跟蹤的資訊

    在這裡插入圖片描述

  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統計資訊