Jadi, setelah beberapa waktu saya menemukan solusinya. Sebenarnya Anthon benar, itu adalah subsistem ACPI yang mengirimkan interupsi. Di saya sistem Saya menonaktifkan interupsi berikut dan kworker-thread menjadi tenang.
echo disable > /sys/firmware/acpi/interrupts/gpe1B
echo disable > /sys/firmware/acpi/interrupts/gpe08
Namun sampai sekarang belum mengidentifikasi IRQ palsu apa yang berasal dari gpe08
dan gpe1B
.
(Menurut saya ini agak di luar topik di sini, tapi inilah jawaban yang saya posting di unix.stackexchange.com.)
Saya menemukan utas ini di lkml yang sedikit menjawab pertanyaan Anda. (Tampaknya bahkan Linus sendiri bingung bagaimana cara mengetahui asal utas tersebut.)
Pada dasarnya, ada dua cara untuk melakukannya:
$ echo workqueue:workqueue_queue_work > /sys/kernel/debug/tracing/set_event
$ cat /sys/kernel/debug/tracing/trace_pipe > out.txt
(wait a few secs)
Untuk ini, Anda memerlukan ftrace untuk dikompilasi di kernel Anda.
Ini akan menampilkan semua utas yang dilakukan, dan berguna untuk melacak beberapa pekerjaan kecil.
cat /proc/THE_OFFENDING_KWORKER/stack
Ini akan menampilkan tumpukan dari satu utas yang melakukan banyak pekerjaan. Ini memungkinkan Anda untuk mengetahui apa yang menyebabkan utas khusus ini memonopoli CPU (misalnya). THE_OFFENDING_KWORKER
adalah pid dari kworker dalam daftar proses.