2007年11月23日

降低CPU速度for NB

來自~http://slowlymouse.blogspot.com/2007/11/ubuntu-cpu.html
實在了不起,Linux愈作愈好,慢慢貼近使用者,不過我沒膽子試驗Orz
為了保險起見,我把文章複製過來~自己備份一下
==================================================================
目前以中高階notebook而言,搭載雙核心處理器早已不足為奇,但是『雙』核心也意味謂著運作時將產生更多的廢熱,尤其當兩個核心工作滿載,更可以達到 80幾,將近90度的高溫(左圖有真相),其散熱鰭片孔所排出來的熱風,足以媲美寒冬裡溫暖妳手心的7-11關東煮,如果你願意拿它來烘手的話!

  如果再加上 ThinkPad X61右手掌底下動輒50幾度的無線網卡,這下雙手真的可以不用畏懼冬夜裡的寒風了,但是,這麼貼心的設計可只有『冬日限定』,問題是臺灣的冬天,只有短短三個月阿!

  高溫是所有電子元件壽命的殺手,特別是小巧的Notebook,不過當電話那頭的老闆十萬火急的要著上次meeting的結果,而實驗室裡卻 只有一臺老古桌機可以用,這時候逼不得已讓筆電也站上火線!而為了筆電的壽命著想,需降低CPU全速運作時所產生的高熱,只好修改過於保守的CPU電壓 (voltage )預設值,不過網路上有關Linux系統上調整CPU電壓的資訊並不多( for XP 多到不行),辛好Linux-PHC 提供了非常完整的修改方法,過程也不難,只要到Linux-PHC Files下載適用的Patch,並且按照Howto的步驟就能輕鬆的降低CPU溫度。

  以下節錄自Linux-PHC官方文件『Howto undervolt a Core 2 Duo (and maybe Core Duo and Core processors)』,並加入簡單的註解。

主要步驟如下:
  • 下載 kernel-sources
  • Patching kernel-sources
  • 重新編譯部份modules
  • 覆寫舊modules
  • 更改cpu預設電壓
【下載kernel-sources】
  1. 使用Ubuntu 7.10版本,可以從apt下載 2.6.22-kernel source
  2. 在apt執行安裝完畢後,以下動作皆需要登錄為root身份。
  3. 進入目錄 /usr/src/ 下,解壓縮檔案 "linux-source-2.6.22.tar.bz2"。
  4. 進入新的子目錄"linux-source-2.6.22"下。
 command:

$ sudo apt-get install linux-source-2.6.22
$ sudo bash
# cd /usr/src
/usr/src# tar -xjf linux-source-2.6.22.tar.bz2
/usr/src# cd linux-source-2.6.22
【Patching the kernel】
  1. 執行patch前,需先安裝名為patch的程式。
  2. 將下載到桌面的phc-patch複製到kernel的子目錄底下( 記得將fallen改為你的使用者名稱 )。
  3. Patch 所下載的kernel-source。
  4. 複製ubuntu下的設定檔(kernel configuration)到目前的目錄底下。
  5. prepare kernel(準備kernel?)。
 command:

/usr/src# sudo apt-get install patch
/usr/src/linux-source-2.6.22# cp /home/fallen/Desktop/linux-phc-0.3.0-pre1/kernel-patch/linux-phc-0.3.0-pre1-kernel-vanilla-2.6.22.patch .
/usr/src/linux-source-2.6.22# patch -p1 <>
官方wiki提到,接下來系統『應該』會詢問有關cpu頻率和電壓的問題,如果有的話也只能答yes囉!不過,在我安裝的過程中並沒有看到任何對話框!

【重新編譯cpufreq modules】
  1. 輸入make prepare
  2. 輸入make scripts
  3. 重新建利modules(wiki說,要我們不用怕!)
 command:

/usr/src/linux-source-2.6.22# make prepare
/usr/src/linux-source-2.6.22# make scripts
/usr/src/linux-source-2.6.22# make M=./arch/i386/kernel/cpu/cpufreq
接下來會有一個 module.symvers 遺失的警告,不過 Linux-PHC Wiki 告訴我們"nothing in this world is perfect",這應該是無關緊要的意思吧,囧rz。

【安裝 patched module】
  1. 置換新module
  2. 移除程序裡的舊cpufreq module
  3. 下次啟動時系載入新的cpufreq module
 command
/usr/src/linux-source-2.6.22# cp arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.ko /lib/modules/$(uname -r)/kernel/arch/i386/kernel/cpu/cpufreq
/usr/src/linux-source-2.6.22# rmmod acpi-cpufreq
/usr/src/linux-source-2.6.22# modprobe acpi-cpufreq
Linux-PHC Wiki 並未提到接下來需不需要重新啟動,但是安裝時發現如果這個步驟沒有重新開機,會找不到部份的設定。

【變更電壓設定】
  如果過程中沒出錯的話,到這邊應當可以修改對應頻率(FIDs)的電壓值(VIDs)。不過kenel所提供的頻率與電壓單位,並非常用的GHz與Vlot. (伏特)而是採用相對應的整數。
先進入cpufreq目錄底下,列出相關設定檔案;
 command:

/usr/src/linux-source-2.6.22# cd /sys/devices/system/cpu/cpu0/cpufreq/
/sys/devices/system/cpu/cpu0/cpufreq# ls
可以發現phc-patch新增了下列六個檔案:
  • phc_controls
  • phc_default_controls
  • phc_default_vids
  • phc_vids
  • phc_fids
其中 phc_controls & phc_vids 是可以任意更動設定值的設定檔,檢視一下預設值,
 command:

/sys/devices/system/cpu/cpu0/cpufreq# cat phc_vids
以Core 2 Duo T7100為例,顯示"45 37 18 11",這4 個數字代表cpu有4個step可以變換,每一個step會對應一個電壓值,其中數字愈小表示電壓電壓愈低,Linux-PHC Wiki 也給了一個intel的網址 (http://developer.intel.com/design/mobile/datashts/314078.htm),可以查詢這些數字代表的意義,不過,有看沒有懂。

  更改電壓只需要下echo,例如將4個 step 的電壓更改為"18 18 11 11":
 command:

/sys/devices/system/cpu/cpu0/cpufreq# echo "18 18 11 11" > phc_vids
若要檢視是否更改成功,用cat再去讀一次phc_vids 就行了,如何找出適用於CPU的電壓設定,請參考下一篇(還沒寫完 XD)

『注意』:調整cpu工作電壓具有硬體損壞之風險,且需由個人所承擔,即使同為 Core 2 Duo T7100 也不一定適用同一組cpu電壓。

沒有留言: