20

I am using ubuntu 14.04 LTS on an i5-3250M, 6GB RAM Dell Inspiron laptop. I have been noticing all this time from my cpu usage monitor that there is high usage of my CPU (without using something really intensive) and it leads to overheating.

I checked from the system monitor, and at first it seemed like my graphics card was the problem (AMD Radeon 7670M - hybrid graphics with Intel HD 4000). Anyway, I installed fglrx-updates (the only one that actually kind of fixed the overheating problem - fglrx and xorg didn't help) and things ran a bit smoother.

I also installed intel p-state and thermald. Put it on powersave governor, but still no luck. Also installed tlp (no conflict between them).

Tried to see if the fault is from compiz or adobe-flash. No luck. Also, HTML5 uses a LOT of CPU after a bit and it lags everything on my comp.

After doing all of those, I was looking at the results from the $top command and the culprit seems to be kidle_inject. It uses like 50% of the cpu everytime. I couldn't help but notice that it seemed like it had four modules - kidle_inject/0 to kidle_inject/3.

So, what is this kidle_inject? I haven't been able to find something conclusive on the subject. It seems to be on when I use something that is resource intensive and it continues hogging my cpu for a minute or two after terminating usage.

How can I fix this so that my comp is usable at last? I am talking about a minimum temperature of 70C in low-performance use. I am heavily dependent on linux and I would like to keep using ubuntu (since I am used so much to it and I have grown fond of it).

-- I have to say that this is not my machine's fault. When it runs on Windows 7 it's running fantastic with low temperatures.

  • It's a feature, and it's not exactly hogging the CPU. See here for the official documentation. I'll post a more detailed answer shortly later. – saiarcot895 Jun 12 '14 at 13:26
18

Because you enabled Intel P-state (through intel_pstate=enable in GRUB_CMDLINE_LINUX_DEFAULT), you've also enabled the powerclamp driver. The powerclamp driver is working to try to keep the processor at a low-power state, so that power consumption is reduced, and not as much cooling is required.

To do this, it forces each thread on the CPU to be idle for some amount of time by injecting idle time. Typically, this amount is 50%. The 50% you see for each of the kidle_inject processes isn't actually causing the CPU to do work; rather, it's telling the CPU not to do work, thus reducing power consumption. Note that the overall CPU usage does not include kidle-inject.

As @ElderGeek noted, you can tell the driver to inject a less amount of idle time. However, I tried this, and was unsuccessful. It may be that the kernel doesn't support it yet; it may be that powerclamp is ignoring the request.

| improve this answer | |
  • 1
    can't be, as my computer becomes very slow when kidle-inject is active – brauliobo Jan 31 '15 at 22:30
  • That doesn't (or at least shouldn't) explain the observed heating of the CPU however. – Hilton Shumway Apr 17 '15 at 3:16
  • 2
    It's possible that the overheating is the event starting the kidle_inject, and not the contrary. If so, Fotis should check which process took a lot of CPU time before kidle_inject starts. – autra Jun 17 '15 at 7:53
10

I think there must be some kind of bug here, since on my system, kidle_inject injects 50% in all CPUs, so that when I run a single threaded process, it only gets the remaining 50% of the CPU it runs on. rmmod intel_powerclamp fixes this.

| improve this answer | |
  • Careful! Reading the other answers here it sounds like this feature can act as a safeguard for overheating in case of cooling failures. If you disable it, make sure you know what you're doing (check your system temp and read the other answers here too). This is just a word of caution for others who stumble across this issue as I have. – user606179 Dec 22 '16 at 3:05
4

If you take a look at the temperature and trip points in

/sys/class/thermal/thermal_zone0/temp

and

/sys/class/thermal/thermal_zone0/trip_point_0_temp

you may find (as I did and then found myself at this question), that your system is running so hot that it is managing temperature by injecting idle cycles as @elder-geek mentioned.

In my case it's the hottest day of the year so far and my fan has failed, but my laptop is surviving thanks to this feature.

| improve this answer | |
  • This happened to me. I had a AIO Liquid cooler and the pump died. Temps were at 95C and climbing. kidle_inject & this SO post saved my bacon! Thanks! – Isaac Jul 29 '16 at 14:46
3

The powerclamp driver is registered to the generic thermal layer as a cooling device. Currently, it’s not bound to any thermal zones.

Here's an example from one of my systems.

grep . /sys/class/thermal/cooling_device*/type

/sys/class/thermal/cooling_device0/type:Fan
/sys/class/thermal/cooling_device10/type:LCD
/sys/class/thermal/cooling_device1/type:Fan
/sys/class/thermal/cooling_device2/type:Fan
/sys/class/thermal/cooling_device3/type:Fan
/sys/class/thermal/cooling_device4/type:Fan
/sys/class/thermal/cooling_device5/type:Processor
/sys/class/thermal/cooling_device6/type:Processor
/sys/class/thermal/cooling_device7/type:Processor
/sys/class/thermal/cooling_device8/type:Processor
/sys/class/thermal/cooling_device9/type:intel_powerclamp

Example usage: - To inject 25% idle time:

sudo sh -c "echo 25 > /sys/class/thermal/cooling_device9/cur_state

source:https://www.kernel.org/doc/Documentation/thermal/intel_powerclamp.txt

| improve this answer | |
  • 1
    On my system this is device8 so the command is sudo sh -c "echo 25 > /sys/class/thermal/cooling_device8/cur_state" where 25 is the amount of idle time I want to force. Seems to work though I haven't done any substantial testing regarding the power savings with using the pstate or this kidle inject business. – shaunhusain Dec 26 '15 at 5:43
  • @qris Rolling back your edit as your approach for me did not work. – Elder Geek Feb 21 '16 at 3:10

Not the answer you're looking for? Browse other questions tagged or ask your own question.