Na última sexta-feira, atualizei meu servidor Ubuntu para 11.10, que agora roda com um kernel 3.0.0-12. Desde então, o desempenho geral caiu drasticamente. Antes da atualização, a carga do sistema era de cerca de 0,3, mas atualmente é de 22 a 30 em um sistema de CPU de 8 núcleos com 16 GB de RAM (10 GB gratuitos, sem troca usada).
Eu culparia o driver do sistema de arquivos BTRFS e a matriz MD subjacente, porque [md1_raid1] e [btrfs-transacti] consumiram muitos recursos. Mas todo o [kworker / *: *] consome muito mais.
sar
produziu algo semelhante a isso constantemente desde sexta-feira:
11:25:01 CPU %user %nice %system %iowait %steal %idle
11:35:01 all 1,55 0,00 70,98 8,99 0,00 18,48
11:45:01 all 1,51 0,00 68,29 10,67 0,00 19,53
11:55:01 all 1,40 0,00 65,52 13,53 0,00 19,55
12:05:01 all 0,95 0,00 66,23 10,73 0,00 22,10
E iostat
confirma uma taxa de gravação muito ruim:
sda 129,26 3059,12 614,31 258226022 51855269
sdb 98,78 24,28 3495,05 2049471 295023077
md1 191,96 202,63 611,95 17104003 51656068
md0 0,01 0,02 0,00 1980 109
A pergunta é: como rastrear por que os threads do kworker consomem tantos recursos (e qual)? Ou melhor: esse é um problema conhecido do kernel 3.0 e posso ajustá-lo com os parâmetros do kernel?
Editar:
Atualizei o Kernel para a nova versão 3.1, conforme recomendado pelos desenvolvedores do BTRFS. Mas, infelizmente, isso não mudou nada.
fonte
pcie_ports=compat
oupcie_ports=native
. (Tente 'nativo' primeiro É menos provável para corrigir o problema, mas menos provável de causar outros problemas..)Respostas:
Encontrei este tópico no lkml que responde um pouco à sua pergunta. (Parece que até o próprio Linus ficou intrigado sobre como descobrir a origem desses tópicos.)
Basicamente, existem duas maneiras de fazer isso:
Para isso, você precisará que o ftrace seja compilado no seu kernel e habilite-o com:
Mais informações sobre os recursos de rastreador de funções do Linux estão disponíveis na documentação ftrace.txt .
Isso produzirá o que todos os threads estão fazendo e é útil para rastrear vários trabalhos pequenos.
Isso produzirá a pilha de um único thread fazendo muito trabalho. Pode permitir que você descubra o que causou esse encadeamento específico para monopolizar a CPU (por exemplo).
THE_OFFENDING_KWORKER
é o pid do kworker na lista de processos.fonte
-E
opção de dormir, e o uso da CPU desapareceu!A solução é: não sei como encontrar a causa. Ninguém me disse até agora.
Mas conversar com os desenvolvedores do BTRFS revelou um erro nos drivers btrfs ao gravar muitos arquivos pequenos em um período muito curto. Este é um problema nos kernels de 3.0 até 3.1. Talvez isso seja corrigido no 3.2.
Enquanto isso, recebi um patch para o kernel atual que resolveu o problema.
fonte
Eu tive uma questão semelhante; olhando para a pilha de threads do kworker:
Eu achei que eram os módulos usb. Eu tinha anteriormente em outra máquina alegremente rmmod'd todos os módulos usb e [uex] hci percebem que havia desligado o teclado (nem mesmo ctrl-shift-sysrq-U!), Então acabei fazendo o seguinte:
fez o truque:
Então, meu principal suspeito é este dispositivo: RTL8723B * WIFI + Módulo Bluetooth. Gostaria de saber agora se o código de gerenciamento de energia percebe que é o mesmo dispositivo se tentar, por exemplo, desligar um adaptador BT não utilizado.
contexto:
fonte
echo N >/sys/module/drm_kms_helper/parameters/poll
(no modo raiz)Problema com a placa gráfica Intel
fonte