kidle_inject 导致负载非常高

每当我的系统上运行kidle_inject时,负载就会飙升。通常情况下,它只会达到大约5.23, 3.65, 2.54的负载,但很多时候它们中的每一个都会跳过15的标记。在那个时候,系统就会停滞不前,我不得不关机重启。
这种情况只发生在kidle_inject进程启动时。我该如何禁用这个进程,以便我的机器能够正常工作,我也能完成一些工作呢?
示例:top
top - 12:43:48 up  3:02,  3 users,  load average: 6.57, 5.53, 3.33
Tasks: 256 total,   3 running, 253 sleeping,   0 stopped,   0 zombie
%Cpu(s):  5.9 us, 16.6 sy,  0.0 ni, 74.7 id,  0.5 wa,  0.0 hi,  2.3 si,  0.0 st
KiB Mem:   8080252 total,  7937856 used,   142396 free,   258904 buffers
KiB Swap:        0 total,        0 used,        0 free.  4061336 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
13509 root     -51   0       0      0      0 S  54.7  0.0   3:29.47 kidle_inject/1
13511 root     -51   0       0      0      0 S  54.1  0.0   3:30.92 kidle_inject/3
13510 root     -51   0       0      0      0 S  48.8  0.0   3:11.60 kidle_inject/2
13508 root     -51   0       0      0      0 S  47.6  0.0   3:08.47 kidle_inject/0
7个回答

看起来这是内核中的一个bug

根据那个错误报告上的评论,运行命令sudo rmmod intel_powerclamp似乎停止了kidle_inject进程,并且我目前没有注意到任何问题。

希望这个问题很快会被修复。如果我注意到任何问题,我会更新这个答案。

更新

每次启动机器时都需要运行rmmod命令。自从运行这个命令以来,我没有注意到任何不好的情况。

更新2

我注意到自从这样做后,我的CPU温度似乎更低,约为72度左右。

要在启动时进行设置,请使用一个命令。

echo "blacklist intel_powerclamp" > /etc/modprobe.d/disable-powerclamp.conf

18每次启动时都不必运行该命令。你可以使用echo "blacklist intel_powerclamp" > /etc/modprobe.d/disable-powerclamp.conf将其加入黑名单。 - Jesse
3希望这个问题能尽快解决。是啊,希望如此……嗨,都已经2016年了,我想我们现在应该是内核版本87了吧?我们能不能不再继续玩那种“哈哈,让电脑过热好好玩一下”的把戏了呢? - cat
兄弟,爱你啊!你今天真是救了我一命。 - Abhishek Gupta
3这实际上不是一个错误,而是一项功能,用于防止处理器进一步过热。我还建议阅读这个 - user364819
@ParanoidPanda kidle_inject是一个功能,当不需要它时启动它是一个错误。在我的系统中,它几乎在我登录到操作系统帐户后立即启动。我没有任何额外的应用程序在启动时运行,只有Ubuntu默认安装的应用。我现在已经安装了Debian,并且完全没有这个问题,我不知道在新的Ubuntu版本中它的状态如何。 - Nalum
@Nalum:你确定没有其他的bug导致系统过热并触发这个功能吗?如果没有,那么是一个bug。但我相信这个问题在后来的Ubuntu版本中已经修复了。你使用的是哪个版本? - user364819
根据14:10的记录,我随后转到了Debian。在Debian上没有遇到这个问题。可能有其他触发此问题的因素,但我并不知情,即使有,我也不会预料到任何情况会在我登录后立即触发它。 - Nalum
这在4.10.0-30版本中仍然是一个bug,看起来... - cat
@AbhishekGupta 想知道一个加热的CPU是如何导致你屁股被烧伤的,我无法想象你的笔记本电脑放置方式 :-D - Anand Rockzz
1对我来说,这是一个即时的改进,谢谢。我在一台Clevo笔记本上运行Kubuntu 18.04,内核版本为4.15.0-20。 - kshepherd
2@user364819 "相信在后续版本的Ubuntu中已经修复了" 嗯,不对,再想一想。我正在一台新的Clevo笔记本上运行Ubuntu 18.04,在一个相对寒冷的环境中。当芯片几乎没有发热(甚至不到35摄氏度;我的大脑运转时更热而没有问题)时,这个问题就出现了8个实例(据我所知,每个核心一个)。诚然,已经过去了几年,但是我最后了解的处理器规格,100摄氏度甚至还没有达到红线。 - Matthew Najmon

