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