33.5. powersave 包

powersave 包中包含了先前描述的所有省电功能。通常来说,由于对低能源消耗的需求的增加,它的某些功能在工作站和服务器上也相应变得重要,例如暂停、待机或 cpu 频率调节。

此包包含计算机的所有电源管理功能。它支持使用 ACPI、APM、IDE 硬盘以及 PowerNow!SpeedStep 技术的硬件。包 apmdacpidospmdcpufreqd(现在是 cpuspeed)中的功能已被合并到 powersave 包中。这些包中的守护程序(除了充当 acpi 事件多路转换器的 acpid)不应该与 powersave 守护程序并发运行。

即使您的系统未包含上面列出的所有硬件元素,也应使用 powersave 守护程序控制省电功能。因为 ACPI 和 APM 是互斥的,所以您的计算机上只能使用其中一个系统。此守护程序将自动检测硬件配置中的任何更改。

33.5.1. 配置 powersave 包

owersave 的配置分布在多个文件中。此处列出的所有配置选项都包含有关其功能的其它文档。

/etc/sysconfig/powersave/common

此文件包含 powersave 守护程序的一般设置。例如,通过增大变量 DEBUG 的值可以增加 /var/log/messages 中调试讯息的数量。

/etc/sysconfig/powersave/events

powersave 守护程序需要此文件来处理系统事件。可以将事件指派给外部操作,也可以指派给守护程序本身执行的操作。对于外部操作,守护程序尝试运行 /usr/lib/powersave/scripts/ 中的可执行文件(通常是 Bash 脚本)。预定义的内部操作有:

  • ignore

  • throttle

  • dethrottle

  • suspend_to_disk

  • suspend_to_ram

  • standby

  • do_suspend_to_disk

  • do_suspend_to_ram

  • do_standby

  • notify

  • screen_saver

  • reread_cpu_capabilities

throttleMAX_THROTTLING 中定义的值减慢处理器的速度。此值取决于当前方案。dethrottle 设置处理器发挥全部性能运行。suspend_to_disksuspend_to_ramstandby 触发休眠方式的系统事件。这三个操作通常负责触发休眠方式,但应始终将它们与特定的系统事件关联起来。

目录 /usr/lib/powersave/scripts 包含处理事件的脚本:

switch_vt

如果暂停或待机后屏幕移位,则可以使用此脚本。

wm_logout

保存设置并从 GNOME、KDE 或其它窗口管理器中注销。

wm_shutdown

保存 GNOME 或 KDE 设置并关闭系统。

set_disk_settings

执行 /etc/sysconfig/powersave/disk 中所作的磁盘设置。

例如,如果设置了变量 EVENT_GLOBAL_SUSPEND2DISK="prepare_suspend_to_disk do_suspend_to_disk",则用户一旦将休眠方式暂挂到磁盘的命令提供给 powersaved,就将按指定的顺序处理这两个脚本或操作。守护程序首先运行外部脚本 /usr/lib/powersave/scripts/prepare_suspend_to_disk。在成功处理此脚本后,守护程序运行内部操作 do_suspend_to_disk,然后在此脚本卸载了关键模块并停止了服务后,将计算机设置为休眠方式。

可修改休眠按钮事件的操作,如 EVENT_BUTTON_SLEEP="notify suspend_to_disk" 中所示。在这种情况下,X 中会出现一个弹出窗口或者控制台上会出现一条讯息,从而提示用户操作暂停。随后,将生成事件 EVENT_GLOBAL_SUSPEND2DISK,从而执行指定的操作和安全暂挂方式。可以使用 /etc/sysconfig/powersave/common 中的变量 NOTIFY_METHOD 自定义内部操作 notify

/etc/sysconfig/powersave/cpufreq

包含用来优化动态 CPU 频率设置以及是否使用用户空间或内核实施的变量。

/etc/sysconfig/powersave/battery

包含电池电量限制和其它电池特定的设置。

/etc/sysconfig/powersave/sleep

在此文件中,激活休眠方式并确定在暂停事件或待机事件之前应卸载哪些关键模块以及停止哪些服务。当系统恢复时,将重装载这些模块并重启动这些服务。例如,甚至可以延迟已触发的休眠方式以便保存文件。默认设置主要涉及 USB 和 PCMCIA 模块。暂停或待机失败通常是由某些模块引起的。有关确定错误的详细信息,请参见 第 33.5.4 节 “查错”

/etc/sysconfig/powersave/thermal

激活散热和热量控制。文件 /usr/share/doc/packages/powersave/README.thermal 中提供了有关此主题的详细信息。

/etc/sysconfig/powersave/disk

此配置文件包含根据硬盘所作的操作和设置。

/etc/sysconfig/powersave/scheme_*

提供多种耗电量与特定部署方案相适应的方案。许多方案都是预配置的,使用时无需进行更改。可以在这里保存自定义方案。

33.5.2. 配置 APM 和 ACPI

33.5.2.1. 暂停和待机

有三种基本的 ACPI 休眠方式和两种 APM 休眠方式:

暂停到磁盘(ACPI S4、APM 暂停)

将整个内存内容保存到硬盘。计算机完全关闭且不消耗任何电源。此休眠方式是默认启用的,并且应该在所有系统上都有效。

暂停到 RAM(ACPI S3、APM 暂停)

将所有设备的状态保存到主存储器。只有主存储器继续消耗电源。此休眠方式在默认情况下是禁用的,因为它在某些系统上仍会引发问题。但是,支持的范围已经大大扩展了。

待机(ACPI S1、APM 待机)

关闭某些设备(取决于制造商)。

为了正确处理暂挂、待机和恢复,请确保在文件 /etc/sysconfig/powersave/events 中设置了以下默认选项(安装 SUSE Linux 之后的默认设置):

EVENT_GLOBAL_SUSPEND2DISK=
    "prepare_suspend_to_disk screen_saver do_suspend_to_disk"
EVENT_GLOBAL_SUSPEND2RAM=
    "prepare_suspend_to_ram screen_saver do_suspend_to_ram"
EVENT_GLOBAL_STANDBY=
    "prepare_standby screen_saver do_standby"
EVENT_GLOBAL_RESUME_SUSPEND2DISK=
    "restore_after_suspend_to_disk"
EVENT_GLOBAL_RESUME_SUSPEND2RAM=
    "restore_after_suspend_to_ram"
EVENT_GLOBAL_RESUME_STANDBY=
    "restore_after_standby"

33.5.2.2. 自定义电池状态

文件 /etc/sysconfig/powersave/battery 中定义了三个电池电量水平(用百分比表示),在达到这些电池电量水平时,将触发系统警报或特定的操作。

BATTERY_WARNING=12
BATTERY_LOW=7
BATTERY_CRITICAL=2

配置文件 /etc/sysconfig/powersave/events 中定义了电池电量水平降至指定限度时执行的操作或脚本。可以按 第 33.5.1 节 “配置 powersave 包” 中所述修改按钮的标准操作。

EVENT_BATTERY_NORMAL="ignore"
EVENT_BATTERY_WARNING="notify"
EVENT_BATTERY_LOW="notify"
EVENT_BATTERY_CRITICAL="wm_shutdown"

33.5.2.3. 调整耗电量以适应各种情况

可以根据电源类型调整系统行为。当系统从 AC 电源断开并使用电池运行时,应降低系统的耗电量。同样,系统一连接到 AC 电源,性能就应自动提高。CPU 频率、IDE 省电功能和许多其它参数都可以进行修改。

/etc/sysconfig/powersave/events 中定义了计算机从 AC 电源断开或连接到 AC 电源时要执行的操作。在 /etc/sysconfig/powersave/common 中选择要使用的方案:

AC_SCHEME="performance"
BATTERY_SCHEME="powersave"

这些方案被储存在 /etc/sysconfig/powersave 下的文件中。文件名采用 scheme_name-of-the-scheme 的格式。本示例涉及两个方案:scheme_performancescheme_powersaveperformancepowersavepresentationacoustic 都是预配置的。借助于 YaST 电源管理模块(第 33.6 节 “YaST 电源管理模块” 中有述),可以编辑、创建、删除现有的方案,也可以将其与不同的电源状态关联起来。

33.5.3. 其它 ACPI 功能

如果您使用 ACPI,则可以控制系统对 ACPI 按钮(电源、休眠、机盖打开和机盖合上)的响应。在 /etc/sysconfig/powersave/events 中配置操作的执行。有关各个选项的解释,请参见此配置文件。

EVENT_BUTTON_POWER="wm_shutdown"

当按下电源按钮时,系统关闭相应的窗口管理器(KDE、GNOME、fvwm 等)。

EVENT_BUTTON_SLEEP="suspend_to_disk"

当按下休眠按钮时,系统会被设置为暂停到磁盘方式。

EVENT_BUTTON_LID_OPEN="ignore"

当机盖打开时,不执行任何操作。

EVENT_BUTTON_LID_CLOSED="screen_saver"

当机盖合上时,激活屏幕保护程序。

EVENT_OTHER="ignore"

如果守护程序遇到了未知事件,则此事件将发生。未知事件包括某些机器上的 ACPI 热键。

