それで、しばらくして解決策を見つけました。実際、Anthon は正しく、割り込みを送信するのは ACPI サブシステムです。 私の system 次の割り込みを無効にして、kworker-thread を落ち着かせました。
echo disable > /sys/firmware/acpi/interrupts/gpe1B
echo disable > /sys/firmware/acpi/interrupts/gpe08
しかし、これまで gpe08
からの偽の IRQ が何であるかは特定されていません。 そして gpe1B
.
(これはここではかなり話題から外れているように思えますが、これが unix.stackexchange.com に投稿した回答です。)
あなたの質問に少し答える lkml のこのスレッドを見つけました。 (Linus 自身でさえ、それらのスレッドの出所を見つける方法について困惑していたようです。)
基本的に、これを行うには 2 つの方法があります:
$ echo workqueue:workqueue_queue_work > /sys/kernel/debug/tracing/set_event
$ cat /sys/kernel/debug/tracing/trace_pipe > out.txt
(wait a few secs)
このためには、ftrace をカーネルでコンパイルする必要があります。
これは、スレッドがすべて行っていることを出力し、複数の小さなジョブをトレースするのに役立ちます。
cat /proc/THE_OFFENDING_KWORKER/stack
これは、多くの作業を行っている単一のスレッドのスタックを出力します。この特定のスレッドが CPU を占有する原因を特定できる場合があります (たとえば)。 THE_OFFENDING_KWORKER
プロセス リスト内の kworker の pid です。