Ubuntu 16.04 kworker usando alta CPU constantemente

2

No computador do Ubuntu 16.04, vi kworker ocupar 80% da CPU, de forma consistente.

Gerei um relatório perf:

  • sudo apt-get install linux-tools-common linux-tools-$(uname -r)
  • Registre 10 segundos de backtraces em todas as CPUs sudo perf record -g -a sleep 10
  • Veja com sudo perf report .

Os primeiros resultados são:

Samples: 47K of event 'cycles:ppp', Event count (approx.): 38282161158
  Children      Self  Command          Shared Object                  Symbol
+   77.04%     0.00%  kworker/3:3      [kernel.kallsyms]              [k] ret_from_fork
+   77.04%     0.00%  kworker/3:3      [kernel.kallsyms]              [k] kthread
+   77.04%     0.00%  kworker/3:3      [kernel.kallsyms]              [k] worker_thread
+   77.00%     0.13%  kworker/3:3      [kernel.kallsyms]              [k] process_one_work
+   76.26%     0.04%  kworker/3:3      [kernel.kallsyms]              [k] rpm_idle
+   75.98%     0.06%  kworker/3:3      [kernel.kallsyms]              [k] rpm_suspend
+   75.97%     0.03%  kworker/3:3      [kernel.kallsyms]              [k] pm_runtime_work
+   75.84%     0.03%  kworker/3:3      [kernel.kallsyms]              [k] __rpm_callback
+   75.82%     0.01%  kworker/3:3      [kernel.kallsyms]              [k] usb_runtime_idle
+   75.76%     0.00%  kworker/3:3      [kernel.kallsyms]              [k] __pm_runtime_suspend
+   75.64%     0.00%  kworker/3:3      [kernel.kallsyms]              [k] rpm_callback
+   75.61%     0.04%  kworker/3:3      [kernel.kallsyms]              [k] usb_runtime_suspend
+   75.51%     0.03%  kworker/3:3      [kernel.kallsyms]              [k] usb_suspend_both
+   73.51%     0.15%  kworker/3:3      [kernel.kallsyms]              [k] usb_control_msg
+   71.97%     0.14%  kworker/3:3      [kernel.kallsyms]              [k] usb_start_wait_urb
+   68.38%     0.05%  kworker/3:3      [kernel.kallsyms]              [k] usb_submit_urb
+   68.33%     0.30%  kworker/3:3      [kernel.kallsyms]              [k] usb_submit_urb.part.8
+   67.75%     0.82%  kworker/3:3      [kernel.kallsyms]              [k] usb_hcd_submit_urb
+   60.96%    60.41%  kworker/3:3      [kernel.kallsyms]              [k] xhci_hub_control
+   55.99%     0.12%  kworker/3:3      [kernel.kallsyms]              [k] hub_suspend
+   54.97%     0.04%  kworker/3:3      [kernel.kallsyms]              [k] set_port_feature
+   19.36%     0.01%  kworker/3:3      [kernel.kallsyms]              [k] usb_resume_interface.isra.8
+   19.35%     0.02%  kworker/3:3      [kernel.kallsyms]              [k] hub_resume
+   19.32%     0.14%  kworker/3:3      [kernel.kallsyms]              [k] hub_activate
+   18.78%     0.08%  kworker/3:3      [kernel.kallsyms]              [k] hub_ext_port_status
+   11.13%     0.00%  ksoftirqd/3      [kernel.kallsyms]              [k] ret_from_fork
+   11.13%     0.00%  ksoftirqd/3      [kernel.kallsyms]              [k] kthread
+   10.44%     0.51%  ksoftirqd/3      [kernel.kallsyms]              [k] smpboot_thread_fn

Eu não sei como reproduzir. Ele desaparece depois de uma reinicialização. O que está acontecendo?

    
por sunapi386 08.06.2018 / 20:08

2 respostas

2

O mesmo problema aqui em um laptop Dell XPS e no kernel 4.4.0-130

Eu consertei desativando gerenciamento dinâmico de energia USB no kernel

Eu adicionei usbcore.autosuspend=-1 à linha de comando de inicialização do meu kernel:

GRUB_CMDLINE_LINUX_DEFAULT="<existing stuff> usbcore.autosuspend=-1"
  • Para fazer isso permanentemente, abra o arquivo de configuração do grub

    sudo nano /etc/default/grub
    

e adicione o sinalizador descrito acima.

  • Em seguida, você precisa atualizar seu grub via

    sudo update-grub
    
  • Após a reinicialização, tudo deve ficar bem, a CPU ocupada agora está livre para fazer algo útil:)

Desativar a MP dinâmica pode afetar a vida útil da bateria quando você tem dispositivos USB conectados, mas poucos dispositivos USB conseguem lidar com esse modo ....

    
por Francois P. 12.07.2018 / 15:26
0

Eu costumava ter um problema semelhante em um laptop Dell. Eu li que era devido a um bug do kernel e poderia ser temperado ao liberar algum cache do kernel escrevendo alguns valores em algum arquivo em /sys , mas eu duvido que isto irá ajudá-lo.

Eu sei que kworker processos não podem ser mortos. Se eu quiser acreditar em outras respostas para a mesma pergunta no Askubuntu / Unix, kworker são processos de espaço reservado correspondentes à atividade do kernel.

As soluções propostas abaixo são as mais óbvias e provavelmente produzirão resultados (se ainda não testadas), para as menos prováveis.

Caso você ainda não o tenha feito, sugiro que você atualize seu kernel para a última versão disponível dos repositórios ( sudo apt update ). A atualização do kernel geralmente requer uma reinicialização para ver o efeito.

Caso contrário, você pode tentar instalar o Ubuntu 18.04, cuja versão do kernel é a 4.15.0-22 e provavelmente integra uma correção.

Se você pesquisou sua pergunta no Google, provavelmente já encontrou relatórios de erros correspondentes à sua descrição. Você deve ler os comentários que às vezes contêm soluções ou soluções alternativas. O link abaixo parece combinar muito com o seu, embora seja um pouco intrigante porque a correção já deveria ter chegado ao kernel do Ubuntu (comentário # 18).

link

Algo que eu não tentei quando encontrei o bug estava usando o aplicativo limitador de cpu como cpulimit ou cputool ( sudo apt install cpulimit ou sudo apt install cputool ). Não tenho idéia se há alguma chance de que essa abordagem funcione. Duvido que possa funcionar com um processo não padrão.

Nota: Você pode querer adicionar a saída de uname -mr à sua pergunta e futuras perguntas sempre que estiver relacionada ao kernel do Linux.

Escreva uma resposta se encontrar algo em funcionamento.

    
por Mathieu CAROFF 08.06.2018 / 22:53