SystemTap

提供: ArchWiki
2016年1月15日 (金) 09:57時点におけるKusakata (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

SystemTap は動作中の Linux システムについての情報収集を簡略化するためのフリーソフトウェア (GPL) インフラストラクチャを提供します。

SystemTap

AUR から SystemTap をインストールするだけです: systemtapAUR。上流での最新のリリースと比較してみてください [1]。また [2] にあるソースからビルドすることも考慮してください。新しいカーネルやディストロのサポートは最初にここに現れます。

標準的なカーネル

すくなくとも linux-headers がインストールされている必要があります。

Arch は配布バイナリ(カーネルを含む)からデバッグ情報を取り除いている(strip している)ので、systemtap の機能の多くは利用できません。なので /usr/share/doc/systemtap/examples にある例の多くは動作しません。しかし stapprobes man page で動作する NON-DWARF および AUTO-DWARF のプローブタイプを見ることができます。例えば:

  • カーネルトレースポイント: kernel.trace("*")
  • ユーザースペースプローブ: process("...").function("...") (-g をつけて自分でビルドしたプログラムに限る)
  • ユーザースペースマーカー: process("...").mark("...") (<sys/sdt.h> のマーカーをつけて configure されていれば)
  • perfctrベースのプローブ: perf.*
  • NON-DWARF カーネルプローブ: kprobe.function("...") と nd_syscall.* tapset (/boot/System.map* ファイルがあれば。下記参照)

カーネルのリビルド

SystemTap を実行するために linux-custom パッケージをビルドすることを考えているかもしれません。しかしオリジナルの linux パッケージをリビルドすることは簡単で効率的です。[3] も参照してください。

準備

最初に ABSROOT=. abs core/linux; cd core/linux を実行してオリジナルのカーネルビルドファイルを取得します。 そして makepkg --verifysource を実行して追加のファイルを取得します。この検証をしておけば「チェックサムの更新」のステップを飛ばしても安全です。

config の修正

config (32-bit システム向け) または config.x86_64 (64-bit システム向け) を編集して以下のオプションを有効にします:

  • CONFIG_KPROBES=y
  • CONFIG_KPROBES_SANITY_TEST=n
  • CONFIG_KPROBE_EVENT=y
  • CONFIG_NET_DCCPPROBE=m
  • CONFIG_NET_SCTPPROBE=m
  • CONFIG_NET_TCPPROBE=y
  • CONFIG_DEBUG_INFO=y
  • CONFIG_DEBUG_INFO_REDUCED=n
  • CONFIG_X86_DECODER_SELFTEST=n

デフォルトでは CONFIG_DEBUG_INFOCONFIG_DEBUG_INFO_REDUCED だけが設定されていません。

現在の core/linux (3.15.2 でテスト済み) では、以下の行を config.[x86_64] に追加するだけです:

x86_64
echo '
CONFIG_DEBUG_INFO=y
CONFIG_DEBUG_INFO_REDUCED=n
' >> config.x86_64

これらの行を自己メンテナンスされているスクリプトに追加するときは CONFIG_* の行の前にスペースを入れないでください。.

チェックサムを更新する

ソースファイルが正しいと確信できるときはこのステップを飛ばしても安全です

md5sum config[.x86_64] を実行して新しい md5sum を計算します。

PKGBUILD ファイル中で md5sums=('sum-of-first' ... 'sum-of-last')source=('first-source' ... 'last-source') と同じ順序で並んでいます。新しい md5sum を正しい位置に入れてください。

ビルドとインストール

Optional: It is recommended to set MAKEFLAGS="-j16" in /etc/makepkg.conf to speed up the compilation.

You will need about 12 GB disk space for this build. Consider using an in-memory tmpfs if you have large DRAM. Run makepkg or makepkg --skipchecksums to compile, then simply sudo pacman -U *.pkg.tar.gz to install the packages. pacman will tell you reinstall, and you should say y.

linux and linux-headers should be reinstalled, linux-docs does not matter.

Via this method, external modules (e.g. nvidia and virtualbox) do not need to be rebuilt.

カスタムカーネルをビルドする

README を参照してください。

トラブルシューティング

起動時にパス 4 が失敗する

以下のメッセージが表示されるときは

/usr/share/systemtap/runtime/stat.c:214:2: error: 'cpu_possible_map' undeclared (first use in this function)

systemtap-git パッケージをインストールしてみてください。

System.map がない

DEBUG_INFO を有効にしてカーネルをビルドした場所から復元できます

# cp src/linux-3.6/System.map /boot/System.map-3.6.7-1-ARCH

または

# cp /proc/kallsyms /boot/System.map-`uname -r`