• 正文
  • 推薦器件
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

Linux ftrace 之 function、function_graph 使用筆記(一)

2023/08/25
3396
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

?哈嘍,大家好,我是小G。

前言

ftrace 功能很強(qiáng)大,不僅能跟蹤代碼流程,也能用來分析性能問題。對于 Linux 和 Android 平臺的學(xué)習(xí)和開發(fā)人員來說 ,能夠熟練使用 ftrace 的話,是非常強(qiáng)大的生產(chǎn)力,非常尤其要深入和快速學(xué)習(xí)linux內(nèi)核相關(guān)流程,也非常有用。

我也是在努力學(xué)習(xí)中,目前能進(jìn)行一些簡單的性能問題分析,常用的主要還在使用 ftrace 熟悉和學(xué)習(xí) linux 內(nèi)核函數(shù)和相關(guān)流程,更好的理解工作中涉及到的內(nèi)核層面知識。所以用的 最多的是ftrace 的 function、function_graph ?這兩個跟蹤器。

在學(xué)習(xí)使用? function、function_graph 之前,需要先了解一些,ftrace 相關(guān)的一些數(shù)據(jù)和節(jié)點文件知識。

正文

最新的linux 內(nèi)核,ftrace 所有相關(guān)數(shù)據(jù)和文件節(jié)點都位于?/sys/kernel/tracing 目錄下。

ftrace部分?jǐn)?shù)據(jù)和文件節(jié)點說明:

文件..................... 用途.........................
README README文件提供了一個簡短的使用說明,展示了ftrace的操作命令序列??梢酝ㄟ^cat命令查看該文件以了解概要的操作流程。
current_tracer current_tracer用于設(shè)置或顯示當(dāng)前使用的跟蹤器;使用echo將跟蹤器名字寫入該文件可以切換到不同的跟蹤器。系統(tǒng)啟動后,其缺省值為nop,即不做任何跟蹤操作。在執(zhí)行完一段跟蹤任務(wù)后,可以通過向該文件寫入nop來重置跟蹤器。
available_tracers available_tracers記錄了當(dāng)前編譯進(jìn)內(nèi)核的跟蹤器的列表,可以通過cat查看其內(nèi)容。寫current_tracer文件時用到的跟蹤器名字必須在該文件列出的跟蹤器名字列表中。
trace trace文件提供了查看獲取到的跟蹤信息的接口??梢酝ㄟ^cat等命令查看該文件以查看跟蹤到的內(nèi)核活動記錄,也可以將其內(nèi)容保存為記錄文件以備后續(xù)查看。
...... ...
set_graph_function set_graph_function設(shè)置要清晰顯示調(diào)用關(guān)系的函數(shù),顯示的信息結(jié)構(gòu)類似于C語言代碼,這樣在分析內(nèi)核運作流程時會更加直觀一些。在使用function_graph跟蹤器時使用;缺省為對所有函數(shù)都生成調(diào)用關(guān)系序列,可以通過寫該文件來指定需要特別關(guān)注的函數(shù)。
buffer_size_kb buffer_size_kb用于設(shè)置單個CPU所使用的跟蹤緩存的大小。跟蹤器會將跟蹤到的信息寫入緩存,每個CPU的跟蹤緩存是一樣大的。跟蹤緩存實現(xiàn)為環(huán)形緩沖區(qū)的形式,如果跟蹤到的信息太多,則舊的信息會被新的跟蹤信息覆蓋掉。

說明:

要更改該文件的值需要先將“current_tracer”設(shè)置為“nop”才可以。

tracing_on tracing_on用于控制跟蹤的暫停。有時候在觀察到某些事件時想暫時關(guān)閉跟蹤,可以將0寫入該文件以停止跟蹤,這樣跟蹤緩沖區(qū)中比較新的部分是與所關(guān)注的事件相關(guān)的;寫入1可以繼續(xù)跟蹤。
available_filter_functions available_filter_functions記錄了當(dāng)前可以跟蹤的內(nèi)核函數(shù)。對于不在該文件中列出的函數(shù),無法跟蹤其活動。
set_ftrace_filter、

set_ftrace_notrace

set_ftrace_filter和?set_ftrace_notrace在編譯內(nèi)核時配置了動態(tài)ftrace(選中 CONFIG_DYNAMIC_FTRACE 選項)后使用。前者用于顯示指定要跟蹤的函數(shù),后者則作用相反,用于指定不跟蹤的函數(shù)。如果一個函數(shù)名同時出現(xiàn)在這兩個文件中,則這個函數(shù)的執(zhí)行狀況不會被跟蹤。這些文件還支持簡單形式的含有通配符的表達(dá)式,這樣可以用一個表達(dá)式一次指定多個目標(biāo)函數(shù)。缺省為可以跟蹤所有內(nèi)核函數(shù),文件set_ftrace_notrace的值則為空。

說明:

要寫入這兩個文件的函數(shù)名必須可以在文件available_filter_functions中看到。

ftrace部分跟蹤器說明:

ftrace包含多個跟蹤器,用于跟蹤不同類型的信息,例如進(jìn)程調(diào)度、中斷關(guān)閉等??梢酝ㄟ^ available_tracers 獲取內(nèi)核當(dāng)前支持的跟蹤器列表。常見的跟蹤器有:

跟蹤器.............. 說明.......................
nop nop跟蹤器不會跟蹤任何內(nèi)核活動,將nop寫入current_tracer文件可以刪除之前所使用的跟蹤器,并清空之前收集到的跟蹤信息,即刷新trace文件。
function function跟蹤器可以跟蹤內(nèi)核函數(shù)的執(zhí)行情況,可以通過文件set_ftrace_filter顯示指定要跟蹤的函數(shù)。
function_graph function_graph跟蹤器可以顯示類似C源碼的函數(shù)調(diào)用關(guān)系圖,這樣查看起來比較直觀一些,可以通過文件 set_graph_function顯示指定要生成調(diào)用流程圖的函數(shù)。
sched_switch sched_switch跟蹤器可以對內(nèi)核中的進(jìn)程調(diào)度活動進(jìn)行跟蹤。
irqsoff、

preemptoff

irqsoff跟蹤器和?preemptoff跟蹤器分別跟蹤關(guān)閉中斷的代碼和禁止進(jìn)程搶占的代碼,并記錄關(guān)閉的最大時長,preemptirqsoff跟蹤器則可以看做它們的組合。

ftrace還支持其它一些跟蹤器,了解更多可查看詳細(xì)內(nèi)核文檔和源碼?!癉ocumentation/trace”目錄下的文檔以及“kernel/trace”下的源文件。

下一篇,將會看下具體如何使用 function 和 function_graph 。

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
AS-24.576-18-F-EXT-SMD-TR 1 Raltron Electronics Corporation Parallel - Fundamental Quartz Crystal, 24.576MHz Nom, HC-49, SMD, 2 PIN
暫無數(shù)據(jù) 查看
AFBR-5803Z 1 Foxconn Transceiver, 1270nm Min, 1380nm Max, 125Mbps(Tx), 125Mbps(Rx), SC Connector, Through Hole Mount, ROHS COMPLIANT, SIP-9
$34.98 查看
SDINBDG4-8G-XI1 1 Western Digital Corp Flash,
$56.03 查看

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