Kworker, che cos'è e perché sta eseguendo il hogging così tanta CPU?


136

Di recente ho eseguito l'aggiornamento a Kubuntu Natty Beta 1 e ho avuto molti problemi con il processo kworker . Al momento utilizza quasi metà della mia CPU. Inoltre, stranamente sembra influenzare le mie porte USB; ogni volta che collego un'unità USB, il processo kworker entra in hyperdrive, lasciandomi incapace di funzionare.

Ho pensato di presentare un bug, ma dato che non ho nemmeno trovato una spiegazione ragionevole su quale kworker abbia pensato, avrei dovuto scoprirlo prima.


Strano, kworker è in esecuzione e contribuisce al risveglio del 10%, ma non ho programmi Kubuntu installati. Alos Nepomuk non è installato.
Dago,

1
dalla risposta di Afrazier ora penso che abbia qualcosa a che fare con il kernel (quindi il k in kworker è per il kernel). quindi è per questo che avresti anche kworker in esecuzione sul tuo computer Ubuntu.
davorao,

1
Questa risposta può anche essere utile per scoprire cosa sta facendo un kworker: unix.stackexchange.com/questions/22851/…
anarcat

1
Non avresti dovuto prendere l'ultimo aggiornamento del sistema operativo. Se sei fortunato, il prossimo lo risolverà.
Nobar,

Risposte:


109

"kworker" è un processo segnaposto per i thread di lavoro del kernel, che eseguono la maggior parte dell'elaborazione effettiva per il kernel, specialmente nei casi in cui vi sono interruzioni, timer, I / O, ecc. Questi corrispondono tipicamente alla stragrande maggioranza di qualsiasi allocato " sistema "tempo di esecuzione dei processi. Non è qualcosa che può essere rimosso in modo sicuro dal sistema in alcun modo ed è completamente estraneo a nepomuk o KDE (tranne per il fatto che questi programmi possono effettuare chiamate di sistema, il che può richiedere al kernel di fare qualcosa).

