Difference between revisions of "Talk:Problem with fan noise"

From ThinkWiki
Jump to: navigation, search
(Fan Control script: more save version: removed the notes that related to the older script)
(Fan Control script)
Line 56: Line 56:
  
 
== Fan Control script ==
 
== Fan Control script ==
ibm_acpi works well on my R50 and R51. But to rely on it completely, this script provides some safety functionality:
+
ibm_acpi usually works well. But to rely on it completely, this script provides some safety functionality:
 
# It catches verious signals and turns the fan on before it quits.
 
# It catches verious signals and turns the fan on before it quits.
 
# It turns off the fan under very strict conditions, leaving it on when unexpected errors occur.
 
# It turns off the fan under very strict conditions, leaving it on when unexpected errors occur.

Revision as of 01:41, 13 August 2005

Problem with fan noise on R51 1829 L7G (ATI M9)

On my R51 the fan is behaving like this:

  • > 45C -> fan on;
  • < 38C -> fan off.

By using cpufreq + laptop_mode + Xorg DynamicClocks + WiFi power management, I get the fan stopped time to time, but only for 3 minutes time (transition from 38 C -> 45 C). The cooling down cycle is taking 20 minutes in the best case.

I knew about the 'ibm_acpi experimental=1' trick, but in my opinion this is not very useful since nobody can guarantee that a temperature greater then 45 C will not damage the laptop and in the same time the transition time is very short (the laptop gets hot fast without fan).

Thinkpad T42 Radeon Mobility M7

When Xorg is running, the fan is always one and pretty loud ! Setting DynamicClocks does not help

it's clear that the GPU is the problem on the thinkpad :

after 10minutes with the fan off temperatures: 44 47 33 52 32 -128 24 -128

1: CPU 2: Mini PCI Module 3: HDD 4: GPU 5: Battery 6: N/A 7: Battery 8: N/A

Controlling the fan speed would be really cool !

What is the maximum temperature not to cross ?


Older versions of xorg (i.e. 6.7.0) don't seem to be able to use the DynamicClocks option although it's set in the xorg.conf. Search the log to find out if it's really used.

Thinkpad R32 with Radeon Mobility M6

Updating xorg-x11 from 6.7.0 to 6.8.2 and using Speedstep (with the ondemand module in this case) helped cooling the system down significantly:

  • before updating the CPU was ~62 C in idle state, and got very near the critical temperature (72 C) during heavy load - I even got some freezes because of the heat ;)
  • after the update the CPU is ~54 C in idle state, and still gets to about 68 C while under heavy load

The second sensor (which may be the GPU) is somehow fixed to 50 C (maybe a bug?)

The fan on the R32 is behaving like this:

  • > 61 -> fan in state 2 (quite noisy)
  • < 55 -> fan in state 1 (less noisy :) )

But I remember using my old SuSE distribution with kernel 2.4.16, apm and some old x11 version the fan actually stopped completely from time to time.

Concerning the maximum temperature of the CPU, I found that the critical temperature on the R32 for the CPU sensor is 72 C (using # cat /proc/acpi/thermal_zone/THM0/trip_points )

Fan Control script

ibm_acpi usually works well. But to rely on it completely, this script provides some safety functionality:

  1. It catches verious signals and turns the fan on before it quits.
  2. It turns off the fan under very strict conditions, leaving it on when unexpected errors occur.
#!/bin/sh

# july 2005 Erik Groeneveld, erik@cq2.nl
# It makes sure the fan is on in case of errors
# and only turns it off when all temps are ok.

IBM_ACPI=/proc/acpi/ibm
THERMOMETER=$IBM_ACPI/thermal
FAN=$IBM_ACPI/fan
MAXTRIPPOINT=65
MINTRIPPOINT=60
TRIPPOINT=$MINTRIPPOINT

echo fancontrol: Thermometer: $THERMOMETER, Fan: $FAN
echo fancontrol: Current `cat $THERMOMETER`
echo fancontrol: Controlling temperatures between $MINTRIPPOINT and $MAXTRIPPOINT degrees.

# Make sure the fan is turned on when the script crashes or is killed
trap "echo enable > $FAN; exit 0" HUP KILL INT ABRT STOP QUIT SEGV TERM

while [ 1 ];
do
       command=enable
       temperatures=`sed s/temperatures:// < $THERMOMETER`
       result=
       for temp in $temperatures
       do
               test $temp -le $TRIPPOINT && result=$result.Ok
       done
       if [ "$result" = ".Ok.Ok.Ok.Ok.Ok.Ok.Ok.Ok" ]; then
               command=disable
               TRIPPOINT=$MAXTRIPPOINT
       else
               command=enable
               TRIPPOINT=$MINTRIPPOINT
       fi
       echo $command > $FAN
       # Temperature ramps up quickly, so pick this not too large:
       sleep 5
done