From 14f485e5f1426556e96e7fdd8bfb9ad578bbb988 Mon Sep 17 00:00:00 2001 From: Francois Fleuret Date: Sun, 7 Dec 2008 13:43:30 +0100 Subject: [PATCH] automatic commit --- README.txt | 34 ++++++-------------------------- breezed.1 | 42 +++++++++++++++++++++------------------- breezed.cc | 10 ++++++---- breezed_Lenovo_X61s.conf | 2 +- 4 files changed, 35 insertions(+), 53 deletions(-) diff --git a/README.txt b/README.txt index 1434303..2ea29b2 100644 --- a/README.txt +++ b/README.txt @@ -15,38 +15,16 @@ You must have a configuration file in /etc/breezed.conf. Only one is currently provided in the archive, and it corresponds to the - settings _I_ picked for _my_ Lenovo X61s. + settings _I_ picked for _my_ Lenovo X61s. I have no idea if these + settings are safe on this laptop (I guess so, since I have been + using them for a few months now and it works perfectly), and I + suspect they are not safe for another laptop. - I have no idea if these settings are safe on this laptop (I guess - so, since I have been using them for a few months now and it works - perfectly), and I suspect they are not safe for another laptop. - - * ALGORITHM - - Breezed scans the temperatures every 5s and sets the fan speed - according to a series of thresholds. - - Unfortunately, if the fan speed is set directly according to these - temperature thresholds, it creates oscillations: The fan goes up, - temperature goes down, hence fan goes down, temperature goes up, - etc. - - To mitigate such phenomenons, the daemon waits at least 30s after - the last change before reducing the fan speed, and the actual - thresholds to decrease the fan speed are two degrees below the - provided thresholds, which are used when increasing the fan - speed. This creates a stability area of two degrees, which seems to - be enough. Please let me know if you have problem with the - resulting overall behavior. - - See the man page for details about the arguments and configuration - file. + See the man page for details about the algorithm, arguments and + configuration file. * NOTES - I wrote this daemon for my personal usage on a X61s, and using it - may damage your hardware. - On Thinkpads you have to allow the module thinkpad_acpi to set the fan speed, which is not allowed by default in Debian. To do so, you have to have a file /etc/modprobe.d/thinkpad_acpi.modprobe diff --git a/breezed.1 b/breezed.1 index 2f01520..7a7e3bd 100644 --- a/breezed.1 +++ b/breezed.1 @@ -6,38 +6,40 @@ breezed - Fan control daemon \fBbreezed\fP [\fBoptions\fP] .SH "DESCRIPTION" .PP -\fBbreezed\fP Adjusts the fan speed according to the computer -temperature. It should be started through the adequate script in -/etc/rc?.d. +\fBbreezed\fP is a daemon to adjust the fan speed according to the +computer temperature. It should be started through the adequate script +in /etc/rc?.d. -Every 5s, this daemon gathers all integer values from the thermal -files, and keep the max as the overall computer temperature T. It then -pick the highest temperature threshold lower than T and set the fan -speed to the corresponding level. To avoid oscillations, T has to be -two degrees below threshold to reduce the temperature. Also, the -daemon waits for at least 30s after any change of the fan speed before -reducing it. The fan speed is set by writing "level %d" into the -specified fan file. +Every 5s, \fBbreezed\fP gathers all integer values from the thermal +files, and takes the max as the overall temperature T. It then +computes the highest fan speed whose temperature threshold is lower +than T. If that speed is above the current speed, the daemon changes +the fan speed accordingly. Otherwise it computes the lowest fan speed +whose temperature threshold is two degrees above T, and sets the fan +speed one level below. This two degree gap avoids too many +oscillations. Also, the daemon waits for at least 30s after any change +of the fan speed before reducing it. The fan speed is set by writing +"level " into the specified fan file. Options can not be specified twice, neither on the command line nor in the configuration file. .SH "OPTIONS" -.IP "\fB-h | --help\fP " 10 +.IP "\fB-h | --help\fP" 10 display help and exits -.IP "\fB-v | --version\fP " 10 +.IP "\fB-v | --version\fP" 10 display the version number and exits -.IP "\fB-d | --debug\fP " 10 +.IP "\fB-d | --debug\fP" 10 run in verbose mode -.IP "\fB-cf | --configuration-file \fP " 10 +.IP "\fB-cf | --configuration-file \fP" 10 set the configuration file (default is /etc/breezed.conf) -.IP "\fB-ncf | --no-configuration-file\fP " 10 +.IP "\fB-ncf | --no-configuration-file\fP" 10 prevent the reading of a configuration file -.IP "\fB-tf | --thermal-file [,file2]...\fP " 10 +.IP "\fB-tf | --thermal-file [,file2]...\fP" 10 set the files to spool for temperatures. -.IP "\fB-ff | --fan-file \fP " 10 +.IP "\fB-ff | --fan-file \fP" 10 set the file to control the fan speed. -.IP "\fB-tt | --temperature-thresholds [,temp2]...\fP " 10 +.IP "\fB-tt | --temperature-thresholds [,temp2]...\fP" 10 set the temperature thresholds. .SH "CONFIGURATION FILE" @@ -54,7 +56,7 @@ A typical way of starting breezed is breezed --thermal-files /proc/acpi/thermal_zone/THM0/temperature,/proc/acpi/thermal_zone/THM1/temperature \ --fan-file /proc/acpi/ibm/fan \ - --temperature-thresholds -1,52,54,56,58,60,62,64 + --temperature-thresholds 52,54,56,58,60,62,64 which specifies that when the temperature raises above 52C, the fan level should be 1, when the temperature raises above 54C it should be diff --git a/breezed.cc b/breezed.cc index 19e500c..6f079b2 100644 --- a/breezed.cc +++ b/breezed.cc @@ -61,7 +61,7 @@ int last_level = -1; int file_fan_fd; -int nb_temperature_thresholds = 0; +int nb_temperature_thresholds; int *temperature_thresholds = 0; int nb_file_thermal = 0; @@ -148,6 +148,8 @@ void define_temperature_thresholds(char *definition) { exit(1); } + nb_temperature_thresholds = 1; + char *s; s = definition; while(s) { @@ -157,8 +159,10 @@ void define_temperature_thresholds(char *definition) { temperature_thresholds = new int[nb_temperature_thresholds]; + temperature_thresholds[0] = -1; + s = definition; - int k = 0; + int k = 1; while(s) { s = next_word(token, s, buffer_size); temperature_thresholds[k] = atoi(token); @@ -170,8 +174,6 @@ void define_temperature_thresholds(char *definition) { } k++; } - - temperature_thresholds[0] = -1; } ////////////////////////////////////////////////////////////////////// diff --git a/breezed_Lenovo_X61s.conf b/breezed_Lenovo_X61s.conf index 538e858..c4a5ba4 100644 --- a/breezed_Lenovo_X61s.conf +++ b/breezed_Lenovo_X61s.conf @@ -6,4 +6,4 @@ thermal_files /proc/acpi/thermal_zone/THM0/temperature /proc/acpi/thermal_zone/THM1/temperature fan_file /proc/acpi/ibm/fan -temperature_thresholds -1,52,54,56,58,60,62,64 +temperature_thresholds 52,54,56,58,60,62,64 -- 2.39.5