文章目錄
1 概念
1.1 功能
LTT是一個用於跟蹤系統詳細運行狀態和流程的工具,它可以追蹤記錄系統中的特定事件。這些事件包括:
? 系統調用的進入和退出
? 陷阱/中斷(Trap / Irq)的進入和退出
? 進程調度事件
? 核心定時器
? 進程管理相關事件:建立 ,喚醒,訊號處理等等
? 檔案系統相關事件:Open / Read / Write / Seek / Ioctl 等等
? 記憶體管理相關事件:記憶體配置/釋放等
? 其他事件:IPC / Socket/ 網路 等等
此外 Ltt還提供了自訂和記錄需要跟蹤的事件類型的函數介面。
1.2 結構
LTT主要由4個部分組成:
? 核心代碼補丁:LTT目前還沒有納入正式的官方核心,在核心中的部分代碼需要打Patch來獲得,主要是修改了上述各類事件的相關代碼,添加了Trace的調用代碼
? 核心模組:Trace功能的主要實現部分,記錄核心事件,並和使用者空間的守護進程進行互動
? 使用者空間的守護進程:從LTT的核心模組中擷取事件相關資料,並寫入檔案。
? 資料分析應用程式:讀取守護進程產生的資料檔案,加以分析,並以更加可讀的方式(圖表等)顯示出來。
除此之外,LTT還具備自訂和跟蹤使用者空間事件的能力。
2 使用
所有的安轉使用相關的內容,都可以在LTT的官方網站:http://www.opersys.com/ltt/ 找到。仔細閱讀裡面的文檔即可。
(不過,其穩定版本在我這編譯起來居然有Error,修改過一些代碼後,編譯通過,有很多warning,或許是我的編譯環境有問題,最終試用的時候圖省事,沒有去過多研究,使用了Montavista的Package中現成編譯好的版本 8 )
3 體會
LTT的確是一個很有用的工具,靈活的配合其他工具的使用,如strace,time等等,可以作為分析最佳化系統的performance的一個可行的途徑。
值得一提的是,LTT可以通過設定參數,在特定的時間段,篩選所需要記錄的事件類型,還可以按進程ID等選擇所跟蹤的特定對象,通過合理的配置參數,可以使得其對系統所造成的額外負擔減少到一個合理的程度,對系統效能的分析基本不會造成明顯的幹擾因素。
另外LTT提供的自訂和記錄需要跟蹤的事件類型的函數介面,也使它有了一些拓展能力,可以用來Debug自己編寫的核心模組代碼。
LTT跟蹤使用者空間事件的實現,是通過其核心模組中幾個特定的IOCTL介面,由使用者空間的一個LIB庫將其封裝成函數,使得其使用方法與其在核心 模組中自訂和記錄事件類型的函數介面相同。應該說這是一個很巧妙的實現辦法,不過對其效能個人還是有些懷疑,因為這樣一來,對使用者空間事件的紀錄就需要 經由 使用者空間-〉核心空間-〉使用者空間 走一趟來實現。