Ben's notes

Linux, Unix, network, radio...

User Tools

Site Tools


temperature_control

Temperature control CentOS / Fedora

Control the fan speed to reduce noise.

Retrieve useful information

  • Install lm_sensors:
    # dnf install lm_sensors
  • Run sensors-detect, accept the defaults.
  • View the output of the sensors command.
    # sensors
    nouveau-pci-0100
    Adapter: PCI adapter
    GPU core:     +0.90 V  
    temp1:        +60.0°C  (high = +95.0°C, hyst =  +3.0°C)
                           (crit = +105.0°C, hyst =  +5.0°C)
                           (emerg = +135.0°C, hyst =  +5.0°C)
    
    coretemp-isa-0000
    Adapter: ISA adapter
    Physical id 0:  +42.0°C  (high = +80.0°C, crit = +98.0°C)
    Core 0:         +38.0°C  (high = +80.0°C, crit = +98.0°C)
    Core 1:         +40.0°C  (high = +80.0°C, crit = +98.0°C)
    Core 2:         +40.0°C  (high = +80.0°C, crit = +98.0°C)
    Core 3:         +41.0°C  (high = +80.0°C, crit = +98.0°C)
    
    it8728-isa-0290
    Adapter: ISA adapter
    in0:          +1.04 V  (min =  +0.00 V, max =  +3.06 V)
    in1:          +0.08 V  (min =  +0.00 V, max =  +3.06 V)
    in2:          +2.95 V  (min =  +0.00 V, max =  +3.06 V)
    +3.3V:        +3.34 V  (min =  +0.00 V, max =  +6.12 V)
    in4:          +0.01 V  (min =  +0.00 V, max =  +3.06 V)
    in5:          +0.82 V  (min =  +0.00 V, max =  +3.06 V)
    in6:          +1.54 V  (min =  +0.00 V, max =  +3.06 V)
    3VSB:         +3.36 V  (min =  +0.00 V, max =  +6.12 V)
    Vbat:         +2.86 V  
    fan1:         769 RPM  (min =    0 RPM)
    fan2:           0 RPM  (min =    0 RPM)
    temp1:        +37.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = thermistor
    temp2:        +43.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = thermistor
    temp3:        +29.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = Intel PECI
    intrusion0:  ALARM
  • Find a reliable temperature sensor, for example run a CPU stress test. In this case temp3 seems to be a reliable sensor:
    # before stressing the CPU:
    temp3:        +29.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = Intel PECI
    
    # during the CPU stress test (stress -c 4)
    temp3:        +58.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = Intel PECI

Configure with pwmconfig

  • If needed, stop the fancontrol process:
    systemctl stop fancontrol
  • Run pwmconfig.
    • Fan hwmon2/device/fan1_input was the only fan found.
    • The above fan is controlled by hwmon2/device/pwm1.
    • The correlation between PWM and FAN was:
          PWM 255 FAN 2351
          PWM 240 FAN 2265
          PWM 225 FAN 2136
          PWM 210 FAN 1997
          PWM 195 FAN 1854
          PWM 180 FAN 1717
          PWM 165 FAN 1577
          PWM 150 FAN 1430
          PWM 135 FAN 1280
          PWM 120 FAN 1125
          PWM 105 FAN 965
          PWM 90 FAN 802
          PWM 75 FAN 629
          PWM 60 FAN 0
          Fan Stopped at PWM = 60
    • Note than PWM hwmon2/device/pwm3 also controlled the same fan, but correlation was not good.
    • Set up device hwmon2/device/pwm1
    • Select temperature sensor temp3_input
    • Low temperature: 25 degree C.
    • High temperature: 60 degree C.
    • fan STOPS spinning at: 50 (use safe value)
    • fan STARTS spinning at: 80 (use safe value)
    • PWM value for temperature below limit: 0
    • PWM value for temperature over limit: 255
    • Save and quit.

fancontrol service

  • Enable fancontrol at boot:
    systemctl enable fancontrol
  • Start fancontrol:
    systemctl start fancontrol

pwmconfig generated configuration file

/etc/fancontrol

# Configuration file generated by pwmconfig, changes will be lost
INTERVAL=10
DEVPATH=hwmon2=devices/platform/it87.656
DEVNAME=hwmon2=it8728
FCTEMPS= hwmon2/device/pwm1=hwmon2/device/temp3_input
FCFANS=hwmon2/device/pwm3=hwmon2/device/fan1_input  hwmon2/device/pwm1=hwmon2/device/fan1_input
MINTEMP= hwmon2/device/pwm1=25
MAXTEMP= hwmon2/device/pwm1=60
MINSTART= hwmon2/device/pwm1=80
MINSTOP= hwmon2/device/pwm1=50
MINPWM=hwmon2/device/pwm1=0

Addition information

List hwmon sensors

ls /sys/class/hwmon/ -al

total 0
drwxr-xr-x.  2 root root 0  8 jun 12:40 .
drwxr-xr-x. 52 root root 0  8 jun 12:40 ..
lrwxrwxrwx.  1 root root 0  8 jun 10:15 hwmon0 -> ../../devices/pci0000:00/0000:00:01.0/0000:01:00.0/hwmon/hwmon0
lrwxrwxrwx.  1 root root 0  8 jun 10:16 hwmon1 -> ../../devices/platform/coretemp.0/hwmon/hwmon1
lrwxrwxrwx.  1 root root 0  8 jun 12:39 hwmon2 -> ../../devices/platform/it87.656/hwmon/hwmon2

Show labels

Does not work on all (newer?) systems.

cd /sys/class/hwmon/hwmon2/device
grep "" temp*label

temp1_label:SYSTIN
temp2_label:CPUTIN
temp3_label:AUXTIN
temp6_label:PECI Agent 0

Supermicro / CentOS 6

I had to change /usr/sbin/fancontrol to set value 5 on reset instead of 0

        # Try pwmN_enable=5
        echo 5 > $ENABLE 2> /dev/null
        if [ `cat $ENABLE` -eq 5 ]
temperature_control.txt · Last modified: 2021/10/09 15:14 by 127.0.0.1