Fan control in Windows

I’ve been looking at some other threads here, and I’ve been at a loss to find something that can actually do this. I did find one tool (GitHub - leopoldhub/fw-fanctrl at dev-windows) that appears to be more or less what I’m looking for, but the install.bat file in it fails to actually install the tool and just seems to not do anything.

I can’t really tell if this is a failure on my part, where I’m running the batch file from, or if there’s just something wrong with the script itself causing this issue.

Try rebooting and then run the script again from an elevated command prompt. It looks like it requires test signing to be enabled to install this crossec driver since it’s not an officially signed driver. Also, make sure you trust this driver because if it’s malicious you’ll be giving it access to do a lot of damage. Looking at the GitHub project it doesn’t have much information on either project and no stars, likes or comments that I can see so tread lightly on this one if you’re not familiar with the source code.

Also, this is a prototype driver that could make your system unstable or potentially damage the fans if it tries to issue them a bunch of commands that overly stress them, etc. It’s not likely honestly but still something that might be concerning. Why do you want to control the fans manually rather than letting the laptop thermally manage itself? It seems like you could achieve the same thing by using the Radeon tool to throttle the CPU and GPU, etc based on profiles or use the Windows Power profiles themselves to throttle things if you want the fans to be quiet in certain environments at the cost of performance.

1 Like

Essentially, I want the fans to spin up much faster than they seem to by default. I ran a benchmark (which I know isn’t entirely realistic) and the CPU package got to 100C while it was just slowly ramping up to actually move that heat out, and I just find that a bit disconcerting. It handled it, but I’d just like it to be more responsive.

I’ll try to reboot and run from an elevated command prompt (rather than just letting it get its own admin privileges) but I dunno how much that’ll do.

2 Likes

You will never prevent the FW16 to hit 100c. There are problems in the Heattransfer from the Die to the Heatsink. If you do a benchmark and its running alot lower Power than 49 you should get an RMA :wink:
Faster Fans will not help.

1 Like

What?

My problem isn’t that it gets to 100C, it’s that the fans are still speeding up after it gets to 100C. I just want the fans to already be doing their part before it gets to the point where performance has to be throttled.

I’d use ectool by itself, assuming that would fix my problem, but I’m not a developer and I don’t know how to compile code from a github.

Yet another reason for BIOS level fan control.
Fingers crossed for the next BIOS update. Until then, fw-fanctrl (at least on Linux) will have to do.

3 Likes

I figured out the issue: I had to enable testsigning, reboot the system, then run the install batch file. It works fine after that, although I can’t figure out how to edit the configs. The github says there should be a config.json file in the fw-fanctrl folder but there simply isn’t, and putting one there also doesn’t seem to do anything (e.g. putting my own config still doesn’t work).

1 Like

Are you at least able to activate one of the supplied profiles, e.g. fw-fanctrl use deaf?

Yeah, that works. Not sure where it’s getting the profiles from, though. Maybe it’s hardcoded into the python script somewhere?

Figured it out. It’s in the actual C:\Users[username]\AppData\Roaming folder. I thought I’d checked there but I guess not.

Also made sure editing that file works, and yeah, it does. Now I have it defaulting to a profile called “mine” which is slightly less aggressive than “deaf” but still pretty aggressive.

3 Likes

Here are my fan curves in fw-fanctrl config file if anyone wants to use them. I have default setting of “medium” and “low” for AC and Battery respectively. If I’m resting it on the couch or it’s a really hot day out, I’ll manually set it to “high” or “full”. “Full” is also what I set it to when I’m about to do some graphically intensive work.

{
“defaultStrategy”: “medium”,
“strategyOnDischarging” : “low”,
“strategies”: {
“low”: {
“fanSpeedUpdateFrequency”: 5,
“movingAverageInterval”: 30,
“speedCurve”: [
{ “temp”: 0, “speed”: 0 },
{ “temp”: 40, “speed”: 10 },
{ “temp”: 50, “speed”: 15 },
{ “temp”: 65, “speed”: 25 },
{ “temp”: 70, “speed”: 35 },
{ “temp”: 75, “speed”: 50 },
{ “temp”: 80, “speed”: 100 }
]
},
“medium”: {
“fanSpeedUpdateFrequency”: 5,
“movingAverageInterval”: 30,
“speedCurve”: [
{ “temp”: 0, “speed”: 15 },
{ “temp”: 40, “speed”: 25 },
{ “temp”: 55, “speed”: 40 },
{ “temp”: 65, “speed”: 50 },
{ “temp”: 70, “speed”: 80 },
{ “temp”: 75, “speed”: 100 }
]
},
“high”: {
“fanSpeedUpdateFrequency”: 2,
“movingAverageInterval”: 5,
“speedCurve”: [
{ “temp”: 0, “speed”: 15 },
{ “temp”: 30, “speed”: 25},
{ “temp”: 40, “speed”: 50 },
{ “temp”: 50, “speed”: 75 },
{ “temp”: 60, “speed”: 100 }
]
},
“full”: {
“fanSpeedUpdateFrequency”: 2,
“movingAverageInterval”: 5,
“speedCurve”: [
{ “temp”: 0, “speed”: 15 },
{ “temp”: 30, “speed”: 50},
{ “temp”: 35, “speed”: 75 },
{ “temp”: 40, “speed”: 100 }
]
}
}
}

I just want to make it clear to anyone reading this thread that with test signing enabled in Windows 10/11, you are leaving your PC open to some pretty nasty viruses, malware & loggers, so make extra sure that you vet everything before you run it from that point on since malicious payloads could install bad drivers that don’t have virus signatures for them yet since by default drivers have to be signed by a legit Microsoft trusted certificate to be accepted.

Basically, anyone can sign their driver with whatever unverified certificate they want, and Windows will load the driver into the kernel, giving it god-level access to everything including the memory space of other applications & services running usermode and kernelmode code. So, just play it extra safe with test signing enabled on your system moving forward & make sure you run everything from virustotal.com first & ensure it’s from a reputable source since you can’t just enable it for the one driver you want to load; you basically enable it for everything or nothing at all, hence the warnings you get when you enable it.

As long as people understand that, enjoy this cool GitHub project that allows the fans to be controlled directly. I’m tempted to go poke through the source code myself and see how they are communicating with the fans in the first place because it might be possible to just export that code into a standalone application or service that runs as “administrator” or as a service to gain a little more access than admin allows so you don’t have to load a full driver into the kernel which requires test signing enabled opening your system up.

Most people already know this I’m sure, but I just want to make sure others that read this post don’t disable the test signing thinking it’s no big deal. There is a reason why Microsoft doesn’t allow test signed drivers to be installed by default. Because there are a lot of viruses out there that use drivers because of their incredibly low level of access to system resources to do bad things. Also, this doesn’t just apply to executiables or drivers that could install bad drivers in the future but also things like buffer overflows in media applications allowing viruses to be deployed through malicious video content or even video game roms that are tainted that use bugs in the emulator running as administrator to install their payloads silently. Windows 11 is pretty heavily protected with Windows Defender but it’s not magic or bulletproof, especially when it comes to drivers since they are a little bit of a blind spot to virus detection since Drivers are expected to do crazy things like access memory directly or send commands to fixed memory addresses, etc so they aren’t scrutinized as much.

Happy fan modding! I would be curious to see how much this helped with temps if at all @henrytr? Also, so long as the hardware isn’t throttling you shouldn’t worry about temps too much. The truth is laptops run at insane temps due to their formfactor and modern GPU/CPU’s can run at insane temps before they start to throttle to accommodate for this. However, in the future it would be cool to have a Framework 16 BIOS that allows us to directly control all the fan curves from the BIOS since that is something most modern ATX motherboards allow you to do on full size PC’s which is super handy to get the airflow in the case right.

4 Likes

I guess in my head I just imagine it can’t be good for the components to be running at 80C continuously even though that’s kinda how they’re designed to be run. Just personal preference, I suppose.

Also, I’ve noticed that with the dGPU more of the air flows out the back than the sides, which I imagine was on purpose since the back is where the GPU heatsinks are, whereas the sides have the CPU heatsinks.

1 Like

This tool is a python script that is dependent on ectool to function. Ectool requires the driver to interface with the EC on the Framework.

Now unless Windows contains a driver by default which is able to do this, there isn’t going to be any other way than by using a driver to get there. Hence the reason ectool is dependent on this driver to function.

The somewhat obvious thing to do here is get the driver signed by some authority such that disabling driver signing is not necessary.

Your warning here is very important and people should be aware of it:

2 Likes

VirusTotal is absolutely GOATed. In the words of that Franks RedHot commercial “I put that sh*t on everything”.

As for temps, I know my computer can handle it, but it’s me that needs the fans to spin up at lower temps. I’ve measured my keyboard and under-chassis at 102F (about 39C) with the default fan curve doing almost nothing. My legs cook and my hands/ wrists get uncomfortably sweaty. It just gets worse when I’m working in non air-conditioned spaces in the summer. Having the ability to move that heat out of the computer and away from my body is something I really value. The fan noise never really bothers me (although I used to work around aircraft, so maybe my hearing is shot :sweat_smile: ).
Until a BIOS level fan control comes out, fw-fanctrl is the best for both Linux and Windows in my opinion.

2 Likes

You’re right @Myriad, think of the dGPU as its own module that extends off the back of the laptop like it’s an external GPU plugged into a PC. The GPU’s own fans to pull air in from the laptop case from the vents on the bottom and expels it cleans out the back of the laptop so it doesn’t saturate the CPU/Memory/Storage/Battery with extra heat by trying to wrap that airflow back around inside of the laptop and out the side vents. It’s just way more efficient to do it this way and gives you better temps on dGPU and CPU/iGPU, etc.

If you’re up for a little experiment, you should grab a leaf blower on low and blow it at the bottom of the laptop during a benchmark and watch the temps. I bet the additional forced air pressure into the vents on the bottom would move more air over the CPU and GPU and lower the temps even more provided you don’t hit the maximum heat conduction of the heat pipes themselves in which case no more air is going to help lower the operating temps but will lower the exhaust temps still since more air would be flowing to transfer the same amount of heat.

If that works and the heat pipes on the GPU and CPU show that they can shed more heat with more airflow then it might be fun to 3D model and print a little squirrel cage fan shroud that plugs into the exhaust ports on both sides of the laptops and sucks the air out creating a negative pressure. This could evacuate more of the heat and even be made to plugin to the rear most module slot to get its power. I’m just thinking out loud here but that would be a fun little project ot run a framework cooler. And if that works well and still doesn’t max out the thermal transfer of the heat pipes then maybe someone could make a 3D printed desktop dock for the framework that has some bigger externally powered high static pressure fans that create that sections and also push air into the bottom vents when you slide the laptop down into it while also having it make all the Monitor, Keyboard and Mouse connections all through the USB-C on the back :thinking: Okay, my imagination is running away with me but this would be cool if it could allow you to overclock the CPU and GPU more in a desktop setup configuration. However, this should all wait for the 240watt power adapter since as I understand it the 180watt power adapter still feeds a little off the battery when CPU and GPU are maxed out which wouldn’t be ideal for desktop applications but with the 240watt adapter it will solve all that and give quite the surplus of power that could be tapped off of for cooling if you didn’t want the dock to have any external connectors at all other than the power input from the USB power adapter.

Sorry, my Adderall hasn’t kicked in yet so I’m all over the place this morning. I got a little off topic there. :wink:

Honestly @henrytr every high-performance laptop that I’ve used with a high powered dGPU got way too hot to ever have on my lap. Even my old Razer Blade Pro 17" laptop made out of one giant billet of aluminum from ~2016 that I replaced with this framework got even hotter than the Framework 16 does! It would physically burn me if I touched the bottom of the laptop after it sat on a surface that wasn’t hard or didn’t allow good airflow. The only Laptops that don’t get this hot are the ones that use the iGPU primarily and throttle back both the GPU and CPU when on battery power to maximize battery life since power in = heat out. So, if you don’t want the framework to run insanely hot just run stuff on the iGPU instead of the dGPU and enable power saving mode so that CPU throttles down to like 1ghz unless it needs to go faster for some other operation. Because at full tilt this laptop needs to be able to dissipate 200+ watts of heat which is not insignificant if you think about a 100 watt resistive bulb and how hot those get and compare it to having 2 of those running inside of a little case with little fans blowing over them. I know that’s not a perfect comparison but it’s in the ballpark.

So you’re options really are as follows…
1) Run your scripts and unsigned driver that lets you run the fans at 100% to try to stay ahead of the heat build up. This will only work if you’re not putting heavy loads on for long periods of time otherwise it will still just saturate, and you’ll be back to the same unmanageable temps on your lap. But if you’re just doing shot operations these might be just perfect for you and why they should let us control fan curves in the future with either a signed driver or BIOS change.
2) Throttle your CPU and GPU through a custom power profile in Windows so that when you’re running the laptop in your lap it gives up performance for heat management. This is what most laptops do that try to give you like 10 hours of battery life for getting work done at the expense of barely being able to play a YouTube video at 30FPS :wink:
3) Have your cake and eat it too by buying one of these cooling plates that will help force fresh air up through the laptop vents on the bottom and improve cooling while adding a layer between you and the laptop itself so you don’t get burned. Then you can just run at 100% everything and not worry about it. (https://amzn.to/3TvtHKR)
4) Mod your framework laptop by adding direct powering to all the fans inside of the laptop using diodes to prevent back feeding power into the mainboard and link them to a switch on the outside of the case so you can run at 100% power all the time with a flip of a button or let the PC manage the fan speeds in the other switch state. I’m not even sure how much work this would be because I don’t know how deep the fan wiring is in the laptop but I’ve seen something similar done on desktop systems before using a module that with the flip of a switch it handed of all the fans to an external controller.
5) Talk whoever wrote the framework fan driver into getting it signed so you don’t have to run Windows 11 in test signing mode leaving your PC exposed to all the filth of the internet so you have to watch your back everytime you visit a hub site or open email while drunk. :wink:

Okay, ADHD drugs are starting to kick in now! :crazy_face: Are my ideas good yet?

3 Likes

Hey @2disbetter, do you know if the person who wrote the driver to interface with the fan controller on the Framework is someone who actually works at Framework or just some fan in the open source community? I ask because if it’s someone actually affiliated with the project, I bet they could just send the code over to the Microsoft WHQL certification lab and ask to get it signed. Since they are associated with a company that sells computers that run Windows 11 and they actively sell licenses with their PCs on request, I don’t see why Microsoft wouldn’t certify the driver. It literally takes like one person 15 minutes to run it through the certification tests (I did this myself when I worked at Microsoft from 2000-2015), and then they would sign the driver and send it back to you. Now, this signing process would have to be repeated for each driver change that takes place in the future, and Microsoft might want to charge for that at some point, but my guess is for something this simple it would be cheap. Especially if it stops an entire line of laptops being sold with Windows 11 from becoming vulnerable to viruses because they are forced to run in Test Mode :wink:

I just hope everyone takes my warning seriously because running in Test Signing Mode is only something that should be done by a driver developer who is actively developing drivers on a dev box that isn’t running anything else that could possibly be malicious. Honestly, this would normally only be done on test machines and not even the dev box itself since it would be connected to a corporate network and could become a threat, so group policy would probably forbid it for most companies that knew what they were doing and only allow it to be done on test machines that weren’t on the domain, etc.

But, if the EC on the Framework requires physical hardware addresses to be touched, then a driver would be required, and no service or administrative level process would be able to do that sadly, so the driver would be the only way to go. However, if Framework would expose their fan controller as a generic USB device or Serial device instead of requiring packets being sent to physical hardware addresses, then the inbox signed serial drivers and USB drivers would be sufficient for anyone to manipulate the fans. Honestly, something like a fan controller doesn’t seem even remotely complex enough to require a direct hardware driver in my opinion. But, they might be using something off the shelf that doesn’t have a serial interface to begin with, so this would not be possible. However, if they released a firmware update with a UEFI driver that would proxy the EC commands to a virtual serial device, then Windows would still be able to pick it up as a new COM port you could send and receive data from, etc. I don’t know, it’s been a long time since I’ve done driver development, but a simple fan controller just doesn’t seem like it has enough complexity to require the low level of hardware access that would require a dedicated driver. It seems like something that would work just fine with other simpler communication channels like serial. Hell, it’s good enough for Arduino and Raspberry Pi, ain’t it? :wink:

2 Likes

+1 For Fan control in Framework laptops! Via Bios or software in the OS, something is better than nothing. I’d LOVE for my laptop to sound like a jet engine - at least at a point that I control. What is the point of fans except to help the hardware last longer? Repairability and longevity are the two main reasons I went with Framework.

4 Likes