1. 程式人生 > >Linux筆記本電源管理指南

Linux筆記本電源管理指南

找了很久的東西,希望對大家有用,自己也在為不能關機的事情發愁,邊發邊學習

Linux是一種效能優越的開源作業系統,隨著其效能和知名度越來越高,最主要的是在價格上無與倫比的優勢,許多廠家開始推出Linux膝上型電腦,並且這種趨勢大有愈演愈烈之勢。我們知道,筆記本受到電池續航時間的限制,所以特別注重機器的電源管理。因此,本文將討論如何處理這些事項。

一、概述

實際上,除了利用主機板上的BIOS來管理電源外,大多數Linux系統本身都自帶了管理電源的實用工具軟體,來處理各種電源事件,如:

1.電池電量不足--這時機器會發出警告,並顯示相應圖示,或者將硬體掛起。

2.閒置--如果在一段時間內機器一直處於非活動狀態,那麼可以讓機器休眠(如關閉硬碟以及停用音訊及網路等服務)從而有效延長電池供電時間。

通過檢測你的筆記本使用的是交流電源還是電池,可以讓機器進入相應的電源管理模式。在Fedora中,用於管理和檢修電源問題的工具有:

1.高階電源管理(APM)--APM軟體組成如下:一個pmd守護程序,用來監視電池的使用情況;多個實用工具軟體,用來顯示和響應電池事件。它們包含於apmd軟體包中。

2.高階配置和電源介面(ACPI)--acpid事件守護程序一方面監視電源事件,另一方面用來設定響應這些事件的規則,這些規則用來關閉某些硬體或關掉系統電源等。ACPI是一款設計用來替代APM電源管理的更具通用性的工具軟體,但是目前它還需進一步完善。

3.hdparm命令--hdparm命令可用於開啟和關閉電源管理功能。另外,該命令還有許多選項,完成諸如停止硬碟啟動器轉動或讓硬碟進入待機狀態等操作。

需要說明的是,使用ACPI時,是作業系統在負責電源管理,而不是BIOS。儘管ACPI在管理電源問題方面功能更強也更靈活,但是,普通使用者用起來卻不是那麼方便,如使用ACPI時,你必須親自告訴它要關注哪些電源事件以及如何響應這些事件。目前,對一般使用者而言,APM的功能不但豐富,並且對使用者也更加友好。
下邊我們將針對以上三種常見的電源管理工具分別加以討論。

二、用APM管理電源

在Fedora中,可以配置APM,讓其檢測某些電源事件並做出響應。這時,它執行守護程序/usr/sbin/apmd來偵聽事件,然後根據配置檔案/etc/sysconfig/apmd 中的有關規定來處理這些事件。要配置執行APM,輸入下列命令:

# chkconfig apmd on
# service apmd restart



注意:apmd和acpid不能同時使用,所以,如果此前系統正在使用acpid的話,應該先停用它,具體命令如下:

# chkconfig acpid off
# service acpid stop



APM成功啟動後,在檔案/var/log/messages中應該看到一則訊息,指出該服務已啟動,並列出當前電池的電量狀況。預設時,pmd守護程序根據檔案/etc/sysconfig/apmd 中的設定執行。我們可以列出當前執行的程序來檢視執行中的apmd的使用了哪些選項:

# ps ax | grep apmd
/usr/sbin/apmd -p 10 -w 5 -W -P /etc/sysconfig/apm-scripts/apmscript



根據以上命令中列出的選項,apmd守護程序將會:

1.記錄電池電量的變化--如果電量變化超過10%或更多,守護程序將向系統日誌檔案(預設時為/var/log/messages)發出一條訊息。這一行為是由選項"-p 10"指定的。

2.記錄電池電量不足--當電池電量低於5%並且仍未充電時,一條警告訊息將傳送到系統日誌檔案中。這一行為是由選項"-w 5"指定的。

3.提醒使用者--如果電池電量低於"-w"選項所設定的值,將向所有登入系統的使用者傳送警報。此行為是由選項"-W"指定的。

4.利用apmscript響應事件--出現電源事件時,apmd將這些事件轉給設定用於響應這些事件的指令碼。根據上面的命令,執行的指令碼應該是/etc/sysconfig/apm-scripts/apmscript。所用的檔案取決於選項"- P"。


除了上述的電量不足和電量變化設定外,大多數給與響應的電源事件僅在apmscript檔案中有所提及。如果想了解您機器的電源管理情況的話,看看該檔案的內容便一目瞭然了。在FedoraCore中,要想新增你自已的要給與響應的電源事件,你必須建立自己的指令碼。預設時的apmscript是檔案 /etc/sysconfig/apm-scripts/apmcontinue。該檔案處理以下事件:

