@Matt_Hartley Given the excellent write up from @Charlie_6, can this issue be handed off to engineering for a hopeful fix?
I can replicate on my fresh install (Fedora Kinoite 40 on Framework 13" AMD 7040)
I am tracking this for a resolution to the issue. The fan noise is changing my experience from āhave recommended framework to others who bought oneā, to: āgoing to set up a desktop and just use this machine when necessary, because the fan is so annoyingā.
I hope there is a solution that can bring the computer into an acceptable function.
Is this fixable by setting your own values via ectool for the fan curve? I believe you can customize the whole table.
I have not tried yet but I do get pulses sometimes. I have not attempted to rectify the issue.
actually the real problem is this Fan_off temperature 376 K, which is 103 DegC! Thus the fan never speeds up before frequency throttling. Reasonable fan_off temp should be 40-60C, i.e. 313 K - 333 K
Hi!
This is still a big issue for me. I am on the AMD Ryzen 5 7640U Framework 13 laptop, with the latest BIOS.
There is two compounding problem:
1 - The fan as a constant whiney sound to it. Using an app on my phone (so obviously uncalibrated), I can see that it emit a constant sound at 17k to 20k Hz. This would be fine for older folk who tend to lose a lot of earring around those high frequency, but for me this is incredibly noticeable.
When the CPU/GPU is under load, the fan start to emit lower frequency sound (more whooshy), which drown out the high freq noise a bit, but the high frequency noise is still here.
2 - At low relatively low CPU&GPU usage, the fan likes to kick up to ~2000rpm and then go back to 0rpm after a few second, like a not well tuned PID system. This is very distracting because it makes it very difficult to āzone-outā the noise since it is not constant anymore.
Due to the high frequency and relatively low dB, it is possible to block it with just ear plugs, or simply when wearing headphones. But I work in an office surrounded by colleagues, whom I canāt really tell to just wear ear plugs all day long. This issue as blocked the adoption of more framework laptop for us, because this noise issue is just way to distracting, and is honestly causing stress, for us.
Funnily enough, I stumble upon this review of the cooler master case today, from 1 year ago, and you can see exactly the same issue with the high pitch noise: https://youtu.be/wCZNocDAMoc?t=554
Iām having a similar issue with FW13 AMD Ryzen 7 7840U, Fedora 41 KDE. Fan starts for a brief moment and then stops, then starts and stops again, repeatedly. Whatās even worse, it starts with a pretty loud clunk, itās distracting and sounds wrong, broken.
Iāve recorded a video of it, the sound is pretty difficult to record, but itās very apparent in a silent room.
Video in Google drive
Laptop is running Firefox with a couple of tabs where not much is happening.
Iām thinking about opening a support ticket, Iāll see if it can be somehow improved with fw-fanctrl first.
For comparison, I have also FW 16 AMD Ryzen 9 7940HS, it can do quite a lot of heavy lifting before it decides to run the fans, and then itās almost so quiet I have move my ear closer to even detect if the fan is running or not. A huge contrast here.
The latest BIOS update (3.09) mentions, among other things:
- Fixed ALS sensor communication failures (Whatās an ALS sensor? Is it involved in fan control?)
- Fix ACPI thermal_zone3 reporting incorrect values occasionally.
Is this supposed to fix these fan speed issues? Or is it completely unrelated?
Update: After an hour or so with the new BIOS, I donāt think this has improved. At first I wasnāt sure but now the fan speed jumps are back (even though the temperatures arenāt that high and the machine isnāt doing much, just surfing the web)
Something related on the other end of the spectrum I just experienced while compiling code:
$ sensors
cros_ec-isa-0000
Adapter: ISA adapter
fan1: 2540 RPM
local_f75303@4d: +42.9°C
cpu_f75303@4d: +45.9°C
ddr_f75303@4d: +32.9°C
cpu@4c: +99.8°C
amdgpu-pci-c100
Adapter: PCI adapter
vddgfx: 924.00 mV
vddnb: 913.00 mV
edge: +81.0°C
PPT: 31.23 W (avg = 28.13 W)
k10temp-pci-00c3
Adapter: PCI adapter
Tctl: +100.1°C
So the CPU runs at 100°C but the fan only runs at 2540 RPM. 2500RPM is relatively quiet, but in this particular situation I would prefer it to run at full speedā¦
Looks like the fan speed is tied to the wrong sensor with bad thresholds (and/or should be tied to an additional one)?
You can use ectool to control the fan curve
ectool thermalset 3 381 388 400 333 363
Interesting!
Is this command documented anywhere?
The only information about thermalset I get from ectool help
is
thermalset <platform-specific args>
Set the threshold temperature values for the thermal engine.
which is not very helpful
Regardless of this, I think itās not too much to ask for the default fan curves
- not to be annoying when the system is idle and
- to prevent the CPU from overheating or throttling
Maybe this post (and the rest of that thread) will help a bit:
I noticed the same thing after upgrading to the latest BIOS (probably starting from 3.7?), but maybe it was always like that and I just did not pay attention.
From the graph, it seems like instead of reacting to the CPU or GPU temperature, the fan looks at the cpu_f
temperature.
The good thing is that it is much less noisy than the direct CPU reading, so the fan should really be less ājumpyā than if it used the direct CPU sensor. The problem is obviously that this more distant sensor clearly lags quite a bit behind the CPU die temperature, so the CPU will most likely throttle until the fan ramps up.
Another problem is that the cpu_f
sensor has low (integer?) resolution, and apparently there is no hysteresis: when running this short test, there was a moment when the fan noise ramped up and immediately went back. You can see it in the fan graph as a big, short spike, and, surprise surprise, there is a matching tiny spike on the yellow cpu_f graph in the same place, confirming the suspicion.
So to solve the issue of fan speed ājumping aroundā, it seems to me that the firmware team has to implement either a) some smoothing of the cpu_l
sensor output, or b) hysteresis in the fan control algorithm (i.e. ramp up at 52 °C, ramp down after falling to 50 °C)? (Or if hysteresis is already implemented, increase the range or let the user modify it.)
Or we need to take control of the fan speed from userspace, using something like NBFC, where you can customize the thresholds and their hysteresis range.
Ok, this is better, on my laptop the following seems to work ok:
#!/bin/sh
# the following is based on my observations on FW 13 Ryzen 7640U
# my stress test was compiling code on all cores while running
# a videogame (SkinDeep)
# local_f75303@4d (whatever that is)
# - highest value I saw for this was 55°C,
# idle around 35°C; starting at 32°C so fan is
# always on at relatively low speeds
ectool thermalset 0 343 353 393 305 360 # 32-87°C
# cpu_f75303@4d - somewhere near CPU - not really used here,
# cpu@4c kicks in first with my configuration
ectool thermalset 1 343 353 393 320 355 # 47-82°C
# ddr_f75303@4d - RAM # TODO: maybe max 62 is a bit low
# - max temp in my tests was 46°C with about 55% fan
ectool thermalset 2 343 353 393 318 335 # 45-62°C
# cpu@4c - actual CPU temperature
# - doesn't need 100% fan to cool below 100°C
ectool thermalset 3 381 388 400 343 380 # 70-106°C
Of course the word āfan curveā is kinda strong when you can only set two values (off/max).. and Iād prefer if I could make it always run at 1500rpm (currently they rarely go below 2300 or so; with a higher min value for sensor 0
it always goes on and off) and only if above certain temperature thresholds starting to increase the fanspeed further.
Maybe I should look into controlling the fanspeed manually. Calling ectool whenever I want to change the fanspeed is a bit ugly though, Iād prefer to do that through sysfs or similar.
Looks like GitHub - DHowett/framework-laptop-kmod: Kernel module to expose more Framework Laptop stuff allows just that, but Iām not sure if itās still maintained (no update in 8 months).
I hope this functionality eventually lands in the mainline kernel.
And I also still hope that Framework improves the default curves in a future BIOS update - right now I canāt really recommend people to buy framework machines because āOh, itās a nice device, but the fan will drive you insane unless you use thirdparty tools to control it yourself and who knows how that would even work on Windowsā is not really attractive for most people except for nerds who enjoy tinkeringā¦
The first number ā318ā is a bit low and itāll reduce the CPU power when the temperature is still lower than 100°C
Itās recommended to keep others the same value and only change the last two numbers, the fan start and fan max temperatures
Thanks, this was a typo - the original value was 381 and when typing it into my script I mixed that up - fixed it now
I noticed another very weird bug related to the sensors: Sometimes the cpu@4c
sensor just drops out for a second or two, then returns, then drops out again, �!
By ādropping outā I mean:
- When running
sensors
,cpu@4c:
ofcros_ec-isa-0000
showsFAULT
(not all the time, but often)- When that happens,
temp4
ofacpitz-acpi-0
shows+0.0°C
- The
k10temp-pci-00c3
sensors continues to show normal values
- When that happens,
- In
ectool temps all
thecpu@4c
line disappears sometimes, then it showsSensor 3 disabled
instead
Especially noticeable when running those commands in watch
, like watch -n1 sensors
.
This seems to happen primarily if nothing is connected to my laptop. If I plug in a mouse or just the power cable, it doesnāt seem to happen (or at least not enough that Iād notice it?).
Could be that this only happens since BIOS 3.09, but Iām not sure, maybe I just havenāt looked closely before, or not without the power cable plugged in.
Seeing the same thing with āFAULTā appearing next to cpu@4c under low/no load conditions. Perhaps something is in a very low power state and this results in the lack of a reading.