Ok langsam verzeifel ich doch.
Obwohl meine Temperatur bei 44°C liegt und ich ein Skript laufen habe, dass die Lüfter steuert, läuft der Lüfter durch. Ich habe das Gefühl, dass ich vor lauter konfigurieren irgendwo Sachen falsch eingestellt haben muss.
Meine Situation:
rc-update show :
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
acpid | battery default
alsasound | boot
apache2 |
bootmisc | boot
checkfs | boot
checkroot | boot
clock | boot
coldplug |
consolefont | boot
cpufreqd | battery default
cpufrequtils | battery default
crypto-loop |
cupsd |
dbus |
domainname | battery boot default
esound |
famd |
gpm |
hald | default
hdparm |
hibernate-cleanup |
hostname | boot
hotplug |
hsqldb |
ibm-fancontrol | battery default
ivman | default
keymaps | boot
laptop_mode | battery
lisa |
local | battery default nonetwork
localmount | boot
modules | boot
nas |
ncpufreqd |
net.eth0 | battery default
net.lo | boot
netmount | battery default
nscd |
ntp-client |
ntpd |
ntpdate |
numlock |
pm.eth0 | battery
pm.sda | battery
portmap |
pwcheck |
reslisa |
rmnologin | boot
rsyncd |
samba |
saslauthd |
sshd |
syndaemon |
syslog-ng | default
urandom | boot
vixie-cron | battery default
xdm | boot
|
lsmod:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
Module Size Used by
snd_pcm_oss 49888 0
snd_mixer_oss 17216 1 snd_pcm_oss
snd_seq_oss 34752 0
snd_seq_midi_event 6144 1 snd_seq_oss
snd_seq 51792 4 snd_seq_oss,snd_seq_midi_event
snd_seq_device 7116 2 snd_seq_oss,snd_seq
snd_intel8x0 30172 0
snd_ac97_codec 94432 1 snd_intel8x0
snd_ac97_bus 1792 1 snd_ac97_codec
snd_pcm 84488 3 snd_pcm_oss,snd_intel8x0,snd_ac97_codec
snd_timer 22532 2 snd_seq,snd_pcm
snd 50404 9 snd_pcm_oss,snd_mixer_oss,snd_seq_oss,snd_seq,snd_seq_device,snd_intel8x0,snd_ac97_codec,snd_pcm,snd_timer
snd_page_alloc 8520 2 snd_intel8x0,snd_pcm
ibm_acpi 28416 0
nvram 7560 0
fglrx 452940 7
intel_agp 20508 1
agpgart 29448 2 fglrx,intel_agp
ipw2200 180036 0
ieee80211 46376 1 ipw2200
ieee80211_crypt 5184 1 ieee80211
|
/etc/cpufreqd.conf
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
# this is a comment
#
# you need: 1 [General] section,
# 1 or more [Profile] sections
# 1 or more [Rule] sections
#
# a section ends at the first blank line
#
# [Rule] sample:
# [Rule]
# name=sample_rule
# ac=on # (on/off)
# battery_interval=0-10
# cpu_interval=30-60
# programs=xine,mplayer
# profile=sample_profile
#
# [Profile] sample:
# [Profile]
# name=sample_profile
# minfreq=10%
# maxfreq=100%
# policy=performance
#
# see CPUFREQD.CONF(5) manpage for a complete reference
[General]
pidfile=/var/run/cpufreqd.pid
poll_interval=2
pm_type=acpi #(acpi, apm or pmu)
# Uncomment the following line to enable ACPI workaround (see cpufreqd.conf(5))
# acpi_workaround=1
verbosity=4 #(if you want a minimal logging set to 5)
[Profile]
name=hi_boost
minfreq=10%
maxfreq=100%
policy=ondemand
[Profile]
name=medium_boost
minfreq=33%
maxfreq=66%
policy=ondemand
[Profile]
name=lo_boost
minfreq=0%
maxfreq=33%
policy=ondemand
[Profile]
name=lo_power
minfreq=0%
maxfreq=33%
policy=powersave
# conservative mode when not AC
[Rule]
name=conservative
ac=off # (on/off)
battery_interval=0-100
cpu_interval=0-40
profile=lo_boost
# need some power
[Rule]
name=lo_cpu_boost
ac=off # (on/off)
battery_interval=0-100
cpu_interval=30-80
profile=medium_boost
# need big power (not if battery very low)
[Rule]
name=hi_cpu_boost
ac=off # (on/off)
battery_interval=50-100
cpu_interval=70-100
profile=medium_boost
# full power when AC
[Rule]
name=AC_on
ac=on # (on/off)
profile=hi_boost
# full power when watching DVDs and not AC:
# this is the last rule and takes less
# precedence with respect to the others
[Rule]
name=dvd_watching
ac=off # (on/off)
battery_interval=0-100
programs=xine,mplayer,avidemux
cpu_interval=0-100
profile=hi_boost
|
/etc/conf.d/cpufrequtils
|
Quellcode
|
1
2
3
4
5
6
|
# /etc/conf.d/cpufrequtils: config file for /etc/init.d/cpufrequtils
# Which governor to use. Must be one of the governors listed in:
# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
#
GOVERNOR="userspace"
|
unter /proc/acpi/ibm/fan steht nur
|
Quellcode
|
1
2
3
|
status: disabled
speed: 4055
commands: enable, disable
|
Wenn noch jemand andere Infos benötigt bitte sagen.
Außerdem bleibt die CPU immer auf 800Mhz, obwohl unter cpufreq-info steht:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
|
cpufrequtils 0.4: cpufreq-info (C) Dominik Brodowski 2004
Report errors and bugs to linux@brodo.de, please.
analyzing CPU 0:
driver: centrino
CPUs which need to switch frequency at the same time: 0
hardware limits: 800 MHz - 2.00 GHz
available frequency steps: 2.00 GHz, 1.60 GHz, 1.33 GHz, 1.07 GHz, 800 MHz
available cpufreq governors: userspace
current policy: frequency should be within 800 MHz and 2.00 GHz.
The governor "userspace" may decide which speed to use
within this range.
current CPU frequency is 800 MHz.
|
weitere Ausgabe:
|
Quellcode
|
1
2
|
chiefcommander@denkbrett /proc/acpi/ibm $ cpufreqd-set dynamic
No cpufreqd socket found
|
die Datei, die zur Steuerung der Lüfter benutzt wird ist:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
|
#!/bin/bash
# tp-fancontrol 0.2.8 (http://thinkwiki.org/wiki/ACPI_fan_control_script)
# Provided under the GNU General Public License version 2 or later or
# the GNU Free Documentation License version 1.2 or later, at your option.
# See http://www.gnu.org/copyleft/gpl.html for the Warranty Disclaimer.
# This script dynamically controls fan speed on some ThinkPad models
# according to user-defined temperature thresholds. It implements its
# own decision algorithm, overriding the ThinkPad embedded
# controller. It also implements a workaround for the fan noise pulse
# experienced every few seconds on some ThinkPads.
#
# Run 'tp-fancontrol --help' for options.
#
# For optimal fan behavior during suspend and resume, invoke
# "tp-fancontrol -u" during the suspend process.
#
# WARNING: This script relies on undocumented hardware features and
# overrides nominal hardware behavior. It may thus cause arbitrary
# damage to your laptop or data. Watch your temperatures!
#
# WARNING: The list of temperature ranges used below is much more liberal
# than the rules used by the embedded controller firmware, and is
# derived mostly from anecdotal evidence, hunches and wishful thinking.
# It is also model-specific (see http://thinkwiki.org/wiki/Thermal_sensors).
# Temperature ranges, per sensor:
# (min temperature: when to step up from 0-th fan level,
# max temperature: when to step up to maximum fan level)
THRESHOLDS=( # Sensor ThinkPad model
# R51 T41/2 Z60t 43-26xx
# min max # ---------- ------- ----- ----- ---------------------------
50 70 # EC 0x78 CPU CPU ? CPU
47 60 # EC 0x79 miniPCI ? ? Between CPU and PCMCIA slot
43 55 # EC 0x7A HDD ? ? PCMCIA slot
49 68 # EC 0x7B GPU GPU ? GPU
40 50 # EC 0x7C BAT BAT BAT BAT (front left of battery)
45 55 # EC 0x7D n/a n/a n/a n/a
37 47 # EC 0x7E BAT BAT BAT BAT (rear right of battery)
45 55 # EC 0x7F n/a n/a n/a n/a
45 60 # EC 0xC0 ? n/a ? Between northbridge and DRAM
48 62 # EC 0xC1 ? n/a ? Southbridge (under miniPCI)
50 65 # EC 0xC2 ? n/a ? Power circuitry (under CDC)
47 60 # HDAPS HDAPS HDAPS HDAPS HDAPS readout (same as EC 0x79)
)
LEVELS=( 0 2 4 7) # Fan speed levels
ANTIPULSE=( 0 1 0 0) # Prevent fan pulsing noise at this level
# (reduces frequency of fan RPM updates)
OFF_THRESH_DELTA=3 # when gets this much cooler than 'min' above, may turn off fan
MIN_THRESH_SHIFT=0 # increase min thresholds by this much
MIN_WAIT=180 # minimum time (seconds) to spend in a given level before stepping down
IBM_ACPI=/proc/acpi/ibm
HDAPS_TEMP=/sys/bus/platform/drivers/hdaps/hdaps/temp1
LOGGER=/usr/bin/logger
INTERVAL=3 # sample+refresh interval
SETTLE_TIME=6 # wait this many seconds long before applying anti-pulsing
RESETTLE_TIME=600 # briefly disable anti-pulsing at every N seconds
SUSPEND_TIME=5 # seconds to sleep when receiving SIGUSR1
PID_FILE=/var/run/tp-fancontrol.pid
QUIET=false
DRY_RUN=false
DAEMONIZE=false
AM_DAEMON=false
KILL_DAEMON=false
SUSPEND_DAEMON=false
SYSLOG=false
usage() {
echo "
Usage: $0 [OPTION]...
Available options:
-s N shift up temperature thresholds by N degrees
(positive for quieter, negative for cooler)
-t test mode
-q quiet mode
-d daemon mode, go into background (implies -q)
-l log to syslog
-k kill already-running daemon
-u tell already-running daemon that the system is being suspended
-p pid file location for daemon mode, default: $PID_FILE
"
exit 1;
}
while getopts 's:qtdlp:kuh' OPT; do
case "$OPT" in
s) # shift thresholds
MIN_THRESH_SHIFT="$OPTARG"
;;
t) # test mode
DRY_RUN=true
;;
q) # quiet mode
QUIET=true
;;
d) # go into background and daemonize
DAEMONIZE=true
;;
l) # log to syslog
SYSLOG=true
;;
p) # different pidfile
PID_FILE="$OPTARG"
;;
k) # kill daemon
KILL_DAEMON=true
;;
u) # suspend daemon
SUSPEND_DAEMON=true
;;
h) # short help
usage
;;
\?) # error
usage
;;
esac
done
[ $OPTIND -gt $# ] || usage # no non-option args
# no logger found, no syslog capabilities
$SYSLOG && [ ! -x $LOGGER ] && SYSLOG=false || :
if $DRY_RUN; then
echo "$0: Dry run, will not change fan state."
QUIET=false
DAEMONIZE=false
fi
thermometer() { # output list of temperatures
# Base temperatures from ibm-acpi:
[ -r $IBM_ACPI/thermal ] || { echo "$0: Cannot read $IBM_ACPI/thermal" 2>&1 ; exit 1; }
read X Y < $IBM_ACPI/thermal
[ "$X" == "temperatures:" ] || { echo "$0: Bad temperatures: $X $Y" >&2; exit 1; }
echo -n "$Y ";
# Extended temperatures at EC offsets 0xC0 to 0xC2:
[ -r $IBM_ACPI/ecdump ] || { echo "$0: Cannot read $IBM_ACPI/ecdump" 2>&1; exit 1; }
perl -e 'm/^EC 0xc0: .(..) .(..) .(..) / and print hex($1)." ".hex($2)." ".hex($3)." " and exit 0 while <>; exit 1' < $IBM_ACPI/ecdump
# HDAPS temperature (optional):
! [ -r $HDAPS_TEMP ] || echo -n "`cat $HDAPS_TEMP` "
return 0
}
speedometer() { # output fan speed RPM
sed -n 's/^speed:[ \t]*//p' $IBM_ACPI/fan
}
setlevel() { # set fan speed level
$DRY_RUN || echo 0x2F $1 > $IBM_ACPI/ecdump
}
getlevel() { # get fan speed level
perl -e 'm/^EC 0x20: .* .(..)$/ and print $1 and exit 0 while <>; exit 1' < $IBM_ACPI/ecdump
}
log() {
$QUIET || echo "> $*"
! $SYSLOG || $LOGGER -t "`basename $0`[$$]" "$*"
}
cleanup() { # clean up after work
$AM_DAEMON && rm -f "$PID_FILE" 2> /dev/null
log "Shutting down, switching to automatic fan control"
$DRY_RUN || echo enable > $IBM_ACPI/fan
}
floor_div() {
echo $(( (($1)+1000*($2))/($2) - 1000 ))
}
init_state() {
IDX=0
NEW_IDX=0
START_TIME=0
MAX_IDX=$(( ${#LEVELS[@]} - 1 ))
SETTLE_LEFT=0
RESETTLE_LEFT=0
FIRST=true
RESTART=false
}
control_fan() {
# Enable the fan in default mode if anything goes wrong:
set -e -E -u
trap "cleanup; exit 2" HUP INT ABRT QUIT SEGV TERM
trap "cleanup" EXIT
trap "log 'Got SIGUSR1'; setlevel 0; RESTART=true; sleep $SUSPEND_TIME" USR1
init_state
log "Starting dynamic fan control"
# Control loop:
while true; do
TEMPS=`thermometer`
$QUIET || SPEED=`speedometer`
$QUIET || ECLEVEL=`getlevel`
NOW=`date +%s`
# Calculate new level index by placing temperatures into Z-regions:
# Z >= 2*I means "must be at index I or higher"
# Z = 2*I+1 is hysteresis: "don't step down if currently at I+1"
# hence the Z-regions are, for d=(MAX-MIN)/(2*MAX_IDX-1) :
# Z=0:{-infty..MIN-d) Z=1:{MIN-d..MIN) Z=2:{MIN..MIN+d} Z=3:{MIN+d..MIN+2d} ... Z=2*MAX_IDX:{MAX-d, MAX}
MAX_Z=$(( IDX>0 ? ( NOW>START_TIME+MIN_WAIT ? 2*(IDX-1) : 2*IDX ) : 0 ))
SENSOR=0
Z_STR="$MAX_Z+"
TEMP_STR="";
for TEMP in $TEMPS; do
[ $((2*SENSOR+2)) -le ${#THRESHOLDS[@]} ] ||
{ echo "Too many sensors, not enough values in THRESHOLDS" 2>&1; exit 1; }
if [ $TEMP == -128 ]; then
Z='_'; TEMP='_' # inactive sensor
else
MIN=$((THRESHOLDS[SENSOR*2] + MIN_THRESH_SHIFT));
MAX=$((THRESHOLDS[SENSOR*2+1]))
if (( TEMP < MIN - OFF_THRESH_DELTA )); then
Z=0
else
Z=$(( `floor_div $(( (TEMP-MIN)*(2*MAX_IDX-2) )) $((MAX-MIN))` + 2 ))
fi
[ $MAX_Z -gt $Z ] || MAX_Z=$Z
fi
Z_STR="${Z_STR}${Z}"
TEMP_STR="${TEMP_STR}${TEMP} "
(( ++SENSOR ))
done
[ $SENSOR -gt 0 ] || { echo "No temperatures read" >&2; exit 1; }
(( (MAX_Z == 2*IDX-1) && ++MAX_Z )) # hysteresis
NEW_IDX=$(( MAX_Z/2 ))
[ $NEW_IDX -le $MAX_IDX ] || NEW_IDX=$MAX_IDX
# Interrupted by a signal?
if $RESTART; then
init_state
log "Resetting state"
continue
fi
# Transition
$FIRST && OLDLEVEL='?' || OLDLEVEL=${LEVELS[$IDX]}
NEWLEVEL=${LEVELS[$NEW_IDX]}
$QUIET || echo "L=$OLDLEVEL->$NEWLEVEL EC=$ECLEVEL RPM=`printf %4s $SPEED` T=($TEMP_STR) Z=$Z_STR"
if [ "$OLDLEVEL" != "$NEWLEVEL" ]; then
START_TIME=$NOW
log "Changing fan level: $OLDLEVEL->$NEWLEVEL (temps: $TEMP_STR)"
fi
setlevel $NEWLEVEL
sleep $INTERVAL
# If needed, apply anti-pulsing hack after a settle-down period (and occasionally re-settle):
if [ ${ANTIPULSE[${NEW_IDX}]} == 1 ]; then
if [ $NEWLEVEL != $OLDLEVEL -o $RESETTLE_LEFT -le 0 ]; then # start settling?
SETTLE_LEFT=$SETTLE_TIME
RESETTLE_LEFT=$RESETTLE_TIME
fi
if [ $SETTLE_LEFT -ge 0 ]; then
SETTLE_LEFT=$((SETTLE_LEFT-INTERVAL))
else
setlevel 0x40 # disengage briefly to fool embedded controller
sleep 0.5
RESETTLE_LEFT=$((RESETTLE_LEFT-INTERVAL))
fi
fi
IDX=$NEW_IDX
FIRST=false
done
}
if $KILL_DAEMON || $SUSPEND_DAEMON; then
if [ -f "$PID_FILE" ]; then
set -e
DPID="`cat "$PID_FILE"`"
if $KILL_DAEMON; then
kill "$DPID"
rm "$PID_FILE"
$QUIET || echo "Killed process $DPID"
else # SUSPEND_DAEMON
kill -USR1 "$DPID"
$QUIET || echo "Sent SIGUSR1 to $DPID"
fi
else
$QUIET || echo "Daemon not running."
exit 1
fi
elif $DAEMONIZE ; then
if [ -e "$PID_FILE" ]; then
echo "$0: File $PID_FILE already exists, refusing to run."
exit 1
else
AM_DAEMON=true QUIET=true control_fan 0<&- 1>&- 2>&- &
echo $! > "$PID_FILE"
exit 0
fi
else
[ -e "$PID_FILE" ] && echo "WARNING: daemon already running"
control_fan
fi
|
Im Kernel ist fast alles deaktiviert an Govenormöglichkeiten
so mehr Infos fallen mir jetzt spontan nicht ein. Ich hoffe, es kann jemand was damit anfangen.