0

Linuxカーネルでロックを保持しているモジュールを監視することは可能ですか?

spin_lock誰が、などをロックしているかをどうやって知ることができるかということですsemaphoremutex

ユーザー空間の場合:

Linux: 特定のロックを保持しているスレッドを見つけるにはどうすればよいですか?

4

1 に答える 1

1

通常、ソフト ロックアップが検出されると、カーネルは現在のスタック トレースを出力します。例えば:

INFO: task bdi-default:19 blocked for more than 120 seconds.
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
bdi-default   D 0000000000000001     0    19      2 0x00000000
ffff88013cd7fc60 0000000000000046 ffff88013cd7fc10 ffffffff810096f0
ffff88013806f4f8 0000000000000000 0000000000d7fc20 ffff880028313b40
ffff88013cd7b0b8 ffff88013cd7ffd8 000000000000f4e8 ffff88013cd7b0b8
Call Trace:
[<ffffffff810096f0>] ? __switch_to+0xd0/0x320
[<ffffffff814eca40>] ? thread_return+0x4e/0x77e
[<ffffffff814ed8c5>] schedule_timeout+0x215/0x2e0
[<ffffffff814ed543>] wait_for_common+0x123/0x180
[<ffffffff8105fa50>] ? default_wake_function+0x0/0x20
[<ffffffff814ed65d>] wait_for_completion+0x1d/0x20
[<ffffffff810909f9>] kthread_create+0x99/0x120
[<ffffffff81134d40>] ? bdi_start_fn+0x0/0x100
[<ffffffff8100bc0e>] ? apic_timer_interrupt+0xe/0x20
[<ffffffff81134bb7>] bdi_forker_task+0x187/0x310
[<ffffffff81134a30>] ? bdi_forker_task+0x0/0x310
[<ffffffff81090886>] kthread+0x96/0xa0
[<ffffffff8100c14a>] child_rip+0xa/0x20
[<ffffffff810907f0>] ? kthread+0x0/0xa0
[<ffffffff8100c140>] ? child_rip+0x0/0x20

コール トレースで十分な情報が得られない場合は、カーネルでロックアップ検出を有効にしてみてください (カーネルの再コンパイルが必要です)。

 make menuconfig
         \--> Kernel Hacking
           \--> Detect Soft Lockups

次に、コール トレースには、次の情報から始まる詳細情報が表示されます。

BUG: soft lockup detected on CPU#0!

コール トレースを表示するには、dmesg を確認するか、シリアル コンソールを使用してすべてのカーネル ログを取得することをお勧めします (場合によっては、ソフト ロックアップが原因で、すべてのログをファイルに出力せずにカーネルがハングすることがありますが、シリアル制御が必要です -または netconsole などの他の代替手段 - ログをキャッチできます)。

于 2013-01-03T04:36:00.263 に答える