GNU/Linux >> Linux Esercitazione >  >> Linux

Origine di un thread kworker

Così, dopo un po' di tempo ho trovato la soluzione. In effetti Anthon ha ragione, è il sottosistema ACPI che invia gli interrupt. Su mio system ho disabilitato i seguenti interrupt e il thread kworker è stato calmato.

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

Tuttavia fino ad ora non ho identificato quali fossero gli IRQ fasulli provenienti da gpe08 e gpe1B .


(Mi sembra che questo sia piuttosto fuori tema qui, ma ecco la risposta che ho postato su unix.stackexchange.com.)

Ho trovato questo thread su lkml che risponde un po' alla tua domanda. (Sembra che anche lo stesso Linus fosse perplesso su come scoprire l'origine di quei thread.)

Fondamentalmente, ci sono due modi per farlo:

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

Per questo avrai bisogno che ftrace sia compilato nel tuo kernel.

Questo mostrerà cosa stanno facendo tutti i thread ed è utile per tracciare più piccoli lavori.

cat /proc/THE_OFFENDING_KWORKER/stack

Questo produrrà lo stack di un singolo thread facendo molto lavoro. Potrebbe consentirti di scoprire cosa ha causato questo thread specifico per monopolizzare la CPU (ad esempio). THE_OFFENDING_KWORKER è il pid del kworker nell'elenco dei processi.


Linux
  1. Cosa fa Eco $? Fare??

  2. Che cos'è un certificato SSL?

  3. Cos'è ioremap()

  4. Qual è l'uso di $# in Bash

  5. Cosa fa `set -x`?

Cos'è SSH?

Cos'è l'SFTP?

Cosa sta arrivando in GNOME 42?

Cos'è l'analfabetismo digitale?

Cos'è Termux su Android?

Qual è il modo più veloce per eseguire uno script?