ftrace、kpatch、systemtap的基本原理、联系和区别
生活随笔
收集整理的這篇文章主要介紹了
ftrace、kpatch、systemtap的基本原理、联系和区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、ftrace
Linux當前版本中,功能最強大的調試、跟蹤手段。其最基本的功能是提供了動態和靜態探測點,用于探測內核中指定位置上的相關信息。
靜態探測點,是在內核代碼中調用ftrace提供的相應接口實現,稱之為靜態是因為,是在內核代碼中寫死的,靜態編譯到內核代碼中的,在內核編譯后,就不能再動態修改。在開啟ftrace相關的內核配置選項后,內核中已經在一些關鍵的地方設置了靜態探測點,需要使用時,即可查看到相應的信息。
動態探測點,基本原理為:利用mcount機制,在內核編譯時,在每個函數入口保留數個字節,然后在使用ftrace時,將保留的字節替換為需要的指令,比如跳轉到需要的執行探測操作的代碼。
2、kpatch
kpatch是RedHat主導開發的“內核在線升級”工具,可在不重啟系統、不中斷業務的情況下實現內核在線升級。實現函數級別的執行流程替換。
其基本原理為:基于ftrace,類似于ftrace的動態探測點,利用mcount機制,在內核編譯時,在每個函數入口保留數個字節,然后在打補丁時,將“被替換函數”入口保留的字節替換為跳轉指令,跳轉到kpatch的相關流程中,然后進入“新函數”的執行流程,實現函數級別的執行流程在線替換,最終實現“內核在線升級”的功能。
3、systemTap
另一個具有探測功能的工具,不得不提systemTap。
其原理跟ftrace不同,其基本原理為:在運行systemTap腳本時,動態解析內核,將指定探測點處的代碼,替換為int 3指令,實現陷入,在陷入后實現相關信息的探測,探測完成后,int 3返回到原有的執行流程中執行。
4、ftrace和systemTap機制的主要區別
1)ftrace只能在函數入口(或出口?)實現探測,而systemTap可以在函數中的任意位置實現探測。
Linux當前版本中,功能最強大的調試、跟蹤手段。其最基本的功能是提供了動態和靜態探測點,用于探測內核中指定位置上的相關信息。
靜態探測點,是在內核代碼中調用ftrace提供的相應接口實現,稱之為靜態是因為,是在內核代碼中寫死的,靜態編譯到內核代碼中的,在內核編譯后,就不能再動態修改。在開啟ftrace相關的內核配置選項后,內核中已經在一些關鍵的地方設置了靜態探測點,需要使用時,即可查看到相應的信息。
動態探測點,基本原理為:利用mcount機制,在內核編譯時,在每個函數入口保留數個字節,然后在使用ftrace時,將保留的字節替換為需要的指令,比如跳轉到需要的執行探測操作的代碼。
2、kpatch
kpatch是RedHat主導開發的“內核在線升級”工具,可在不重啟系統、不中斷業務的情況下實現內核在線升級。實現函數級別的執行流程替換。
其基本原理為:基于ftrace,類似于ftrace的動態探測點,利用mcount機制,在內核編譯時,在每個函數入口保留數個字節,然后在打補丁時,將“被替換函數”入口保留的字節替換為跳轉指令,跳轉到kpatch的相關流程中,然后進入“新函數”的執行流程,實現函數級別的執行流程在線替換,最終實現“內核在線升級”的功能。
3、systemTap
另一個具有探測功能的工具,不得不提systemTap。
其原理跟ftrace不同,其基本原理為:在運行systemTap腳本時,動態解析內核,將指定探測點處的代碼,替換為int 3指令,實現陷入,在陷入后實現相關信息的探測,探測完成后,int 3返回到原有的執行流程中執行。
4、ftrace和systemTap機制的主要區別
1)ftrace只能在函數入口(或出口?)實現探測,而systemTap可以在函數中的任意位置實現探測。
2)ftrace實現函數替換后,原有函數的執行流程被替換成新函數,新函數執行完成后可以不再返回原函數流程中執行。而systemTap利用的是int 3陷入機制,在探測后會自動跳轉會原有流程執行。
原文地址: http://blog.chinaunix.net/uid-14528823-id-4567325.html
總結
以上是生活随笔為你收集整理的ftrace、kpatch、systemtap的基本原理、联系和区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ARM Cortex-A 编程手册学习笔
- 下一篇: 研究Xposed相关二:如何root a