詳しい手順を見つけたのでUbuntu 7.04にlinux kernel 2.6.22.6+ck1パッチを当てて高速化及びTickless化してみました。
上の記事ははLinux kernel 2.6.22にck1パッチを適用し、いくつかカーネルコンフィグをいじって高速化しようというもの。詳しい手順が載っているので、あまり書くことはないのですが、ざっと以下の通り。
- linuxカーネルをダウンロード(私はkernel 2.6.22.6で)
- /usr/srcに展開して-ck1にリネーム後、/usr/src/linuxからリンクを貼る
- patchを当てる
bzcat /home/username/patch-2.6.22-ck1.bz2| patch -p1
- 現在のカーネルからコンフィグをコピー
sudo cp /boot/config-2.6.20-16-generic .config - firmwareを元のものからコピー
sudo cp -r /lib/firmware/2.6.20-16-generic /lib/firmware/2.6.22.6-ck1 - sudo -s -H としてrootに。
- make xconfig などとしてコンフィグ
- make-kpkg clean && make-kpkg -initrd --revision=ck1 kernel_image
- dpkg -i ../inux-image-...deb
補足として、現在最新のstable版カーネル2.6.22.6にck1パッチを当てるとトップのMakefileでrejが出ます。カーネルバージョンのEXTRA_VERSIONのところなので適当に対処します。
またコンパイルには結構時間がかかり、1.1Ghzのマシンで1-2時間のようです。
カーネルのコンフィグでオススメは(PowerTopからのご神託も込み)
- 自分の使いたいCPUにあわせる (最大数パーセントくらい速くなるかも)
- Ticklessにしてみる
"Processor type and features"で"Tickless System"にする - kernel irq balancingをOFFにする(CONFIG_IRQBALANCE)
"Processor type and features"で"Enable kernel irq balancing"をOFFに
これはPowerTopによると古いIFで必要ない上余計なwakeupをするそうです。 - 不要なドライバを削ってみる
これはよしなに。 - PowerTopの情報を得るために
- 上記エントリにある"kernel hacking">"kernel debug"のオプションは切らない(PowerTopのため。納得したら消してよい)
- 同じ場所の"collect kernel times statistics"をONにする
- "Sound ALSA"の"PCI Devices"の最後にある"AC97 Power-Saving Mode"をONに。
- Wireless LANを使っている場合、忘れずに設定を行う。firmwareのコピーも必須
- 念のため他のデバイスドライバも確認しておく
以上のパラメータでコンパイルしたカーネルをPentium M (Dothan)のノートに入れて起動してみるとプラシーボ効果か少し速く感じます。オーディオや動画のプレイバックもTicklessで問題なく動作しました。
気になる消費電力ですが、PowerTopで動作を見てみるとC4状態の頻度が数%高くなること、C2状態が減ることが観測できました。またwakeupの頻度が明らかに減りました。アイドル時で25%位。
C2とC4の消費電力の差はCPUにもよりますがIntelのPemtiumMで1.5~6W程度だそうなので、多めに見ても0.075~0.3W程度の削減。サウンドカードのPower OFFが300mw程度の効果らしいので合計0.5W程度でしょうか。Ticklessは期待したよりは効果が薄い気がしますね。
試したノートPC Dell X1のバッテリは11V/4800mA/Hで2-3時間駆動なので、0.5W減っているなら2-3%程度のバッテリ延長?つまり2-3分?ということかな?計算間違ってないだろうか。まあ、 このPCはバッテリより、発熱が厳しいので少しでも減るなら大歓迎なのでよしとすることに。
追記:Ubuntuの起動を19秒にする等のチューニングのメモ (blog@browncat.org)で起動時間をチューニングしたのですが、ckパッチの改良でvm.swappinessがなくなってmappedになってます。swapしにくくなるようです。