2.2. 他のコンピューター用のインストルメンテーション生成
ユーザーが SystemTap スクリプトを実行すると、そのスクリプトからカーネルモジュールが構築されます。すると SystemTap はそのモジュールをカーネルに読み込み、カーネルから直接指定されたデータを抽出できるようにします (詳細は、「アーキテクチャー」 の 手順3.1「SystemTap セッション」 を参照)。
通常、SystemTap スクリプトは (「インストールと設定」 にあるように) SystemTap がデプロイされているシステムでのみ実行できます。つまり、SystemTap を 10 台のシステムで実行するには、これら すべての システムに SystemTap をデプロイする必要があります。場合によっては、これは実現不可能もしくは望ましくないこともあります。たとえば、企業のポリシーで管理者が特定マシンにコンパイラーやデバッグ情報を提供する RPM のインストールを禁止されていれば、SystemTap のデプロイはできなくなります。
この状況を避けるためには、クロスインストルメンテーション を使用します。これは、1 台のコンピューター上の SystemTap スクリプトから別のコンピューターで使用する SystemTap インストルメンテーションモジュールを生成するプロセスです。このプロセスは、以下の利点をもたらします。
- 各種マシンのカーネル情報パッケージを単一のホストマシン にインストールできます。
- 生成された SystemTap インストルメンテーションモジュールを使用するために各 ターゲットマシン にインストールする必要があるのは 1 つの RPM
systemtap-runtime
のみです。
注記
本セクションでは分かりやすくするために、以下の用語を使用します。
手順2.1 ホストシステムとターゲットシステムの設定
- 各 ターゲットシステム に
systemtap-runtime
RPM をインストールします。 - 各 ターゲットシステム で
uname -r
を実行して、各 ターゲットシステム で実行中のカーネルを確認します。 - SystemTap を ホストシステム にインストールします。インストルメンテーションモジュール は、ホストシステム 上で ターゲットシステム 用に構築されます。SystemTap のインストール方法は、「SystemTap のインストール」 を参照してください。
- 上記で判明した ターゲットカーネル のバージョンを使用して、ターゲットカーネル と関連 RPM を 「必要なカーネル情報 RPM パッケージのインストール」 に説明されている方法で ホストシステム にインストールします。複数の ターゲットシステム で異なる ターゲットカーネル を使用している場合は、ターゲットシステム で使用しているカーネルごとにこのステップを繰り返します。
インストルメンテーションモジュール を構築するには、ホストシステム で以下のコマンドを実行します (適切な値を指定してください)。
stap -r kernel_version script -m module_name -p4
ここでの
kernel_version
は、ターゲットカーネル のバージョンを指します (ターゲットマシンで実行した uname -r
の出力)。script
は、インストルメンテーションモジュール に変換されるスクリプトです。module_name
は、希望する インストルメンテーションモジュール の名前です。
インストルメンテーションモジュールがコンパイルされたら、ターゲットシステム にコピーして、以下のコマンドを使用して読み込みます。
staprun module_name.ko
たとえば、ターゲットカーネル 2.6.32-53.el6 用に
simple.stp
という名前が付けられた SystemTap スクリプトから インストルメンテーションモジュール simple.ko
を作成するには、以下のコマンドを使用します。
stap -r 2.6.32-53.el6 -e 'probe vfs.read {exit()}' -m simple -p4
これで
simple.ko
という名前のモジュールが作成されます。インストルメンテーションモジュール simple.ko
を使用するには、これを ターゲットシステム にコピーして、(ターゲットシステム 上で) 以下のコマンドを実行します。
staprun simple.ko
重要
構築された インストルメンテーションモジュール が機能するには、ホストシステム と ターゲットシステム が同一アーキテクチャーで同じ Linux ディストリビューションを実行している必要があります。