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