1.掛起--當你的膝上型電腦進入掛起或待機狀態後,檔案apmscript會停止所有音訊處理程式,掛其所有硬碟驅動器操作,關閉任何NFS連線,關閉網路連線以及pcmcia卡。

2.恢復--在復原時,apmscript會還原所有在掛起時停止的事件。

3.更換電源--當機器電源發生變化時,指令碼會做出反應:如果使用交流電源,就讓機器運行於高效能狀態;如果使用電池,則讓機器運行於更加節電的狀態。

4.更換電池--如果電池缺電,該事件將使apm停止所有服務,並進入極限節電模式。

5.開機--啟動機器時,apmscript會首先檢查apmcontinue檔案,除非你在該檔案中設定了啟動時要做的事,否則該指令碼什麼也不幹。

6.停機--與開機時一樣,停機時apmscript會首先檢查apmcontinue檔案,除非你在該檔案中設定了啟動時要做的事,否則該指令碼什麼也不幹。

在apmcontinue檔案中還可以有其他事件(預設時並不存在),用來響應其它選定的各種事件。此外,你還可以建立 /etc/sysconfig/apm-scripts/apmcontinue指令碼,然後讓它來響應存放在像apmscript這樣的檔案中的各種事件。

如果只是隨便的檢視一下APM服務的話,可以使用不帶引數的apm命令,這樣能看到電池供電狀況或是否使用交流電源之類的報告:

# apm
AC on-line, battery charging: 100%



你還可以讓你的膝上型電腦進入掛起模式(apm-s)或待機模式(apm-S)。當接通交流電源後,膝上型電腦會忽略所有由APM(apm-i)產生的掛起和待機事件。(T111)

三、使用ACPI管理電源


與APM類似,ACPI也執行一個守護程序來偵聽電源事件,然後將這些事件傳遞給某個程式來進行處理。這種情況下,我們可以通過啟用acpid服務來執行acpid守護程序:


# chkconfig acpid on
# service acpid restart



再強調一下,一定要先關閉你不想要的電源管理服務。對此而言,就是要關閉apmd,即:

# chkconfig apmd off
# chkconfig apmd stop



ACPI只能執行在核心中已經激活了ACPI的Linux系統上,否則,你必須在啟動時通過啟動選項ACPI=force來手動啟用它。另外,你還需要在 BIOS中啟用ACPI。如果在/proc/acpi/event檔案中有與ACPI事件相關的內容,則說明ACPI已在工作。

Acpid會監視來自於/proc/acpi/events中的每個事件,然後將這些事件跟/etc/acpi/events目錄下的各檔案中的各項進行匹配。預設的情況下,該目錄下只有一個檔案,即sample.conf,其中存放著ACPI事件和相應的處理,如:

# ACPID 配置舉例
event=button/power.*
action=/sbin/shutdown -h now



在該例中,當收到button/power.*事件後,系統立即執行shutdown命令,因為命令後邊帶有- h now選項。要配置您自己的處理ACPI事件的動作,可以將您的檔案(你必須是超級使用者)新增到/etc/acpi/events目錄中。要注意的是,該檔案內容的格式必須與該目錄下其他檔案一致。要了解這些檔案的確切格式,可以通過 "man acpid" 命令來進行進一步學習。當你列出的事件出現時, "action="行中的命令就會作為超級使用者執行。

若要尋找事件名稱的話,可以使用命令cat/proc/acpi/event。如果要檢視acpid的活動,可以檢視/var/log/acpid檔案的內容。改變幾次電源狀態,如拔下插頭、再插上、按掛起鍵等等,然後看看哪些事件被記錄在日誌檔案中了。

四、用hdparm修改電源設定

如果您正在使用膝上型電腦的話,你可以使用hdparm的諸多選項來控制電量的消耗。某些選項會立即生效,如讓硬碟驅動器進入睡眠模式;而其他選項會在一段時間後才生效,如在某段時間內硬碟一直處於非活動狀態的話,就停轉硬碟驅動器。


要了解機器的IDE電源模式狀態,可以鍵入下列命令:


# hdparm -C /dev/hda
/dev/hda:
drive state is: active/idle



