SystemTap
SystemTap は動作中の Linux システムについての情報収集を簡略化するためのフリーソフトウェア (GPL) インフラストラクチャを提供します。
目次
SystemTap
AUR から SystemTap をインストールするだけです: systemtap。上流での最新のリリースと比較してみてください [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_INFO と CONFIG_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 を正しい位置に入れてください。
ビルドとインストール
任意: コンパイル速度向上のために /etc/makepkg.conf
で MAKEFLAGS="-j16"
とセットしておくことを推奨します。
ビルドするには約 12 GB のディスク領域が必要です。大容量の DRAM を持っている場合はインメモリの tmpfs を使うことを検討してください。
makepkg
または makepkg --skipchecksums
を実行してコンパイルします。そして sudo pacman -U *.pkg.tar.gz
とするだけでパッケージをインストールできます。
pacman が reinstall かどうか尋ねてきますので y と答えます。
linux と linux-headers を再インストールすべきです。linux-docs はどちらでも構いません。
この方法に従う場合、外部モジュール(nvidia や virtualbox など)を再ビルドする必要はありません。
カスタムカーネルをビルドする
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`