33.5. powersave 套件

powersave 套件負責處理先前說明的所有省電功能。由於減低能源消耗的需求普遍提高,因此它的部分功能對工作站和伺服器也很重要,例如暫停、待命或 CPU 頻率比例等。

此套件包含電腦的所有電源管理功能。它支援使用 ACPI、APM、IDE 硬碟和 PowerNow!SpeedStep 技術的硬體。來自套件 apmdacpidospmdcpufreqd (現在為 cpuspeed) 的功能已合併於 powersave 套件中。這些套件中的精靈 (做為 acpi 事件多工器的 acpid 除外) 不得與省電精靈同時執行。

即使您的系統不包含上述所有硬體元件,仍可以使用 powersave 精靈來控制省電功能。因為 ACPI 和 APM 互斥,僅可在電腦上使用其中一種系統。精靈會自動偵測硬體組態的變化。

33.5.1. 設定 powersave 套件

powersave 的組態散佈於數個檔案。各檔案中所列的每個組態選項都包含其他有關其功能的文件。

/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 休眠模式指令 suspend to disk 時,立即以特定順序處理。精靈會執行外部程序檔 /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 休眠模式:

Suspend to Disk (ACPI S4、APM 暫停)

將全部記憶體內容儲存到硬碟。電腦完全關閉,不消耗任何電力。此休眠模式預設為啟用,而且應該適用於所有系統。

Suspend to RAM (ACPI S3、APM 暫停)

將所有設備的狀態儲存到主要記憶體。僅主要記憶體繼續消耗電力。此休眠模式預設為停用,因為仍會對某些系統造成問題。但支援已大幅延伸。

Standby (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 的省電功能和許多其他參數均可修改。

當電腦連線到或從 AC 電源供應中斷連線時,要執行的動作定義於 /etc/sysconfig/powersave/events 中。請在 /etc/sysconfig/powersave/common 中選取要使用的配置:

AC_SCHEME="performance"
BATTERY_SCHEME="powersave"

配置儲存在 /etc/sysconfig/powersave 中的檔案內。檔案名稱的格式為 scheme_name-of-the-scheme。範例參考兩個配置:scheme_performancescheme_powersaveperformancepowersavepresentationacoustic 為預先設定。藉由 節 33.6, "YaST 電源管理模組" 中描述的 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"

當按下休眠按鈕時,系統設為休眠 (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 acpi 來搜尋 ACPI 特定訊息的 dmesg 輸出。必須更新 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.asl 指令。最新版本的 iasl (Intel ACPI 編譯器) 可在 http://developer.intel.com/technology/iapc/acpi/downloads.htm 中找到。

  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/* 中找到。如果需要特殊核心模組或模組選項,可在檔案 /etc/sysconfig/powersave/cpufreq 中藉由變數 CPUFREQD_MODULECPUFREQD_MODULE_OPTS 加以設定。

33.5.4.3. 暫停和待命沒有作用

有數種核心相關問題會使 ACPI 系統的暫停和待命無法使用:

  • 目前超過 1 GB RAM 的系統不支援暫停。

  • 目前多處理器系統和 P4 處理器 (具有超執行緒) 的系統不支援暫停。

錯誤也可能是導因於錯誤的 DSDT 執行方式 (BIOS)。如果是此狀況,請安裝新的 DSDT。

在 ACPI 和 APM 系統上:當系統嘗試卸載錯誤模組時,系統會停止或不觸發暫停事件。如果您不卸載模組或停止服務 (導致無法成功暫停),也可能發生此狀況。在兩種情況下,都請嘗試辨識無法啟動休眠模式的錯誤模組。在此狀況下,在 /var/log/suspend2ram.log/var/log/suspend2disk.log 中的省電精靈所產生的記錄檔非常有用。如果電腦無法進入休眠模式,原因在於最後卸載的模組。請操作 /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) 的連線使用暫停或待命,請在上述變數中使用自動裝載器以裝載或新增對應服務,例如 smbfsnfs。如果應用程式在暫停或待命之前存取遠端裝載檔案系統,則服務無法正確停止,而檔案系統無法正確取消裝載。在系統繼續之後,檔案系統可能損毀並必須重新裝載。

33.5.5. 如需詳細資訊