接受的答案是不完整的。根据bug comments,kidle_inject进程被生成来限制处理器的性能并保护其免受进一步的过热。
在“修复”这个错误之前,请确保您的风扇清洁并正常工作。我曾经遇到过这个问题,并发现通风口堆满了灰尘。清洁后重新启动,就不再生成kidle_inject进程了。

感谢您添加这个备注。我还要注意到,这是发生在我的全新机器上的。我后来在上面安装了Debian,并且没有遇到任何问题,也不需要应用这个临时修复方法。 - Nalum
2这个过程的预期目标很可能是为了保护CPU免受过热,但是在占用50%或更多的CPU负载时,它如何做到呢?那就是问题所在。我也不得不停止该进程,并在必要时用CPU调速脚本替代它。 - user47206
1好观点,你说得对,这确实不能直接保护CPU。不过也许它会引起用户的注意,因为他会发现电脑无法使用,并采取相应措施。降低CPU频率并通知用户温度过高确实是一个更好的解决方案。 - johnny
当芯片变得非常冷时,我遇到了这个问题。我已经清洁了风扇(全新的风扇),工作环境非常寒冷(我一直担心可能需要对其进行绝缘以保护其他组件,比如电池,但到目前为止,系统还没有变得足够冷以需要这样做),但系统仍然运行缓慢,这些程序在上面运行时会导致系统瘫痪。 - Matthew Najmon
我的今天的经历:笔记本电脑变得非常慢。顶部:Kidle_inject 1150%(12个核心)。检查CPU风扇。不工作,但是笔记本底部热得像地狱一样。Kidle_inject拯救了我的处理器。我能够保存我的工作,关闭笔记本电脑并清洁风扇。一切恢复正常。谢谢(Kubuntu 19.04)。 - V-Mark

如果你使用的是MacBook,请确保你已经安装了macfanctld。如果没有安装,风扇将被固定在最大6000转速中的约2000转。这可以通过执行sensors命令来查看。在这种情况下,powerclamp会较早地启动以保护CPU的使用寿命。

1我认为,如果不包括这一点,答案就不完整。 - theYnot
2021年,在Mac mini上使用Ubuntu 20.04。macfanctld让我免受每次运行Chrome时kidle_inject高CPU使用率的困扰。 - biocyberman

我今天也注意到了这个问题。奇怪的是,尽管CPU使用率很高,风扇却没有发出任何声音。我设法重新启动了机器,然后查看了BIOS风扇速度。显示风扇已停止运转(没有RPM读数)。所以经过一番清理(真的是字面意义上的 - 打开笔记本盖子,清理一下),风扇开始正常工作,一切都恢复正常了。所以问题可能出在你的CPU风扇上。因此,仅仅禁用intel_powerclamp可能不是一个好主意。

我按照以下步骤进行了操作,成功了。
检查模块是否已加载。 lsmod | grep -i intel_powerclamp 如果前一个命令显示模块已加载,请执行以下操作。
在您的crontab规则中添加以下行@reboot /sbin/rmmod intel_powerclamp或echo '/sbin/rmmod intel_powerclamp' >> /etc/bash.bashrc(将影响所有用户)或echo 'blacklist intel_powerclamp' > /etc/modprobe.d/disable_mods.conf。

好好清理一下笔记本电脑(HP EliteBook 8460p,运行Ubuntu 16.04 LTS),并且吸尘清洁两侧的通风口(还有移开那些积聚在那里的乱七八糟的东西)对我来说解决了问题。

这不是一个错误,而是一个特性。
首先,CPU会发热。 然后,空闲注入程序会阻塞每个线程(即每4个核心中的8个处理器)约50%的时间 - 不消耗电力,不发热,但会减慢系统速度。
解决方案: 清理通风口。 保持通风口打开(例如,在床上工作时不要让笔记本电脑底部被垫子“堵住”)。 降低室内温度(等到晚上再进行需要大量CPU运算的任务)。