這表示電源模式設為正常執行。如果驅動器不支援該項功能,那麼驅動器狀態顯示為"unknown"。為了節電,最常用的做法是為spindown模式(- S)設一個比較低的值。甚而有人認為spindown的最低值(五秒鐘的空閒時間)既能全面改善電池續航時間,又不至於嚴重影響效能。我們可以用 hdparm命令加"-S"選項來規定硬碟進入spindown模式的閒置時間,如果"-S"後跟隨的數字介於0到240之間,那麼該值乘以5就是實際的進入spindown模式的閒置時間(以秒為單位)。因此,下例中的值3的含義是讓磁碟驅動器在閒置15秒後入待機模式(硬碟會停轉):

# hdparm -S3 /dev/hda
/dev/hda:
sotting standby to 3 (15 seconds)



注意:當-S的取值範圍介於241到251之間時,那麼該值減去240後乘以30就是實際的進入spindown模式的閒置時間(以分鐘為單位)。所以, 241把停轉的閒置時間設為30分鐘,而251將其設為5.5小時。這一點使用時容易混淆,請讀者一定注意。你可以通過-y選項讓硬碟自動進入待機模式,如下所示:

# hdparm -y /dev/hda
/dev/hda:
issuing standby command



同時,你也能夠通過-Y選項進入睡眠模式:

# hdparm -Y /dev/hda
/dev/hda:
issuing sleep command



當再次需用硬碟時,Linux將自動啟動它。

五、小結

上面我們對Linux下三種常見的電源管理工具進行了討論,我想您現在已經清楚如何設定Linux本本的電源管理了,那就趕緊試試吧--什麼?你用的是桌上型電腦,那等有機會再試也不算遲呀!

==============================================================================================

還有這個,也應該是很多人一直沒能區分清楚的

很多人問道了什麼ACPI,什麼是APIC,他們有沒有關係?名字這麼相近。下面給出我對其的一些理解,具體的解釋可以檢視核心文件庫的核心引數檔案:
/usr/src/`uname -r`/Documents/kernel-parameters.txt

ACPI就是Advanced Configuration and Power Interface的縮寫,意思是“高階配置與電源介面”。這是英特爾、微軟和東芝共同開發的一種電源管理標準。
ACPI可實現以下功能:   
1、使用者可以使外設在指定時間開關;   
2、使用膝上型電腦的使用者可以指定計算機在低電壓的情況下進入低功耗狀態,以保證重要的應用程式執行;   
3、作業系統可以在應用程式對時間要求不高的情況下降低時鐘頻率;
4、作業系統可以根據外設和主機板的具體需求為它分配能源;
5、在無人使用計算機時可以使計算機進入休眠狀態,但保證一些通訊裝置開啟;
6、即插即用裝置在插入時能夠由ACPI來控制。
不過,ACPI和其他的電源管理方式一樣,要想享受到上面這些功能,必須要有軟體和硬體的支援。在軟體方面,Windows 98及其後續產品和Windows 2000都對ACPI給予了全面的支援;而Linux的核心目前對此支援得並不是太理想。硬體方面比較麻煩,除了要求主機板、顯示卡和網絡卡等外設要支援 ACPI外,還需要機箱電源的配合。電源在提供5伏電壓給主機板的同時,還必須使電流穩定在720毫安以上才可以,這樣它才能夠實現電腦的“睡眠”和“喚醒”。
ACPI共有六種狀態,分別是S0到S5,它們代表的含義分別是:
S0--實際上這就是我們平常的工作狀態,所有裝置全開,功耗一般會超過80W;
S1--也稱為POS(Power on Suspend),這時除了通過CPU時鐘控制器將CPU關閉之外,其他的部件仍然正常工作,這時的功耗一般在30W以下;(其實有些CPU降溫軟體就是利用這種工作原理)
S2--這時CPU處於停止運作狀態,匯流排時鐘也被關閉,但其餘的裝置仍然運轉;
S3--這就是我們熟悉的STR(Suspend to RAM),這時的功耗不超過10W;
S4--也稱為STD(Suspend to Disk),這時系統主電源關閉,但是硬碟仍然帶電並可以被喚醒;
S5--這種狀態是最乾脆的,就是連電源在內的所有裝置全部關閉,功耗為0。
我們最常用到的是S3狀態,即Suspend to RAM(掛起到記憶體)狀態,簡稱STR。顧名思義,STR就是把系統進入STR前的工作狀態資料都存放到記憶體中去。在STR狀態下,電源仍然繼續為記憶體等最必要的裝置供電,以確保資料不丟失,而其他裝置均處於關閉狀態,系統的耗電量極低。一旦我們按下Power按鈕(主機電源開關),系統就被喚醒,馬上從記憶體中讀取資料並恢復到STR之前的工作狀態。記憶體的讀寫速度極快,因此我們感到進入和離開STR狀態所花費的時間不過是幾秒鐘而已;而S4狀態,即 STD(掛起到硬碟)與STR的原理是完全一樣的,只不過資料是儲存在硬碟中。由於硬碟的讀寫速度比記憶體要慢得多,因此用起來也就沒有STR那麼快了。 STD的優點是隻通過軟體就能實現,比如Windows 2000就能在不支援STR的硬體上實現STD。
之前的電源管理是APM(Advanced Power Management),那麼ACPI和APM相比有什麼區別呢?

2、ACPI與APM比較
APM 1.0&1.1:由BIOS執行電源管理;
APM 1.2:作業系統定義電源管理時間,由BIOS負責執行;
ACPI:BIOS收集硬體資訊,定義電源管理方案;由作業系統負責執行。
APM是一種軟體解決方案,因此是與作業系統有關的, 而ACPI是工業標準,包括了軟體和硬體方面的規範。

APIC (高階可程式設計中斷控制器)對計算機來講有兩個作用,
一是管理IRQ的分配,可以把傳統的16個IRQ擴充套件到24個(傳統的管理方式叫PIC),以適應更多的裝置。
二是管理多CPU。由於Nf2主機板並不支援多CPU,所以,APIC關閉直接的影響是減少了可用的IRQ。
不過,如果板卡不是非常多的話,關閉 APIC對系統是沒有什麼影響的。
要實現SMP功能,我們使用的CPU必須具備以下要求:
CPU 內部必須內建APIC單元。Intel 多處理規範的核心就是高階可程式設計中斷控制器(Advanced Programmable Interrupt Controllers--APICs)的使用。CPU通過彼此傳送中斷來完成它們之間的通訊。通過給中斷附加動作(actions),不同的CPU可以在某種程度上彼此進行控制。每個CPU有自己的APIC(成為那個CPU的本地APIC),並且還有一個I/O APIC來處理由I/O裝置引起的中斷,這個I/O APIC是安裝在主機板上的,但每個CPU上的APIC則不可或缺,否則將無法處理多CPU之間的中斷協調。
APIC可能遇到的問題,很多這類問題可以通過BIOS更新來解決。
下面的是通過更改HAL型別來解決
  CPU實際執行頻率與BIOS設定頻率不符
  NF2的使用者大約有10%的會出現CPU實際執行頻率與BIOS設定頻率不符的問題。我們稱之為“頻率不對”。
  這種現象帶來的直接後果就是在測試3dmark或跑3D遊戲的時候,會感覺不流暢,也稱之為“頓”。
  一般在更改BIOS設定後、更新驅動後重啟時,用測試軟體如Aida32、MBM5等可以看到CPU的執行頻率和你在BIOS裡設定得不一樣,而且差距很大。這個時候,用super pi測試CPU速度,會比平常花費時間長好幾秒,用3dmark跑測試,會比平常低幾百分甚至上千分。在3dmark中看到的CPU頻率,也與BIOS設定不符合。
  如果出現這種情況,則屬於我們所討論的“頻率不對”的問題。
  不過,不是所有的3D遊戲“頓”都是這個原因。判斷的方法是:如果你只有個別遊戲“頓”,或者用上述軟體測試頻率正確,就不是此問題。
  如果判斷確實屬此問題,解決的方法也很簡單,經過網友討論,只要關閉APIC功能即可。(注意,是APIC,不是ACPI)。

有一些伺服器(比如IBM的,HP的),安裝LINUX時,會給出核心的錯誤,導致無法安裝,這個時候可以在安裝的時候輸入
linux acpi=off noapic
應該是安裝上的。

==============================================================================================

  看到許多朋友抱怨linux電源管理很糟糕,說什麼電池使用比win下短了很多。實際上linux提供很多電源優化的功能,只不過預設情況下的設定沒有考慮電源使用罷了。下面我以ubuntu edgy為例,系統的討論一下筆記本電源管理優化。

  目標:最長的電池使用時間

  概述

  筆記本由許多不同的元件組成,各個元件的耗電不用。我們可以看到主要的耗電部件是液晶顯示器、CPU、晶片組和硬碟。雖然我們可以在BIOS裡面設定作業系統無關的電源管理模式,但是在作業系統之上我們可以設定一些更smart的電源管理模式自動適應各種環境。

  本文分下面幾個部分分別討論各個部件的電源管理優化。

  0. 前提

  在討論各個裝置的電源管理優化之前,先確定我們是否滿足下面一些前提條件。

  BOIS

  首先你要檢查一下你的BOIS的電源管理設定,先關閉所有bois支援的電源管理方式,只通過作業系統設定電源管理,然後再恢復BOIS的電源管理。

  kernel

  acpi支援,edgy預設核心是支援acpi的,如果你自定義編譯了核心,記住要把電源管理相關的模組選上

