GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ursprung eines kworker-Threads

So fand ich nach einiger Zeit die Lösung. Tatsächlich hat Anthon Recht, es ist das ACPI-Subsystem, das Interrupts sendet. Auf meinem system habe ich folgende Interrupts deaktiviert und der kworker-Thread ist beruhigt.

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

Allerdings habe ich bis jetzt nicht herausgefunden, was die falschen IRQs von gpe08 kommen und gpe1B .


(Mir scheint, das ist hier ziemlich off-topic, aber hier ist die Antwort, die ich auf unix.stackexchange.com gepostet habe.)

Ich habe diesen Thread auf lkml gefunden, der Ihre Frage ein wenig beantwortet. (Es scheint, dass sogar Linus selbst verwirrt war, wie er den Ursprung dieser Fäden herausfinden könnte.)

Grundsätzlich gibt es zwei Möglichkeiten, dies zu tun:

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

Dazu müssen Sie ftrace in Ihren Kernel kompilieren.

Dies gibt aus, was alle Threads tun, und ist nützlich, um mehrere kleine Jobs zu verfolgen.

cat /proc/THE_OFFENDING_KWORKER/stack

Dadurch wird der Stapel eines einzelnen Threads ausgegeben, der viel Arbeit macht. Es kann Ihnen helfen, herauszufinden, was diesen speziellen Thread dazu veranlasst hat, die CPU zu belasten (zum Beispiel). THE_OFFENDING_KWORKER ist die PID des kworker in der Prozessliste.


Linux
  1. Was ist ein Systemadministrator?

  2. Was ist RAID?

  3. Was ist die Verwendung von $ # in Bash

  4. Was macht "set -x"?

  5. Was bedeutet echo $? tun?

Was ist SSH?

Was ist SFTP?

Was kommt in GNOME 42?

Was ist digitaler Analphabetismus?

Was ist Termux auf Android?

Was ist der schnellste Weg, um ein Skript auszuführen?