歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux 自檢和 SystemTap

Linux 自檢和 SystemTap

日期:2017/2/28 16:40:49   编辑:Linux教程

  SystemTap 是監控和跟蹤運行中的 Linux 內核的操作的動態方法。這句話的關鍵詞是動態,因為 SystemTap 沒有使用工具構建一個特殊的內核,而是允許您在運行時動態地安裝該工具。它通過一個名為Kprobes 的應用編程接口(API)來實現該目的,本文將探索這個 API。我們首先了解以前的一些內核跟蹤方法,然後在深入探討 SystemTap 的架構及其使用。

  內核跟蹤

  SystemTap 與一種名為 DTrace 的老技術相似,該技術源於 Sun Solaris 操作系統。在 DTrace 中,開發人員可以用 D 編程語言(C 語言的子集,但修改為支持跟蹤行為)編寫腳本。DTrace 腳本包含許多探針和相關聯的操作,這些操作在探針 “觸發” 時發生。例如,探針可以表示簡單的系統調用,也可以表示更加復雜的交互,比如執行特定的代碼行。清單 1 顯示了 DTrace 腳本的一個簡單例子,它計算每個進程發出的系統調用的數量(注意,使用字典將計數和進程關聯起來)。該腳本的格式包含探針(在發出系統調用時觸發)和操作(對應的操作腳本)。


清單 1. 計算每個進程的系統調用的簡單 DTrace 腳本

syscall:::entry 
{ 
 
 @num[pid,execname] = count(); 
 
} 

  DTrace 是 Solaris 最引人注目的部分,所以在其他操作系統中開發它並不奇怪。DTrace 是在 Common Development and Distribution License (CDDL) 之下發行的,並且被移植到 FreeBSD 操作系統中。

  另一個非常有用的內核跟蹤工具是 ProbeVue,它是 IBM 為 IBM? AIX? 操作系統 6.1 開發的。您可以使用 ProbeVue 探查系統的行為和性能,以及提供特定進程的詳細信息。這個工具使用一個標准的內核以動態的方式進行跟蹤。清單 2 顯示了 ProbeVue 腳本的一個例子,它指出發出 sync 系統調用的特定進程。


清單 2. 指出哪個進程調用 sync 的簡單 ProbeVue 腳本

@@syscall:*:sync:entry 
{ 
 printf( "sync() syscall invoked by process ID %d\n", __pid ); 
 exit(); 
} 

  考慮到 DTrace 和 ProbeVue 在各自的操作系統中的巨大作用,為 Linux 操作系統策劃一個實現該功能的開源項目是勢不可擋的。SystemTap 從 2005 年開始開發,它提供與 DTrace 和 ProbeVue 類似的功能。許多社區還進一步完善了它,包括 Red Hat、Intel、Hitachi 和 IBM 等。

  這些解決方案在功能上都是類似的,在觸發探針時使用探針和相關聯的操作腳本。現在,我們看一下 SystemTap 的安裝,然後探索它的架構和使用。

Copyright © Linux教程網 All Rights Reserved