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

136

Atualizei recentemente para o Kubuntu Natty Beta 1 e tenho tido muitos problemas com o processo kworker . Em alguns momentos, ele 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 hiperdrive, deixando-me incapaz de trabalhar.

Eu pensei em registrar um bug, mas desde que eu ainda não encontrei nenhuma explicação razoável sobre o que é o kworker , achei que deveria descobrir primeiro.

davorao
fonte
Estranho, o kworker está rodando e contribuindo com as ativações em 10%, mas não tenho programas Kubuntu instalados. Alos Nepomuk não está instalado.
dago 9/06/11
1
pela resposta de afrazier, acho que agora tem algo a ver com o kernel (então o k no kworker é para o kernel). é por isso que você também teria o kworker rodando na sua máquina Ubuntu.
Davorao
1
Esta resposta também pode ser útil para descobrir o que um kworker está fazendo: unix.stackexchange.com/questions/22851/…
anarcat
1
Você não deveria ter feito a última atualização do sistema operacional. Se você tiver sorte, o próximo irá corrigi-lo.
Nobar

Respostas:

109

"kworker" é um processo de espaço reservado para os threads de trabalho do kernel, que executam a maior parte do processamento real do kernel, especialmente nos casos em que há interrupções, temporizadores, E / S, etc. Isso normalmente corresponde à grande maioria de todos os " sistema "tempo para executar processos. Não é algo que possa ser removido com segurança do sistema de forma alguma e não tem nenhuma relação com o nepomuk ou o KDE (exceto pelo fato de que esses programas podem fazer chamadas do sistema, o que pode exigir que o kernel faça alguma coisa).

Houve alguns relatos de atividade excessiva do kworker para sistemas relativamente inativos, iniciados durante o desenvolvimento da 2.6.36 ( discussão de exemplo ), e amplos relatórios de confusão e problemas com a 2.6.38 (embora muitos desses relatórios incluam a palavra "Natty", presumo que essas pessoas não usaram 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 serviço de driver ou kernel que foi corrigido para não se comportar mal: Tenho a impressão de que há um número muito grande de coisas no kernel que podem causar um comportamento que é observado como uso excessivo do trabalhador.

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 serviços ou timers de longa duração (leitores de RSS, de correio, indexadores de arquivos, rastreadores de atividades 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 ocorrer em todas as reinicializações antes de você fazer qualquer coisa, tente desinstalar as coisas, mas nesse momento você desejará executar as ferramentas de perfil syscall para rastrear aplicativos específicos que parecem estar causando essa sobrecarga.

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

Emmet Hikory
fonte
1
Eu tive um problema de login lento que acho que está relacionado a isso; Eu consigo contornar isso atrasando tudo o que é iniciado dessa maneira: askubuntu.com/a/484856/46437
Aquarius Power
1
Talvez isso seja supérfluo, mas parabéns por uma resposta muito claramente articulada. Isso é um inglês finamente expresso, senhor.
Jon Carter
81

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

Por que o kworker monopoliza sua CPU? Para descobrir por que um kworker está desperdiçando sua CPU, você pode criar backtraces da CPU: observe o carregamento do processador (com topou algo assim) e, em momentos de alta carga kworker, execute echo l > /proc/sysrq-triggerpara criar um backtrace. (No Ubuntu, é necessário que você faça login sudo -s). Faça isso várias vezes e, em seguida, observe os rastreamentos no final da dmesgsaída. Veja o que acontece com frequência nos backtraces da CPU, espero que aponte para a fonte 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 e1000emódulo da placa Ethernet e, de fato, sudo rmmod e1000efez com que a alta carga da CPU desaparecesse imediatamente [ e1000e bug # 26 ].

tanius
fonte
4
echo l > /proc/sysrq-triggerparece não funcionar no proxmox dizendo sysrq: SysRq : This sysrq operation is disabled.tristemente.
hak8or
1
sysrq precisa ser reativado com sysctl -w kernel.sysrq = 1 ver askubuntu.com/questions/911522/...
Sebastien
Como você entendeu que o e1000 estava causando o problema? Só porque estava sendo repetido?
onurcanbektas 15/07
@onurcanbektas Sim - o resultado repetido com mais frequência é a causa mais provável. Porque os backtraces são verificações pontuais com o que a CPU está ocupada enquanto está monopolizada.
tanius 16/07
70

Por que o kworker monopoliza sua CPU (continuação)? Como alternativa à minha outra resposta aqui , o Perf é uma maneira mais profissional de analisar quais tarefas do kernel estão sobrecarregando sua CPU:

  1. Instalar 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 instalar primeiro apenas linux-tools-commone ligar perfpara que ele informe qual pacote ele precisa.)

  2. Grave 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
    

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

tanius
fonte
2
No meu sistema, rodando dentro de uma máquina virtual VMware, perfusei o rastreamento do problema até o sd_modmódulo do kernel. A desativação do SCSI no vmxarquivo impediu o carregamento do módulo e o sistema voltou à velocidade normal:scsi0.present = "FALSE"
feklee
E: Não foi possível localizar o pacote linux-tools-3.11.0-15-generic E: Não foi possível encontrar nenhum pacote pela glob 'linux-tools-3.11.0-15-generic' E: Não foi possível encontrar nenhum pacote pelo regex 'linux-tools-3.11.0-15-generic'
Paddy
@Paddy: Por favor, verifique a resposta novamente :-) "O pacote [linux-tools - * - generic] deve corresponder à sua versão do kernel. Você pode primeiro instalar apenas o linux-tools-common e chamar perf para que ele informe qual pacote necessidades ".
tanius 27/02
8

Apenas para que todos saibam. Corri para este problema, instalado perf (que é uma ótima ferramenta), apontou para bloqueio de rotação e XFS. Isso apontou para o NFS. Então percebi que uma das minhas montarias estava sem espaço. A liberação de espaço fez com que a CPU do kworker caísse para 0.

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

Erik Aronesty
fonte
1
Percebi que tive um colapso do Kworker quando uma caixa virtual específica estava sendo executada. Acontece que um estava executando um NFS com meu host para compartilhar arquivos. No entanto, estava longe de estar cheio. A desmontagem do NFS "resolveu" o problema. Acho que vou compartilhar com uma montagem sshfs.
Programster
4

Eu instalei recentemente o Ubuntu Natty em um drive USB externo wd passport. Quando inicio na área de trabalho, que tem cerca de dois anos, tudo funciona como um encanto. Quando inicio o meu novo laptop (sistema MSI gt680r), ele fica mais lento depois que o computador é desligado, ou se eu conecto outro disco USB.

Os processos do Kworker exigem 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.

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, não congela mais no natty do meu laptop.

Eu habilitaria a devolução se e quando o problema for corrigido.

CedCannes
fonte
1
Alguém pode explicar por que isso acontece? Como o XCHI está conectado?
27517 GuySoft
0

Acho que desabilitar o Nepomuk pode ajudá-lo:

http://www.freetechie.com/blog/disable-nepomuk-desktop-search-on-kde-4-4-2-kubuntu-lucid-10-04/

Extender
fonte
obrigado, mas já instalei uma nova cópia do Kubuntu 11.04 e o problema mencionado anteriormente desapareceu.
Davorao 6/05
1
Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
fossfreedom