在 FreeBSD 上省電

這裡的內容幾乎都是參考這篇:HOWTO: FreeBSD CPU Scaling and Power Saving

之前有傳出 powerd 會造成 kernel panic 的消息(spin lock held too long),不過現在應該修好了。Patch 已經被 commit 到 RELENG_8RELENG_7

今天剛好在伺服器上啟動 powerd,因為有些像 www、ns、backup 幾乎都是閒置中,所以這樣應該比較省電。

現在的 CPU 都比以往強很多,因此系統常常處於閒置的狀態。想當年,只有一台 Pentium III 800 MHz 的筆電可以用。如今都是 Core 2 Duo、Core 2 Quad,甚至 Core i7 這些處理器。這些 clock speed 通常都在 2~3 GHz 之間。要注意的是不同系列不能直接拿 clock speed 來比速度,如一個 Core 2 Duo 2.66 GHz 比 Pentium 4 3.0 GHz 的處理器快多了。

閒置的時候,通常會降低頻率達到省電的目的,也會有 C-states 可以控制 CPU。簡單來說 C0 是使用中,C1 以下則會停止某些不需要的功能。不過從 C2、C3、C4 等狀態跳到 C0 所花的時間比較久一點。

這裡有一些關於 C-states 的資料:
C-states, C-states and even more C-states
There’s got to be a catch
CPU Power States (C-States)

FreeBSD 裡,只要將 powerd_enable="YES" 加入 /etc/rc.conf 即可啟動 powerd。其他額外的參數可以用 powerd_flags 設定。如:powerd_flags="-a hadp -b adp"

Maximum、minimum、adaptive 與 hiadaptive 的縮寫分別是 max、min、adp 與 hadp。Maximum 會有最好的效能、minimum 效能最差但省最多電,至於 adaptive 和 hiadaptive 會隨著 CPU 使用率調整。差別是 hiadaptive 比 adaptive 注重效能。

要注意的是 max、min、adp、hadp 這些縮寫在 7.1-RELEASE 才出現,且 hiadaptive 也是在 7.2-RELEASE 才出現。Manual 裡有更多關於 powerd 的參數。

用筆電可能使用 adaptive 模式比較省電,不過桌上型電腦可能會感覺到反應比較慢一點,所以我個人是用 hiadaptive。不過也有另一個選擇,用 sysctl 調整 CPU 的最低頻率。如 # sysctl debug.cpufreq.lowest=1200 就設定最低頻率為 1200 MHz。這裡有個 patch 可以設定 CPU 的最高頻率,不過我沒試過。若要每次開機都自動設定的話,可以將 debug.cpufreq.lowest=1200 加入 /etc/sysctl.conf

# sysctl -a | grep dev.cpu...cx_supported 可以查看 CPU 支援的 C-states,然後用 # sysctl dev.cpu.0.cx_lowest=C1 設定最低的 C-state,這裡是設定 C1。若有兩顆以上,可以設定一個 C1、一個 C2,這樣反應速度比較快,其中一個也比較省電,不過我的電腦只支援 C1,沒辦法測試。

About these ads

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

關注

Get every new post delivered to your Inbox.