How to use Linux Trace Toolkit


1.Introduction (http://www.opersys.com/ltt/dox/ltt-online-help/ltt-introduction.html より)
1.1 なぜLinux Trace toolkitなのか?'''[[br]]

Linuxオペレーティングシステムは、マルチプログラミングでマルチユーザなシステムである。これが意味していることは、同時に複数の動作プログラムを扱うことが可能であるということである。単一プロセッサシステム(一つのマイクロプロセッサしかないコンピュータ)上では、複数のタスク間で貴重なリソースを共有することでこれらの動作が達成されており、実際にはある期間内でタスクが実行され、次に別のタスクに切り替わる。動作プロセス選択の切替えはLinux Kernelによって制御されるが、Linux Kernelそれ自身がプログラムであり、同様にプロセッサの一定の処理時間を消費する。また、Linux Kernelは自身が管理するプログラムからの一定の要求を達成する責任が有り、またエラー状態を取り扱う責任も負う。[[br]]

プロセススイッチやその他の管理タスクなどのスケジューリングの決定、プロセスがどのようにどれだけの期間扱われているか、どのプロセスがアロケートされているか等の完全な詳細を知る必要がある。これらの情報取得をある期間に押し広げたものを、我々は"実行トレース"と呼ぶ。[[br]]

Linux trace toolkitは"Linux-OSのプログラム実行の詳細を抽出しそれらを解釈する"ことを正に行うために設計されたツール一式である。特に、一定期間のプロセッサ利用や割当情報を抽出することを可能にする。また、データに対して様々の演算を適用することで、テキストファイルにダンプすることが可能である。調査されたイベントのリストをこのダンプに含めることも可能であり、GTK+ライブラリをベースとした統合環境で、結果をプロットすることや、特定の検索をすることも可能。
1.2 ソフトウェア要件'''[[br]]

最もシンプルな形式では、Linux trace toolkitはどんな特定のライブラリも必要としない。適切に設定されたLinuxシステムのみが必要。ここで言うLinuxシステムとは、ヘッダファイルやソースコードおよびライブラリが存在するLinuxシステムを意味している。しかし仮にLTTがほかのOS上でコンパイル出来たり、グラフィカルな環境を利用できたとしても動作はしない。また、カーネルからデータを取得出来ない場合には明らかに役に立たない。[[br]]

2004/11/23現在においては、データ収集コンポーネントについてLinux Kernel Version 2.6.9が必要となる。しかし、本パッケージにて提供されているパッチについては、他のkernelバージョンについても適用可能かもしれない。実のところ、これは多くの方々が成功している。また、これらに関するパッチが"ExtraPaches”と呼ばれる本プロジェクトのftpディレクトリに提出されている。[[br]]
ExtraPaches
多くの場合パッチ済みカーネル(詳細は次章にて)により十分なデータ収集が可能であり、その後再起動することより他のカーネルでも結果を参照出来る。"通常"のカーネルと比較したパフォーマンスへの影響は最小限であり、通常動作時と比較したテストではパフォーマンス低下は2.5%以下であることが示されている(これはカーネルのmake処理をバッチ処理させて測定した場合)。アルゴリズム集約型タスクの場合には、性能低下への影響は限りなくゼロに近づく。またファイル集約型システムの場合(例えばtarのバッチ処理を使った場合には)性能低下は5%以下である。なお、Linuxカーネルはhttp://www.kernel.org にある。[[br]]
http://www.kernel.org
結果やダンプ出力が単にテキストファイル形式で必要な場合は特別な問題はない。しかしながら、その場合にはLTTのより強力な特徴である"プロット"と"トレース"を逃すこととなる。イベントグラフを含んだ統合環境はGTK+ライブラリにて実装されている。GTK+はhttp://www.gtk.org からfreeにダウンロード出来る。本バージョンのLTTはGTK+のversion1.2.10にてコーディングと評価がなされているが、1.2.xの任意のバージョンでおそらく問題はない。[[br]]
http://www.gtk.org
多くのLinuxディストリビューションにはGTK+のパッケージが含まれる。MandrakeとFedraCoreでは、LTTのグラフィカルな部分をビルドするために、gtk+の開発版(gtk+-develおよびlFedraCorevel)のインストールが必須となる。LTTのユーザ空間向けコンポーネントをビルドする前に、これらのパッケージがシステムにインストールされていることを確認すること。
1.3 アーキテクチャ'''[[br]]

Linux trace toolkitは以下のコンポーネントで構成されている。[[br]]

コンポーネントタスク
カーネルパッチトレースされたイベントをログ
カーネルモジュール一定上限到達時にログイベントやシグナルトレースをトレースデーモン向けに保存
トレースデーモンカーネルモジュールのバッファをリードしてディスクに保存
データデコーダイベントトレースを人が読めるフォーマットとして表示し、解析を実施する


本プロジェクトのアーキテクチャの詳細情報は、LTTのウェブサイトのDocumentation sectionを参照のこと。
1.4 リアルタイムLinuxのサポート'''[[br]]

LTTでは、通常のLinuxサポートと並行して、Linuxのリアルタイム拡張であるDIAPM RTAI(Dipartimento di Ingegneria Aerospaziale - Politecnico di Milano Real Time Application Interface)のサポートをVer.0.9.3より開始した。とはいうものの、このバージョンでは、RTAIパッチ反映カーネルをLTTと共に使用しても、RTAIに関するタスクスケジューリング判定や振る舞いについては一切記録出来なかった。現在のLTTでは、RTAI/Linuxシステムの動的振る舞いを解釈するための重要な情報を回収し、解析することが出来るようになった。最も興味深い点は、回収した情報に関するイベントグラフが図示できることである。これにより、リアルタイムLinuxシステムについて独自の見方をすることを可能にする。これはタイミングに関わる問題を分離しようとした場合に非常に有用である。
もし、RTAIを利用しておらず、利用する予定も無い場合には、LTT with RTAIに関して述べているセクションをスキップすること。


2.インストール''' → http:/urceforge.jp/projects/freshmeat_linuxtracetoolkit/howto/install を参照下さい。

3. データ収集'''( http:ww.opersys.com/ltt/dox/ltt-online-help/ltt-dataacquisition.html より)[[br]]

3.1 カーネルのプローブ'''
  • システムをリブートし、ここまでの章でビルドしたカーネルにてシステムを起動する。以降の説明は、パッチ当て済カーネルが搭載された"マシン"にroot権限でログインしていることを前提とする。(ここで言う"マシン"とは、ホストとターゲットが異なる場合には"ターゲット"マシンを指す。)[[br]]

  • 未作成の場合、relayファイルシステムをマウントするためのディレクトリを新規作成する。[[br]]

            mkdir /mnt/relay
  • relayファイルシステムをマウントする。[[br]]

            mount -t relayfs nodev /mnt/relay
    /proc/mountsファイル内にこの新しいエントリがあるかどうかで正常にマウント出来たかどうかを確認できる。

3.2 RTAIのプローブ'''[[br]]

ここで他のRTAIモジュールをインストールし、システムをトレースすることが出来る。

3.3 データの記録'''[[br]]

トレースデーモンがカーネルに記録開始イベントを通知した時点でトレースが開始する。記録を開始するには以下を実行すること。
  • トレースデーモンの開始[[br]]

            tracedaemon -tsT./out.trace ./out.proc
    out.traceファイルには生のイベントが含まれる。またトレースのデコーダにプロセス名とプロセスの階層構造を知らせることを可能にするために、out.procには/procから読み込んだ内容が含まれる。''T''にはトレースデーモンを実行したい期間を秒単位で指定する。このコマンドを指定することで、稼働の高いシステムでは1分当たり30万(30M)回out.traceファイルが使用される。X-Windowシステムが使用されない普通のワークステーションでは、この利用率は1分あたり1万(1M)以下となる。特定のイベントをースしないことで、この利用率を低減することが可能。次セクション以降で述べるトレースデーモンのコマンドラインオプションを確認すること。[[br]]

  • -tオプションを指定しない場合、手作業でトレースデーモンを停止しなければならない。通常のトレースモードでは、killコマンドを使ってTERMシグナルをデーモンに送ることでトレースが停止する。
    まずpsコマンドを使ってトレースデーモンのプロセスIDを調べる。次にこのPIDを使ってkillコマンドを実行する。[[br]]

            kill [daemon pid]
  • デーモンとデコーダを頻繁に同じ方法で何度も利用したい場合には、オプションを渡すための簡単なスクリプトを作成することが出来る。最後のセクションにて、この目的で利用可能なスクリプトを示す。


4.トレースデーモンのコマンドライン操作'''(http://www.opersys.com/ltt/dox/lhttp://www.opersys.com/ltt/dox/lonline-help/ltt-decoder-commandline.html より)
...翻訳中...

5.データデコーダのコマンドラインオプション'''(http://www.opersys.com/ltt/dox/ltt-ohttp://www.opersys.com/ltt/dox/ltt-one-help/ltt-decoder-commandline.html より)
...翻訳中...

6. グラフィカルオプション'''

6.1 Main window(http://www.opersys.com/ltt/dox/ltt-online-help/ltt-mainwindow.html より)
...翻訳中...

6.2 Open trace window(http://www.opersys.com/ltt/dox/ltt-online-help/ltt-opentracewindow.html より)
...翻訳中...

6.3 Dump to file window(http://www.opersys.com/ltt/dox/ltt-online-help/ltt-dumpwindow.html より)
...翻訳中...

6.4 Go to event ... window (http://www.opersys.com/ltt/dox/ltt-online-help/ltt-gotowindow.html より)
...翻訳中...

6.5 View time frame window(http://www.opersys.com/ltt/dox/ltt-online-help/ltt-viewtimewindow.html より)
...翻訳中...

6.6 Color configuration window(http://www.opersys.com/ltt/dox/ltt-online-help/ltt-colorwindow.html より)
...翻訳中...

7.コマンドスクリプト'''(http://www.opehttp://www.opes.com/ltt/dox/ltt-online-help/ltt-scripts.html より)
...翻訳中...
訳:佐々木勝彦(mailto:ssk.kmailto:ssk.katu@cube.ocn.ne.jp