Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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 ホストシステムとターゲットシステムの設定

  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
たとえば、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