Kworker,它是什么,为什么它会占用这么多CPU?

我最近升级到了Kubuntu Natty Beta 1,而且我在过程kworker上遇到了很多问题。 在瞬间,它几乎占用了我一半的CPU。 另外,奇怪的是它似乎影响了我的USB端口; 每当我插入USB驱动器时,进程kworker进入超级驱动器,让我无法工作。

我已经考虑过提交一个错误,但由于我甚至没有找到任何关于kworker的合理解释,我认为我应该首先找到它。

“kworker”是内核工作线程的占位符进程,它执行内核的大部分实际处理,特别是在存在中断,定时器,I / O等的情况下。这些通常对应于绝大多数已分配的“系统“运行进程的时间。 它不能以任何方式安全地从系统中删除,并且与nepomuk或KDE完全无关(除非这些程序可能会进行系统调用,这可能需要内核执行某些操作)。

有一些报告显示,在2.6.36开发期间( 例如讨论 ),相对空闲的系统有过多的kworker活动,以及2.6.38的混乱和问题的广泛报告(尽管这些报告中有许多包括“Natty”这个词,所以我认为这些人没有使用2.6.35(在Ubuntu 10.10中分发)和2.6.38(在Ubuntu 11.04中分发)之间的任何内核。

我发现了很多关于为某个或另一个用户“修复”这个问题的报告。 大多数“修复”似乎与各种内核的更新有关。 在可以跟踪特定问题的更新的地方,似乎经常修补一些驱动程序或内核服务而不是行为不端:我的印象是内核中存在大量可能导致行为的事情这被认为是过度使用kworker。

如果您发现系统由于过多的kworker活动而无法使用,我建议您尝试做更少的事情。 如果您认为自己没有做任何事情,请尝试关闭长期运行的服务或计时器(RSS阅读器,邮件阅读器,文件索引器,活动跟踪器等)。 如果这不起作用,请尝试重新启动。 如果您的系统允许您在预引导环境中启用或禁用硬件,请尝试关闭不使用的硬件。 如果在您执行任何操作之前每次重新启动时都会发生这种情况,您可以尝试卸载内容,但此时您需要运行syscall性能分析工具来跟踪似乎导致此过载的特定应用程序。

希望您的特定系统将在未来的内核升级中停止表达此行为(并且许多最常见的原因已经解决)。

什么是kworker? kworker意味着Linux内核进程正在“工作”(处理系统调用)。 你可以在你的进程列表中有几个: kworker/0:1是你的第一个CPU核心上的kworker/1:1kworker/1:1是你的第二个上的那个等等。

为什么kworker会占用你的CPU? 要找出kworker浪费你的CPU的原因,你可以创建CPU回溯:观察你的处理器负载(带top或什么),并在通过kworker高负载时,执行echo l > /proc/sysrq-trigger来创建一个回溯。 (在Ubuntu上,这需要你用sudo -s登录)。 这样做几次,然后在dmesg输出结束时观察回溯。 看看CPU回溯中经常发生的事情,希望能指出问题的根源。

示例:e1000e。 就我而言,我几乎每次都发现这样的回溯:

 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] 

它暗示我在e1000e以太网卡模块中出现了问题,实际上sudo rmmod e1000e使高CPU负载立即消失[ e1000e bug#26 ]。

为什么kworker会占用你的CPU(续)? 作为我在这里的另一个答案的替代方案,Perf是一种更专业的方式来分析哪些内核任务占用了你的CPU:

  1. 安装perf

     sudo apt-get install linux-tools-common linux-tools-3.11.0-15-generic 

    (第二个包必须与你的内核版本匹配。你可以先安装linux-tools-common并调用perf让它告诉你它需要哪个包。)

  2. 在所有CPU上记录大约10秒的回溯:

     sudo perf record -g -a sleep 10 
  3. 分析你的录音:

     sudo perf report 

    (使用Enter导航调用图。)

只是为了让每个人都知道。 我遇到了这个问题,安装了perf(这是一个很棒的工具),它指向旋转锁定和XFS。 这指向了NFS。 然后我意识到我的一个坐骑没有空间。 释放空间导致kworker CPU降至0。

显然,这可能是繁忙的NFS服务器上耗尽驱动器空间的症状!

我最近在外接硬盘usb wd护照上安装了Ubuntu Natty。 当我开始使用大约两年的桌面时,一切都像魅力一样。 当我开始使用我的新笔记本电脑(MSI gt680r系统)时,在我从睡眠中唤醒计算机或者插入另一个USB磁盘后,它会变慢。

Kworker进程占用越来越多的CPU,鼠标不时冻结。

我已经在各种论坛上阅读了几个无效的解决方案。

我进入笔记本电脑的BIOS,其中有:

 Hand XCHI OFF: Enabled EHCI Hand OFF: disabled 

我换了:

 Hand XCHI OFF: disabled EHCI Hand OFF: disabled 

从那以后,它在我的笔记本电脑上不再冻结了。

如果问题得到纠正,我会启用手回。