Framework thermals and fan noise?

This question pertains both to

  • how can the user make the computer more thermally efficient / optimal for their use case
  • what can framework do to make the computer more thermally efficient / optimal for a variety of use cases.

Intro
I am a noob to computer hardware. I’m running Kubuntu with i5 / 2*16 GB memory. I personally don’t like the sound of the fan running and it also seems like higher temperatures are bad for the CPU. I know that it is possible to have a thermally efficient laptop because the new Macbooks are so thermally efficient that they don’t even need a fan.

My Understanding of Intel chips
It seems like the Intel chips are designed to be ok when hot, and the intel spec sheets say 100C is the max, but I do prefer something cooler if possible: CPU running at hot temps? - #3 by Johannes_T

Update:

Basically all modern CPUs are designed to run hot, because they do opportunistic boosting. In performance mode, they tend to boost the clock frequency as high as they can until they hit thermal or power limits. -jbch

Here’s some possible solutions I’ve found after spending wayy too much browsing the framework forum (though I am not sure how to implement some of them):

Software Solutions
If you are ok with a performance tradeoff, the software route is the one to go.

BIOS BIOS guide

non-BIOS software solutions

Hardware
Improving the hardware heat mechanisms may not affect termperature because

the CPU will use the extra thermal headroom to boost higher. So you’ll get the same temperatures, but better performance. - jbch

Things I have questions about for hardware solutions
Inspiration from: CPU running at hot temps? - #5 by Ryan_Martens

  • multiple fans (I think user can’t do this?)
  • more heatpipes (unsure if user can do this)
  • larger heatsinks (unsure if user can do this)
  • more vents (unsure if user can do this)
  • other heat spreaders (unsure if user can do this)
  • adding more thermal pads to the copper thingy under the heatsink/fan?? i think it might be a heat spreader? I opened up the framework computer and saw some copper looking thing under the heatsink / fan (visible after taking out the fan / heatsink),

Other things to try

Things that may not work

  • Advanced > Turbo Boost Max Technology > Disabled
    (this doesn’t turn turbo boost off, and may not do what you want)

The Turbo Boost Max Technology 3.0 setting in the BIOS doesn’t turn off Turbo Boost. TBMT 3.0 is a very specific thing, it just lets the CPU boost the better cores higher than the others. (Due to manufacturing variance, some cores can run at higher clocks than others). I don’t think it makes a big difference whether you disable it. - jbch
DIY Framework Laptop - Windows - initial thoughts

  • Advanced > Boot performance mode > Max Non-Turbo Performance (idk what this does, so not sure if this actually does what I want though)

As far as I can tell, the Boot performance mode setting just determines what mode the CPU boots in. But as soon as the OS starts, it sets its own mode, so the Boot setting doesn’t do much at all. Basically it just changes what mode is running while you’re sitting in the BIOS and for the few seconds before the OS starts. - jbch

Let me know if you have feedback on this list. I may update this as I learn more.

2 Likes

Basically all modern CPUs are designed to run hot, because they do opportunistic boosting. In performance mode, they tend to boost the clock frequency as high as they can until they hit thermal or power limits.

So if you are running in performance mode, a better heatsink won’t even necessarily run cooler or with lower fan speeds. Instead the CPU will use the extra thermal headroom to boost higher. So you’ll get the same temperatures, but better performance.

The Macbook Air doesn’t have fans, so it hits thermal limits faster and throttles down. So its performance is not as good as a Macbook Pro with the same chip for sustained loads.

If you want to run cooler / lower fan speeds, you want the CPU to boost less aggressively. In the extreme you can turn off Turbo Boost completely.

The Turbo Boost Max Technology 3.0 setting in the BIOS doesn’t turn off Turbo Boost. TBMT 3.0 is a very specific thing, it just lets the CPU boost the better cores higher than the others. (Due to manufacturing variance, some cores can run at higher clocks than others). I don’t think it makes a big difference whether you disable it.

There’s no way to turn off Turbo Boost completely in the BIOS as far as I know. You can turn it off in the OS though:

As far as I can tell, the Boot performance mode setting just determines what mode the CPU boots in. But as soon as the OS starts, it sets its own mode, so the Boot setting doesn’t do much at all. Basically it just changes what mode is running while you’re sitting in the BIOS and for the few seconds before the OS starts.

Do you have the same power profile set in KDE and gnome? It’s a slider on the battery tray icon in KDE. Not sure about gnome. If it’s the same profile I’m a bit surprised, I thought gnome is lighter than KDE.

4 Likes

I played around with a few things, running single-core and multi-core cpu benchmarks. I tried hard CPU frequency limits first (set with sudo cpupower frequency-set -u).

On the i5 1135g7, I found that I can run a multi-core workload at 2.6-2.7ghz with pretty minimal fan noise. At 2.8ghz it’s a bit louder and starts to hit thermal limits after a few minutes.

By default, running the multi core benchmark, my CPU boosts all cores to 3.7-3.8ghz, then the fans spin up like hell, then after less than 30 seconds, it throttles back down to 2.7-2.8. To me the fan noise and heat is not worth the 10-20 seconds of extra boost, if I’m running a compilation or something.

But setting a hard frequency limit unnecessarily hurts single core workloads. There’s no problem if it’s only 1 or 2 cores being boosted to 4GHz - it doesn’t spin up the fan.

So I ended up manually setting up a RAPL power constraint. RAPL is the Intel technology that’s used to limit the power used by the CPU. It’s exposed by Linux in /sys/class/powercap/intel-rapl:0.

There’s a few different constraints. On my system, constraint 2 is the instant limit, which you can see because the time window is 0 microseconds:

$ cat /sys/class/powercap/intel-rapl:0/constraint_2_time_window_us
0

Initially the power limit was set to 0 which I guess is unlimited:

$ cat /sys/class/powercap/intel-rapl:0/constraint_2_power_limit_uw
0

WIth some experimentation I found that a constraint of 27 watts limits all-core boost to around 2.6-2.7ghz, and it doesn’t hurt single-core boost too badly - the single core benchmark was running at about 3.7ghz instead of 4.0ghz. With the setting at 27w, fan noise was minimal for the entire time while running single core and multi core benchmarks for several minutes. (The setting is in microwatts so multiply 27 by 1,000,000).

$ echo 27000000 | sudo tee /sys/class/powercap/intel-rapl:0/constraint_2_power_limit_uw
$ echo 1 | sudo tee /sys/class/powercap/intel-rapl:0/enabled

I wrote a systemd unit file so that it’s automatically applied at startup. Wrote this to /etc/systemd/system/cap-intel-tdp.service:

[Unit]
Description=Cap Intel CPU With RAPL

[Service]
ExecStart=/bin/sh -c "/usr/bin/echo 27000000 > /sys/class/powercap/intel-rapl:0/constraint_2_power_limit_uw && /usr/bin/echo 1 > /sys/class/powercap/intel-rapl:0/enabled"
ExecStop=/bin/sh -c "/usr/bin/echo 0 > /sys/class/powercap/intel-rapl:0/constraint_2_power_limit_uw"
RemainAfterExit=yes

[Install]
WantedBy=sysinit.target

Then

$ sudo systemctl enable cap-intel-tdp
$ sudo systemctl start cap-intel-tdp

It’s not an ideal solution, I think thermald manages RAPL limits so its possible it might change the setting to something else under some circumstances, but so far it seems to work.

4 Likes