如果在指定时间内 CPU 负载未超过指定的限制,则可以进一步限制 CPU 性能。在 PROCESSOR_IDLE_LIMIT 中指定负载限度,在 CPU_IDLE_TIMEOUT 中指定超时值。如果 CPU 负载保持在限度之下的时间长于超时值,则将激活 EVENT_PROCESSOR_IDLE 中配置的事件。如果 CPU 再度处于忙碌状态,将执行 EVENT_PROCESSOR_BUSY

33.5.4. 查错

文件 /var/log/messages 中记录了所有错误讯息和警报。如果您未能找到所需的信息,请使用文件 /etc/sysconfig/powersave/common 中的 DEBUG 增加 powersave 讯息的详细程度。请将变量的值增加到 7,或甚至增加到 15,然后重启动守护程序。/var/log/messages 中更详细的错误讯息应有助于您找到错误。以下几节介绍 powersave 最常见的问题。

33.5.4.1. 硬件支持已激活 ACPI,但功能不工作

如果使用 ACPI 时遇到问题,请使用命令 dmesg|grep -i acpidmesg 的输出中搜索 ACPI 特定的讯息。可能需要更新 BIOS 来解决问题。请转到便携式计算机制造商的主页,查找已更新的 BIOS 版本,然后安装它。要求制造商遵循最新的 ACPI 规范。如果在更新 BIOS 后错误仍然存在,则按以下步骤用已更新的 DSDT 替换 BIOS 中有问题的 DSDT 表。

  1. http://acpi.sourceforge.net/dsdt/tables 为您的系统下载 DSDT。检查是否已解压缩并编译了此文件,如果文件扩展名是 .aml(ACPI 机器语言),则表明已完成这些操作。如果是这种情况,请继续执行第 3 步。

  2. 如果下载的表的文件扩展名是 .asl(ACPI 源语言),则必须使用 iasl(pmtools 包)对其进行编译。为此,请输入命令 iasl -sa file.aslhttp://developer.intel.com/technology/iapc/acpi/downloads.htm 提供了最新版本的 iasl(Intel ACPI 编译器)。

  3. 将文件 DSDT.aml 复制到任何位置(建议的位置为 /etc/DSDT.aml)。编辑 /etc/sysconfig/kernel 并相应地调整指向 DSDT 文件的路径。启动 mkinitrd(包 mkinitrd)。一旦安装了内核并使用 mkinitrd 创建了 initrd,引导系统时就会集成并装载已修改的 DSDT。

33.5.4.2. CPU 频率不工作

请参见内核源代码 (kernel-source) 查看是否支持您的处理器。您可能需要特殊内核模块或模块选项来激活 CPU 频率控制。/usr/src/linux/Documentation/cpu-freq/* 中提供了此信息。如果需要特殊模块或模块选项,则通过变量 CPUFREQD_MODULECPUFREQD_MODULE_OPTS 在文件 /etc/sysconfig/powersave/cpufreq 中进行配置。

33.5.4.3. 暂停和待机不工作

有多个与内核有关的问题会妨碍在 ACPI 系统上使用暂停和待机:

  • 目前,具有超过 1 GB RAM 的系统不支持暂停。

  • 目前,多处理器系统和使用 P4 处理器(有超线程功能)的系统不支持暂停。

错误还可能是有问题的 DSDT 实施 (BIOS) 引起的。如果是这种情况,则安装新的 DSDT。

在 ACPI 和 APM 系统上:当系统尝试卸载有问题的模块时,系统被阻止执行操作或暂停事件未被触发。如果您未卸载模块或停止阻止成功暂停的服务,也会发生相同的情况。在这两种情况下,尝试确定阻止采用休眠方式的有问题的模块。/var/log/suspend2ram.log/var/log/suspend2disk.log 中的 powersave 守护程序生成的日志文件对确定有问题的模块很有用。如果计算机未进入休眠方式,则原因在最后卸载的模块上。请配置 /etc/sysconfig/powersave/sleep 中的下列设置以在暂停或待机前卸载有问题的模块。

UNLOAD_MODULES_BEFORE_SUSPEND2DISK=""
UNLOAD_MODULES_BEFORE_SUSPEND2RAM=""
UNLOAD_MODULES_BEFORE_STANDBY=""
SUSPEND2DISK_RESTART_SERVICES=""
SUSPEND2RAM_RESTART_SERVICES=""
STANDBY_RESTART_SERVICES="" 

如果您在不断变化的网络环境中使用暂停或待机,或将暂停或待机用于远程装入的文件系统(例如 Samba 和 NIS),请使用 automounter 装入它们,或在上述变量中添加相应的服务,例如 smbfsnfs。在远程装入的文件系统进入暂停或待机前,如果某个应用程序访问此文件系统,则无法正确停止服务且无法正确卸装该文件系统。在恢复系统后,文件系统可能被损坏,因此必须重装入文件系统。

33.5.5. 参见信息