tuxedocomputers/tuxedo-control-center

Disable min fan speed at 76° and separate fan speed for GPU and CPU

Opened this issue · 20 comments

Is it somehow possible to disable the minimum fan speed at 76°? It is not possible to set the fan speed lower than 40. At this speed the fans are sometimes way to loud.

fan1

And speaking about loud fans: It would be really great to separate the fans speed control for GPU and CPU fans. This would also make more sense. Some games are more CPU or GPU heavy and it would make sense to separate this.

Thanks for your work so far! :-)

I did it locally like look for these lines in fan-graph.component.ts

  •    const offsetDisableCondition = this.offsetFanspeed < 0 && entry.temp > 75;
    

FanControlLogic.ts and

  •    const offsetDisableCondition = this.offsetFanspeed < 0 && effectiveTemperature > 75;
    

and change 75 to -> 90 (or whatever u want as new max temp)

than build and deploy.

Great, I will try it out but this is my first time doing this. I assume I have to follow the Development setup guide on the main page to do this? Do I have to copy all the files again in the right folder or only some files?

Install git, gcc, g++, make, nodejs, npm and libudev-dev
Ex (deb):

curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -

sudo apt install -y git gcc g++ make nodejs libudev-dev

Clone & install libraries

git clone https://github.com/tuxedocomputers/tuxedo-control-center

cd tuxedo-control-center

npm install

Note: Do not continue with npm audit fix. Known to cause various issues.

Install service file that points to development build path (or use installed service from packaged version)

Manual instructions:

    Copy tccd.service and tccd-sleep.service (from src/dist-data) to /etc/systemd/system/
    Edit the tccd.service (exec start/stop) to point to <dev path>/dist/tuxedo-control-center/data/service/tccd.
    Copy com.tuxedocomputers.tccd.conf to /usr/share/dbus-1/system.d/
    Start service systemctl start tccd. (And enable for autostart systemctl enable tccd tccd-sleep)

if u manages to build it and u have the deb u can just install it.
I had to install node manually some headers to $HOME/opt/node-v16.19.1-headers.tar.gz
and this is my built script:

set -e
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
nvm use 16.19.1
npm config set tarball $HOME/opt/node-v16.19.1-headers.tar.gz
npm install --force 
npm run build
npm run pack-prod -- deb

echo sudo dpkg -i dist/packages/tuxedo-control-center*.deb
echo sudo apt-mark hold tuxedo-control-center

I'm no expert either but this worked for me on Ubuntu

Sorry that patch I posted it's for an older version. Looks like that change that.
it's probably these one u need to change

 const minimumCriticalFanSpeed: number = 40;
        const criticalTemp: number = 75;

I haven't yet tried this

Sorry that patch I posted it's for an older version. Looks like that change that. it's probably these one u need to change

 const minimumCriticalFanSpeed: number = 40;
        const criticalTemp: number = 75;

I haven't yet tried this

I managed to build it. Thanks for your build script! That helped a lot.

These are my steps:

> curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
> sudo apt install -y git gcc g++ make nodejs libudev-dev
> git clone https://github.com/tuxedocomputers/tuxedo-control-center
> cd tuxedo-control-center
> wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
> export NVM_DIR="$HOME/.nvm"
> [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
> nvm --version nvm 0.39.7
> wget https://nodejs.org/dist/v16.19.1/node-v16.19.1.tar.gz
> mv node-v16.19.1.tar.gz node-v16.19.1-headers.tar.gz
> mkdir /home/linux/opt
> mv node-v16.19.1-headers.tar.gz /home/linux/opt/
> nvm install 16.19.1
> nvm use 16.19.1
> npm config set tarball $HOME/opt/node-v16.19.1-headers.tar.gz
> npm install --force 
> npm run build
> npm run pack-prod -- deb

Unfortunately changing the numbers in the file will be ignored. Yes, you can pull down the max fan speed up to 100°C, but at 76° the fans will spinning at 40 like before. You can´t also pull down the slider like in the first picture under 40.

Do you have any more idea?

Did u change const minimumCriticalFanSpeed: number = 40 ? to like 20 or 0 ?
it's there in 2 places.

Edit 2: It is working now! Thank you @silles79
Edit: I read this Issue again and i have to change the numbers in fan-graph.component.ts and FanControlLogic.ts. My mistake. I will change the numbers, build and test again.

Thats my config:

  /**
     * Ensure minimum fan speed if temperature is high
     */
    private manageCriticalTemperature(temp: number, speed: number): number {
        const minimumCriticalFanSpeed: number = 0;
        const criticalTemp: number = 90;

        if (temp > criticalTemp && speed < minimumCriticalFanSpeed) {
            speed = minimumCriticalFanSpeed;
        }
        return speed;

I didn´t find another place to change the numbers.

That's how it look like at the moment. I can control the fan at a constant level but the 76° will be ignored and the fans are jumpint to 40 again.
Bildschirmfoto vom 2024-01-28 11-16-20

Cant show you the Temperature adn fan speed in TCC because (i think) there is a bug with the new version. But CPU & GPU Speed is the same, so you can see, the fan is at 40.
Bildschirmfoto vom 2024-01-28 17-04-45
Bildschirmfoto vom 2024-01-28 17-00-17

After some gaming on my Notebook with Linux, I'm impressed.
But it really would make sense to separate the fan speed for GPU and CPU.

Here is an example with Dirt Rally 2.0.

Bildschirmfoto vom 2024-01-30 20-14-33

The difference between GPU and CPU is 10 °C. So I could lower the CPU fan and speed up the GPU fan. This is more comfortable because of the noise. There are more games which need more GPU Power than CPU. Somtetimes the differnece is 15°C. Depends on the game/settings.

The Nvidia Card don't go above ~86-87°C because of "Thermal Slowdown".

`==============NVSMI LOG==============

Timestamp : Tue Jan 30 20:19:10 2024
Driver Version : 535.154.05
CUDA Version : 12.2

Attached GPUs : 1
GPU 00000000:01:00.0
Performance State : P0
Clocks Event Reasons
Idle : Not Active
Applications Clocks Setting : Not Active
SW Power Cap : Not Active
HW Slowdown : Not Active
HW Thermal Slowdown : Not Active
HW Power Brake Slowdown : Not Active
Sync Boost : Not Active
SW Thermal Slowdown : Active
Display Clock Setting : Not Active

`

Hello,

well, 40% Fanspeed at 75°C is already a pretty low fan-speed for such a high temp. This is a security value to prevent your device from overheating or burning down in worst case. Of course we now about automated throtteling and all the other auto-shutdowns built into the CPUs, but there could be situations in which these other things are coming too late!
But however, we will consider so setting a lower fan-speed and/or higher the "security temp" a bit.

about the same fan speed for both fans:
one faster running fan is louder than two slow running fans! With dual fans and connected heatpipes you have the ability to run both fans but on a very low value! this leads into langer lasting boot tdp/tgp or freq! one for all, all for one :D

Hello,

well, 40% fan speed at 75°C is already a pretty low fan speed for such a high temp. This is a security value to prevent your device from overheating or burning down in worst case. Of course we now about automated throtteling and all the other auto-shutdowns built into the CPUs, but there could be situations in which these other things are coming too late! But however, we will consider so setting a lower fan speed and/or higher the "security temp" a bit.

I understand this security solution and you just want to take care of the hardware. But would you consider giving the user the choice?
Or handle it like "Obsidian-PC Fan-Control" where you can choose the critical temp and when the fan should ramp up to 100%.
Security Fans
Or Maybe a "Pro" Mode where the user first has to acknowledge the risk. At the moment I use the solution from @silles79 and building TCC it on my own but thanks you for consider my request.

about the same fan speed for both fans: one faster running fan is louder than two slow running fans! With dual fans and connected heatpipes you have the ability to run both fans but at a very low value! this leads into long lasting boot tdp/tgp or freq! one for all, all for one :D

I have to disagree. At the moment I'm dual-booting Linux and Windows on the same notebook. When I'm using Windows, I use "OBSIDIAN-PC Fan-Control for some years. In this Tool, it is possible to set the fan speed separately.
With TCC I have a comparison.

The noise of one faster fan in my feeling is not louder than both running fans. Maybe on low fan speeds. At high temps, this is a huge differnce. In some games or tasks, the temperature difference between GPU and CPU is high because some games/tasks are more CPU or GPU heavy.
Example while Windows installing Windows Updates. High CPU Temp, low GPU Temp.

CPU Temp while installing updates

GPU Fan Control

This feature seems also a long time wish of many users of TCC (take a look here in github or in /r/tuxedocomputers/. This feature in TCC and one Nvidia Bug are the last points for me to ditch Windows completely.

PLEASE consider to give us the possibility to take control of separate fan speed! Thank you for your work so far! It is a really good well designed tool.

@tuxedoherbert
As a compromise, I'd just change the speed at 70 to be minimum 15%, then 80 and 90 to be minimum 20% (20% ensures fanspin but barely audible) then 100 minimum 40 (this ensures some decent wind between 90 and 100ºC). Personally, at 100, I'd do 80, btw but allowing 40 is good.
Right now, at 74ºC, for the Polaris 17 AMD Gen 1 this:
image
Is way quieter than this (the minimum I can set):
image

Note that I'm using a custom target temperature for TDP cutoff, when I want quiet. I'm setting tctl-temp to 73 when I want to stay quiet. It will throttle to oblivion if needed to stay at or below 73º with this setting.

I don't mind a compromise that in order to lower the fan it requires reducing the tctl-temp to 90, at least (and whatever is equivalent in intel CPUs) but I still want to let the CPU go to 90 without having the fans blowing enough to push all sorts of paper around it.

When I want raw power, I then push them hard. I have a different profile I change to when I want raw power which currently has 80% as minimum fanspeed, by comparison.

@err0r2k I really would change between profiles for that. A profile for calm doing just random low perf stuff and another for gaming. It's easy to swap between them (I only press the performance button but you can right click in the tray icon and change the profile there)

@err0r2k I really would change between profiles for that. A profile for calm doing just random low perf stuff and another for gaming. It's easy to swap between them (I only press the performance button but you can right click in the tray icon and change the profile there)

I am already doing this. Low CPU clock and Auto performance level for GPU for low perf stuff. I am using more profiles for gaming and it depends on the game which I will use. I'm also using the nvidia-smi -lgc xxxx,xxxxx command to lower the GPU clock.

But here is another example where a separate GPU and CPU control could help.

Jagged Alliance 3.
Bildschirmfoto vom 2024-03-04 09-31-39
The temp difference is more than 10°C!
I lowered the GPU and CPU clock, but the temperature of the GPU is still high because this is a GPU demanded game.
With the FAN control for windows I can set the CPU fan to low and the GPU fan to high. The GPU and CPU keeps cool and the fan noise is not that high.

Whether both fans should be controllable together or separate should be considered based on the laptop. In my laptop's case, they have shared pipes, so, even the "wrong" fan can push a lot of heat out.
However, I agree an option to allow splitting the fans is very welcome. Basically allowing to have the old behavior where each fan was treated differently.

@tuxedoxt As a compromise, would you accept a PR with multi-level lower limits of:

  1. 70ºC -> minimum 15% (must have fanspin)
  2. 80ºC -> minimum 20%
  3. 90ºC -> minimum 20%
  4. 95ºC -> minimum 30%
  5. 100ºC -> minimum 40%
    ?

The 95% value is only enforced internally and does not appear with the sliders but it ensures that threshold is enforced.

I was told to change minimum to:

  • 0-79c: 0%
  • 80-89c: 30%
  • 90+c: 40%

It is merged but not released yet.

I can't find the commit.

I'd prefer 20 instead of 30 for noise reasons but I'll just swallow that. At least I can get better QOL with the fans that way.

I can't find the commit.

I meant it is currently in our private dev repo, it will be soon on Github. :)

I'd prefer 20 instead

I asked if 20% is still ok for 80c now, waiting for a reply.

I'd prefer 20 instead of 30 for noise reasons but I'll just swallow that. At least I can get better QOL with the fans that way.

I would also prefer 20% form 80-89°C instead of 30%.

Hello,

since around a week the improvements are now live!
https://github.com/tuxedocomputers/tuxedo-control-center/blob/master/CHANGELOG.md

Separated fan speeds is also on our list :)

Regards

Hello,

since around a week the improvements are now live! https://github.com/tuxedocomputers/tuxedo-control-center/blob/master/CHANGELOG.md

Separated fan speeds is also on our list :)

Regards

A big THANK YOU that you will making seperate fan speeds real. <3
I will test the update next week.