0

I received an older PC from my friend which is equipped with an MSI Nvidia GTX 970. The graphics card's fans were not working properly anymore and wobbled around which caused inconsistent cooling behavior. I removed the old fans and replaced them with 2 Arctic P12 PWM PST in a similar, zip-tie based fashion, as shown in this video. Now both fans work properly but I'm unable to figure out how to correctly regulate their speeds.

There are 2 possibilities (both fans connected via PST):

  1. Connecting the open fan header to a SYS_FAN / CHA_FAN header on the motherboard
  2. Connecting the open fan header to the header on the GPU

The GTX uses a 6pin header with PIN 1,3,4 connecting PWM,Ground,+V to the fans and PIN 2,6 being the tach signals of the fans. I would therefore have to connect the fan PST header to pins 1,3,4 and 2 or 6. The layout of the cable prevents me from using pin 2, so I am forced to use pin 6, which seems to be faulty because nvidia-smi reports fan speeds of 0% although the fans are spinning. Although I would prefer this option as the GPU will do all the PWM handling, I cannot pinpoint the issue and fix the incorrect fan speeds. Hence, I'll have to stick to option 1,

Using this option, I've stumbled upon fancontrol which seems quite promising for my use case, but as of right now when setting up the sensor which should be monitored I do not find the GPU Temp sensor.

What can I do to make the fans spin w.r.t. GPU temps? This means, I either get to monitor GPU temps via fancontrol or fix incorrect RPM measurement when using the GPU header.

MB: Asus Z97-A
pwmconfig output with nvidia control panel (note none of the temps is matching)
sensors output:

nct6791-isa-0290
Adapter: ISA adapter
Vcore:                 848.00 mV (min =  +0.00 V, max =  +1.74 V)
in1:                     1.02 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
AVCC:                    3.33 V  (min =  +2.98 V, max =  +3.63 V)
+3.3V:                   3.33 V  (min =  +2.98 V, max =  +3.63 V)
in4:                   1000.00 mV (min =  +0.00 V, max =  +0.00 V)  ALARM
in5:                     1.98 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in6:                     0.00 V  (min =  +0.00 V, max =  +0.00 V)
3VSB:                    3.39 V  (min =  +2.98 V, max =  +3.63 V)
Vbat:                    3.25 V  (min =  +2.70 V, max =  +3.63 V)
in9:                     1.02 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in10:                    0.00 V  (min =  +0.00 V, max =  +0.00 V)
in11:                  920.00 mV (min =  +0.00 V, max =  +0.00 V)  ALARM
in12:                    0.00 V  (min =  +0.00 V, max =  +0.00 V)
in13:                   88.00 mV (min =  +0.00 V, max =  +0.00 V)  ALARM
in14:                    0.00 V  (min =  +0.00 V, max =  +0.00 V)
fan1:                     0 RPM  (min =    0 RPM)
fan2:                   418 RPM  (min =    0 RPM)
fan3:                     0 RPM  (min =    0 RPM)
fan4:                     0 RPM  (min =    0 RPM)
fan5:                     0 RPM  (min =    0 RPM)
fan6:                     0 RPM  (min =    0 RPM)
SYSTIN:                 +27.0°C  (high =  +0.0°C, hyst =  +0.0°C)  ALARM  sensor = thermistor
CPUTIN:                 +28.5°C  (high = +80.0°C, hyst = +75.0°C)  sensor = thermistor
AUXTIN0:               +127.0°C    sensor = thermistor
AUXTIN1:               -128.0°C    sensor = thermistor
AUXTIN2:                +30.0°C    sensor = thermistor
AUXTIN3:               +127.0°C    sensor = thermistor
PECI Agent 0:           +27.5°C  
PCH_CHIP_CPU_MAX_TEMP:   +0.0°C  
PCH_CHIP_TEMP:           +0.0°C  
PCH_CPU_TEMP:            +0.0°C  
intrusion0:            ALARM
intrusion1:            ALARM
beep_enable:           disabled

acpitz-acpi-0
Adapter: ACPI interface
temp1:        +27.8°C  (crit = +105.0°C)
temp2:        +29.8°C  (crit = +105.0°C)

coretemp-isa-0000
Adapter: ISA adapter
Package id 0:  +35.0°C  (high = +80.0°C, crit = +100.0°C)
Core 0:        +32.0°C  (high = +80.0°C, crit = +100.0°C)
Core 1:        +32.0°C  (high = +80.0°C, crit = +100.0°C)
Core 2:        +30.0°C  (high = +80.0°C, crit = +100.0°C)
Core 3:        +33.0°C  (high = +80.0°C, crit = +100.0°C)

1 Answer 1

0

I solved this issue by writing a small python script run on startup that grep -P \d{1,3}(?=C)s the temperature from nvidia-smi. This temperature is internally used to calculate a PWM number (0, 255) which is then written to the /etc/fancontrol file provided initially by pwmconfig:

...(leave INTERVAL, FCTEMPS, FCFANS untouched as we will do this programmatically)
MINTEMP=0
MAXTEMP=1
MINSTART=hwmon/pwm/={PWM}
MINSTOP=hwmon/pwm/={PWM}
MINPWM=hwmon/pwm/={PWM}
MAXPWM=hwmon/pwm/={PWM}+1

followed by sudo service fancontrol restart.

2
  • How is this done dynamically? I understand you continuously read the Nvidia GPU temperature, convert it in to a PWM number, this number is written to the pwmconfig. How does fancontrol continuously notified of the updated config? Is fancontrol restarted every time? Seems odd. Can you elaborate how you did this? Commented Mar 25 at 12:01
  • You are correct @Visionscaper. Back then I was restarting the fancontrol service repeatedly to trigger the changes. However, I think this is not a perfect solution and worked at that time. But nowadays (with a lot more low-level understanding of linux and services) I would probably not opt for this solution.
    – mortom123
    Commented Mar 26 at 10:10

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .