DEBUG HACKS 5章 実践カーネルでバッグ

0
Shinichi Tokunaga @deepneko

DEBUG HACKS 5章の実践カーネルデバッグを真面目に読んでみている。

2011-02-20 13:28:00
Shinichi Tokunaga @deepneko

hack33は「dump見てパニックするまでの処理確認しました→既知事例でした→糸冬」微妙。

2011-02-20 13:31:08
Shinichi Tokunaga @deepneko

hack34「再現用に作ったカーネルモジュールでパニックしました→そもそも自分の作ったカーネルモジュールの排他処理に問題がありました」なにこれ。

2011-02-20 13:33:50
Shinichi Tokunaga @deepneko

hack35 「ソース見たら排他処理で怪しいところがあって、パス1とパス2を通るプロセスが同時に動いてたらそのうち不整合が起こるんじゃね?→再現できた→新しいパッチの修正バックポートすれば治るじゃん」やっぱり既知事例

2011-02-20 13:52:01
Shinichi Tokunaga @deepneko

hack36 「特定のタイミングでcore dumpすると、スレッドのpendingフラグがクリアされないことがあって、スレッドがCPU占有しちゃうことがあるよ!→gitツリーからパッチを探したらあったよ!」やっぱり既知事例。

2011-02-20 16:51:23
Shinichi Tokunaga @deepneko

今のところダンプ解析〜再現までが全て、みたいな感じの内容。まぁ実際そうなんだよなー。再現さえすれば最終的になんとかなるからなー。

2011-02-20 16:52:35
Shinichi Tokunaga @deepneko

デッドロックしてる状態をストールって言ってるな。ハングのほうがしっくり来るのだが。

2011-02-20 16:55:11
Shinichi Tokunaga @deepneko

hack37 spin_lock中のdumpを見ただけ。

2011-02-20 17:45:48
Shinichi Tokunaga @deepneko

hack38 「割り込み禁止状態だったんだけど、ロックとったまま処理の延長で割り込み許可しちゃうパスを発見!→同じIRQ割り込みが来たら同じロック獲得しようとしてデッドロックするね→パッチがあったよ」やっぱり既知事例。

2011-02-20 17:51:28
Shinichi Tokunaga @deepneko

hack39は途中でアセンブラを読むところが完全に省略されてるな……スタックで4つ前の関数の引数をさらっと「このレジスタに入ってます」って書くなよ。

2011-02-20 18:21:41
Shinichi Tokunaga @deepneko

え?pidだけでプロセスがオープンしてるファイル簡単に分かるのLinuxって。

2011-02-20 18:23:44
Shinichi Tokunaga @deepneko

kdumpってユーザランドの情報も入ってんのか?

2011-02-20 18:24:31
Shinichi Tokunaga @deepneko

セマフォは読み込みと書き込みでセットなんだなー。

2011-02-20 18:42:08
Shinichi Tokunaga @deepneko

hack39 「一番最初に応答のなくなったユーザスレッドを見たら、ページフォルト処理の延長でセマフォを取得しようとしてたよ→他のユーザスレッド(同じプロセス)と競合してデッドロック→パッチあったよ」やっぱり既知事例。

2011-02-20 18:44:25
Shinichi Tokunaga @deepneko

IPMI watchdogってハング検出してタイムアウトでdump取ってくれるんか。ハートビートいらずやな。

2011-02-20 18:50:39
Shinichi Tokunaga @deepneko

hack40 「dumpからpanicのパスを確認しても原因がよくわからなかったんだけど、プロセスのutime見たら同じプロセスがユーザ空間で50秒以上動きつづけてたよアプリケーションが悪そうだね」微妙や。

2011-02-20 19:25:34
Shinichi Tokunaga @deepneko

あと2つか。気づいたら読みふけってるな。

2011-02-20 19:26:46
Shinichi Tokunaga @deepneko

hack41 「flashメモリに対するddをstraceでながめてたらwrite処理で時間がかかってることが分かったよ→writeの書き込み完了待ち時に呼ばれるsleepの初期値がでかすぎ」

2011-02-20 19:49:28
Shinichi Tokunaga @deepneko

hack42 「VLANでTCP通信するとCPU負荷が高くなるからoprofile解析したよ→カーネルでやらなそうなチェックサム計算に時間かかってたよ→VLANデバイスに物理デバイスの設定が引き継がれてなくて変なパス通っちゃってたよ→コミュにメールしたら治してくれたよ」

2011-02-20 20:09:49
Shinichi Tokunaga @deepneko

最後の最後で新規バグでした。5章 実践カーネルデバッグ編終了。

2011-02-20 20:10:28
Shinichi Tokunaga @deepneko

6章にはValgrindの使い方とか乗ってるなー。まぁいいか。いつか読むかもしれない。

2011-02-20 20:11:25