Ubuntu 16.04 kworker 不断使用高 CPU

sun*_*386 9 performance system kernel 16.04

在 Ubuntu 16.04 计算机上,我看到kworker始终占用 80% 的 CPU。

我生成了一个性能报告:

  • sudo apt-get install linux-tools-common linux-tools-$(uname -r)
  • 在所有 CPU 上记录大约 10 秒的回溯 sudo perf record -g -a sleep 10
  • 用 来查看sudo perf report

前几个结果是:

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
Run Code Online (Sandbox Code Playgroud)

我不知道如何重现。重启后就消失了。到底是怎么回事?

Fra*_* P. 8

戴尔 XPS 笔记本电脑和内核 4.4.0-130 上的相同问题

我通过在内核中禁用动态 USB 电源管理来修复它

usbcore.autosuspend=-1在内核的启动命令行中添加了:

GRUB_CMDLINE_LINUX_DEFAULT="<existing stuff> usbcore.autosuspend=-1"
Run Code Online (Sandbox Code Playgroud)

并添加上述标志。

  • 接下来,您必须通过以下方式更新您的 grub

    sudo update-grub
    
    Run Code Online (Sandbox Code Playgroud)
  • 重新启动后,一切都应该没问题,忙碌的 CPU 现在可以自由做一些有用的事情了 :)

当您连接了 USB 设备时,禁用动态 PM 可能会影响电池寿命,但很少有 USB 设备能够处理这种模式......


小智 0

我曾经在戴尔笔记本电脑上遇到过类似的问题。我读到这是由于内核的错误造成的,可以通过将一些值写入 中的某个文件来刷新一些内核缓存来缓和它/sys,但我怀疑这会对您有所帮助。

我知道kworker进程不能被杀死。如果我相信 Askubuntu/Unix 上同一问题的其他答案,kworker则占位符进程对应于内核的活动。

下面提出的解决方案按照从最明显且可能产生结果(如果尚未尝试过)到不太可能产生结果的顺序进行排序。

如果您还没有这样做,我建议您将内核更新到存储库的最新可用版本 ( sudo apt update)。更新内核通常需要重启才能看到效果。

否则,您可以尝试安装 Ubuntu 18.04,其内核版本为 4.15.0-22,并且可能集成了修复程序。

如果您用谷歌搜索了您的问题,您可能已经找到了与您的描述相匹配的错误报告。您应该仔细阅读评论,它们有时包含解决方案或解决方法。下面的链接似乎与您的链接非常匹配,尽管它有点有趣,因为修复现在应该已经到达 Ubuntu 内核(评论#18)。

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1488426

当我遇到这个 bug 时,我没有尝试使用 cpu 限制应用程序,例如cpulimitor cputool( sudo apt install cpulimitor sudo apt install cputool)。我不知道这种方法是否有机会发挥作用。我怀疑它是否可以与这样的非标准流程一起工作。


uname -mr注意:只要与 Linux 内核相关,您可能希望将 的输出添加到您的问题和未来的问题中。

如果您发现有效果,请写下答案。