Linuxカーネルデッドロック検出
2256 ワード
D状態検出
その核心思想は、カーネルモニタリングプロセスの循環モニタリングがD状態にある各プロセス(タスク)を作成することである.
カーネル構成:CONFIG_DETECT_HUNG_TASK
プロセスがD状態に入る時間が120秒を超えた後に印刷する
印刷を閉じる:echo 0>/proc/sys/kernel/hung_task_timeout_secs
手動で検出し、topまたはpsでプロセスステータスを表示し、コマンドcat/proc/pid/statusを使用してステータス:State:D(disk sleep)、スタック情報を表示することもできます:cat/proc/pid/stack
R状態検出
CONFIG_LOCKUP_DETECTOR=y
R状態の引っ掛かり状態はしばらく再現されていない.
拡張
CONFIG_DEBUG_SPINLOCK=y spinlockの未初期化使用などの問題を検出します.NMI watchdogと組み合わせて使用すると、spinlockデッドロックが見つかります.
CONFIG_DEBUG_MUTEXES=yはmutexエラーを検出して報告する
その核心思想は、カーネルモニタリングプロセスの循環モニタリングがD状態にある各プロセス(タスク)を作成することである.
カーネル構成:CONFIG_DETECT_HUNG_TASK
Kernel hacking --->
[*] Detect Hung Tasks
(120) Default timeout for hung task detection (in seconds) (NEW)
[ ] Panic (Reboot) On Hung Tasks (NEW)
プロセスがD状態に入る時間が120秒を超えた後に印刷する
INFO: task sync:16015 blocked for more than 120 seconds.
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
sync D c0512378 0 16015 1807 0x00000000
[] (__schedule+0x1d0/0x414) from [] (io_schedule+0x64/0x8c)
[] (io_schedule+0x64/0x8c) from [] (sleep_on_page+0x8/0x10)
[] (sleep_on_page+0x8/0x10) from [] (__wait_on_bit+0x78/0xb0)
[] (__wait_on_bit+0x78/0xb0) from [] (wait_on_page_bit+0xb4/0xbc)
[] (wait_on_page_bit+0xb4/0xbc) from [] (filemap_fdatawait_range+0xd4/0x130)
[] (filemap_fdatawait_range+0xd4/0x130) from [] (filemap_fdatawait+0x38/0x40)
[] (filemap_fdatawait+0x38/0x40) from [] (sync_inodes_sb+0x108/0x13c)
[] (sync_inodes_sb+0x108/0x13c) from [] (iterate_supers+0xa4/0xec)
[] (iterate_supers+0xa4/0xec) from [] (sys_sync+0x34/0x9c)
[] (sys_sync+0x34/0x9c) from [] (ret_fast_syscall+0x0/0x30)
印刷を閉じる:echo 0>/proc/sys/kernel/hung_task_timeout_secs
手動で検出し、topまたはpsでプロセスステータスを表示し、コマンドcat/proc/pid/statusを使用してステータス:State:D(disk sleep)、スタック情報を表示することもできます:cat/proc/pid/stack
R状態検出
Kernel hacking --->
-*- Kernel debugging
[*] Detect Hard and Soft Lockups
[ ] Panic (Reboot) On Soft Lockups
CONFIG_LOCKUP_DETECTOR=y
R状態の引っ掛かり状態はしばらく再現されていない.
拡張
CONFIG_DEBUG_SPINLOCK=y spinlockの未初期化使用などの問題を検出します.NMI watchdogと組み合わせて使用すると、spinlockデッドロックが見つかります.
CONFIG_DEBUG_MUTEXES=yはmutexエラーを検出して報告する