Kworker, o que é e por que está sobrecarregando tanto CPU?

127

Atualizei recentemente para o Kubuntu Natty Beta 1 e tenho tido muitos problemas com o processo kworker . Em alguns momentos usa quase metade da minha CPU. Além disso, estranhamente parece afetar minhas portas USB; sempre que eu conecto uma unidade USB, o processo kworker entra no hyperdrive, deixando-me incapaz de trabalhar.

Eu pensei em arquivar um bug, mas como ainda não encontrei nenhuma explicação razoável sobre o kworker , imaginei que deveria descobrir primeiro.

    
por davorao 05.04.2011 / 15:57

6 respostas

106

"kworker" é um processo de espaço reservado para threads de trabalho do kernel, que executam a maior parte do processamento real do kernel, especialmente em casos onde há interrupções, timers, E / S etc. Eles normalmente correspondem à grande maioria dos qualquer tempo de "sistema" alocado para executar processos. Não é algo que possa ser removido com segurança do sistema de qualquer forma, e é completamente não relacionado ao nepomuk ou ao KDE (exceto que esses programas podem fazer chamadas ao sistema, o que pode requerer que o kernel faça alguma coisa).

Houve alguns relatos de atividade excessiva de kworker por relativamente sistemas inativos iniciando durante o desenvolvimento 2.6.36 ( discussão de exemplo ), e relatos amplos de confusão e problemas com o 2.6 .38 (embora muitos desses relatórios incluam a palavra "Natty", então presumo que essas pessoas não tenham usado nenhum kernel entre 2.6.35 (distribuído no Ubuntu 10.10) e 2.6.38 (distribuído no Ubuntu 11.04).

Encontrei muitos relatórios de algo que "corrigiu" isso para um ou outro usuário. A maioria das "correções" parece estar relacionada a atualizações do kernel de vários tipos. Onde a atualização pode ser rastreada para um problema específico, muitas vezes parece haver algum driver ou serviço de kernel que foi corrigido para não se comportar mal: tenho a impressão de que há um grande número de coisas no kernel que podem causar um comportamento que é observado como uso excessivo de kworker.

Se você achar o sistema inutilizável devido à atividade excessiva do kworker, eu recomendaria tentar fazer menos coisas. Se você acha que não está fazendo nada, tente desligar os serviços de longa duração ou os timers (leitores de RSS, leitores de email, indexadores de arquivos, rastreadores de atividade, etc.). Se isso não funcionar, tente reiniciar. Se o seu sistema permitir ativar ou desativar o hardware em um ambiente de pré-inicialização, tente desativar o hardware que você não está usando. Se isso acontecer a cada reinicialização antes de fazer qualquer coisa, você pode tentar desinstalar as coisas, mas neste ponto você vai querer estar executando ferramentas de criação de perfil syscall para rastrear aplicativos específicos que parecem estar causando essa sobrecarga.

Espera-se que o seu sistema específico pare de expressar esse comportamento com uma atualização futura do kernel (e muitas das causas mais comuns foram resolvidas).

    
por Emmet Hikory 08.07.2011 / 12:44
77

O que é kworker? kworker significa que um processo de kernel do Linux faz "trabalho" (processamento de chamadas do sistema). Você pode ter vários deles em sua lista de processos: kworker/0:1 é o único no seu primeiro núcleo de CPU, kworker/1:1 o seu segundo, etc.

Por que o kworker usa sua CPU? Para descobrir por que um kworker está desperdiçando sua CPU, você pode criar backtraces da CPU: observe a carga do seu processador (com top ou algo assim) e em momentos de alta carga através de kworker , execute echo l > /proc/sysrq-trigger para criar um backtrace. (No Ubuntu, isso requer que você faça o login com sudo -s ). Faça isso várias vezes e, em seguida, observe os rastreamentos finais no final de dmesg output. Veja o que acontece com frequência nos backtraces da CPU, esperamos que você indique a origem do seu problema.

Exemplo: e1000e. No meu caso, encontrei um backtrace assim quase todas as vezes:

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]

Isso me indicou um problema no módulo de cartão e1000e Ethernet e, de fato, um sudo rmmod e1000e fez com que a alta carga de CPU desaparecesse imediatamente [ e1000e bug # 26 ].

    
por tanius 17.02.2014 / 03:42
67

Por que o kworker usa sua CPU (cont.)? Como uma alternativa para minha outra resposta aqui , Perf é uma maneira mais profissional de analisar quais tarefas do kernel estão monopolizando o seu CPU:

  1. Instale perf :

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

    (O segundo pacote deve corresponder à sua versão do kernel. Você pode primeiro instalar apenas linux-tools-common e chamar perf para permitir que ele lhe diga de qual pacote ele precisa.)

  2. Registre cerca de 10 segundos de backtraces em todas as suas CPUs:

    sudo perf record -g -a sleep 10
    
  3. Analise sua gravação:

    sudo perf report
    

    (Navegue no gráfico de chamadas com , , , e Enter .

por tanius 17.02.2014 / 16:26
8

Só para que todos saibam. Eu me deparei com esse problema, instalei o perf (que é uma ótima ferramenta), ele apontou para spin locking e XFS. Isso apontou para o NFS. Então percebi que uma das minhas montarias estava sem espaço. Libertar espaço fez com que a CPU do kworker caísse para 0.

Então, aparentemente, isso pode ser um sintoma de ficar sem espaço em disco em um servidor NFS ocupado!

    
por Erik Aronesty 19.03.2014 / 14:40
4

Eu instalei recentemente o Ubuntu Natty em um drive externo usb wd passport. Quando eu começo na minha área de trabalho, que tem cerca de dois anos, tudo funciona como um encanto. Quando eu começo no meu novo laptop (sistema MSI gt680r), ele diminui depois que eu acordei o computador do sono, ou se eu ligar outro disco usb.

Os processos do Kworker consomem cada vez mais cpu, e o mouse congela de tempos em tempos.

Eu li várias soluções em vários fóruns que não funcionaram.

Eu entrei no bios do meu laptop, onde havia:

Hand XCHI OFF: Enabled
EHCI Hand OFF: disabled

Eu mudei para:

Hand XCHI OFF: disabled
EHCI Hand OFF: disabled

e desde então, ele não congela mais no meu laptop.

Eu habilitaria a mão de volta se e quando o problema for corrigido.

    
por CedCannes 01.07.2011 / 11:08
0

Acho que desativar o Nepomuk pode ajudar você:

link

    
por Extender 06.05.2011 / 08:02

Tags