- 论坛徽章:
- 0
|
发信人: sunway (sunway), 信区: Linux
标 题: [转帖]電源管理指引
发信站: BBS 北邮人论坛站 (Sun Aug 21 21:11:41 2005), 站内
電源管理指引
內容:
1. 介紹
為什麼需要電源管理?
筆記型電腦電池的容量和持續力在過去幾年已有很大的改善,然而現今的處理器較過去消耗更多能源,而且新一代筆記型電腦引進越來越多的高耗電配備,這就是為
什麼電源管理愈形重要的原因。要延長電池的持續力並不一定要買另一顆電池,良好運用智慧型電源管理政策就能獲得很大的改善。
概要
請注意這份文件說明 筆記型電腦 的電源管理。雖然一些章節可能可以適用於 伺服器,其他的章節卻不行,而且可能造成損害。請不要將這份指引應用到伺服器上,除非您很清楚知道您在做什麼。
由於這份指引很長,這裡先給個簡短的概述,幫助您了解大概的內容。
在 前提要件 這一章會談到設定一些基本的要求,這些將在接下來討論各種設備設定的章節內會用到,這些包括 BIOS 和 kernel 的設定,還有使
用者端的簡化手續。接下來三個章節將專注於特別耗電的設備 ─ 處理器,螢幕和硬碟,它們可以被個別設定,CPU 電源管理 展示如何調整處理器的頻率,
而能夠在不甚影響效能的前提下,達到省電最大化。幾個避免您的硬碟作不必要運轉的小技巧會在 硬碟電源管理 提到(順便可以降低噪音程度)。最後在 其他
配備的電源管理 一章,我們會說明一些關於無線網路和 USB 週邊應注意的事項。另外有個章節專門講述 睡眠狀態 (雖然還是實驗性質)。最後 問題排
除 列舉常見的陷阱。
各元件的電源預算
圖示 1.1: 各元件的電源預算
Fig. 1: 那種元件最耗能源?
幾乎所有元件都可以在不同的狀態下運作 ─ 停止,睡眠,閒置,運作是其中幾種 ─ 耗費不同程度的能源。很大部份能源是消耗在 LCD 螢幕、CPU、
晶片組和硬碟。通常您可以啟動 BIOS 內不倚賴作業系統的電源管理,但是在作業系統內做些智慧型的設定,針對不同情況做出調整,可以達到更有效的能源
運用。
2. 前提要件
需要先完成的事情
我們將會談如何使各種設備有電源管理的能力,但是在此之前,請您先確認某些前提要件已經符合。在取得 BIOS 設定之後,一些 kernel 的選項應
該要啟動 ─ 大致上有 ACPI、睡眠狀態和 CPU 變頻。大多時候省電的代價是犧牲效能和反應延遲,所以應該在電力來源是電池時才啟動。因此設定一
個新的執行階層(runlevel) battery 是很方便的。
BIOS 部份
第一步,看看您 BIOS 電源管理的設定,最好的作法是整合 BIOS 和作業系統的政策,但是現在先取消 BIOS 的部份,這會確保 BIOS 的設定不去干擾到您的政策。不要忘記在您做好所有設定之後,把 BIOS 設定重新開啟。
設定 kernel
Kernel 內 ACPI(Advanced Configuration and Power Interface)的支援還在持續加強中,所以選擇較新的 kernel 會讓您獲得更多功能。
在 kernel 設定中,啟動下列選項:
原始碼 2.1: Kernel 電源管理最基本設定 (Kernel 2.6)
Power Management Options --->
Power Management Support
[ ] Software Suspend
[ ] Suspend-to-Disk Support
ACPI( Advanced Configuration and Power Interface ) Support --->
ACPI Support
[ ] Sleep States
AC Adapter
Battery
Button
Fan
Processor
Thermal Zone
ASUS/Medion Laptop Extras
Toshiba Laptop Extras
[ ] Debug Statements
CPU Frequency Scaling --->
CPU Frequency scaling
Default CPUFreq governor (userspace)
'performance' governor
'powersave' governor
CPU frequency table helpers
ACPI Processor P-States driver
CPUFreq driver for your processor
您可以自行決定要不要勾選 Sofrware Suspend、Suspend-to-Disk 和 Sleep States(見下面章節)。如果您的筆記型電腦是華碩、Medion 或 Toshiba,請啟動相關的選項。
開始編譯 kernel,確認啟動時載入需要的模組,然後重開機使用您新編好有 ACPI 支援的 kernel。接著執行 emerge sys-
apps/acpid 安裝 acpi daemon,這個程式會通知您相關事件的發生,例如從使用 AC 電源轉到使用電池或是闔上螢幕蓋。確認
button 模組有載入如果您沒有編進 kernel,然後鍵入 /etc/init.d/acpid start 啟動 ac pid。執行 rc
-update add acpid default 讓它在開機時自動載入。您很快就會知道如何使用這個程式。
原始碼 2.2: 安裝 acpid
# emerge sys-apps/acpid
# modprobe button
# /etc/init.d/acpid start
# rc-update add acpid default
建立新的 "battery" 執行階層
預設的政策只有在必要時才會啟動電源管理,就是電力來源是電池的時候。為使 AC 電源和電池電源之間的轉換更方便,建立一個新的執行階層 battery 來儲存所有電源管理啟動和停止的 scripts。
注意: 如果您不想新設執行階層,您可以略過這一節,這不會有影響。但是略過這一步會使得接下來的動作設定上比較不直接,所以下一節會假設執行階層 battery 存在。
原始碼 2.3: 建立 battery 執行階層
# cd /etc/runlevels
# cp -a default battery
完畢。您新設的執行階層 battery 已經包含了所有 default 內的設定,只差還無法在兩者間自動轉換。該是想辦法改正的時候了。
回應 ACPI 事件
典型的 ACPI 事件有闔上螢幕蓋、變換電力來源或按下睡眠按鈕,所有 kernel 認識的 acpi 事件都會被 acpid 攔截並呼叫 /etc/acpi/default.sh。要支援執行階層轉換,下面給個簡單的修改範例:
原始碼 2.4: 運用 acpid 達到事件驅動的執行階層轉換
#!/bin/sh
set $*
group=${1/\/*/}
action=${1/*\//}
# AC 模式下的執行階層
RLVL_AC="default"
# 電池模式下的執行階層
RLVL_BATTERY="battery"
# 指示 AC 狀態的檔案,使用前請先確定檔案名稱
AC_STATE="/proc/acpi/ac_adapter/AC/state"
# 此行表示在 AC 模式
AC_ON="on-line"
# 此行表示在電池模式
AC_OFF="off-line"
function SwitchRunlevel() {
if [[ "$(grep ${AC_OFF} ${AC_STATE})" != "" && "$(cat /var/lib/init.d/softlevel)" != "${RLVL_BATTERY}" ]]
then
logger "Switching to ${RLVL_BATTERY} runlevel"
/sbin/rc ${RLVL_BATTERY}
elif [[ "$(grep ${AC_ON} ${AC_STATE})" != "" && "$(cat /var/lib/init.d/softlevel)" != "${RLVL_AC}" ]]
then
logger "Switching to ${RLVL_AC} runlevel"
/sbin/rc ${RLVL_AC}
fi
}
case "$group" in
battery)
case "$action" in
battery)
SwitchRunlevel
;;
*)
logger "ACPI group battery / action $action is not defined"
;;
esac
;;
ac_adapter)
case "$action" in
ac_adapter)
SwitchRunlevel
;;
*)
logger "ACPI group ac_adapter / action $action is not defined"
;;
esac
;;
*)
logger "ACPI group $group / action $action is not defined"
;;
esac
試試看:把電源插頭插上或拔下,然後看看 syslog 內有沒有出現 "Switching to AC mode" 或 "Switching to battery mode" 的訊息。
由於事件機制設計的關係,您的筆記型電腦無論電力來源為何,在開機時都會進入 default 執行階層。您可以在 boot loader 內增加一行
softlevel=boot,但是它無法記住這個設定。一個比較好的方法是在開機程序要完成前,假造一個 ACPI 事件,讓
/etc/acpi/default.sh script 決定需不需要轉換執行階層。用您喜歡的編輯器開啟
/etc/conf.d/local.start 並加入以下程式:
原始碼 2.5: 編輯 local.start 以便開機時能轉換執行階層
# 如果使用電池,假造 acpi 事件來轉換執行階層
/etc/acpi/default.sh "battery/battery"
有了這些前置準備,您就能夠針對個別設備啟動電源管理政策。
3. CPU 電源管理
手動設定頻率
降低 CPU 的速度和電壓有兩個好處:一方面減少能源消耗,另一方面是熱量的改善,因為您的系統不會像全速運轉時那麼熱。顯而易見的,主要的缺點是效能較差。降低處理器速度是在效能的損失和能源的節省中求取平衡。
注意: 並非所有筆記型電腦都支援變頻。如果您不確定,問題排除 一章有個列表,列舉有支援的處理器,您可以看看您的處理器是否在其中。
是測試 CPU 變頻是否能正常運作的時候了。為了熟悉 kernel 提供的介面,先用手動改變速度。要設定 CPU 速度,鍵入:
原始碼 3.1: 手動變更 CPU 速度
(取得現在頻率)
# grep "cpu MHz" /proc/cpuinfo
(列出支援頻率,這有可能行不通)
# cd /sys/devices/system/cpu/cpu0/cpufreq/
# cat scaling_available_frequencies
(改變頻率到 1 GHz (100000 KHz)
用您筆記型電腦支援的頻率代換)
# echo -n userspace > scaling_governor
# echo -n 1000000 > scaling_setspeed
(確認頻率有改)
# grep "cpu MHz" /proc/cpuinfo
如果您遇到錯誤訊息,請參考指引的最後一章 問題排除。
您也可以寫入 scaling_max_freq 和 scaling_min_freq 來設定頻率的上下界。
注意: 有些 kernel 似乎在 /proc/cpuinfo 的更新上有點不穩定,如果您沒看到該有的變化,這並不意味 CPU 的頻率沒改。如果
您遇到這個狀況,執行 emerge x86info,照指令更新您的 kernel,並用 x86info -mhz 查看現在的頻率。
自動頻率調整
上述的方法很好,可是不適合日復一日的例行工作,最好是讓您的系統自動設定適當的頻率。幾個在使用者空間執行的程式可以幫您達到這個目標。下面的表格提供簡單的介紹,輔助您選擇合適的程式。
名稱 優點 缺點
cpudyn 支援硬碟待命
cpufreq 可以做精密的設定 設定複雜
speedfreq 小巧但功能強大
client/server 介面很好用 只是用於 kernel 2.6 系列
powernowd 支援多處理器
根據工作負載調整頻率看似簡單,卻不是件容易的工作。一個設計不良的演算法可能會造成頻繁的頻率轉換,或是把頻率設太高而造成能源浪費。
該選擇那個程式?如果您無法決定,先試試 speedfreq:
原始碼 3.2: 安裝 speedfreq
# emerge speedfreq
# rc-update add speedfreq battery
編輯 /etc/conf.d/speedfreq 來設定 speedfreq。舉例來說,如果您希望使用者可以變更政策,把 SPEEDFREQ_OPTS="" 改成 SPEEDFREQ_OPTS="-u",改完就啟動 daemon。
原始碼 3.3: 啟動 speedfreq
# /etc/init.d/speedfreq start
cpufreq 的設定就比較複雜一點。
警告: 不要同時執行上面的程式,這可能造成頻率經常變換的混亂。如果您安裝了 speedfreq,請暫時略過 cpufreq。
原始碼 3.4: 安裝 cpufreqd
# emerge cpufreqd
# rc-update add cpufreqd battery
cpufreqd 有提供預設值在 /etc/cpufreqd.conf,您可以根據您的需求修改設定檔。下面的例子會較預設值節省更多能源 ─ 當然,效能會比較差。
原始碼 3.5: cpufreqd 設定檔範例
[General]
pidfile=/var/run/cpufreqd.pid
poll_interval=2
pm_type=acpi
# 使用下面設定來啟動 ACPI workaround(參考 cpufreqd.conf(5))
# acpi_workaround=1
verbosity=4 #(如果您想要最少的記錄,把值設成 5)
# 最大效能
[Profile]
name=ac
minfreq=600000
maxfreq=1400000
policy=performance
# 最大化能源節約
[Profile]
name=battery
minfreq=600000
maxfreq=900000
policy=powersave
# 固定頻率
[Profile]
name=dvd
minfreq=900000
maxfreq=1100000
policy=powersave
# AC 電源時使用最大效能
[Rule]
name=ac_on
ac=on
profile=ac
# 如果電池狀態許可,編譯程式應該要快速
[Rule]
name=compiling
ac=off
battery_interval=30-100
programs=emerge,make,gcc,cpp
cpu_interval=0-100
profile=ac
# 慢速的 CPU 頻率會使 DVD 播放不順
# 電玩等程式同樣適用
[Rule]
name=dvd_watching
ac=off
battery_interval=15-100
programs=xine,mplayer,avidemux,kaffeine,kmplayer
cpu_interval=0-100
profile=dvd
# 如果上述規則都不適用,最大化能源節約
[Rule]
name=battery_on
ac=off
battery_interval=0-100
cpu_interval=0-100
profile=battery
cpudyn 和 powernowd 的安裝方式與 speedfreq 相同.
最後要檢查的是您設定的新政策確實做好它的工作。一個簡單的方法,在您用筆記型電腦工作時監測 CPU 速度:
原始碼 3.6: 監測 CPU 速度
# watch -n 1 grep "cpu MHz" /proc/cpuinfo
如果 /proc/cpuinfo 沒有被更新(參考前面討論),用下面的指令監看 CPU 頻率:
原始碼 3.7: 監測 CPU 速度的另一種方法
# watch -n 1 x86info -mhz
取決於您的設定,CPU 的速度應該在負載大時增加,在不活動時減低或保持不變。
4. LCD 電源管理
能源消耗者第一名
如 圖 1.1 所示,LCD 螢幕消耗最大部份的能源(不見得適用於 non-mobile CPU)。因此在不使用時關閉螢幕,在合適時減低背景亮度,都成為重要的關鍵。大部分筆記型電腦都有提供操控背景亮度的功能。
首先要檢查螢幕 待命/暫停/關閉 的時機設定。因為不同的視窗管理程式設定方式都不相同,所以我將這部份留給您自行解決。提供兩個常見的地方做參考:要
空白終端機的畫面可用 setterm -blank 、setterm -
powersave on 和 setterm -powerdown 。在 Xorg 下,修改
/etc/X11/xorg.conf 如下:
原始碼 4.1: Xorg 和 XFree86 暫停 LCD 的設定
Section "ServerLayout"
Identifier [...]
[...]
Option "BlankTime" "5" # 5 分鐘後空白螢幕(模擬的)
Option "StandbyTime" "10" # 10 分鐘後關閉螢幕(DPMS)
Option "SuspendTime" "20" # 20 分鐘後完全暫停
Option "OffTime" "30" # 半小時後關閉
[...]
EndSection
[...]
Section "Monitor"
Identifier [...]
Option "DPMS" "true"
[...]
EndSection
XFree86 和 /etc/X11/XF86Config 的設定完全一樣。
更重要的也許是背景亮度的調暗。如果您有辦法運用工具程式存取亮度控制設定,寫個簡單的 script 以便在電池模式下調暗背景光源,然後將它加到 battery 執行階層。
5. 硬碟電源管理
閒置時睡眠
讓我們在不需要硬碟時,盡早將之設成睡眠狀態。我將展示兩種方法來達成這項工作。第一種是運用 cpudyn 對應碟電源管理的支援,啟用
/etc/conf.d/cpudyn 內 "Disk Options" 部份的設定。如果要讓第一顆硬碟在休止 60 秒之後,進入睡眠狀態,您可
以將檔案修改如下:
原始碼 5.1: 使用 cpudyn 做硬碟待命
################################################
# DISK OPTIONS
# (disabled by default)
################################################
#
# 如果時限內硬碟沒有執行任何存取,
# 硬碟將進入待命模式(單位為秒)
#
TIMEOUT=60
#
# 指定要休息的硬碟(用逗號分隔)
#
DISKS=/dev/hda
第二種方法是使用簡單的 script 和指令 hdparm。建立檔案 /etc/init.d/pm.hda 如下:
原始碼 5.2: 使用 hdparm 做硬碟待命
#!/sbin/runscript
start() {
ebegin "Activating Power Management for Hard Drives"
hdparm -q -S12 /dev/hda
eend $?
}
stop () {
ebegin "Deactivating Power Management for Hard Drives"
hdparm -q -S253 /dev/hda
eend $?
}
參看 man hdparm 來了解可用的選項。如果您的 script 準備好了,把它加到 battery 執行階層。
原始碼 5.3: 自動化硬碟待命的設定
# /sbin/depscan.sh
# rc-update add pm.hda battery
重要: 硬碟 sleep/spin down 的設定值要特別小心,設定值太小可能會磨耗您的硬碟而無法得到保固。
延長閒置時間 ─ 筆記型電腦模式
新近的 kernel(2.6.6 以後、最近 2.4 版本和其他修正版)包含了所謂的 筆記型電腦模式(laptop-mode),當啟動時,
dirty buffers 會在讀取時或 10 分鐘間隔後(而不是 30 秒)被寫入硬碟,這會使硬碟需要轉動的時間降到最少。
要啟動和停止筆記型電腦模式,新建 script /etc/init.d/laptop-mode,您可以使用包含在 /usr/src/linux/Documentation/laptop-mode.txt 提供的範例。準備好之後,確定它會被呼叫到。
原始碼 5.4: 自動啟動筆記型電腦模式
# rc-update add laptop-mode battery
警告: 再一次提醒:硬碟 sleep/spin down 設定要特別小心,設定值太小可能磨耗您的硬碟而失去保固。請閱讀文件 laptop-
mode.txt。確定在電池電力耗光之前,停止筆記型電腦模式,讓資料能被寫入硬碟 ─ 否則,您最起碼會失去最後 10 分鐘的工作成果。
其他小技巧
除了讓您的硬碟儘快進入睡眠模式,將硬碟存取減到最少也是個好主意。檢視經常寫入硬碟的程式 ─ syslogd 就是個可能人選。您可能不想要完全停掉
那個程式,但是透過修改設定檔,避免把 "不必要" 的事情記錄下來,就能減少硬碟存取流量。Cups 也定期寫入硬碟,所以可以考慮停止這隻程式,而改
在必要時手動啟動。
原始碼 5.5: 在電池模式下停止 cups
# rc-update del cupsd battery
另一個可省電的地方是在電池模式下停止 swap。在撰寫 swapon/swapoff 轉換之前,請確定有足夠的 RAM 而且 swap 不是經常被使用,否則您會遇上大問題。
如果您不想使用筆記型電腦模式,我們仍可以把某些目錄掛在 tmpfs ─ 寫入動作不會存到硬碟上而是到主記憶體,卸載時資料便遺失 ─ 來達到使硬碟
存取最小化的目的。通常可以把 /tmp 用這種方式掛載起來 ─ 您不需要做特別的處理,因為無論是掛載在硬碟或 RAM 上,每次它的內容在重開機時
都會自動清理掉。只要您確認有足夠的 RAM 而且沒有程式(如下載程式或壓縮工具)需要在 /tmp 下使用非常多空間。要使用這項功能,啟動您
kernel 內 tmpfs 支援,然後在 /etc/fstab 加入一行文字:
原始碼 5.6: 編輯 /etc/fstab 使 /tmp 更有機動性
none /tmp tmpfs size=32m 0 0
警告: 特別留意 size 參數的設定,要依據您的系統做合適的改變。如果您不確定,請不要嘗試這個方法,它很容易成為效能的瓶頸。如果您想要讓
/var/log 如此掛載,請確定在卸載前把記錄檔寫回硬碟上,這些動作是必須的。請勿嘗試用此方法掛載 /var/tmp ,Portage 使用
這個目錄做編譯工作...
6. 其他設備的電源管理
無線電源管理
無線網路卡能源消耗也不少,可以用類似 pm.hda script 的方式將它們加入電源管理模式。
原始碼 6.1: WLAN 電源管理自動化
#!/sbin/runscript
start() {
ebegin "Activating Power Management for Wireless LAN"
iwconfig wlan0 power on power max period 3
eend $?
}
stop () {
ebegin "Deactivating Power Management for Wireless LAN"
iwconfig wlan0 power off
eend $?
}
啟動這個 script 會使 wlan0 在三秒鐘沒有流量之後進入電源管理模式。同硬碟 script 般,存成
/etc/init.d/pm.wlan0 並加入 battery 執行階層。參看 man iwconfig 內更詳細的說明和選項。如果您的驅動
程式和存取點(access point)支援 beacon time 變更,有可能可以節省更多能源。
USB 電源管理
USB 週邊要做到能源節省會面臨兩個問題:第一是像 USB 滑鼠、數位相機或是 USB 隨身碟這些配備一插上就會消耗能源,無法完全避免(除非在不
用時移除)。第二是當 USB 設備插上時,USB host controller 會定期存取匯流排,這樣一來會使得 CPU 無法進入 C3/4
睡眠模式。作業系統針對這個問題的解答是所謂的 "USB 選擇性暫停(selective suspend)",這項功能還沒有進入 kernel。
USB 選擇性暫停只允許匯流排在設備運作時被存取。在這項功能實作出來之前,一個暴力解決辦法:把 USB 支援和設備驅動程式編譯成模組,然後用
script 在不使用時(例如,闔上螢幕蓋時)移除它們。
7. 睡眠狀態:睡眠、待命、suspend to disk
概說
ACPI 定義了不同的睡眠狀態,比較重要的有
* S1 等同於 待命(Standby)
* S3 等同於 Suspend to RAM 等同於 睡眠(Sleep)
* S4 等同於 Suspend to Disk 等同於 冬眠(Hibernate)
當系統沒有在使用時,可以進入這些狀態。關機不在選項中是因為開機程序耗費時間。
睡眠、待命和冬眠
ACPI 對這些睡眠狀態的支援被標記為實驗性質不是沒有原因的,APM 睡眠狀態較為穩定,但是您不能同時使用 APM 和 ACPI。
警告: 雖然對於睡眠狀態的支援改善許多,它還是實驗性質。最起碼,我讓 swsusp2 和 suspend to RAM 成功運作,但是事先的警告仍是必須的:以下的動作很可能不僅無法成功,反而損害到您的資料或系統。
目前有三種 S4 的實作方式,最早的是 swsusp;然後是 swsusp2,這隻程式有最好的介面設計(包括 bootsplash 支援),但是
需要自己動手做 kernel 補釘;最晚出現的是 Suspend-to-Disk,一個 swsusp 的分支。
如果上面這段話讓您感到困惑,請參考 特色比較。如果您還是不太清楚要選擇哪一個,先試試 swsusp2,看起來前景不錯。
kernel 內相關部份如下:
原始碼 7.1: Kernel 內不同待命狀態的設定
Power Management Options --->
(睡眠和待命)
ACPI( Advanced Configuration and Power Interface ) Support --->
ACPI Support
Sleep States
(使用 swsup 冬眠)
Software Suspend (EXPERIMENTAL)
(使用 swsusp2 冬眠)
Software Suspend 2
--- Image Storage(您最少需要選一個)
Swap Writer
--- Page Transformers
LZF image compression
(/dev/"在此填入您的 swap") Default resume device name
(使用 Suspend-to-Disk 冬眠)
Suspend-to-Disk Suport
(/dev/"在此填入您的 swap") Default resume partition
適當的設定啟動之後就可以編譯您的 kernel,然後鍵入 /proc/acpi/sleep 或是 cat /sys/power/state (分
別適合 2.4 和 2.6 系列版本)看看有支援那幾種狀態。後者回傳給我的是 standby mem disk。要是使用 swsusp,需要指定
kernel 參數 resume=/dev/"在此填入您的 swap"。如果開機因為影像(image)破損而無法完成,swsusp 用
noresuem,Suspend-to-Disk 用 pmdisk=off,swsusp2 用 noresume2 做補救。
要讓您的系統進入下列睡眠狀態,執行
原始碼 7.2: 啟動睡眠狀態
(kernel 2.4 系列)
# echo 1 > /proc/acpi/sleep (待命)
# echo 3 > /proc/acpi/sleep (睡眠)
(kernel 2.6 系列)
# echo -n standby > /sys/power/state (待命)
# echo -n mem > /sys/power/state (睡眠)
(swsusp)
# echo 4 > /proc/acpi/sleep 冬眠
(Suspend-to-Disk)
# echo -n disk > /sys/power/state 冬眠
(swsusp2)
# echo > /proc/swsusp/activate
警告: 在您進行這些動作之前,請先備份您的資料。在執行其中任一個指令之前,先執行 sync,讓所有快取資料被寫回硬碟。先在沒有跑 X 的情況下試,然後再在 X 正在執行但沒有記錄時試。
如果您遇到因為 uhci 或類似項目導致 kernel panics 的情況,試著將 USB 支援編譯成模組,然後在您的筆記型電腦進入睡眠狀態前先卸載模組。
雖然上述方法應該可以讓 swsusp 和 Suspend-to-Disk 跑起來(我沒有說正常運作), swsusp2 需要額外的設定。首先要做的是用
![]()
http://softwaresuspend.berlios.de/
提供的補釘修改 kernel,然後安裝該網頁內提供的 hibernate script。
8. 問題排除
如果事情進行不順利...
Q: 我試著改變 CPU 的頻率,但是 /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 不存在。
A: 請確認您的處理器支援 CPU 變頻,並且您所選的 CPUFreq 驅動程式是正確的。這裡列出 cpufreq(kernel 2.6.7)所
支援的處理器:ARM Integrator, ARM-SA1100, ARM-SA1110, AMD Elan - SC400, SC410,
AMD mobile K6-2+, AMD mobile K6-3+, AMD mobile Duron, AMD mobile Athlon,
AMD Opteron, AMD Athlon 64, Cyrix Media GXm, 搭配某些晶片組的
Intel mobile PIII 和 Intel mobile PIII-M, Intel Pentium 4, Intel Xeon,
Intel Pentium M (Centrino), National Semiconductors Geode GX, Transmeta Crusoe,
VIA Cyrix 3 / C3, UltraSPARC-III, SuperH SH-3, SH-4, 某些 "PowerBook" 和
"iBook2" ,還有其他一些 ACPI 2.0-compatible 系統上的處理器(只有在 ACPI/BIOS 介面上有
"ACPI Processor Performance States" 選項時)。
Q: 我的筆記型電腦支援變頻,但是 /sys/devices/system/cpu/cpu0/cpufreq/ 是空的。
A: 用 dmesg | grep ACPI 檢查看看有沒有 ACPI 相關的錯誤訊息。試試更新 BIOS,尤其當有 DSDT 毀損的報告時。您也可以試著手動修復系統(當然這超出這份指引的範圍)。
Q: 我的筆記型電腦支援變頻,但是從 /proc/cpuinfo 看來,速度從未改變過。
A: 這看起來像是 kernel 的 bug。執行 emerge x86info,照指示更新您的 kernel,然後用 x86info -mhz 檢查現在的頻率。
Q: 我可以改變 CPU 頻率,但是可改變的範圍不如其他作業系統大。
A: 您可以把變頻和 ACPI throttling 一起使用,這樣可以獲得更低的頻率。注意 throttling 並不會節省太多能源,而且它主
要的功能是在熱量管理(讓您的筆記型電腦保持涼爽安靜)。您可以用 cat /proc/acpi/processor/CPU/throttling
來讀取現在 throttling 的狀態,然後用 echo -n "0:x" >
/proc/acpi/processor/CPU/limit 來改變它的值,指令中的 x 是
/proc/acpi/processor/CPU/throttling 中列舉的狀態 Tx 。
Q: 電池持續時間好像變得比以前更糟糕了。
A: 檢查您 BIOS 的設定,也許您忘了把某些設定重新啟動。
Q: 我的電池已經充飽,但是 KDE 回報說只有 0% 剩下,然後就關機了。
A: 檢查電池支援有編譯進您的 kernel。如果您把它編成模組,請確定此模組有載入。
Q: 我有一台 Dell Inspiron 51xx,但是我收不到任何 ACPI 事件。
A: 這似乎是個 kernel bug。請閱讀 這裡。
Q: 我剛買了一個全新的電池,但是它卻只能撐幾分鐘!那裡出錯了?
A: 首先依照製造商的說明指示將電池正確地充電。
Q: 上面的回答都沒有幫助,我該怎麼辦。
A: 有些所謂 "新" 電池其實是舊貨。試試下面的指令:
原始碼 8.1: 詢查電池狀態
$ grep capacity /proc/acpi/battery/BAT0/info
design capacity: 47520 mWh
last full capacity: 41830 mWh
如果 "last full capacity" 與 design capacity 差很多,您的電池可能壞掉了。這時,該是您使用保固權利的時候了。
這份文件是以 Creative Commons - 姓名標示-相同方式分享 授權條款發布
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/94108/showart_1995911.html |
|