Difference between revisions of "Fan speed control"
Kynikos.bot (talk | contribs) (remove language suffix from Category:CPU (English), see Talk:Table of Contents#English Category Names: Capitalization and Conflict with i18n) |
Kynikos.bot (talk | contribs) (Template:i18n is deprecated, use interlanguage links, see Help talk:I18n#"Dummy" interlanguage links and deprecation of Template:i18n) |
||
Line 1: | Line 1: | ||
[[Category:CPU]] | [[Category:CPU]] | ||
− | + | [[it:Fan Speed Control]] | |
− | + | [[ru:Fan Speed Control]] | |
Controlling the speed (and sound!) of your CPU fan is easy! | Controlling the speed (and sound!) of your CPU fan is easy! | ||
Revision as of 10:39, 13 June 2012
Controlling the speed (and sound!) of your CPU fan is easy!
Contents
lm-sensors
First, you need to set up lm_sensors.
Once you have lm_sensors installed, you should have a read-out with sensors
.
$ sensors coretemp-isa-0000 Adapter: ISA adapter Core 0: +29.0°C (high = +76.0°C, crit = +100.0°C) coretemp-isa-0001 Adapter: ISA adapter Core 1: +29.0°C (high = +76.0°C, crit = +100.0°C) coretemp-isa-0002 Adapter: ISA adapter Core 2: +31.0°C (high = +76.0°C, crit = +100.0°C) coretemp-isa-0003 Adapter: ISA adapter Core 3: +29.0°C (high = +76.0°C, crit = +100.0°C) it8718-isa-0290 Adapter: ISA adapter Vcc: +1.14 V (min = +0.00 V, max = +4.08 V) VTT: +2.08 V (min = +0.00 V, max = +4.08 V) +3.3V: +3.33 V (min = +0.00 V, max = +4.08 V) NB Vcore: +0.03 V (min = +0.00 V, max = +4.08 V) VDRAM: +2.13 V (min = +0.00 V, max = +4.08 V) fan1: 690 RPM (min = 10 RPM) temp1: +37.5°C (low = +129.5°C, high = +129.5°C) sensor = thermistor temp2: +25.0°C (low = +127.0°C, high = +127.0°C) sensor = thermal diode
If your output does not display an RPM value for your CPU fan, and you are positive it is running, you need to increase the fan divisor. If your fan speed is shown and higher than 0, skip the next step.
Increasing fan_div
The first line of the sensors output is the chipset your motherboard uses to read the speeds, temperatures, and voltages.
Create your libsensors configuration file by copying the default libsensors' configuration file to /etc/sensors.d/
# cp /etc/sensors3.conf /etc/sensors.d/sensors.conf
Edit /etc/sensors.d/sensors.conf
and look up your exact chipset. A few chipset names are similar, so make sure the one you are editing is yours. Add the line 'set fanX_div 4' near the start of your chipset config, replacing X with the number of CPU fans your system has.
Save the file, and run as root:
# sensors -s
which will reload the sensors.conf's set variables. Run sensors again and check if there is an RPM readout. If not, increase the divisor to 8, 16 or 32. YMMV!
pwmconfig
/etc/fancontrol
on their own, which also saves them from hearing all of the fans at full speed.Once you have lm sensors properly configured, run pwmconfig
to test and configure speed control of your fans.
Follow the instructions in pwmconfig
to set up basic speeds.
The default configuration options should create a new file, /etc/fancontrol
.
Tweaking
echo "255" > /sys/class/hwmon/hwmon0/device/pwm1
to spin up the fan all the way until things cool down. Basically, you should know what you are doing before altering the configuration file.If you want more control, you will probably need to tweak the generated configuration. Here is a sample configuration file:
INTERVAL=10 DEVPATH=hwmon0=devices/platform/coretemp.0 hwmon2=devices/platform/w83627ehf.656 DEVNAME=hwmon0=coretemp hwmon2=w83627dhg FCTEMPS=hwmon0/device/pwm1=hwmon0/device/temp1_input FCFANS= hwmon0/device/pwm1=hwmon0/device/fan1_input MINTEMP=hwmon0/device/pwm1=20 MAXTEMP=hwmon0/device/pwm1=55 MINSTART=hwmon0/device/pwm1=150 MINSTOP=hwmon0/device/pwm1=105
- INTERVAL: how often the daemon should poll CPU temps and adjust fan speeds. INTERVAL is in seconds.
The rest of the configuration file is split into (at least) two values per configuration option. Each configuration option first points to a PWM device which is written to which sets the fan speed. The second "field" is the actual value to set. This allows you to monitor and control multiple fans and temperatures (if your PC supports it).
- FCTEMPS: The temperature input device to read for cpu temperature. The above example corresponds to
/sys/class/hwmon/hwmon0/device/temp1_input
. - FCFANS: The current fan speed, which can be read (like the temperature) in
/sys/class/hwmon/hwmon0/device/fan1_input
- MINTEMP: The temperature (°C) at which to SHUT OFF the CPU fan. Efficient CPUs often will not need a fan while idling. Be sure to set this to a temperature that you know is safe. Setting this to 0 is not recommended and may ruin your hardware!
- MAXTEMP: The temperature (°C) at which to spin the fan at its MAXIMUM speed. This should be probably be set to perhaps 10 or 20 degrees (°C) below your CPU's critical/shutdown temperature. Setting it closer to MINTEMP will result in higher fan speeds overall.
- MINSTOP: The PWM value at which your fan stops spinning. Each fan is a little different. Power tweakers can
echo
different values (between 0 and 255) to/sys/class/hwmon/hwmon0/device/pwm1
and then watch the CPU fan. When the CPU fan stops, use this value. - MINSTART: The PWM value at which your fan starts to spin again. This is often a higher value than MINSTOP as more voltage is required to overcome inertia.
There are also two settings fancontrol needs to verify the configuration file is still up to date. The lines start with the setting name and a equality sign, followed by groups of hwmon-class-device=setting, seperated by spaces. You need to specify each setting for each hwmon class device you use anywhere in the config, or fancontrol will not work.
- DEVPATH: Sets the physical device. You can determine this by executing the command
readlink -f /sys/class/hwmon/<hwmon-device>/device | sed -e 's/^\/sys\///'
- DEVNAME: Sets the name of the device. Try
cat /sys/class/hwmon/<hwmon-device>/device/name | sed -e 's/[[:space:]=]/_/g'
fancontrol
Try to run fancontrol:
/usr/sbin/fancontrol
It should start up and you will probably hear your CPU fan spin down.
If fancontrol is working, you may want to start up fancontrol
at boot via /etc/rc.conf
.
Most of this HOWTO is from the [Ubuntu forums] and the [Ubuntu guide].
Simple Bash script to fine tune fan speed
Run this as root if you would like to see how various pwm values translate into fan RPM. As you can see, this script assumes that you have fancontrol running and disables it for you, then re-enables it when you are finished.
#!/bin/bash clear ################################################# # change the following lines to match your system ################################################# pwmcontrol=/sys/class/hwmon/hwmon4/device/pwm1 fanrpmread=/sys/class/hwmon/hwmon4/device/fan1_input # do not edit below this line ################################################# log=`pwd`/fandata.log echo "PWM,RPM" > $log echo "This script will set your PWM to values from full power down to 0 decreasing in" echo "approx 5 % steps and pausing 10 sec between steps to allow the fan RPM to catch" echo "up to the new settings. Data are logged to ${log}" echo "which can be used to generate a graph or use as-is." collectdata() { array=( 255 242 230 217 204 191 178 165 152 139 126 113 100 87 74 48 22 0 ) for item in ${array[*]} do echo $item > $pwmcontrol sleep 10s rpm=`cat ${fanrpmread}` echo $item,$rpm >> $log echo "PWM: ${item} RPM: ${rpm}" done } /etc/rc.d/fancontrol stop echo "1" > ${pwmcontrol}_enable collectdata echo "0" > ${pwmcontrol}_enable /etc/rc.d/fancontrol start