溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux內核ftrace怎么使用

發(fā)布時間:2021-11-23 15:55:54 來源:億速云 閱讀:172 作者:iii 欄目:系統(tǒng)運維

這篇文章主要講解了“Linux內核ftrace怎么使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Linux內核ftrace怎么使用”吧!

什么是 ftrace

我們可以將ftrace理解為Function  tracer的簡稱,可以看出其基本功能是實現(xiàn)函數(shù)調用的跟蹤。其實ftrace不僅僅用于進行函數(shù)調用的跟蹤,其它很多內核信息都可以通過該工具進行跟蹤。

除了上面函數(shù)調用跟蹤外,ftrace  還能幫我們分析內核特定的事件,比如調度,中斷等;它還能幫我們去追蹤延遲,比如中斷被屏蔽,搶占被禁止的時間,以及喚醒一個進程之后多久開始執(zhí)行的時間等等。

因此可以理解,ftrace其實為我們提供了一個透視內核的工具,這就像醫(yī)院的CT機或者核磁共振一樣,通過該工具我們可以了解內核內部的更多細節(jié)。下面我們羅列出該工具的主要功能,大家可以作為參考:

(1) Function tracer 和 Function graph tracer:跟蹤函數(shù)調用。

(2) Schedule switch tracer:跟蹤進程調度情況。

(3) Preemptoff tracer:和前一個 tracer 類似,preemptoff tracer  跟蹤并記錄禁止內核搶占的函數(shù),并清晰地顯示出禁止搶占時間最長的內核函數(shù)。

(4) Preemptirqsoff tracer:同上,跟蹤和記錄禁止中斷或者禁止搶占的內核函數(shù),以及禁止時間最長的函數(shù)。

(5) Branch tracer:跟蹤內核程序中的 likely/unlikely 分支預測命中率情況。 Branch tracer  能夠記錄這些分支語句有多少次預測成功。從而為優(yōu)化程序提供線索。

(6) Hardware branch tracer:利用處理器的分支跟蹤能力,實現(xiàn)硬件級別的指令跳轉記錄。在 x86 上,主要利用了 BTS 這個特性。

(7) Sysprof tracer:缺省情況下,sysprof tracer 每隔 1 msec 對內核進行一次采樣,記錄函數(shù)調用和堆棧信息。

(8) Kernel memory tracer:內存 tracer 主要用來跟蹤 slab allocator 的分配情況。包括  kfree,kmem_cache_alloc 等 API 的調用情況,用戶程序可以根據 tracer  收集到的信息分析內部碎片情況,找出內存分配最頻繁的代碼片斷,等等。

(9) Initcall tracer:記錄系統(tǒng)在 boot 階段所調用的 init call 。

(10) Mmiotrace tracer:記錄 memory map IO 的相關信息。

(11) Power tracer:記錄系統(tǒng)電源管理相關的信息。

(12) Workqueue statistical tracer:這是一個 statistic tracer,統(tǒng)計系統(tǒng)中所有的 workqueue  的工作情況,比如有多少個 work 被插入 workqueue,多少個已經被執(zhí)行等。開發(fā)人員可以以此來決定具體的 workqueue 實現(xiàn),比如是使用  single threaded workqueue 還是 per cpu workqueue.

(13) Event tracer:跟蹤系統(tǒng)事件,比如 timer,系統(tǒng)調用,中斷等。

(14) Wakeup tracer:跟蹤進程的調度延遲,即高優(yōu)先級進程從進入 ready 狀態(tài)到獲得 CPU 的延遲時間。該 tracer  只針對實時進程。

(15) Irqsoff tracer:當中斷被禁止時,系統(tǒng)無法相應外部事件,比如鍵盤和鼠標,時鐘也無法產生 tick 中斷。這意味著系統(tǒng)響應延遲,irqsoff  這個 tracer 能夠跟蹤并記錄內核中哪些函數(shù)禁止了中斷,對于其中中斷禁止時間最長的,irqsoff 將在 log  文件的第一行標示出來,從而使開發(fā)人員可以迅速定位造成響應延遲的罪魁禍首。

ftrace的基本用法

ftrace的基本用法其實是比較簡單的。以Ubuntu18.04為例,我們只需要在current_tracer文件中輸入function字符串即可。具體操作步驟如下:

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

當執(zhí)行上述命令后,我們用vim命令打開該目錄下面一個名為trace的文件,此時就可以函數(shù)調用情況。

Linux內核ftrace怎么使用

如果查看該文件,可能會發(fā)現(xiàn)有幾萬個函數(shù)調用,估計看著就頭大。其實它的功能要強大的多,比如我們通過function_graph實現(xiàn)調用棧的層級關系,此時可以更加方便的理清函數(shù)調用關系。同時,我們還可實現(xiàn)函數(shù)名稱的過濾,比如只抓取某些,或者不抓取某些函數(shù)等等。

Linux內核ftrace怎么使用

有些版本的操作系統(tǒng)可能不能直接使用該功能,這就需要進行一些配置。關于這些配置,本文暫不介紹,后續(xù)專門進行相關介紹。

ftrace的實現(xiàn)原理概述

ftrace最早用于跟蹤函數(shù)調用,后來隨著需求的增加,ftrace演變?yōu)橐粋€框架。也就是我們前面介紹的對內核各種探測的功能。

整個ftrace的架構如圖所示,其整體分為兩層,核心部分是內核框架和一些捕獲信息的插件,其中函數(shù)調用就是其中一個插件;另外一部分則是用戶態(tài)的一些輔助工具集。

可以看出,在內核中核心的是ftrace框架,具體功能組件是各種插件,也就是tracers。如果需要跟蹤具體的內容,則該tracer需要注冊到框架當中。tracer捕獲的信息會輸出到一個環(huán)形緩沖區(qū)中。整個框架中需要用到另外一個內核模塊,也就是debugfs模塊。該模塊實現(xiàn)了用戶態(tài)與內核的交互。

Linux內核ftrace怎么使用

內核態(tài)的代碼在kernel/trace目錄下面,該下面是ftrace框架和各個tracer的代碼。如下圖所示,可以看出tracer還是比較多的。

Linux內核ftrace怎么使用

整個ftrace的代碼量也并不是特別多,大概有4萬多行的樣子。所以,目前ftrace確實是一個非常強大的內核狀態(tài)監(jiān)測工具。

感謝各位的閱讀,以上就是“Linux內核ftrace怎么使用”的內容了,經過本文的學習后,相信大家對Linux內核ftrace怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI