-
Notifications
You must be signed in to change notification settings - Fork 20
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
RTX Fan Control Windows #12
Comments
Oh- Gpu 0 in the example is a gtx card. #1 on the bus is an rtx. However, if I am reading your script right, it looks like you came up with a way to handle dual fan control of rtx cards, which if that is the case, if I can get this to work- You would ne my hero I have been spending days trying to write c++ script that will work for rtx cards, with no luck. |
Hi! Unfortunately testing is lacking on Windows and things tend to break. I only have one card and most people use nvfancontrol on Linux. There is room for improvement if you're willing to test!! It is a bit troubling than only one device is enumerated although all of them are detected. This is probably some bug I need to identify. Coolers being individually controllable depends both on the card, and the VBIOS of the card. Most RTX cards should allow that though. Would it be possible to give me an overview of your system setup? For instance what kind of cards you have and in what sequence, ie. how they appear on the windows device manager. Can you also repeat the above scenarios with the debug flag ( |
It's more just finding a command line tool that works in Windows, that supports RTX cards. I have went through many. It seems no one has been able to figure out how the hidden NVAPI methods for the cards, the only thing I have found is that the reason is likely because RTX cards have dual fan control.
|
I am a programmer myself, I wrote a C++ command line script that works for AMD, that controls fans. I just am not hugely familiar with rust, but if there is something you need me to try to or look at code-wise, I am familiar with how NVAPI works at this point, and have been picking apart the script enough to understand the basics of it. |
I believe I found where the error is. It seems like GPU handles are not properly allocated here so |
No problem. I found the C# NVAPIwrapper github, and build a simple program to control fans. It seems like it worked fine for GTX, but the dual fans in RTX cards were not responding. I'm pretty sure they are using the same methods as your NVAPI wrapper. https://github.com/falahati/NvAPIWrapper
I don't think your rust wrapper will work with RTX series cards, regardless of it is working or not. NVIDIA has the methods for RTX fan control in Windows locked down/hidden good. Its frustrating. |
NVAPI is a mess of semi-hidden stuff with minimal documentation. However per-GPU coolers are essentially an array of length |
Nvapiwrapper has it set. What I get when running their method on RTX cards is It seems that its not that its not an issue of targeting coolers, but that the method is not available for RTX GPU entirely. Or maybe NVAPIWrapper coded it wrong, but theirs works on GTX cards no problem. I think NVIDIA may have a new method to set coolers for RTX cards. I am going to consult linux nvctrl.h, and see if they have a separate function for it, with a different address or something as homework. |
This is what I see I when I set fan with a manufacturer controller. Just thought I would share. |
One thing at a time! If you want to build from source here's the patch to master. |
First one is gpu 0, which is GTX card. It doesn't change speed, but no errors. |
May I also have the output of For the GTX 1070 is normal that the fan is at 0 since by default it will kick in once T ≥ 41C. Otherwise is a bit strange that no fans are found for the RTXs. I'm wondering if this is problem with my code or NVAPI. Need to investigate further... |
What I have found from poking at manufacturer software, is that there is two different calls for NVIDIA fans. GTX uses a call like yours:
While RTX uses a different call:
Both of them proceed:
and
Likely to determine fan control state needs to be set to manual, and which function to use (old or new). |
It is probably the case that the handling of per-fan speed is different for RTX. However we should still be able to enumerate the fans regardless but listing of fans fails (that's why the output of That being said the signature |
I was wrong For GTX the function call is this:
For RTX, it goes straight to this:
I assume the unsigned long are meant to simulate NVU32 values. I'm not sure what the rest are. |
I have also been talking about it here, if it interests you. |
I give up. Stupid NVIDIA ...We can't control our own fans in Windows, thought its as simple as pie in linux. The only thing I have figured out I believe is 100% is: ClientFanCoolers_SetControl( [gpu handle] , ?, ?, [fan speed %] , ?, ? ) NvAPI_QueryInterface(0x814B209F) I spent waaaay too much time on this at this point. Its frustrating that NVIDIA has to be so annoying and not release methods. Most people want to keep their cards cooler than their factory settings. |
We figured out new fan methods in windows. He solved in his wrapper, and I confirmed it works for him. Just letting you know, if you wanted to make a Rust version. If you write something and need testing, just tag me. |
Yes I was monitoring the other thread. There are indeed different functions for RTX cards. I will try to code that path in once I have some time over the next few days. I'm definitely going to need some help testing. |
Following from #23 a test binary should print all fans for the card and their current levels and RPMs. |
Paging @Gordin Ideally I'd like to have the following
Again thanks for helping me debug this!! |
OK so it looks like it's working but could you please actually produce some load on the GPU so that the curve kicks in? That's the only way to check if the The As for the flicker bit: please check. I don't have this issue with my card (fan is always ON) so I can't test it. All the lower level bits are abstracted away so if the curve is applied I can't see any reason why it won't work. |
OK, I tested with load and Reading the Coolers works, but Setting does not. When I first tested it, it looked like nvfancontrol was competing with Afterburner in setting the fan speed to 0, so I assumed it was working.
but that's expected I guess because my card wants the |
Yes, obviously because I did not update |
OK this one looks like it's working without crashing. Give it a shot :-) |
It works now :)
|
That's good! We're getting closer. It's still unclear whether there is indeed a NVAPI call for the For fanflicker we should probably involve @tzh1043 as the original author of that code, but this is not relevant to this issue; open a new issue if you want to pursue it further. |
Hm, from what I've seen in the debugger I think it is an NVAPI call. All the NVAPI calls from afterburner have the same structure, and they all have the magic number value hardcoded in them. I'll see if I have time today to look at this again, I can probably find the magic value and at least the number of arguments. |
Nevermind, |
OK, this points to a bitmask. For me it's |
Yup :) I've been digging around and I think the gpuFeatures that Afterburner knows actually come from a call to Still have to figure out how exactly the response ends up in the bitmap |
Throttling down below 32% still does not have any effect on my GeForce RTX 2060 at WIN10. Using nvfancontrol from here.
|
If you can't get it lower that a threshold you're most probably firmware limited. I can't get my card under 30-ish% either. On most cards there is a lower limit you can get the fan before it turns off (if it switches off). It will be either 0 or 30-80%. Some cards can do 20-80, or even 15-80 but that's really up to the manufacturer of the card. |
Ok, thank you for your comment. Interesting fact is that as long as my PC is in mainboard BIOS the fans are at lower speed. Rotation speed is about 500-600rpm. |
My 2070 Super I've tested this with seems to be unlocked, I can get the fans to spin as low as ~24%, but if I go lower the fans just turn off and don't get enough power to start back up again and are stuck in a loop of trying to start and failing. When that happens they don't spin up correctly anymore until I set them at least to ~40%. |
Hello,
I was trying your controller in windows. I have multiple GPUs.
It doesn't seem like they all show up.
So I tried to set a fan speed:
So I tried -g 0 (but instructions say must be > 0 )
Am I using it wrong? I placed the recent nvapi .dll's in source directory, just like instructions.
Setup:
Mixture of RTX & GTX cards (8 total). I am trying to find a command line tool that will set fan speed for both. 64-bit Windows 10
The text was updated successfully, but these errors were encountered: