第2章 SystemTap の使用
本章では、SystemTap のインストール方法と SystemTap スクリプトの実行方法を説明します。
2.1. インストールと設定 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
SystemTap をデプロイするには、SystemTap パッケージと、対応するカーネルの -devel、-debuginfo、および -debuginfo-common- arch パッケージのセットをインストールする必要があります。システムに複数のカーネルがインストールされていて、それらのカーネル上で SystemTap を使用するには、それらの each カーネルバージョン用に -devel と -debuginfo パッケージをインストールします。
これらの手順は、以下のセクションで詳細に説明します。
重要
多くのユーザーは、-debuginfo と -debug パッケージを混同しています。SystemTap をデプロイするには、カーネルの -debug バージョンではなく、カーネルの -debuginfo パッケージをインストールする必要があることに注意してください。
2.1.1. SystemTap のインストール リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
SystemTap をデプロイするには、
root
として次のコマンドを実行して、systemtap および systemtap-runtime パッケージをインストールします。
yum install -y 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
~]# subscription-manager repos --enable=rhel-7-variant-debug-rpms
上記のコマンドで、使用している Red Hat Enterprise Linux システムのバリアントに応じて、variant を
server
、workstation
、または client
に置き換えます。バリアントを特定するには、次のコマンドを使用できます。
cat /etc/redhat-release Red Hat Enterprise Linux Server release 7.2 (Maipo)
~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.2 (Maipo)
kernel-devel、kernel-debuginfo、および kernel-debuginfo-common- arch パッケージのバージョン、バリアント、およびアーキテクチャーは、SystemTap でプローブされるカーネルと 正確に 一致する必要があります。システムが現在実行しているカーネルを特定するには、次を使用します。
uname -r 3.10.0-327.el7.x86_64
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)
~]# 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()}'
stap -v -e 'probe vfs.read {printf("read performed\n"); exit()}'
このコマンドは、
read performed
を出力し、仮想ファイルシステムの読み取りが検出されたら、適切に終了するように、SystemTap に指示するだけです。SystemTap が正常にデプロイされていれば、以下のような出力になります。
(
Pass 5
で始まる) 出力の最後の 3 行は、SystemTap がカーネルをプローブするインストルメンテーションを正常に作成できたこと、インストルメンテーションを実行したこと、プローブしているイベントを検出したこと (このケースでは、仮想ファイルシステムの読み込み)、および有効なハンドラーを実行したこと (テキストを出力し、エラーなしで終了) を示しています。