I recently got a laptop with a 4 core (8 thread) Intel i7 CPU, running Windows. Unless I’m really pushing it, it doesn’t heat up very much. However when I installed Linux it began to heat up significantly and battery life got much shorter. Specifically a this is a Debian-based live CD of Tails booted with
toram so the disc is not inserted and the root filesystem is a
squashfs image living in memory.
I’m aware that Windows has some power optimizations for power usage that Linux doesn’t use by default, but here’s where it gets weird:
- I disabled the discrete graphics chip by booting with
- I disabled SMP, so the system is running only a single physical core.
- I used
cpufreq-setto reduce the maximum clock rate to 800 MHz.
Despite all this, the laptop is getting really hot. If I leave it idling for an hour (CPU usage typically around 1% the entire time), it gets so hot that my kernel log starts accumulating overheating errors, saying that the CPU clock had to be throttled (it’s already at its minimum and can’t go any lower).
What in the world could be causing so much heat when I run Linux? How could a Windows system with 4 cores running at an average of 1.5 to 3 GHz at any given time and running the discrete GPU generate significantly less heat than a Linux system with a single enabled core running at 0.8 GHz?
The current output of
sensors shows that the CPU itself isn’t that hot:
coretemp-isa-0000 Adapter: ISA adapter Package id 0: +65.0°C (high = +86.0°C, crit = +100.0°C) Core 0: +64.0°C (high = +86.0°C, crit = +100.0°C) thinkpad-isa-0000 Adapter: ISA adapter fan1: 2880 RPM
The fan is under the control of the laptop’s EC.
I found the reason and solved it. Due to a bug in the BIOS, the discrete GPU was enabled in a performance mode which resulted in it running hot even though it wasn’t being used. Windows did not have the problem because its GPU driver shut down the discrete GPU when it was not needed. Because my Linux system didn’t even load the driver, the GPU kept running at a high clock speed.
Removing the discrete GPU solved the problem.