2,284 瀏覽數

ACPI

ACPI (Advanced configuration and power interface) 的 Power States
ACPI 的 Power States 狀態被定義成許多類別.除了系統的 Global states , ACPI 還支援了 CPU (Processor , Performance states)與 device(Device states) 的電源管理.在 wiki 的 ACPI 中把 Power states 定義的很清楚 http://en.wikipedia.org/wiki/Advanced_Configuration_and_Power_Interface .

  • Global states
    Global states 從 G0 到 G3 – Go(S0) ,G1(S1 ,S2 ,S3 ,S4) ,G2(S5) ,G3 ,對應到 Linux ACPI 的 Sleep states(S1 ~ S4) 但 S0 = G0 , S5 = G2.
    Additional states are defined by manufacturers for some processors. For example, Intel’s Haswell platform has states up to C10,
  • Processor states
    不光是系統有 Power states ,Device 和 Processor 也有自己的 Power states – C0 ,C1 ,C2 ,C3
  • Device states
    Device states 從 D0 ~ D3 (D0 ,D1 ,D2),
  • Performance states
    剛剛的 D0 (Devices) , C0(CPU) 定義為 operating state 也就是在運作階段,在這個階段中還區分為不同的 Performance states 從 P0 ~ P16, P0 是效能最高的狀態.依序效能往下 Pn , Pn-1 …P16

在 Linux 下 ACPI 的功能要在 kernel 2.6 版才支援下面是他的 state 所代表的意義

Sleep States

  • S1 – “Sleep"
    CPU保持供電,但不執行指令,當 CPU 停止運行時,其他相關裝置也一樣被關閉.
  • S2
    在規範定義該狀態是當前未在使用。
  • S3 – “Suspend to RAM"
    所有 CPU 供電被切斷,並且其暫存器的內容被刷新到RAM.
  • S4 – “Suspend to Disk"
    CPU的電源關閉如同 S3,但RAM的資料寫入到磁盤.稱為S4BIOS一種變型是最普遍的,S4 必須由 BIOS 來實現而不是透過作業系統.在以前 Linux 2.4.x 的核心 S4 不被支援.
  • S5 – “Soft Off"
    這個狀態下系統是關閉,但某一些設備還是保有部分電力(像是 LAN 或 USB 等設備),這些設備主要是在等待接收喚醒的事件,接受到會讓系統開機.

首先看一下你的系統核心是否有支援

[root@benjr boot]# cat config-2.6.18-53.el5 | grep -i acpi_sleep
CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_SLEEP_PROC_FS=y
# CONFIG_ACPI_SLEEP_PROC_SLEEP is not set

要看你的系統有支援哪一些 state 要看 /sys/power/state

[root@benjr ~]# cat /sys/power/state
standby disk mem

可以看到你的系統有支援 standby(S1), mem(S3), disk(S4).可以用下面的方法來測試一下.

[root@benjr ~]# echo -n standby > /sys/power/state
[root@benjr ~]# echo -n mem > /sys/power/state
[root@benjr ~]# echo -n disk > /sys/power/state

如果動作正常你會看到系統依據不同的 state 有不同的 ACPI 狀態出現.

在 Linux 下面可以用 #powertop 這一隻工具看 CPU 的 state,在 Ubuntu 下透過 #apt-get install 就可以安裝,或是妳可以造訪 powertop 的關方網頁 https://01.org/zh/powertop

#apt-get install powertop

直接執行即可以看.

#powertop

dump acpi table
我們在 Linux 下面可以透過一些方式把 ACPI 定義的表格抓出來,這相容 ACPI 表格,紀錄了作業系統和系統韌體之間的介面。

  • DSDT – Differentiated System Description Table
  • SSDT – Secondary System Description Table

透過 #sudo cat /sys/firmware/acpi/tables/DSDT > dsdt.aml 我們可以找到 DSDT 檔案,不過這不是給人看的,所以還要透過 #iasl -d dsdt.aml 來做轉換.或是直接使用 #acpidump 來看,大部分的系統預設皆沒該項工具.

這些工具都可以透過 #sudo apt-get install iasl 或是 #sudo apt-get install acpidump ,若是使用 RHEL 可以透過 http://rpmfind.net 來查詢

參考資料

http://acpi.sourceforge.net/documentation/sleep.html
http://moto.debian.org.tw/viewtopic.php?t=8403
http://en.wikipedia.org/wiki/Advanced_Configuration_and_Power_Interface

發表迴響