ACPI (進階組態與電源介面) 可讓作業系統設定和控制個別的硬體元件。ACPI 可取代 PnP 與 APM。它能提供一些資訊,包括電池、變電器、溫度、風扇以及「關閉蓋子」或「電池電力不足」等系統事件。
BIOS 會提供一些表格,內含關於個別元件與硬體的存取方法等資訊。作業系統會使用這此資訊來執行任務,像是指定中斷或啟用和停用元件。因為作業系統會執行儲存於 BIOS 中的指令,所以 BIOS 實行會決定其功能。ACPI 能偵測和載入的表格在 /var/log/boot.msg
中可以找到。請參閱第 28.3.4 節「疑難排解」,以取得更多有關 ACPI 問題疑難排解的資訊。
如果核心在系統啟動時偵測到 ACPI BIOS,會自動啟用 ACPI。有些較舊的機器可能需要用到開機參數 acpi=force
。電腦需支援 ACPI 2.0 或以後的版本。請檢查 /var/log/boot.msg
中的核心開機訊息,以查看 ACPI 是否啟用。
接著,需載入一些模組。這會由 acpid 的啟動程序檔來完成。如果其中任何一個模組導致問題發生,該項模組就不會在 /etc/Sysconfig/powersave/common
中載入或取消載入。 系統記錄 (/var/log/messages
) 內有模組的訊息,從中可以知道已偵測到哪些元件。
/proc/acpi
目前含有一些檔案,用來提供有關系統狀態的資訊,也可以用來對某些狀態進行變更。有些功能還不能使用,因為仍在開發中,而且有些功能的支援主要是依靠製造商是否在產品中實行。
所有檔案 (dsdt
與 fadt
除外) 都可使用 cat 來讀取。有些檔案可使用 echo 修改設定,例如 echo x > file
可為 X 指定適合的值。powersave 指令是可存取這些值的一種簡單方式,可做為省電精靈的前端工具。最重要的檔案說明如下:
/proc/acpi/info
有關 ACPI 的一般資訊。
/proc/acpi/alarm
在此指定何時從睡眠狀態中喚醒系統。目前,尚未完整支援此功能。
/proc/acpi/sleep
提供可能的睡眠狀態的相關資訊。
/proc/acpi/event
所有事件都會會在此報告,並經由 Powersave 精靈來加以處理 (powersaved)。如果沒有精靈存取此檔案,則諸如快速按一下電源按鈕或是關閉蓋子等事件,可使用 cat /proc/acpi/event
來讀取 (按 Ctrl+C來終止)。
/proc/acpi/dsdt
與 /proc/acpi/fadt
這些檔案包含 ACPI 的 (不同系統說明表格) DSDT 表格和 (固定 ACPI 說明表格) FADT 表格。可以使用 acpidmp、acpidisasm 與 dmdecode 來讀取它們。這些程式及其文件位於 pmtools
套件中。例如,acpidmp DSDT | acpidisasm
。
/proc/acpi/ac_adapter/AC/state
顯示是否已連接 AC 轉換器。
/proc/acpi/battery/BAT*/{提醒、資訊、狀態}
有關電池狀態的詳細資訊。透過比較資訊
中的上次完整電量
以及狀態
中的剩餘電量
來讀取充電等級。另一種更方便的方法,便是使用在 第 28.3.3 節「ACPI 工具」 中所介紹的特別程式。會觸發電池事件的充電等級 (例如警告、低和極低) 可在提醒
中指定。
/proc/acpi/button
此目錄包含各種切換 (如筆記型電腦蓋和按鈕) 的資訊。
/proc/acpi/fan/FAN/state
顯示風扇是否正在運作。以手動方式透過在此檔案中寫入 0
(開啟) 或 3
(關閉),以啟用或停用風扇。不過,在系統過熱時,核心與硬體 (或 BIOS) 中的 ACPI 程式碼都會覆寫此設定。
/proc/acpi/processor/*
系統中的每個 CPU 都有個別的子目錄。
/proc/acpi/processor/*/info
關於處理器的省電選項的資訊。
/proc/acpi/processor/*/power
關於目前處理器狀態的資訊。在 C2
旁邊有星號表示處理器閒置中。查看使用
值時,這是最常出現的狀態。
/proc/acpi/processor/*/throttling
能用來設定調節處理器的時脈。通常,調節可以有八個層級。這和 CPU 的頻率控制是兩回事。
/proc/acpi/processor/*/limit
如果是由精靈來自動控制效能 (過時) 及調節功能,則可在此指定最大上限。部份限制是由系統所決定。部份則可由使用者來調整。
/proc/acpi/thermal_zone/
每個溫度區都有一個子目錄。溫度區是指一個具有類似的溫度屬性的區域,由硬體製造商指定區域的數值及名稱。不過大部份由 ACPI 所提供的可能選項,很少被實作。通常反而是使用 BIOS 來控制溫度。作業系統很少有干預的機會,因為這可能會減少硬體的使用壽命。因此,有一部份的檔案僅具理論價值。
/proc/acpi/thermal_zone/*/temperature
溫度區目前的溫度。
/proc/acpi/thermal_zone/*/state
指示是否一切都正常
,或 ACPI 是否套用主動
或被動
冷卻規則。如果風扇控制獨立於 ACPI 之外,則狀態會一直是正常
。
/proc/acpi/thermal_zone/*/cooling_mode
選取由 ACPI 控制的冷卻方法。從被動 (效能較低,經濟型) 選擇或是作用中的冷卻模型 (完整的效能、風扇噪音)。
/proc/acpi/thermal_zone/*/trip_points
啟用判定溫度上限以觸發指定動作的功能,像是被動或主動冷卻、暫停 (過熱
) 或關機 (嚴重
)。在 DSDT (視設備而有所不同) 中定義可能動作。在 ACPI 指定中的啟動點分別是嚴重
、過熱
、被動
、主動 1
及 主動 2
。即使不會每個都會實作,仍必須依此順序將它們輸入在此檔案中。例如,echo 90:0:70:0:0 > trip_points
項目即是將嚴重
的溫度設為 90
,將被動
設為 70
(以攝氏測量的所有溫度)。
/proc/acpi/thermal_zone/*/polling_frequency
如果在 temperature
檔案中的值,未在溫度變更時自動更新,請在此切換輪詢模式。echo X > /proc/acpi/thermal_zone/*/polling_frequency
指令能限定每 X
秒查詢一次溫度。設定 X=0
以關閉輪詢。
這些設定、資訊及事件都不需以手動方式編輯。可以使用省電精靈 (powersaved) 及其各種前端工具來完成,像是 powersave、kpowersave 及 wmpowersave。請參閱第 28.3.3 節「ACPI 工具」。
CPU 有三種省電方法。依據電腦的操作模式的不同,這些方法可合併使用。省電也表示能降低系統溫度,減低風扇的使用頻率。
PowerNow! 與 Speedstep 是 AMD 與 Intel 分別針對此技術所使用的實作。不過,此技術也套用於其他製造商的處理器中。CPU 的時脈頻率及其核心電壓會同時降低,產生高於線性的省電效能。也就是當頻率減半 (效能減半),使用的電量卻能遠低於原本的一半。此技術與 APM 或 ACPI 無關。CPU 頻率比例的執行有兩種主要的方式—利用核心本身或利用使用者空間應用程式。因此,有不同的核心調節器,這可在 /sys/devices/system/cpu/cpu*/cpufreq/
下設定。
如果設定使用者空間調節器,核心會將 CPU 頻率比例的控制權交給使用者空間應用程式 (通常是一個精靈)。在 SUSE Linux Enterprise 版本中,這個精靈是 powersaved 套件。使用此執行方式時,CPU 頻率會根據目前的系統負載來調整。預設狀態下會使用核心執行方式之一。但是,對某些硬體,或特定的處理器或驅動程式而言,使用者空間執行仍是唯一可行的解決方案。
這是動態 CPU 頻率規則的核心執行方式,應該適用於大部分系統。只要系統負載一過高,就立即提高 CPU 頻率。系統負載降低,則會隨之降低。
此調節器類似要求式調節器,但所用的規則比較保守。系統負載過高的情況必須持續一段時間後,才會提高 CPU 頻率。
CPU 頻率固定設為可能的最小值。
CPU 頻率固定設為可能的最大值。
此技術會忽略部分 CPU 的時脈訊號脈衝。到達 25% 調節時,會省略四分之一脈衝,到達 87.5% 時則每八次脈衝僅有一次會到達處理器。不過,節省用電量稍低於線性。通常調節功能僅在無此頻率比例時使用,或是為了最大化省電效果時使用。此外,此技術必須使用特定程序來進行控制。系統介面是 /proc/acpi/processor/*/throttling
。
作業系統會在沒事可做時使處理器進入睡眠。在此情況中,作業系統會傳送 halt 指令給 CPU。一共有三種狀態:C1、C2 和 C3。在最節省的 C3 狀態中,連處理器快取與主記憶體間的同步化也會暫停。因此,僅能在沒有任何設備透過 Bus master 活動來修改主記憶體內容時可以套用此狀態。有些驅動程式會禁止使用 C3。目前的狀態會顯示在 /proc/acpi/processor/*/power
中。
頻率比例及調節只在處理器忙碌時使用,因為在處理器閒置時,一定會套用最節省的 C 狀態。如果 CPU 正忙碌,頻率比例是建議的省電方法。通常處理器僅有部份的工作負載。在此情況中,可以使用較低的頻率。通常,最佳方法是使用核心要求式調節器或精靈 (例如 powersaved) 來控制動態頻率比例。對電池的操作而言,靜態設定為較低頻率比較好,也可以用在您想降低電腦溫度或減低噪音時。
調節應做最後手段使用,例如,在高度系統負載下仍要延伸電池操作時間時。不過在調節過多時,有些系統無法運作順暢。此外,當 CPU 要做的事不多時,調節 CPU 是無意義的動作。
在 SUSE Linux Enterprise 中,這些技術是由 powersave 精靈所控制。組態的說明位於 第 28.5 節「powersave 套件」。
ACPI 公用程式包含僅顯示電池充電等級與溫度等資訊的工具 (acpi、klaptopdaemon 及 wmacpimon 等等。)、協助在 /proc/acpi
中存取結構或協助監控變更 (akpi、acpiw、gtkacpiw) 的工具,以及在 BIOS 中編輯 ACPI 表格的工具 (pmtools
套件)。
共有兩種不同類型的問題。一方面是核心的 ACPI 程式碼包含無法及時偵測到的錯誤。在這種情況中,將會有可供下載的解決方案。不過通常問題是因 BIOS 而起。有時,會刻意在 BIOS 中整合與 ACPI 規格不符的技術,以避免在其他常見作業系統中的 ACPI 實作錯誤。會在黑名單中將那些在 ACPI 實行中有重大錯誤的硬體元件記錄下來,以避免 Linux 核心對這些元件使用 ACPI。
發生問題時要做的第一件事是更新 BIOS。如果電腦未能開機,下列中的某一個開機參數也許有幫助:
不使用 ACPI 來設定 PCI 設備。
僅執行一個簡單的資源組態。不將 ACPI 用於其他目的。
關閉 ACPI。
![]() | 未使用 ACPI 的開機問題 |
---|---|
有些較新的機器 (尤其是 SMP 系統及 AMD64 系統) 需透過 ACPI 以正確設定硬體。關閉這些機器的 ACPI 會發生隨之而來的問題。 |
開機後,可使用 dmesg | grep -2i acpi
指令來監控系統的開機訊息 (或所有訊息,因為也可能是 ACPI 以外的因素構成問題)。如果是在分析 ACPI 表格時發生問題,則最重要的 DSDT 表格可用改良版本來替換。在此情況中,會忽略 BIOS 的錯誤 DSDT。程序在 第 28.5.4 節「疑難排解」 中描述。
在核心組態中,有個啟用 ACPI 除錯訊息的切換。如果已編譯並安裝好一個具有 ACPI 除錯能力的核心,則專家將能取得詳細資訊支援,以便搜尋錯誤。
如果您曾遇到 BIOS 問題或硬體問題,建議您聯絡製造商。尤其是哪些一直未提供 Linux 支援的製造商,更應該出面解決這些問題。唯有讓製造商得知他們有不少使用 Linux 的客戶,他們才會嚴肅地處理這些問題。
ACPI 的其他文件和說明:
http://www.cpqlinux.com/acpi-howto.html (詳細的 ACPI HOWTO,內含 DSDT 修補程式)
http://www.intel.com/technology/iapc/acpi/faq.htm (ACPI FAQ @Intel)
http://acpi.sourceforge.net/ (Sourceforge 的 ACPI4Linux 計劃)
http://www.poupinou.org/acpi/ (Bruno Ducrot 的 DSDT 修補程式)