私のシステムはCentOS 6.3
(実行中のカーネルバージョン2.6.32-279.el6.x86_64
)です。
PCIeカードを管理するドライバーであるロード可能なカーネルモジュールがあります。OSの起動中にを使用して手動でドライバーを挿入するinsmod
と、ドライバーは正常に読み込まれ、動作します。
ただし、rpmを使用してドライバをインストールしてからシステムを再起動しようとすると、起動中にOSがスタックし、すべてのCPUコアに対して次の「ソフトロックアップ」メッセージが出力されます。私のドライバーによって作成されたスレッドの1つ。
BUG: soft lockup - CPU#X stuck for 67s! [migration/8:36]
.......(same above message for all cores except one)
BUG: soft lockup - CPU#10 stuck for 67s! [mydriver_thread/8:36]
(one core is locked up in one of the threads in my driver).
私はこのカーネルのメッセージ/バグに関する情報をネットでかなり検索しましたが、それに関する投稿はかなりありますが、原因やデバッグ方法については何もありません。次の質問についての助けをいただければ幸いです。
システムにログインできません。すべてのコアが「ソフトロックアップ」状態にあるため、シェルプロンプトからカーネルダンプをトリガーできないためだと思います。SysRqを有効にして、SysRqキーコンボを使用してカーネルダンプをトリガーしようとしましたが、うまくいきませんでした。システムがキーボードに応答していないようです(CapsLockボタンにも応答していません)。この状況でカーネルダンプをトリガーする方法について何か提案はありますか?
私のドライバースレッドが「ソフトロックアップ」を引き起こしている可能性を想像できます。しかし、私のドライバーのために、「移行」スレッド(カーネルスレッド)を「ソフトロックアップ」にするにはどうすればよいでしょうか。
ネットの閲覧から、「移行」スレッドを使用して、あるCPUから別のCPUにタスクを移動します。誰かがこのスレッドが正確に何をするのか理解するのを手伝ってもらえますか?そして、もしあったとしても、他のスレッドによってどのように影響を受ける可能性があるか。