成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux內核學習與問題定位,這個工具一定要掌握

系統 Linux
在Linux操作系統上有一個非常有用的工具,無論是進行深層次的問題定位,還是進行Linux內核代碼的學習,使用該工具都能達到事半功倍的效果。今天我們就介紹一下這個工具及其用法。

在Linux操作系統上有一個非常有用的工具,無論是進行深層次的問題定位,還是進行Linux內核代碼的學習,使用該工具都能達到事半功倍的效果。今天我們就介紹一下這個工具及其用法。

今天,我們主要介紹如下幾部分的內容:

  • 什么是ftrace
  • ftrace的基本用法
  • 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字符串即可。具體操作步驟如下:

  1. cd /sys/kernel/debug/tracing 
  2. echo function > current_tracer 

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

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

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

ftrace的實現原理概述

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

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

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

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

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

 

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2022-05-30 07:36:07

Python腳本函數

2021-10-29 06:56:15

Python腳本解釋器

2022-10-17 06:22:36

Anaconda開源

2010-08-20 12:56:52

IBM DB2數據庫

2021-03-16 15:49:30

架構運維技術

2023-09-26 07:43:22

工具骨架屏頁面

2011-11-09 14:54:50

Linux操作系統

2020-06-05 09:47:55

Linux 系統 數據

2017-10-16 12:52:51

2010-11-19 16:02:42

IT族

2018-09-11 10:57:53

CIOCAOBI

2018-08-24 09:02:26

2020-09-08 14:05:06

Redis數據庫緩存

2020-11-06 09:19:20

應用編譯源代碼

2016-01-13 10:24:27

2017-08-17 11:11:41

深度學習弱智能機器學習

2023-05-16 14:07:52

AI自然語言

2021-04-27 15:28:32

程序員技能開發者

2019-09-21 20:57:59

Android安卓開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区三区欧美在线观看 | 成人午夜免费网站 | 久久久久久999| 中文字幕精品视频 | 欧美精品一区在线发布 | 午夜久草 | 91九色porny首页最多播放 | 羞羞色网站 | 91精品在线看 | 99综合| 亚洲精精品 | av一级久久 | www.4hu影院| 中文字幕一区二区三区在线观看 | 久久久激情视频 | 亚洲精品欧美 | 亚洲精品福利视频 | 黄色网址在线免费观看 | 欧美激情一区二区三区 | 国产精品一区二区三区久久 | 欧美性video 精品亚洲一区二区 | 国产精品成人久久久久 | 99精品免费久久久久久日本 | 在线日韩欧美 | 91爱啪啪| 五月婷婷在线视频 | 看a网站| 日韩中出 | 天天色天天射天天干 | 亚州综合在线 | 亚洲高清视频在线 | 成人免费看黄网站在线观看 | 国产一级毛片精品完整视频版 | 久久亚洲精品国产精品紫薇 | 国产日韩欧美一区 | 国产国产精品久久久久 | 91精品国产91久久综合桃花 | 一级做a毛片 | 久久鲁视频 | 亚洲天堂二区 | 伊人狼人影院 |