1. 程式人生 > >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可以在函式中的任意位置實現探測。

2)ftrace實現函式替換後,原有函式的執行流程被替換成新函式,新函式執行完成後可以不再返回原函式流程中執行。而systemTap利用的是int 3陷入機制,在探測後會自動跳轉會原有流程執行。

原文地址: http://blog.chinaunix.net/uid-14528823-id-4567325.html