2.2. 他のコンピューター用のインストルメンテーション生成

ユーザーが SystemTap スクリプトを実行すると、そのスクリプトからカーネルモジュールが構築されます。すると SystemTap はそのモジュールをカーネルに読み込み、カーネルから直接指定されたデータを抽出できるようにします (詳細は、「アーキテクチャー」手順3.1「SystemTap セッション」 を参照)。
通常、SystemTap スクリプトは (「インストールと設定」 にあるように) SystemTap がデプロイされているシステムでのみ、実行できます。つまり、SystemTap を 10 台のシステムで実行するには、これら すべての システムに SystemTap をデプロイする必要があります。場合によっては、これは実現不可能もしくは望ましくないこともあります。たとえば、企業のポリシーで管理者が特定マシンにコンパイラーやデバッグ情報を提供するパッケージのインストールを禁止されていれば、SystemTap のデプロイはできなくなります。
この状況を避けるためには、クロスインストルメンテーションを使用します。これは、1 台のコンピューター上の SystemTap スクリプトから別のコンピューターで使用する SystemTap インストルメンテーションモジュールを生成するプロセスです。このプロセスは、以下の利点をもたらします。
  • 各種マシンのカーネル情報パッケージを単一のホストマシン にインストールできます。
  • 生成された SystemTap インストルメンテーションモジュールを使用するために各ターゲットマシンにインストールする必要があるのは 1 つのパッケージ systemtap-runtime のみです。

重要

構築されたインストルメンテーションモジュールが機能するには、ホストシステムターゲットシステムが同一アーキテクチャーで同じ Linux ディストリビューションを実行している必要があります。

注記

本セクションでは分かりやすくするために、以下の用語を使用します。
インストルメンテーションモジュール
SystemTap スクリプトから構築されるカーネルモジュールです。SystemTap モジュールホストシステム上に構築され、ターゲットシステムターゲットカーネルに読み込まれます。
ホストシステム
このシステム上で (SystemTap スクリプトから) インストルメンテーションモジュールがコンパイルされ、ターゲットシステム に読み込まれます。
ターゲットシステム
このシステム内で (SystemTap スクリプトから) インストルメンテーションモジュールが構築されます。
ターゲットカーネル
ターゲットシステムのカーネルです。このカーネルがインストルメンテーションモジュール の読み込み、実行を行います。

手順2.1 ホストシステムとターゲットシステムの設定

  1. systemtap-runtime パッケージを各ターゲットシステムにインストールします。
  2. ターゲットシステムuname -r を実行して、ターゲットシステムで実行中のカーネルを確認します。
  3. SystemTap をホストシステムにインストールします。インストルメンテーションモジュールは、ホストシステム上でターゲットシステム用に構築されます。SystemTap のインストール方法は、「SystemTap のインストール」 を参照してください。
  4. 上記で判明したターゲットカーネルのバージョンを使用して、ターゲットカーネルと関連パッケージを 「必要なカーネル情報パッケージのインストール」 にある方法でホストシステムにインストールします。複数のターゲットシステムで異なるターゲットカーネルを使用している場合は、ターゲットシステムで使用しているカーネルごとにこのステップを繰り返します。
手順2.1「ホストシステムとターゲットシステムの設定」 が完了すると、(いずれのターゲットシステム用の) インストルメンテーションモジュールホストシステムでの構築が可能になります。
インストルメンテーションモジュールを構築するには、ホストシステムで以下のコマンドを実行します (適切な値を指定してください)。
stap -r kernel_version script -m module_name -p4
ここでの kernel_version は、ターゲットカーネルのバージョンを指します (ターゲットマシンで実行した uname -r の出力)。script は、インストルメンテーションモジュールに変換されるスクリプトです。module_name は、希望する インストルメンテーションモジュールの名前です。
インストルメンテーションモジュールがコンパイルされたら、ターゲットシステム にコピーして、以下のコマンドを使用して読み込みます。
staprun module_name.ko
たとえば、simple.stp という名前の SystemTap スクリプトから 3.10.0-327.4.4.el7 ターゲットカーネルsimple.ko という インストルメンテーションモジュールを作成するには、以下のコマンドを実行します。
stap -r 2.6.32-53.el6 -e 'probe vfs.read {exit()}' -m simple -p4
これで simple.ko という名前のモジュールが作成されます。simple.ko インストルメンテーションモジュール を使用するには、これをターゲットシステムにコピーして、(ターゲットシステム上で) 以下のコマンドを実行します。
staprun simple.ko

このページには機械翻訳が使用されている場合があります (詳細はこちら)。