Ubuntu日本語フォーラム
ログインしていません。
PHC(Processor Hardware Control)を導入することで、CPUの動作電圧を下げることができます。
動作電圧を下げることで、発熱の減少、電力消費の軽減、バッテリー駆動時間の延長などの恩恵を得られる可能性があります。
8.10までは、acpi-cpufreqがモジュールだったので、パッチを当てたモジュールを組み込み直すことでPHCを有効にすることができましたが、9.04betaではカーネルに組み込まれているため、その手段はとれません。カーネルの再構築が必要になります。
とりあえず、自分でネットの情報を頼りにやってみたところなんとか成功したので、メモを兼ねて投稿しておきます。
*注意事項(お約束)
・PHCはCPUというPCにとって重要なハードウェアを直接コントロールするものです。場合によっては、ハードウェアの破損・システムの破壊・データの消失などを招くかもしれません。
・当方(および、このHowToに載っているソフトウェア/スクリプトの作者)は一切それらの事態や、それに伴う被害について責任は負えません。たとえ手順の間違いやソフトウェアの瑕疵によるものであったとしても同様です。
・以上のことを承知の上、必ず自己責任において導入してください。意味が分からなければ、導入しないでください。
参考:
Linux PHC
UbuntuForum : HowTo: Undervolt your notebook CPU for longer battery life
0.まずは導入準備
$ sudo apt-get install build-essential kernel-package fakeroot makedumpfile linux-source ncurses-dev
1.cpu周波数のコントロールをカーネル組み込みからモジュールにするために、カーネルの再構築を行う
$ cd /usr/src $ sudo -s # tar xvjf ./linux-source-2.6.28.tar.bz2 # ln -s ./linux-source-2.6.28 ./linux # cd linux # cp /boot/config-2.6.28-11-generic ./.config
CPUの周波数コントロール機能をモジュールにします。
# make oldconfig # make menuconfig
メニューを選択し、<*>を<M>にします。
Power management and ACPI options --->
CPU Frequency scaling -->
*** CPUFreq processor drivers ***
に移動
<*> ACPI Processor P-States driver
変更 <M> ACPI Processor P-States driver
変更 自分の使ってるCPU以外の*外す
カーネルを再構築します。それなりに時間が懸かるので、寝るなり出かけるなり遊ぶなりします。
マルチコアならCONCURRENCY_LEVEL=n(nはコアの数より少し多め)をexportするとmakeが速くなるかも?
# fakeroot make-kpkg --initrd --append-to-version=-phc001 kernel-image kernel-headers
2.カーネルのインストール
# cd .. # dpkg -i ./*.deb
/boot/grub/menu.lstに変更を反映するため、設定を追記(もしかしたら自動で設定されるかもしれませんが、ウチでは手で書きました)
title Ubuntu jaunty (development branch), kernel 2.6.28.9-phc001
uuid (genericカーネルからコピー)
kernel /boot/vmlinuz-2.6.28.9-phc001 root=UUID=(genericカーネルからコピー) ro quiet splash usbcore.autosuspend=1
initrd /boot/initrd.img-2.6.28.9-phc001
quiet
title Ubuntu jaunty (development branch), kernel 2.6.28.9-phc001 (recovery mode)
uuid (genericカーネルからコピー)
kernel /boot/vmlinuz-2.6.28.9-phc001 root=UUID=(genericカーネルからコピー) ro single
initrd /boot/initrd.img-2.6.28.9-phc001
ここで再起動。GRUBメニューから、新しいカーネルを選択する。
3.PHC-linux本家からパッチをダウンロードする
Linux PHC
トップページから「PHC Download」「@Releases」でAMDもしくはintelのCPU向けのパッチをダウンロードする(現時点でのintel向けパッチの最新バージョンはphc-intel-0.3.2-4.tar.gz)
$ tar xvzf phc-intel-0.3.2-4.tar.gz $ cd phc-intel-0.3.2-4 $ make prepare $ make $ sudo make install
パッチが当たったモジュールがロードされるように設定する(もしかしたら不要かも)
$ sudo nano /etc/modules phc-intel <--- 追加(intelの場合) $ sudo nano /etc/modprobe.d/blacklist acpi-cpufreq <--- 追加
再起動。
4.PHCの最適化スクリプトの実行と結果の反映
現在のCPUの電圧の状況を確認
$ cat /sys/devices/system/cpu/cpu0/cpufreq/phc_controls 12:15 11:14 10:13 9:11 8:10 6:7
以下のスクリプトを「名前をつけて保存」する(参照:UbuntuForum : HowTo: Undervolt your notebook CPU for longer battery life
)
http://www.s3pp.de/misc/linux-phc-optimize.bash
http://www.s3pp.de/misc/functions.bash
*一応中身を確認しておくことをおすすめします
# chmod +x linux-phc-optimize.bash # chmod +x functions.bash # sudo bash ./linux-phc-optimize.bash
*もしcpuburnパッケージがなかったらインストールされます。
このスクリプトは、段階的に電圧を下げつつCPU負荷を掛けて最適な設定を探すものです。
途中で何度かスクリプトの再実行を行う必要がありますし、しばしばカーネルごと刺さるので、強制電源断および再起動が必要になることに留意してください。他のアプリケーションは閉じておいた方が無難だと思います。
頑張って何度かスクリプトを実行したあと・・・
Default VIDs: 15 14 13 11 10 7
Current VIDs: 8 5 4 2 1 1
All VIDs have been tweaked!
Results are in the file 'phc_tweaked_vids' - use with care.
All done! - Have a nice day.
となったら成功。この場合、Current VIDs: 8 5 4 2 1 1 が大事。
結果を反映させるために/etc/rc.localを編集します。上記の例では
$ sudo nano /etc/rc.local
今回の例では、以下を追記。太字の部分が上のスクリプトの実行で得られた値です。
echo "12:8 11:5 10:4 9:2 8:1 6:1" > /sys/devices/system/cpu/cpu0/cpufreq/phc_controls
再起動します。お疲れさまでした。以上でPHCの導入は終了です。
これから夏に向けて暑くなりますが、クールなPCで乗りきりましょう:)
----------------------------
いくつかの表記不足と、誤記(主に英語のスペルミス)がありましたので訂正しました(20090414)
最後の編集者: hippocampus (2009-04-14 23:25:59)
オフライン
実は自力でコンパイルしなくても、
https://launchpad.net/~linux-phc/+archive/ppa
みたいなものがあったり……。
オフライン
>hitoさん
あらら、こんな便利な物が・・・
正直言ってカーネル再構築は時間もかかって面倒なので、他のPCはこっちで試してみます。
・・・
と思って、PPAのリポジトリを登録してみたのですが、特にapt-get update && apt-get upgrade しても変わらず。
(GPG鍵はインポート済み)
どうすればパッチが当たったカーネルが得られるんだろう?
最後の編集者: hippocampus (2009-04-14 23:21:20)
オフライン
興味津々だったので参考にして試させていただきました。そして成功です!情報ありがとうございます。
PPAの方は「メニューを選択し、<*>を<M>にします。」の工程がいらなくなる=カーネル再構築不要でパッチの適用から入れるってことじゃないでしょうか?(といいつつどれを入れればいいのかよく分からず再構築してしまいました・・・OTL)
下の方のSourceというところ開くとそれらしきパッケージがいくつかあったので。
こんな便利なパッチがあったとは・・・
8.04のころからpowernow-k8-vcore_list-2.6.24-git-v3.patch当てて再構築の方法しか知らずにしかも失敗しつづけてたので非常にありがたいです。
こんなトピック見つけたんですが
http://ubuntuforums.org/showthread.php?p=7028333
>repository is there but no packages...
まだ最新のはパッケージ出てないみたい?
最後の編集者: tmin (2009-04-16 05:43:33)
オフライン
>tminさん
はじめまして!導入成功おめでとうございます。
Webサイト拝見しました。AMDのCPUへの導入例が詳細に書かれていて、参考になりました。
殆どIntelのCPUしか触ったことがなかったので。
私も、PPAのはパッチが当たった状態のカーネルイメージが入手できると思ったんですけど、どこにそれがあるのかわからず・・・。
tmin による投稿:
まだ最新のはパッケージ出てないみたい?
と言うことなのかもしれませんねぇ。
ところで、PHC導入してから、OSのブートが少し遅くなったんですが、tminさんの環境ではいかがですか?
GRUBからカーネルを選んで、最初のStarting...が出るまでに数秒、間が開くようになりました。
最後の編集者: hippocampus (2009-04-16 11:02:53)
オフライン
はじめまして。詳細な導入手順どうも有難うございました。
私の環境でも同じくStarting...前に微妙な間ができた感じです。
プログレスバーが消えた後ログイン画面の前も微妙に・・・(いろんなアプリを追加・削除したりしてるのでそちらの影響かもしれませんが)
このあたりはカーネル再構築時に不要なデバイスを削っていけばもしかすると解消できるかもしれません。
PPAの方はリポジトリ追加・UpDateの後kernel-image kernel-headersを再インストールしたところ、ver.が2.6.28.11-42~undervolt~となってるのでどうやら取得できている様なのですが、そのままechoしてもパッチmake installまでやっても設定が反映されないようです。
もしかしたら他のパッケージが必要なのかインストール方法が間違っているのか。。。
非常に手探りなレスで申し訳ないです。色々いじりがいがありそうなのでもうちょっと試行錯誤してみます。
オフライン
どうもです。
linux-soourceパッケージではなく、gitでソース取得して再構築した結果、ブート時間がオリジナルに近くなったので、一応やり方を書いておきます。
とはいえ、やはり5秒ほど余計に時間がかかりますね。これがCPUの周波数管理をモジュールにした結果なのかどうかは不明ですが、なんとかならないものかな。
参考:http://blog.avirtualhome.com/2008/10/28/how-to-compile-a-custom-kernel-for-ubuntu-intrepid-using-git/
0'.まずは導入準備
$ sudo apt-get install build-essential kernel-package fakeroot makedumpfile git git-core ncurses-dev
1'.cpu周波数のコントロールをカーネル組み込みからモジュールにするために、カーネルの再構築を行う
まずはgitでソースを取得。
ソースを展開するのに、空き容量が思ったより必要です。4GB〜5GBほどあった方がいいでしょう。
下の例では、ホームディレクトリのjauntyディレクトリ(~/jaunty/)に展開しています。
$ cd ~/ $ git clone git://kernel.ubuntu.com/ubuntu/ubuntu-jaunty.git jaunty $ cd jaunty # cp /boot/config-2.6.28-11-generic ./.config
CPUの周波数コントロール機能をモジュールにします。
(これ以降、手順2までは、最初の投稿と同じ手順で進めます。)
3'.PHC-linux本家からパッチをダウンロードする
Linux PHC
トップページから「PHC Download」「@Releases」でAMDもしくはintelのCPU向けのパッチをダウンロードする(現時点でのintel向けパッチの最新バージョンはphc-intel-0.3.2-4.tar.gz)
$ cd ~/ $ tar xvzf phc-intel-0.3.2-4.tar.gz $ cd phc-intel-0.3.2-4 $ make prepare $ make
ここで、もしかしたらエラーが出るかも。うちの環境では、カーネルの再構築〜deb作成までを別のPCでやって、できたdebパッケージをインストールしたらここでつまづきました。普通に一つのPCでやってる場合では大丈夫かもしれません。
もしエラーが出たら、gitで取得したソースのarchディレクトリ以下を/usr/src/linux-headers-2.6.28.9-phc001/archに上書き(シンボリックリンクでも可)すれば回避できます。
もっとスマートな方法があるはずですが、とりあえず良としちゃいました:)
$ sudo mv /usr/src/linux-headers-2.6.28.9-phc001/arch /usr/src/linux-headers-2.6.28.9-phc001/arch-org $ sudo ln -s ~/jaunty/arch/ /usr/src/linux-headers-2.6.28.9-phc001/ $ cd ~/phc-intel-0.3.2-4 $ make clean $ make prepare $ make
エラーがでなければ成功です。モジュールをインストールします。
$ sudo make install
あとは、前の投稿の「パッチが当たったモジュールがロードされるように設定する(もしかしたら不要かも)」以下どおりに進めれば終わりです。
正直、いまいちまっとうなやり方でない気がしますが、どうやったらいいのやらさっぱりです。
どなたか、Jaunty世代のカーネル再構築のHowToをまとめてくださるといいのですが(他力本願)。
オフライン
hippocampusさん、お疲れさまです。gitというものを恥ずかしながら初めて知りました。
当方環境にて、前回と同じ手順なのですが、カーネルコンパイル時Starting...
# make menuconfig のところを
# make xconfig として(menuconfigと同じものなのですが、GUIでデバイス、モジュールの設定ができます)
ここでCPUFreq processor driversの設定の他、不要と思われるもののチェックを分かる範囲で外して再構築した結果、Starting...前の時間に関してはほぼオリジナルと同じになりました。
外したものを覚えてる限りですみませんが。
AMDなのでIntelのドライバと思われるもの、有線LANのみの環境なのでWireress LAN関係、グラボがATIなのでnVidia関係の部分、また、DELLやToshibaといった項目もいくつかありましたのでこのあたりも内容的に問題なさそうなものは無効としました。
知識不足のためこれ以上詰めることができなかった上にどれが影響したのか分からないのですが・・・
現在の状況では、ログイン後デスクトップの立ち上がりに時間がかかり(10〜15秒くらいかと思います)、1〜2回立ち上げ直しているかのような挙動のが解消されていないですが、PHC自体はきっちり動作してくれてます。
今度の休日にでもgitによる再構築も試してみようかと思います。
オフライン
>tminさん
お世話になっています。gitで取得できるソースは、どうもlinux-sourceパッケージで取得されるものと違いがあるようなので、試してみた次第です。
ここでCPUFreq processor driversの設定の他、不要と思われるもののチェックを分かる範囲で外して再構築した結果、Starting...前の時間に関してはほぼオリジナルと同じになりました。
ここの部分、私も疑わしいとは思っていたのですが、一応可能な限りデフォルトに近いconfigでやってみた方がいいのかと考えてました。
実際に不要なものを削ったら改善したというのは、興味深いです。
bootchartを導入して比較しているのですが、デフォルトのカーネルだと起動終了まで17.39秒、linux-sourceからのphcパッチ導入カーネルだと28.45秒、gitからのphcパッチ導入カーネルだと22.06秒となってます。
デフォルトのものと、パッチが当たったカーネルではプロセス(スレッド?)の立ち上がり順番も結構違いがあります。
特に、デフォルトでは起動後2秒程度で「collector」プロセスが起動しているのに対し、linux-sourceからのでは9秒弱、gitからでも5秒程度の時間がかかってます。また、デフォではpdflushプロセスやaio/0、aio/1、など幾つかのプロセスがありません。
この辺が、「Starting...」の違いに関わってるのではないかと思うのですが・・・。
どう設定すれば、デフォルトのカーネルと同じような挙動に出来るのか、識者のコメントが欲しいところです:)
オフライン
遅ればせながら、今回gitからのコンパイルを試してみました。
結果から言うと、残念ながら当方環境ではほぼ変わりないブート時間となってしまいました。
クリーンインストール直後のブート時間約20秒に対し、前回のもので約27秒、gitからコンパイルしたもの約27秒とあまり変わりなかったので、こちらもxconfigにていくらか編集したのちインストールを試してみたのですが、改善なく約27秒でした。
プロセス、CPUの負荷の流れも後半は若干違うものの、再構築した3つの中ではかなり似通ったものになってしまいましたので、当方環境ではこれ以上の起動時間短縮は難しいかもしれません。
また知識をつけたときに再挑戦しようかとは思ってますが :)
最後の編集者: tmin (2009-05-01 15:25:12)
オフライン