GNU/Linux >> Znalost Linux >  >> Linux

Původ kworker-vlákna

Tak jsem po nějaké době našel řešení. Ve skutečnosti má Anthon pravdu, je to subsystém ACPI, který posílá přerušení. Na můj systém Zakázal jsem následující přerušení a kworker-thread se uklidnil.

echo disable > /sys/firmware/acpi/interrupts/gpe1B
echo disable > /sys/firmware/acpi/interrupts/gpe08

Doposud jsme však nezjistili, jaká falešná IRQ pocházejí z gpe08 a gpe1B .


(Zdá se mi, že je to zde poněkud mimo téma, ale zde je odpověď, kterou jsem zveřejnil na unix.stackexchange.com.)

Našel jsem toto vlákno na lkml, které trochu odpovídá na vaši otázku. (Zdá se, že i sám Linus byl zmatený, jak zjistit původ těchto vláken.)

V zásadě existují dva způsoby, jak to udělat:

$ echo workqueue:workqueue_queue_work > /sys/kernel/debug/tracing/set_event
$ cat /sys/kernel/debug/tracing/trace_pipe > out.txt
(wait a few secs)

K tomu budete potřebovat, aby byl ftrace zkompilován ve vašem jádře.

Toto vypíše, co všechna vlákna dělají, a je to užitečné pro sledování několika malých úloh.

cat /proc/THE_OFFENDING_KWORKER/stack

Tím se vypíše zásobník jednoho vlákna, který odvede spoustu práce. Může vám to umožnit zjistit, co způsobilo, že toto konkrétní vlákno zapíchlo CPU (například). THE_OFFENDING_KWORKER je pid kworker v seznamu procesů.


Linux
  1. Co je uživatel Linuxu?

  2. Co dělá ?

  3. Co znamenají speciální postavy v Echo {a..z}?

  1. Jaké je použití $# v Bash

  2. Co dělá `set -x`?

  3. Co znamená echo $? dělat?

  1. Co je to sysadmin?

  2. Co dělá „lc_all=c“?

  3. Co dělá Echo $? Dělat??