Show Table of Contents
第2章 SystemTap の使用
本章では SystemTap のインストール方法と SystemTap スクリプトの実行方法について説明します。
2.1. インストールと設定
SystemTap のデプロイにインストールが必要となるのは、SystemTap パッケージと対応するカーネルの -devel、-debuginfo および -debuginfo-common-arch パッケージです。システムに複数のカーネルがインストールされていてそれらのカーネル上で SystemTap を使用するには、それらの各 カーネルバージョン用に -devel と -debuginfo パッケージをインストールします。
これらの手順については、以下のセクションで詳細に説明します。
重要
多くのユーザーは、-debuginfo パッケージと -debug パッケージについて混同しがちです。SystemTap のデプロイに必要となるのは、カーネルの -debuginfo パッケージのインストールであって、カーネルの -debug バージョンではないことに注意してください。
2.1.1. SystemTap のインストール
SystemTap をデプロイするには、
root で以下のコマンドを実行して systemtap と systemtap-runtime のパッケージをインストールします。
~]#yum install -y systemtap systemtap-runtime
2.1.2. 必要なカーネル情報パッケージのインストール
SystemTap は、カーネル内にインストルメンテーションを配置する (プローブする) ためにカーネルについての情報が必要になります。この情報により SystemTap はインストルメンテーションのコード生成が可能になります。この情報は、一致する kernel-devel、kernel-debuginfo、および kernel-debuginfo-common-arch パッケージに含まれています (ここでの arch は、ご使用のシステムのハードウェアプラットフォームになります。これは、
uname -m コマンドを実行すると判明します)。
kernel-devel パッケージはデフォルトの Red Hat Enterprise Linux リポジトリーから、kernel-debuginfo および kernel-debuginfo-common-arch パッケージは
debug リポジトリーから入手できます。
必要なパッケージをインストールするには、システム用に
debug リポジトリーを有効にします。
~]#subscription-manager repos --enable=rhel-7-variant-debug-rpms
上記のコマンドでは、ご使用中の Red Hat Enterprise Linux システムのバリアントによって、variant を
server、workstation、または client に置き換えます。バリアントを確認するには、以下のコマンドを実行します。
~]#cat /etc/redhat-releaseRed Hat Enterprise Linux Server release 7.2 (Maipo)
SystemTap がプローブするカーネルは、kernel-devel、kernel-debuginfo、および kernel-debuginfo-common-arch パッケージのバージョン、バリアント、およびアーキテクチャーと正確に一致する必要があります。システムで実行中のカーネルを確認するには、以下のコマンドを実行します。
uname -r
3.10.0-327.el7.x86_64
たとえば、AMD64 または Intel 64 マシン上のカーネルバージョン
3.10.0-327.4.4.el7 に SystemTap を使用するには、以下のパッケージをインストールする必要があります。
- kernel-debuginfo-3.10.0-327.4.4.el7.x86_64.rpm
- kernel-debuginfo-common-x86_64-3.10.0-327.4.4.el7.x86_64.rpm
- kernel-devel-3.10.0-327.4.4.el7.x86_64.rpm
yum パッケージマネージャーを使って、SystemTap を実行するために必要なパッケージを現行カーネルにインストールするには、root で以下のコマンドを実行します。
~]#yum install -y kernel-devel-$(uname -r) \kernel-debuginfo-$(uname -r)kernel-debuginfo-common-$(uname -m)-$(uname -r)
2.1.3. 初期テスト
SystemTap でプローブするカーネルが使用中であれば、デプロイメントが成功したかどうかを直ちにテストできます。別のカーネルをプローブする場合は、再起動して該当カーネルを読み込みます。
テストを開始するには、以下のコマンドを実行します。
stap -v -e 'probe vfs.read {printf("read performed\n"); exit()}'
このコマンドは単に、SystemTap に
read performed をプリントして、仮想ファイルシステムの読み込みが検出されると、正常に終了するよう指示します。SystemTap が正常にデプロイされていれば、以下のような出力になります。
Pass 1: parsed user script and 45 library script(s) in 340usr/0sys/358real ms. Pass 2: analyzed script: 1 probe(s), 1 function(s), 0 embed(s), 0 global(s) in 290usr/260sys/568real ms. Pass 3: translated to C into "/tmp/stapiArgLX/stap_e5886fa50499994e6a87aacdc43cd392_399.c" in 490usr/430sys/938real ms. Pass 4: compiled C into "stap_e5886fa50499994e6a87aacdc43cd392_399.ko" in 3310usr/430sys/3714real ms. Pass 5: starting run. read performed Pass 5: run completed in 10usr/40sys/73real ms.
(
Pass 5 で始まる) 出力の最後の 3 行は、SystemTap がカーネルをプローブするインストルメンテーションを正常に作成できたこと、インストルメンテーションを実行したこと、プローブしているイベントを検出したこと (このケースでは、仮想ファイルシステムの読み込み)、および有効なハンドラーを実行したこと (テキストをプリントし、エラーなしで終了) を示しています。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.