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

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

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

我曾想过提交错误报告,但由于我还没有找到任何合理的解释工人我认为我应该先弄清楚。

答案1

“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 阅读器、邮件阅读器、文件索引器、活动跟踪器等)。如果这不起作用,请尝试重新启动。如果您的系统允许您在预启动环境中启用或禁用硬件,请尝试关闭您未使用的硬件。如果每次在执行任何操作之前重新启动时都会发生这种情况,您可以尝试卸载一些东西,但此时您需要运行系统调用分析工具来追踪似乎导致这种过载的特定应用程序。

希望您的特定系统在未来的内核升级后不会再出现这种行为(并且导致这种情况的许多最常见原因已经得到解决)。

答案2

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

为什么 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 错误 #26]。

答案3

为何 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。)

答案4

我最近在外部驱动器 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

从此以后,我的笔记本电脑上的 natty 就不再冻结了。

如果问题得到解决,我将启用手返功能。

相关内容