System Recorder
航空機にはFlight Recorderがあり、自動車にはDrive Recorderがあるように、コンピューターシステム上で、システムやアプリケーションの動作をある時間(例えば5分間)リングバッファーを使って常に記録することができれば、障害が起きた時にその直前にシステム内で何が起こっていたのかを調べる事ができ、原因究明に大いに役に立ちます。そのための仕組みをDEOS ProjectではSystem Recorderと呼んでいます。
市販のVM (仮想マシン)の中にはRecord/Replay機能を実装しているものもあります。これを使えばシステム全体の実行結果を記録するだけでなく、再現実行もできるため、System Recorderとしては非常に有用です。
再現実行はできなくても、記録だけは取りたいと言う場合には、Linuxではltraceやstraceコマンドを使ってSystem Recorderを作る事ができます。これらのコマンドを使えばライブラリやシステムコールの呼び出しを簡単に記録することができ、アプリケーションの動作を解析する手掛かりを得ることができます。しかし、これらのコマンドは常時使用することを前提としておらず、長時間使用すると出力ファイルが巨大になったり、マルチ・プロセスのアプリケーションに対して使用すると単一プロセスのltraceが処理性能のボトルネックになったりする場合があります。私たちは、これらを回避して、System Recorderを実現するためのコマンドへの変更を検討・実装しました。以下に、ltraceコマンドに対する修正(patch)を公開します。
ltraceのpatch
ここでは、簡易的なSystem Recorderとしてltraceを常時使用するために、ltraceを修正するpatchファイルを公開します。出力ファイルサイズの制限とマルチ・プロセス化の修正が適用されます。
ltrace-0.5.3にpatchファイルを適用すると、以下の2つのコマンドオプションが使用可能になります。
-m size
出力ファイルの最大サイズをKB単位で指定します。-oで出力ファイル名を指定した場合のみ有効です。
-M
トレース対象プログラムがforkすると、ltraceもforkします。-f (子プロセスをトレースする)が指定されているものとします。合わせて-o FileNameを指定した場合には、子プロセスの出力ファイルはFileName.PIDになります。
ダウンロード
ライセンス
ltraceのライセンスに従ってください。