diff options
author | Bart Samwel <bart@samwel.tk> | 2004-07-28 09:10:42 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-07-28 09:10:42 -0700 |
commit | db581879a043fd3bb7f9039f95d2187a591137d5 (patch) | |
tree | cd5956bda191750d2971bbb041690ce2d8317c08 /Documentation | |
parent | 8925fdb30cd48ddaba9efaccafbdecb4a4f1356f (diff) | |
download | history-db581879a043fd3bb7f9039f95d2187a591137d5.tar.gz |
[PATCH] Config file for laptop mode.
From: Dax Kelson <dax@gurulabs.com>
Add support for a external configuration file for /sbin/laptop_mode, and
/etc/acpi/actions/battery.sh. Convert battery.sh to use CPUFreq (off by
default) instead of CPU throttling (that was off by default).
Cleanup some formating for 80 columns.
All changes were written by me on a plane flight from Philadelphia to Salt
Lake City on July 9th. :)
(Note from Bart Samwel: was submitted to Linus earlier, this patch is
unchanged from that. I needed to submit this into -mm for now because my
other changes are dependent on Dax's changes.)
Signed-off-by: Bart Samwel <bart@samwel.tk>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'Documentation')
-rw-r--r-- | Documentation/laptop-mode.txt | 177 |
1 files changed, 143 insertions, 34 deletions
diff --git a/Documentation/laptop-mode.txt b/Documentation/laptop-mode.txt index d2b6ec2df6dfea..4c453eb4b6dcd6 100644 --- a/Documentation/laptop-mode.txt +++ b/Documentation/laptop-mode.txt @@ -3,7 +3,7 @@ How to conserve battery power using laptop-mode Document Author: Bart Samwel (bart@samwel.tk) Date created: January 2, 2004 -Last modified: April 3, 2004 +Last modified: July 10, 2004 Introduction ------------ @@ -158,13 +158,89 @@ Tips & Tricks (http://noflushd.sourceforge.net/), it seems that noflushd prevents laptop-mode from doing its thing. +Configuration file for control and ACPI battery scripts +-------------- + +This allows the tunables to be changed for the scripts via an external +configuration file + +It should be installed as /etc/default/laptop-mode on Debian, and as +/etc/sysconfig/laptop-mode on Red Hat, SUSE, Mandrake, and other work-alikes. + +--------------------CONFIG FILE BEGIN------------------------------------------- +# Maximum time, in seconds, of hard drive spindown time that you are +# confortable with. Worst case, it's possible that you could lose this +# amount of work if your battery fails you while in laptop mode. +MAX_AGE=600 + +# Read-ahead, in kilobytes. You can spin down the disk while playing MP3/OGG, by +# setting the disk readahead to 8MB (READAHEAD=16384). Effectively, the disk +# will read a complete MP3 at once, and will then spin down while the MP3/OGG is +# playing. +READAHEAD=4096 + +# Shall we remount journaled fs. with appropiate commit interval? (1=yes) +DO_REMOUNTS=1 + +# And shall we add the "noatime" option to that as well? (1=yes) +DO_REMOUNT_NOATIME=1 + +# Dirty synchronous ratio. At this percentage of dirty pages the process +# which +# calls write() does its own writeback +DIRTY_RATIO=40 + +# +# Allowed dirty background ratio, in percent. Once DIRTY_RATIO has been +# exceeded, the kernel will wake pdflush which will then reduce the amount +# of dirty memory to dirty_background_ratio. Set this nice and low, so once +# some writeout has commenced, we do a lot of it. +# +DIRTY_BACKGROUND_RATIO=5 + +# kernel default dirty buffer age +DEF_AGE=30 +DEF_UPDATE=5 +DEF_DIRTY_BACKGROUND_RATIO=10 +DEF_DIRTY_RATIO=40 +DEF_XFS_AGE_BUFFER=15 +DEF_XFS_SYNC_INTERVAL=30 +DEF_XFS_BUFD_INTERVAL=1 + +# This must be adjusted manually to the value of HZ in the running kernel +# on 2.4, until the XFS people change their 2.4 external interfaces to work in +# centisecs. This can be automated, but it's a work in progress that still +# needs# some fixes. On 2.6 kernels, XFS uses USER_HZ instead of HZ for +# external +# interfaces, and that is currently always set to 100. So you don't need to +# change this on 2.6. +XFS_HZ=100 + +# Should the maximum CPU frequency be adjusted down while on battery? +# Requires CPUFreq to be setup. +# See Documentation/cpu-freq/user-guide.txt for more info +CPU_MANAGE=no + +# When on battery what is the maximum CPU speed that the system should +# use? Legal values are "slowest" for the slowest speed that your +# CPU is able to operate at, or a value listed in: +# /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies +# Only applicable if CPU_MANAGE=yes +CPU_MAXFREQ=slowest + +# Spindown time for your hard drive (man hdparm for valid values) +# I prefer 2 hours on AC and 20 seconds for battery +AC_HD=244 +BATT_HD=4 + +--------------------CONFIG FILE END--------------------------------------------- Control script -------------- Please note that this control script works for the Linux 2.4 and 2.6 series. ---------------------CONTROL SCRIPT BEGIN------------------------------------------ +--------------------CONTROL SCRIPT BEGIN---------------------------------------- #!/bin/bash # start or stop laptop_mode, best run by a power management daemon when @@ -183,21 +259,35 @@ Please note that this control script works for the Linux 2.4 and 2.6 series. ############################################################################# -# Age time, in seconds. should be put into a sysconfig file -MAX_AGE=600 +# Source config +if [ -f /etc/default/laptop-mode ] ; then + # Debian + . /etc/default/laptop-mode +elif [ -f /etc/sysconfig/laptop-mode ] ; then + # Others + . /etc/sysconfig/laptop-mode +fi + +# Don't raise an error if the config file is incomplete +# set defaults instead: + +# Maximum time, in seconds, of hard drive spindown time that you are +# confortable with. Worst case, it's possible that you could lose this +# amount of work if your battery fails you while in laptop mode. +MAX_AGE=${MAX_AGE:-'600'} # Read-ahead, in kilobytes -READAHEAD=4096 +READAHEAD=${READAHEAD:-'4096'} # Shall we remount journaled fs. with appropiate commit interval? (1=yes) -DO_REMOUNTS=1 +DO_REMOUNTS=${DO_REMOUNTS:-'1'} # And shall we add the "noatime" option to that as well? (1=yes) -DO_REMOUNT_NOATIME=1 +DO_REMOUNT_NOATIME=${DO_REMOUNT_NOATIME:-'1'} # Dirty synchronous ratio. At this percentage of dirty pages the process which # calls write() does its own writeback -DIRTY_RATIO=40 +DIRTY_RATIO=${DIRTY_RATIO:-'40'} # # Allowed dirty background ratio, in percent. Once DIRTY_RATIO has been @@ -205,16 +295,16 @@ DIRTY_RATIO=40 # of dirty memory to dirty_background_ratio. Set this nice and low, so once # some writeout has commenced, we do a lot of it. # -DIRTY_BACKGROUND_RATIO=5 +DIRTY_BACKGROUND_RATIO=${DIRTY_BACKGROUND_RATIO:-'5'} # kernel default dirty buffer age -DEF_AGE=30 -DEF_UPDATE=5 -DEF_DIRTY_BACKGROUND_RATIO=10 -DEF_DIRTY_RATIO=40 -DEF_XFS_AGE_BUFFER=15 -DEF_XFS_SYNC_INTERVAL=30 -DEF_XFS_BUFD_INTERVAL=1 +DEF_AGE=${DEF_AGE:-'30'} +DEF_UPDATE=${DEF_UPDATE:-'5'} +DEF_DIRTY_BACKGROUND_RATIO=${DEF_DIRTY_BACKGROUND_RATIO:-'10'} +DEF_DIRTY_RATIO=${DEF_DIRTY_RATIO:-'40'} +DEF_XFS_AGE_BUFFER=${DEF_XFS_AGE_BUFFER:-'15'} +DEF_XFS_SYNC_INTERVAL=${DEF_XFS_SYNC_INTERVAL:-'30'} +DEF_XFS_BUFD_INTERVAL=${DEF_XFS_BUFD_INTERVAL:-'1'} # This must be adjusted manually to the value of HZ in the running kernel # on 2.4, until the XFS people change their 2.4 external interfaces to work in @@ -222,7 +312,7 @@ DEF_XFS_BUFD_INTERVAL=1 # some fixes. On 2.6 kernels, XFS uses USER_HZ instead of HZ for external # interfaces, and that is currently always set to 100. So you don't need to # change this on 2.6. -XFS_HZ=100 +XFS_HZ=${XFS_HZ:-'100'} ############################################################################# @@ -466,7 +556,7 @@ case "$1" in esac exit 0 ---------------------CONTROL SCRIPT END-------------------------------------------- +--------------------CONTROL SCRIPT END------------------------------------------ ACPI integration @@ -475,22 +565,34 @@ ACPI integration Dax Kelson submitted this so that the ACPI acpid daemon will kick off the laptop_mode script and run hdparm. ----------------------------/etc/acpi/events/ac_adapter BEGIN------------------------------------------- +-----------------/etc/acpi/events/ac_adapter BEGIN------------------------------ event=ac_adapter action=/etc/acpi/actions/battery.sh ----------------------------/etc/acpi/events/ac_adapter END------------------------------------------- +----------------/etc/acpi/events/ac_adapter END--------------------------------- + +----------------/etc/acpi/actions/battery.sh BEGIN------------------------------ +#!/bin/bash ----------------------------/etc/acpi/actions/battery.sh BEGIN------------------------------------------- -#!/bin/sh +# Source config +if [ -f /etc/default/laptop-mode ] ; then + # Debian + . /etc/default/laptop-mode +elif [ -f /etc/sysconfig/laptop-mode ] ; then + # Others + . /etc/sysconfig/laptop-mode +fi + +# Don't raise an error if the config file is incomplete +# set defaults instead: -# cpu throttling -# cat /proc/acpi/processor/CPU0/throttling for more info -ACAD_THR=0 -BATT_THR=2 +# cpu frequency scaling +# See Documentation/cpu-freq/user-guide.txt for more info +CPU_MANAGE=${CPU_MANAGE:-'no'} +CPU_MAXFREQ=${CPU_MAXFREQ:-'slowest'} # spindown time for HD (man hdparm for valid values) -# I prefer 2 hours for acad and 20 seconds for batt -ACAD_HD=244 +# I prefer 2 hours on AC and 20 seconds for battery +AC_HD=244 BATT_HD=4 # ac/battery event handler @@ -501,9 +603,11 @@ case $status in "on-line") echo "Setting HD spindown for AC mode." /sbin/laptop_mode stop - /sbin/hdparm -S $ACAD_HD /dev/hda > /dev/null 2>&1 + /sbin/hdparm -S $AC_HD /dev/hda > /dev/null 2>&1 /sbin/hdparm -B 255 /dev/hda > /dev/null 2>&1 - #echo -n $ACAD_CPU:$ACAD_THR > /proc/acpi/processor/CPU0/limit + if [ $CPU_MANAGE = 'yes' ]; then + echo `cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq` > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq + fi exit 0 ;; "off-line") @@ -511,11 +615,16 @@ case $status in /sbin/laptop_mode start /sbin/hdparm -S $BATT_HD /dev/hda > /dev/null 2>&1 /sbin/hdparm -B 1 /dev/hda > /dev/null 2>&1 - #echo -n $BATT_CPU:$BATT_THR > /proc/acpi/processor/CPU0/limit + if [ $CPU_MANAGE = 'yes' -a -e /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq ]; then + if [ $CPU_MAXFREQ = 'slowest' ]; then + CPU_MAXFREQ=`cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq` + fi + echo $CPU_MAXFREQ > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq + fi exit 0 ;; esac ----------------------------/etc/acpi/actions/battery.sh END------------------------------------------- +---------------------------/etc/acpi/actions/battery.sh END--------------------- Monitoring tool --------------- @@ -523,7 +632,7 @@ Monitoring tool Bartek Kania submitted this, it can be used to measure how much time your disk spends spun up/down. ----------------------------dslm.c BEGIN------------------------------------------- +---------------------------dslm.c BEGIN----------------------------------------- /* * Simple Disk Sleep Monitor * by Bartek Kania @@ -689,4 +798,4 @@ int main(int ac, char **av) return 0; } ----------------------------dslm.c END--------------------------------------------- +---------------------------dslm.c END------------------------------------------- |