/proc/acpi詳細介紹

本文轉載於:https://blog.csdn.net/gaojy19881225/article/details/80027213


目錄

前言

一、使用 ACPI

二、控制 CPU 性能

三、ACPI 工具

四、故障診斷

更多信息


前言

ACPI(高級配置和電源接口)支持操作系統設置和控制各個硬件部件。 ACPI 可以取代 PnP 和 APM。 它提供有關電池、AC 適

配器、溫度、風扇和系統事件(例如 “合上機蓋” 或 “電池電量低”)的信息。

BIOS 提供包含有關各個部件和硬件訪問方法信息的表。 操作系統使用這些信息執行指派中斷或激活和取消激活部件等任務。 因

爲操作系統執行 BIOS 中儲存的命令,所以功能取決於 BIOS 實施。 /var/log/boot.msg 中報告了 ACPI 能夠檢測並裝載的

表。 有關對 ACPI 問題進行故障診斷的詳細信息,請參見第 28.3.4 節 “故障診斷”

一、使用 ACPI

如果內核在引導系統時檢測到 ACPI BIOS,則會自動激活 ACPI。某些較舊的計算機可能需要引導參數 acpi=force。 計算機必須支持 ACPI 2.0 或更高版本。 檢查 /var/log/boot.msg 中的內核引導消息,瞭解是否已激活了 ACPI。

隨後,必須裝載多個模塊。 這是由 Aacpid 的啓動腳本完成的。 如果這些模塊中的任何一個模塊引起問題,則可以在 /etc/sysconfig/powersave/common 中排除相應模塊的裝載或卸載。系統日誌 (/var/log/messages) 包含模塊的消息,使您瞭解檢測到了哪些組件。

/proc/acpi 目前包含多個文件,這些文件提供有關係統狀態的信息,也可用於更改某些狀態。 某些功能仍在開發中,所以尚不能使用,而對某些功能的支持主要取決於製造商的實施。

