第3章 SystemTap の作動方法
SystemTap を使うとユーザーはシンプルなスクリプトを作成および再使用して、実行中の Linux システムのアクティビティーを徹底的に調べることができます。このスクリプトは、データを抽出し、フィルターをかけ、素早く安全にデータをまとめるように設計できます。これにより、複雑なパフォーマンス (または機能的な) 問題の診断が可能になります。
SystemTap スクリプトにおける本質的な考えは、イベント に名前を付け、それに ハンドラーを与えることです。SystemTap がスクリプトを実行すると、SystemTap はイベントを監視します。イベントが発生すると、Linux カーネルはハンドラーをクイックサブルーチンとして実行し、通常の操作を再開します。
イベントには関数の開始/終了、タイマーの有効期限切れ、セッション終了など数種類のものがあります。ハンドラーは一連のスクリプト言語のステートメントで、イベント発生時に実行する作業を指定します。この作業には通常、イベントコンテキストからのデータ抽出、それらの内部変数への保存、結果の出力などが含まれます。
3.1. アーキテクチャー
SystemTap のセッションは、SystemTap スクリプトを実行すると始まります。このセッションは、以下の順番で生じます。
手順3.1 SystemTap セッション
- まず、SystemTap はスクリプトを既存のタップセットライブラリー (通常は
/usr/share/systemtap/tapset/
ディレクトリーにあります) に対してチェックし、使用されているタップセットを探します。次に SystemTap は、見つかった tapset を tapset ライブラリー内の対応する定義で置き換えます。 - SystemTap はスクリプトを C に変換し、システム C コンパイラーを実行してそこからカーネルモジュールを作成します。このステップを実行するツールは、systemtap パッケージに含まれています (詳細については、「SystemTap のインストール」 を参照)。
- SystemTap はモジュールを読み込み、スクリプト内の全プローブ (イベントおよびハンドラー) を有効にします。systemtap-runtime パッケージの staprun (詳細については、「SystemTap のインストール」 を参照) がこの機能を提供します。
- イベントが発生すると、それに対応するハンドラーが実行されます。
- SystemTap セッションが終了すると、プローブは無効になり、カーネルモジュールは読み込み解除されます。
このステップは、コマンドラインプログラム stap で実行されます。このプログラムは、SystemTap のメインのフロントエンドツールです。stap の詳細については、stap(1) man ページを参照してください (マシンに SystemTap が適切にインストールされている場合)。