Power Management Options --->
  [*] Power Management Support
  [ ] Software Suspend
  ACPI( Advanced Configuration and Power Interface ) Support --->
    [*] ACPI Support
    [ ]   Sleep States
    [ ]     /proc/acpi/sleep (deprecated)
    [*]   AC Adapter
    [*]   Battery
       Button
       Video
    [ ]   Generic Hotkey
       Fan
       Processor
         Thermal Zone
    < >   ASUS/Medion Laptop Extras
    < >   IBM ThinkPad Laptop Extras
    < >   Toshiba Laptop Extras
    (0)   Disable ACPI for systems before Jan 1st this year
    [ ]   Debug Statements
    [*]   Power Management Timer Support
    < >   ACPI0004,PNP0A05 and PNP0A06 Container Driver (EXPERIMENTAL)
  CPU Frequency Scaling --->
    [*] CPU Frequency scaling
    [ ]   Enable CPUfreq debugging
    < >   CPU frequency translation statistics
    [ ]     CPU frequency translation statistics details
          Default CPUFreq governor (userspace)
    <*>   'performance' governor
    <*>   'powersave' governor
    <*>   'ondemand' cpufreq policy governor
    <*>   'conservative' cpufreq governor
    <*>   CPU frequency table helpers
     ACPI Processor P-States driver
    <*> CPUFreq driver for your processor

  1.顯示器

  如上圖所示,LCD是最耗電的部件,這一節我們討論如何降低LCD的耗電

  首先,儘可能調低亮度,這個不多說手動調節就可以了;

  然後設定 DPMS(Display Power Management Signaling)

  修改sudo vi /etc/X11/xorg.conf檔案

Section "ServerLayout"
  Identifier  [...]
  [...]
  Option  "BlankTime"  "5"  # Blank the screen after 5 minutes (Fake)
  Option  "StandbyTime"  "10"  # Turn off screen after 10 minutes (DPMS)
  Option  "SuspendTime"  "20"  # Full suspend after 20 minutes
  Option  "OffTime"  "30"  # Turn off after half an hour
  [...]
  EndSection
  [...]
  Section "Monitor"
  Identifier  [...]
  Option  "DPMS"  "true"
  [...]
 EndSection

  但似乎xorg的dpms有bug不能關閉LCD,只能把螢幕變黑

  google搜尋了一下發現是和acpi衝突只要重新啟動acpi就可以了

  手動設定螢幕關閉,

sudo /etc/init.d/acpid restart
xset dpms force off

  2.cpu

  移動版本的CPU支援頻率和電壓的動態調整,在大多數情況下你的CPU是沒必要全速執行的,尤其在電池支援下,我們可以強制使CPU執行在最低頻率。

  在linux 2.6以後的核心就支援cpu頻率的動態調整,有下面5種模式

  performance 將CPU頻率設定在支援的最高頻率,而不動態調節。

  powersave 將CPU頻率設定為最低

  ondemand 快速動態調整CPU頻率, Pentuim M的CPU可以使用

  conservative 與ondemand不同,平滑地調整CPU頻率,適合於用電池工作時。

  userspace 使用者模式,也就是長期以來都在用的那個模式。可以通過手動編輯配置檔案進行配置

  先安裝相關軟體cpufrequtils

sudo apt-get install cpufrequtils

  檢視你的cpu所支援的頻率

  cpufreq-info

cpufrequtils 002: cpufreq-info (C) Dominik Brodowski 2004-2006
Report errors and bugs to [email protected], please.
analyzing CPU 0:
  driver: powernow-k8
  CPUs which need to switch frequency at the same time: 0
  hardware limits: 800 MHz - 1.60 GHz
  available frequency steps: 1.60 GHz, 800 MHz
  available cpufreq governors: userspace, powersave, ondemand, conservative, performance
  current policy: frequency should be within 800 MHz and 1.60 GHz.
                  The governor "ondemand" may decide which speed to use
                  within this range.
current CPU frequency is 800 MHz.

  需要進入那個模式直接修改proc檔案,比如要進入powersave模式

sudo -s
      echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

  其實有個實用程式laptop-mode可以方便的設定,在後面硬碟一節統一介紹

  如果是用迅馳cpu,支援多個頻率,你可以用powernowd更細化的調節cpu頻率


轉自:http://forum.ubuntu.org.cn/viewtopic.php?t=74990

             http://doc.linuxpk.com/80181.html