通過 cat 可以讀取所有文件(dsdt 和 fadt 除外)。 在某些文件中,可使用 echo(例如 echo X > file)來修改設置,以指定適用於 X 的值。能夠簡化訪問這些值的其中一種可行方法就是使用 powersave 命令,它將充當 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(區分系統說明表和 FADT(固定 ACPI 說明表)。 可以使用 acpidmpacpidisasm 和 dmdecode 讀取這些文件。 包 pmtools 中提供了這些程序及其文檔。 例如,acpidmpDSDT | acpidisasm

/proc/acpi/ac_adapter/AC/state

顯示是否連接了 AC 適配器。

/proc/acpi/battery/BAT*/{alarm,info,state}

有關電池狀態的詳細信息。 通過將 info 中的 last full capacity 與 state 中的 remaining capacity 進行比較來讀取電量水平。 一個更方便的方法是使用 第 28.3.3 節 “ACPI 工具” 中引入的特殊程序之一。 可以在 alarm 中指定電量水平,達到該電量水平將觸發電池事件(例如警告、低和嚴重)。

/proc/acpi/button

該目錄中包含各種切換模式的相關信息,比如便攜式計算機機蓋和按鈕。

/proc/acpi/fan/FAN/state

顯示風扇當前是否處於活動狀態。 將 0(開)或 3(關)寫入此文件可以手動激活或取消激活風扇。 但是,當系統變得過熱時,內核中的 ACPI 代碼和硬件(或 BIOS)將覆蓋此設置。

/proc/acpi/processor/*

爲系統中的每個 CPU 保留了一個單獨的子目錄。

/proc/acpi/processor/*/info

有關處理器省電選項的信息。

/proc/acpi/processor/*/power

有關當前處理器狀態的信息。 C2 旁邊的星號表示處理器處於空閒狀態。這是最常見的狀態,可以從 usage 值中觀察到。

/proc/acpi/processor/*/throttling

可用於設置處理器時鐘的節流。 通常,可以將節流分爲 8 個級別。 這與 CPU 的頻率控制無關。

/proc/acpi/processor/*/limit

如果守護程序自動控制性能(已過時)和節流,則可以在這裏指定最大限制。 某些限制是由系統確定的。 某些限制可由用戶進行調整。

/proc/acpi/thermal_zone/

每個熱區有單獨的子目錄。 熱區是具有類似熱屬性的區域,其編號和名稱由硬件製造商指定。 但是,很少實施 ACPI 提供的許多功能。 而溫度控制通常是由 BIOS 處理的。 因爲關係到硬件的使用壽命,所以操作系統很少有機會進行干預。 因此,部分文件只具有理論價值。

/proc/acpi/thermal_zone/*/temperature

熱區的當前溫度。

/proc/acpi/thermal_zone/*/state

此狀態指出一切是否 ok 或 ACPI 是採用 active 散熱還是 passive 散熱。 對於獨立於 ACPI 的風扇控制,此狀態始終是 ok

/proc/acpi/thermal_zone/*/cooling_mode

選擇由 ACPI 控制的散熱方法。 選擇被動散熱方式(性能較低,但很經濟)還是主動散熱方式(全部性能,但有風扇噪音)。

/proc/acpi/thermal_zone/*/trip_points

允許您確定溫度限制,達到這些溫度限制將觸發特定操作(例如,被動散熱或主動散熱、暫停 (hot) 或關閉 (critical))。 DSDT 中定義了可能的操作(取決於設備)。 ACPI 規範中確定的臨界點是 criticalhotpassiveactive1 和 active2。 即使不是實施所有臨界點,也必須始終在此文件中以此順序輸入它們。 例如,項 echo 90:0:70:0:0 > trip_points 將 critical 的溫度設置爲 90,將 passive 的溫度設置爲 70(所有溫度以攝氏度爲單位)。

/proc/acpi/thermal_zone/*/polling_frequency

如果在溫度改變時沒有自動更新 temperature 中的值,請在這裏切換巡迴檢測方式。 使用命令 echoX > /proc/acpi/thermal_zone/*/polling_frequency 將每 X 秒查詢一次溫度。 設置 X=0 禁用巡迴檢測。

不需要手動編輯這些設置、信息和事件。 這可以通過 Powersave 守護程序 (powersaved) 及其各種前端(例如 powersave、kpowersave 和 wmpowersave)來完成。 請參見第 28.3.3 節 “ACPI 工具”

二、控制 CPU 性能

CPU 可以採用三種省電方法。 根據計算機的運行方式,還可以將這三種方法結合起來使用。 省電還意味着系統溫度不會升得過高並且激活風扇的頻率會降低。

頻率和電壓調節

PowerNow! 和 Speedstep 是 AMD 和 Intel 爲這一技術指定的名稱。 但是,其他製造商的處理器中也應用了這一技術。 CPU 的時鐘頻率及其核心電壓同時降低,因而採用這一技術所節省的電量遠遠超過了線性省電量。 這意味着,如果頻率減半(一半的性能),所節省的電量遠不止一半。 此技術獨立於 APM 或 ACPI。 可使用兩種主要的方法來執行 CPU 頻率調節:通過內核本身或通過用戶空間應用程序。 因此,可以在 /sys/devices/system/cpu/cpu*/cpufreq/ 下設置不同的內核管理器。

userspace governor

如果設置了用戶空間管理器,則內核會將對 CPU 頻率調節的控制指定給用戶空間應用程序(通常是守護程序)。 在 SUSE Linux Enterprise 分發中,此守護程序是 powersaved 程序包。 使用此實施時,將根據當前系統負載調整 CPU 的頻率。 默認情況下,將使用某個內核實施。 但是,在某個硬件上或對於特定處理器或驅動器,用戶空間實施仍是唯一的工作解決方法。

ondemand governor

它是動態 CPU 頻率策略的內核實施,應該可在大多數系統上運行。 只要系統負載過高,CPU 頻率將立即增加。 它在系統負載較低時也較低。

conservative governor

此管理器與按需實現相似,只是使用更保守的策略。對於 CPU 頻率增加之前的特定時間內,系統的負載必須很高。

powersave governor

靜態地將 cpu 頻率設置爲最低。

performance governor

靜態地將 cpu 頻率設置爲最高。

節流時鐘頻率

此技術將忽略一定百分比的 CPU 時鐘信號脈衝。 如果節流 25%,則將忽略四分之一的脈衝,如果節流 87.5%,則只有八分之一的脈衝到達處理器。 但是,採用這種方法所節省的電量稍微低於線性省電量。 通常,只有在頻率調節不可用或要最大程度節省電量時才使用節流。 此技術也必須由特殊的進程控制。 系統接口是 /proc/acpi/processor/*/throttling

使處理器進入休眠狀態

操作系統在處理器不執行任何任務時使處理器進入休眠狀態。在這種情況下,操作系統向 CPU 發送一個 halt命令。 有三種狀態:C1、C2 和 C3。最經濟的狀態是 C3,在這種狀態下,連處理器高速緩存與主存之間的同步都將暫停。 因此,只有在沒有任何其他設備通過總線主控芯片活動修改主儲存器的內容時才能應用此狀態。 某些驅動程序禁止使用 C3。 當前狀態顯示在 /proc/acpi/processor/*/power 中。

只有當處理器忙時,才需要進行頻率調節和節流,這是因爲當處理器處於空閒狀態時總是會應用最經濟的 C 狀態。 如果 CPU 忙,則建議採用的省電方法是頻率調節。 處理器經常只在部分負載的狀態下工作。 在這種情況下,可以以較低的頻率運行。 通常,由內核按需管理器 (kernel on demand governor) 或一個守護程序(如 powersaved)控制的動態頻率調節是最佳方法。如果使用電池工作或如果您想讓計算機冷卻或安靜,則靜態設置爲低頻率會非常有用。

節流應作爲最後沒有辦法時採用的方法,例如,雖然系統負載很高,但爲延長電池工作時間而採用節流。 但是,如果節流程度過高,某些系統將不會正常運行。 此外,如果 CPU 處理的任務量很少,則 CPU 節流就沒什麼作用。

在 SUSE Linux Enterprise 中,這些技術是由 powersave 守護程序控制的。 對此配置進行了說明。第 28.5 節 “powersave 包”

三、ACPI 工具

一系列相對全面的 ACPI 實用程序包含這樣一些工具:只顯示信息(例如,電池電量水平和溫度)的工具(acpi、klaptopdaemon 和 wmacpimon 等)、簡化對 /proc/acpi 中的結構進行訪問的工具或協助監視更改的工具(akpi、acpiw 和 gtkacpiw)以及用於編輯 BIOS 中 ACPI 表的工具(包 pmtools)。

四、故障診斷

問題有兩種不同的類型。 一種是內核的 ACPI 代碼可能包含未及時檢測出的錯誤。 在這種情況下,可以通過下載獲得解決方案。 而另一種更常見的問題,是由 BIOS 引起的。 有時,會故意將一些不符合 ACPI 規範的配置集成在 BIOS 中,用於避免其他常用操作系統中 ACPI 實施中的錯誤。 在 ACPI 實施中有嚴重錯誤的硬件部件會被記錄在一個黑名單中,防止 Linux 內核對這些部件使用 ACPI。

在遇到問題時,首先要做的是更新 BIOS。 如果計算機根本未引導,則使用以下引導參數之一可能會解決問題:

pci=noacpi

不使用 ACPI 配置 PCI 設備。

acpi=ht

只執行簡單的資源配置。 不要將 ACPI 用於其他目的。

acpi=off

禁用 ACPI。

[Warning] 不使用 ACPI 引導會出現問題

某些較新的計算機(特別是 SMP 系統和 AMD64 系統)需要 ACPI 以正確配置硬件。 在這些計算機上,禁用 ACPI 可能會產生問題。

引導後,用命令 dmesg| grep -2i acpi 來監視系統的引導消息(或所有消息,因爲問題可能不是由 ACPI 引起的)。 如果在分析 ACPI 表時出錯,則最重要的表 (DSDT) 可替換爲更高的版本。在這種情況下,將忽略 BIOS 中有問題的 DSDT。 中對這一過程進行了介紹。第 28.5.4 節 “查錯”

在內核配置中,可以使用開關來激活 ACPI 調試消息。 如果已編譯並安裝了具有 ACPI 調試功能的內核,則支持對詳細信息執行錯誤專家搜索。

如果遇到 BIOS 或硬件問題,則最好與製造商聯繫。 特別是如果製造商不常對 Linux 提供支持,他們就應該面對這些問題。 只有在製造商意識到有很多客戶在使用 Linux 時,他們纔會重視這一問題。

更多信息

有關 ACPI 的其他文檔和幫助:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章