From hiramatu @ sdl.hitachi.co.jp Thu Nov 21 11:29:44 2002 From: hiramatu @ sdl.hitachi.co.jp (Masami HIRAMATSU) Date: Thu, 21 Nov 2002 11:29:44 +0900 Subject: [Lkst-develop] LKST 1.3 lkstlogdのバグ修正 Message-ID: <3DDC4518.4030608@sdl.hitachi.co.jp> 日立の平松です。 lkstlogdに不具合があったので修正しました。 以前の修正パッチでは修正し切れなかった部分です。 添付パッチはLKST v1.3からの修正パッチになっています。 ・リソース解放手順のバグ修正 リソース解放時にマスクセットとバッファの解放の順番が逆になっているため バッファ解放を行おうとして失敗する可能性がありました。 バッファとマスクセットの解放順序を逆にして回避しました。 ・initlogコマンドとの併用時に、時々子プロセスが異常終了するバグの修正 バッファ取りこぼし警告を標準エラー出力に出そうとして、initlogがいないために エラーとなり、その時点で終了してしまいます。 バッファ取りこぼしなどの警告を、全てsyslogに出力するように変更しました。 ・プロセス監視ルーチンの強化 親プロセス、子プロセスのどちらか一方が終了したとき、もう一方も終了させます。 今回のバグの症状は、 ・initlogと一緒に使わなければ生じない。(単体では再現しない) ・高負荷状態でしか生じない。(キー入力に遅れが生じるレベルの負荷) ・いつ何が起きているかがわかりにくい。(気づいたときには子プロセスがいなくなっている) という特徴があり、実運用状態での原因究明を行わなければならなかったため、LKST自身の 機能を使ってバグ探しをしてみました。 LKSTの使い方の参考例になるかと思いますので、以下にバグ探しの手法を記します。 まず、いつ、どこで、何が起きたのかを確かめるために、lkstlogdのプロセスのログだけを 静的バッファ(リングの外のバッファ(ID=0))に記録し、そのほかのプロセスのログは、 カレントのバッファに記録するようなイベントハンドラを作りました。 このイベントハンドラをaddonドライバにして、insmodして追加しました。 次に、RDEFAULTマスクセットを読出し、defaultイベントハンドラを、先ほど作ったハンドラに 置き換えたマスクセットを、新たに登録しました。 この新しいマスクセットを使用し、lkstlogdを起動します。 この後、高負荷をかけることで症状が再現するのを待ち、再現したところで静的バッファを読み 出しました。 このとき得られたログを解析したところ、 ・子プロセスが高負荷をかけた後でいなくなっている。 ・いなくなる直前にSIGPIPEを受け取っている。 ・SIGPIPEはシステムコール番号4(write)を発行している間に発生している。 ・writeの直前に、システムコール番号3(read)を発行し、戻り値がエラー(EAGAIN)である。 ということが判りました。 子プロセスのreadコマンドは、バッファを読むために使われているので、この戻り値が エラーになったときの処理を調べると、 fprintf(stderr, "lkstlogd error: lkst device read()... と、標準エラー出力を使っていることが判りました。つまり、この標準エラー出力が破壊された ために異常終了していることがわかりました。 あとは、発生条件であるinitlogとの関係が疑われますから、initlogで簡単なデーモン(fork して親プロセスを終了させ、子プロセスはしばらくスリープした後標準エラーに出力する。)を 実行して、確かにSIGPIPEが発生していることを確認し、これをsyslogに出力するよう変更する ことで、問題を回避することが出来ました。 今回の経験から、以下の点に気づきました。 ・カーネルをリコンパイルせずに使えるのは非常に楽。 リブート無しで、カスタムイベントハンドラを追加できる。 ・今回のような複合的要因における問題解析には威力を発揮する。 initlogを使ってターミナルから切り離された環境でしか発現しないなど、 実際の動作時の問題に対応しやすい。 ・ioctlの種類が是非とも欲しい。 親プロセスのバグ解析で、ioctlを発行しながらビジーループを行っていた。 ioctlの種類がわかっていれば、LKST_IOC_BUFF_SHIFTを発行していることが すぐにわかったはず。 ・静的バッファ(リングから外れているバッファ)が一つしかないのは辛い。 子プロセスの異常終了解析で、親プロセスの分は別に取りたかったのだが、リングから 外れたバッファが一つしか無くて苦労した。リング内にあるとデーモンが上書きして 消してしまう。 ・プロセスの起動と終了イベントが欲しい。 タスクがどこで落ちているのかが判りにくい。今回はシグナルで判断しました。 ioctlについてはsystem_call_entryに渡される引数を追加するだけだと思うので、 出来るだけ早く対応したいところです。 -- 平松 雅巳(Masami HIRAMATSU) (株)日立製作所 システム開発研究所 第3部 304ユニット E-mail: hiramatu @ sdl.hitachi.co.jp Tel: 044-959-0258 (内線)8-69-3346 -------------- next part -------------- テキスト形式以外の添付ファイルを保管しました... ファイル名: lkst-1.3-logd-free_resources_and_syslog.patch.gz 型: application/x-gzip サイズ: 4613 バイト 説明: 無し URL: http://lists.sourceforge.jp/mailman/archives/lkst-develop/attachments/20021121/9f122de9/attachment.bin From hiramatu @ sdl.hitachi.co.jp Tue Nov 26 20:33:32 2002 From: hiramatu @ sdl.hitachi.co.jp (Masami HIRAMATSU) Date: Tue, 26 Nov 2002 20:33:32 +0900 Subject: [Lkst-develop] [PATCH] LKST fix runqueue deadlock problem Message-ID: <3DE35C0C.1010709@sdl.hitachi.co.jp> 日立の平松です。  lkstlogdがロック競合を起こすバグを見つけ、修正パッチを作成しました。  このパッチは私のほうでテスト済みですが、他にテストした方がいましたら、 結果を教えて下さい。 なお、添付したパッチはLKST最新バージョン(v1.3.1)に対するものです。  バグ内容は以下の通りです。  lkstlogdは、バッファが読出し可能になるまでカーネル内部でブロック されます。そしてバッファが読み出し可能になった時点で、LKSTのハン ドラがランキューをロックしてからlkstlogdを起動(wakeup)させます。  しかしランキューがロックされた状態でLKSTのハンドラが呼び出されて いる場合、wakeup中にデッドロックが生じます。  これは既知の問題であり、この問題を回避するため現在のLKSTでは、 ロック関係のイベントと同時にデーモンを使用できない仕様を採っています。 この仕様により、オリジナルのカーネル2.4.17, 19などでは問題なく 動作しています。  しかし、例えばKernelにO(1)スケジューラを採用した場合、コンテキスト スイッチのイベント発生時にもランキューがロックされるため、現在の仕様 では回避できないことがわかりました。  今回のパッチは、以下のようにLKSTの処理を変更するものです。  ハンドラではランキューのロックおよびlkstlogdのwakeupを行なわず、 フラグだけを立てる。 スケジューラ(schedule())は先頭でこのフラグを参照し、フラグが 立っていればlkstlogdをwakeupし、その後ランキューをロックする。  この方法により問題を回避することが出来ます。 それでは失礼します。 -- 平松 雅巳(Masami HIRAMATSU) (株)日立製作所 システム開発研究所 第3部 304ユニット E-mail: hiramatu @ sdl.hitachi.co.jp Tel: 044-959-0258 (内線)8-69-3346 -------------- next part -------------- テキスト形式以外の添付ファイルを保管しました... ファイル名: lkst-1.3.1-daemon_delay_waking_up.patch.gz 型: application/x-gzip サイズ: 1523 バイト 説明: 無し URL: http://lists.sourceforge.jp/mailman/archives/lkst-develop/attachments/20021126/0ccd99cd/attachment.bin -------------- next part -------------- テキスト形式以外の添付ファイルを保管しました... ファイル名: lkst-1.3.1-logd_remove_limitation.patch.gz 型: application/x-gzip サイズ: 361 バイト 説明: 無し URL: http://lists.sourceforge.jp/mailman/archives/lkst-develop/attachments/20021126/0ccd99cd/attachment-0001.bin From sugita @ sdl.hitachi.co.jp Tue Nov 26 21:12:29 2002 From: sugita @ sdl.hitachi.co.jp (Yumiko Sugita) Date: Tue, 26 Nov 2002 21:12:29 +0900 Subject: [Lkst-develop] LKST v1.3.1リリースのお知らせ Message-ID: <5.0.2.6.2.20021126205202.04928008@sdl99c> 各位  LKST(Linux Kernel State Tracer ) v1.3.1をリリースしましたので お知らせ致します。  LKSTはデバッグおよび障害解析、性能解析を目的としたカーネル 用イベントトレーサです。  今回は今までのバグFixの他、対象Linux Kernelのバージョンを v2.4.19にアップし、あわせてパッチの整理を行ないました。   LKST のバイナリ、ソース、およびドキュメントは下記の URL から 入手できます。 https://sourceforge.net/projects/lkst/ http://sourceforge.jp/projects/lkst/ http://oss.hitachi.co.jp/sdl/english/lkst.html (現在更新中) コメント、バグレポートは、下記ML までお願い致します。 lkst-develop @ lists.sourceforge.jp lkst-develop @ lists.sourceforge.net lkst-users @ lists.sourceforge.jp lkst-users @ lists.sourceforge.net 上記MLではLKST のアップデート等のお知らせも行なっています。 ――――――――――――――――――――― lkst-users ML のご購読には、下記 URL をご参照下さい。 http://lists.sourceforge.jp/mailman/listinfo/lkst-users http://lists.sourceforge.net/lists/listinfo/lkst-users LKST 開発チーム一同 *〜*〜*〜*〜*〜 Yumiko Sugita Hitachi, Ltd., Systems Development Laboratory Tel:+81-44-959-0258 Fax:+81-44-959-0855       〜*〜*〜*〜*〜* From sugita @ sdl.hitachi.co.jp Tue Nov 26 21:14:29 2002 From: sugita @ sdl.hitachi.co.jp (Yumiko Sugita) Date: Tue, 26 Nov 2002 21:14:29 +0900 Subject: [Lkst-develop] LKST v1.3.1リリースのお知らせ Message-ID: <5.0.2.6.2.20021126205341.049e5880@sdl99c> 各位  LKST(Linux Kernel State Tracer ) v1.3.1をリリースしましたので お知らせ致します。  LKSTはデバッグおよび障害解析、性能解析を目的としたカーネル 用イベントトレーサです。  今回は今までのバグFixの他、対象Linux Kernelのバージョンを v2.4.19にアップし、あわせてパッチの整理を行ないました。   LKST のバイナリ、ソース、およびドキュメントは下記の URL から 入手できます。 https://sourceforge.net/projects/lkst/ http://sourceforge.jp/projects/lkst/ http://oss.hitachi.co.jp/sdl/english/lkst.html (現在更新中) コメント、バグレポートは、下記ML までお願い致します。 lkst-develop @ lists.sourceforge.jp lkst-develop @ lists.sourceforge.net lkst-users @ lists.sourceforge.jp lkst-users @ lists.sourceforge.net 上記MLではLKST のアップデート等のお知らせも行なっています。 ――――――――――――――――――――― lkst-users ML のご購読には、下記 URL をご参照下さい。 http://lists.sourceforge.jp/mailman/listinfo/lkst-users http://lists.sourceforge.net/lists/listinfo/lkst-users LKST 開発チーム一同 *〜*〜*〜*〜*〜 Yumiko Sugita Hitachi, Ltd., Systems Development Laboratory Tel:+81-44-959-0258 Fax:+81-44-959-0855       〜*〜*〜*〜*〜*