Sono stati segnalati alcuni casi di eccessiva attività di kworker per sistemi relativamente inattivi a partire dallo sviluppo 2.6.36 ( discussione di esempio ) e ampie segnalazioni di confusione e problemi con 2.6.38 (sebbene molti di questi rapporti includano la parola "Natty", quindi presumo queste persone non hanno usato alcun kernel tra 2.6.35 (distribuito in Ubuntu 10.10) e 2.6.38 (distribuito in Ubuntu 11.04).

Ho trovato molti rapporti di qualcosa che "risolto" questo per uno o un altro utente. La maggior parte delle "correzioni" sembrano essere correlate ad aggiornamenti del kernel di vario genere. Laddove l'aggiornamento può essere rintracciato a un problema specifico, spesso sembra che alcuni driver o servizi del kernel siano stati corretti per non comportarsi in modo errato: ho l'impressione che ci siano un numero molto elevato di elementi nel kernel che possono causare un comportamento che viene osservato come un uso eccessivo di kworker.

Se ritieni che il sistema sia inutilizzabile a causa dell'eccessiva attività di Kworker, consiglierei di provare a fare meno cose. Se pensi di non fare nulla, prova a chiudere i servizi o i timer di lunga durata (lettori RSS, lettori di posta, indicizzatori di file, tracker di attività, ecc.). Se non funziona, prova a riavviare. Se il tuo sistema ti consente di abilitare o disabilitare l'hardware in un ambiente di pre-avvio, prova a disattivare l'hardware che non stai utilizzando. Se succede ad ogni riavvio prima di fare qualsiasi cosa, potresti provare a disinstallare le cose, ma a questo punto ti consigliamo di eseguire strumenti di profilatura syscall per rintracciare applicazioni specifiche che sembrano causare questo sovraccarico.

Si spera che il proprio sistema specifico smetterà di esprimere questo comportamento con un futuro aggiornamento del kernel (e che molte delle cause più comuni sono state risolte).


1
Ho avuto un problema di accesso lento che penso sia correlato a questo; Riesco a risolvere il problema ritardando tutto ciò che è iniziato in questo modo: askubuntu.com/a/484856/46437
Aquarius Power

1
Forse questo è superfluo, ma complimenti per una risposta molto chiaramente articolata. È un inglese ben espresso, signore.
Jon Carter,

81

Cos'è Kworker? kworkerindica un processo del kernel Linux che fa "lavoro" (elaborazione delle chiamate di sistema). Puoi averne diversi nel tuo elenco di processi: kworker/0:1è quello sul tuo primo core della CPU, kworker/1:1quello sul tuo secondo ecc.

Perché kworker fa impazzire la tua CPU? Per scoprire perché un kworker sta sprecando la tua CPU, puoi creare backtrace della CPU: osserva il carico del tuo processore (con topo qualcosa del genere) e in momenti di carico elevato kworker, esegui echo l > /proc/sysrq-triggerper creare un backtrace. (Su Ubuntu, devi accedere con sudo -s). Fallo più volte, quindi osserva i backtrace alla fine dmesgdell'output. Guarda cosa succede di frequente nei backtrace della CPU, si spera che ti indichi alla fonte del tuo problema.

Esempio: e1000e. Nel mio caso, ho trovato un backtrace come questo quasi ogni volta:

Call Trace:
 delay_tsc+0x4a/0x80
 __const_udelay+0x2c/0x30
 e1000_acquire_swflag_ich8lan+0xa2/0x240 [e1000e]
 e1000e_read_phy_reg_igp+0x29/0x80 [e1000e]
 e1000e_phy_has_link_generic+0x85/0x120 [e1000e]
 e1000_check_for_copper_link_ich8lan+0x48/0x930 [e1000e]
 e1000e_has_link+0x55/0xd0 [e1000e]
 e1000_watchdog_task+0x5e/0x960 [e1000e]

Mi ha suggerito un problema nel e1000emodulo della scheda Ethernet, e in effetti un sudo rmmod e1000ealto carico della CPU è andato via immediatamente [ e1000e bug # 26 ].


4
echo l > /proc/sysrq-triggersembra non funzionare su proxmox dicendo sysrq: SysRq : This sysrq operation is disabled.tristemente.
hak8 o

1
sysrq deve essere riattivato con sysctl -w kernel.sysrq = 1 vedi askubuntu.com/questions/911522/…
Sebastien

Come hai capito che l'e1000 stava causando il problema? Solo perché veniva tenuto ripetuto?
onurcanbektas,

@onurcanbektas Sì - il risultato ripetuto più frequentemente è la causa più probabile. Perché i backtrace sono controlli a campione su cosa è impegnata la CPU mentre è impegnata.
tanius

70

Perché kworker impugna la tua CPU (seguito)? In alternativa alla mia altra risposta qui , Perf è un modo più professionale per analizzare quali attività del kernel stanno controllando la tua CPU:

  1. Installa perf:

    sudo apt-get install linux-tools-common linux-tools-3.11.0-15-generic
    

    (Il secondo pacchetto deve corrispondere alla versione del kernel. Puoi prima installare solo linux-tools-commone chiamare perfper dirti quale pacchetto ha bisogno.)

  2. Registra circa 10 secondi di backtrace su tutte le tue CPU:

    sudo perf record -g -a sleep 10
    
  3. Analizza la tua registrazione:

    sudo perf report
    

    (Passare il grafico chiamata con , , , e Enter.)


2
Sul mio sistema, in esecuzione all'interno di una macchina virtuale VMware, utilizzando perfho rintracciato il problema fino al sd_modmodulo del kernel. La disabilitazione di SCSI nel vmxfile ha impedito il caricamento del modulo e ha riportato il sistema alla velocità normale:scsi0.present = "FALSE"
feklee,

E: Impossibile trovare il pacchetto linux-tools-3.11.0-15-generic E: Impossibile trovare alcun pacchetto da glob 'linux-tools-3.11.0-15-generic' E: Impossibile trovare alcun pacchetto da regex 'linux-tools-3.11.0-15-generic'
Paddy,

@Paddy: Controlla di nuovo la risposta :-) "Il pacchetto [linux-tools - * - generic] deve corrispondere alla versione del tuo kernel. Puoi prima installare solo linux-tools-common e chiamare perf per farti dire quale pacchetto esigenze."
tanius

8

Solo per far sapere a tutti. Mi sono imbattuto in questo problema, ho installato perf (che è un ottimo strumento), puntava a bloccare lo spin e XFS. Ciò indicava NFS. Poi ho capito che uno dei miei supporti era fuori dallo spazio. Liberare spazio ha portato la CPU di Kworker a scendere a 0.

Quindi a quanto pare questo può essere un sintomo di rimanere senza spazio su disco su un server NFS occupato!


1
Ho notato che ho avuto un crollo di kworker durante l'esecuzione di una virtualbox specifica. Si scopre che uno stava eseguendo un NFS con il mio host per la condivisione di file. Tuttavia non era affatto pieno. Smontare NFS "risolto" il problema. Immagino che condividerò con un mount sshfs.
Programster,

4

Di recente ho installato Ubuntu Natty su un passaporto wd USB con unità esterna. Quando inizio sul mio desktop che ha circa due anni, tutto funziona come un fascino. Quando avvio sul mio nuovo laptop (sistema MSI gt680r), si rallenta dopo aver riattivato il computer dalla sospensione o se collego un altro disco USB.

I processi di Kworker richiedono sempre più CPU e il mouse si blocca di volta in volta.

Ho letto diverse soluzioni su vari forum che non hanno funzionato.

Sono andato nel bios del mio laptop, dove c'era:

Hand XCHI OFF: Enabled
EHCI Hand OFF: disabled

Ho cambiato per:

Hand XCHI OFF: disabled
EHCI Hand OFF: disabled

e da allora, non si blocca più su Natty sul mio laptop.

Vorrei abilitare la restituzione se e quando il problema viene corretto.


1
Qualcuno può spiegare perché questo accade? Come è collegato XCHI?
GuySoft,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.