在 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
我不知道如何重现。重启后它就消失了。发生了什么事?
答案1
同样的问题出现在 Dell XPS 笔记本电脑和内核 4.4.0-130 上
我通过禁用修复了这个问题内核中的动态USB电源管理
我usbcore.autosuspend=-1
在内核的启动命令行中添加了:
GRUB_CMDLINE_LINUX_DEFAULT="<existing stuff> usbcore.autosuspend=-1"
要永久执行此操作,请打开 grub 配置文件
sudo nano /etc/default/grub
并添加上面描述的标志。
接下来你必须通过以下方式更新你的 grub
sudo update-grub
重启后,一切都会好起来,繁忙的 CPU 现在可以自由地做一些有用的事情了 :)
当您连接 USB 设备时,禁用动态 PM 可能会影响电池寿命,但很少有 USB 设备能够处理这种模式......
答案2
我以前在戴尔笔记本电脑上也遇到过类似的问题。我了解到这是由于内核的一个错误造成的,可以通过将一些值写入某个文件来刷新一些内核缓存来解决/sys
,但我怀疑这对您没有帮助。
我知道kworker
进程无法被杀死。如果我相信 Askubuntu/Unix 上对同一问题的其他答案,那么这些kworker
进程就是与内核活动相对应的占位符进程。
下面提出的解决方案按最明显、最有可能产生结果(如果尚未尝试)到最不可能的顺序排列。
如果您还没有这样做,我建议您将内核更新到存储库的最新版本(sudo apt update
)。更新内核通常需要重新启动才能看到效果。
否则,您可以尝试安装 Ubuntu 18.04,其内核版本为 4.15.0-22 并且可能集成了修复程序。
如果您已经用 Google 搜索过您的问题,那么您可能已经找到了与您的描述相符的错误报告。您应该仔细阅读评论,它们有时包含解决方案或变通方法。下面的链接似乎与您的非常接近,但它有点令人感兴趣,因为修复现在应该已经进入 Ubuntu 内核(评论 #18)。
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1488426
当我遇到这个错误时,我没有尝试使用 CPU 限制应用程序,例如cpulimit
或cputool
(sudo apt install cpulimit
或sudo apt install cputool
)。我不知道这种方法是否有可能奏效。我怀疑它能否在这种非标准流程中发挥作用。
注意:您可能希望将输出添加uname -mr
到您的问题以及与 Linux 内核相关的未来问题中。
如果发现某些有用的方法,请写下答案。