Branch Tracer for Linux
btraxとは
btraxの機能概要
スクリーンショット
適用例
リンク
このプログラムの一部は、「独立行政法人 情報処理推進機構 オープンソースソフトウェア活用基盤整備事業」に係る委託業務の一環として開発しました。
btraxとは
btrax
(Branch Tracer for Linux) は、Pentium4, Xeon, Pentium-M CPU のデバッグ機能である最新分岐記録機構を利用した、分岐命令トレーサです。カーネルに変更を加えることなく、カーネル/ドライバおよびアプリケーション/ライブラリの分岐命令実行状況を取得でき、そのログ情報を元に分岐カバレージ情報と実行経路を表示することができます。
btraxプログラム
btraxは、次の2つの機能から構成されます。
分岐命令実行ログ取得機能
ログ解析機能
分岐命令実行ログ取得機能には、分岐命令トレース用の本体ドライバとは別に、下記に示す、他プロジェクトの開発成果物も含まれています。これらのドライバは、btraxの導入を容易にするため、btraxパッケージに同梱しています。これらは、カーネル2.6.18以降では、カーネルに含まれるもの(kprobes, relayfs)の方が新しいため、そちらを使用し、btrax同梱のものは使いません。将来的には、これらのドライバは同梱されなくなる可能性があります。
djprobe --- カーネルを変更することなくフックポイントを設定するためのドライバ
ctr --- システムコールの入口/出口にフックポイントを設定するためのドライバ
relayfs --- 大量データをカーネル空間からユーザ空間に転送するためのドライバ
ログ解析機能を使用することにより、分岐カバレージ情報と、実行経路を表示することができます。ログ解析機能は、下記のプログラムから構成されます。
bt_split --- ログ分割プログラム
bt_coverage --- 分岐カバレージ表示プログラム
bt_execpath --- 実行経路表示プログラム
コンパイル/実行環境の条件
btraxはPentium4, Xeon, Pentium-M CPUのデバッグ機能を利用しているため、これらのプロセッサを搭載したマシンが必要です。
また、btraxをコンパイル/実行するためには、以下が必要です。
ドライバのコンパイルに必要なカーネルヘッダ(kernel-smp-develパッケージ)
カーネルソース(kernelソースパッケージ。htmlでソースカバレージを確認する場合に必要)
非圧縮のカーネルvmlinux(kernel-debuginfoパッケージ)
binutils
更に、カーネルで下記がサポートされている必要があります。
procfs
kallsyms
apic
relayfsとkprobes(2.6.18以降のカーネルの場合、btrax同梱のrelayfsとdjprobeが使えないため必要)
以下の環境での動作は確認済みです。
RedHat Enterprise Linux App Server 4 Update 1(カーネルv2.6.9-11.ELsmp、v2.6.18-upstream)
RedHat Enterprise Linux App Server 4 Update 3(カーネルv2.6.9-34.ELsmp)
Miracle Linux 4.0 SP1(カーネルv2.6.9-34.21AXsmp)
btraxの機能概要
トレースログの収集
btraxでは、アプリケーション/ライブラリおよび、カーネル/ドライバのトレースに対応しています。また、システムコールに限定したトレースにも対応しています。これらのトレースでは、以下の点が異なります。
アプリケーション --- 先にアプリケーションを起動してpidを取得し、そのpidを指定してトレースを実行
カーネル --- トレース容量がバッファサイズに限定される。任意のシンボル/アドレスから(まで)バッファ容量分だけトレースする
システムコール --- 対象プログラムが発行するシステムコールの入口から出口までをトレースする
カーネル/システムコール・トレースの開始/終了は、フックを利用しています。フック挿入には、カーネルでkprobesがサポートされている場合はkprobesを使い、サポートされていない場合はdjprobeを使います。djprobeはフックポイントの挿入箇所に制限があります。詳細については
djprobeのページ
を参照して下さい。
トレースログの解析
トレースログの解析では、以下を確認することができます。
分岐実行カバレージ
実行経路
分岐実行カバレージでは、関数カバレージと分岐実行カバレージを解析することができます。
システムコールをトレースした場合は、対象システムコールから呼び出される関数に限定したカバレージ解析を行うことができ、更に同一カーネル間や異なるカーネル間のカバレージを比較することができます。
実行経路表示では、簡単な繰り返しチェック機能を備えており、繰り返しを省略して表示することができます。
スクリーンショット
アプリケーション (
dav
) 実行をトレースした例
分岐実行カバレージ出力(関数カバレージ)
分岐実行カバレージ出力(分岐カバレージ〜上の例の続き)
実行経路出力(先頭部分)
実行経路出力(繰り返し表示部分)
ext3_unlink実行以降をトレースした例
分岐実行カバレージ出力(関数カバレージ)
分岐実行カバレージ出力(分岐カバレージ〜上の例の続き)
実行経路出力(先頭部分)
実行経路出力(繰り返し表示部分)
システムコールgettimeofdayをトレースした例
分岐実行カバレージ出力(テキスト)
分岐実行カバレージ出力(html)
システムコールgetpriorityの引き数を変えて同じカーネル上でトレースし、比較した例
カバレージ比較出力(html)
システムコールgetpriority(引き数は同じ)を異なるカーネル上でトレースし、比較した例
カバレージ比較出力(html)
適用例
btrax
は、カーネルのリグレッションテストのツール開発プロジェクトである、crackerjackプロジェクトに適用され、システムコールテストのカバレージを確認するために使用されています。crackerjackプロジェクトの詳細については、
crackerjackのページ
を参照して下さい。
リンク
プロジェクト
日本OSS推進フォーラム:
http://www.ipa.go.jp/software/open/forum
btrax(英語版) :
http://sourceforge.net/projects/btrax/
btrax(日本語版) :
http://sourceforge.jp/projects/btrax/
crackerjack(英語版) :
http://sourceforge.net/projects/crackerjack/
kstrax(英語版) :
http://sourceforge.net/projects/kstrax/
kstrax(日本語版) :
http://sourceforge.jp/projects/kstrax/
dav(英語版) :
http://sourceforge.net/projects/davtools/
dav(日本語版) :
http://sourceforge.jp/projects/dav/
LKST(英語版)
http://sourceforge.net/projects/lkst/
LKST(日本語版)
http://sourceforge.jp/projects/lkst/
DLE(英語版)
http://sourceforge.net/projects/dle/
DLE(日本語版)
http://sourceforge.jp/projects/dle/
その他
Hitachi,Ltd.:
http://www.hitachi.co.jp/
All Right Reserved, Copyright (C) 2006,2007, Hitachi, Ltd.
This website is hosted by