中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Linux內核ftrace怎么使用

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

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

什么是 ftrace

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ftrace的基本用法

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

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

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

Linux內核ftrace怎么使用

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

Linux內核ftrace怎么使用

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

ftrace的實現原理概述

ftrace最早用于跟蹤函數調用,后來隨著需求的增加,ftrace演變為一個框架。也就是我們前面介紹的對內核各種探測的功能。

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

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

Linux內核ftrace怎么使用

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

Linux內核ftrace怎么使用

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

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

向AI問一下細節

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

AI

漠河县| 衡水市| 赣榆县| 荥经县| 尼木县| 富源县| 化州市| 霞浦县| 朝阳县| 甘孜县| 邵东县| 长治市| 荆门市| 福海县| 丰城市| 通渭县| 林口县| 合山市| 蒙自县| 新竹县| 河北区| 安新县| 西丰县| 武平县| 云和县| 连云港市| 淄博市| 平远县| 三台县| 夹江县| 永丰县| 双江| 波密县| 禹城市| 兴和县| 雷山县| 连城县| 工布江达县| 富源县| 伊金霍洛旗| 隆德县|