2011年2月13日日曜日

Nexus S kernel, BFS scheduler and 1.4Ghz overclocking.


Nexus SのQuadrantスコアの3000超えを目標にkernelを修正してみました。Quadrantの実行画面を見ていると、DBアクセスがかなりボトルネックになっていそうなのですが、オーバークロックとCPUスケジューラの変更からせめてみることに。やることは単純で、XDAなどで公開されているNexus S用のカスタムkernelのソースからover clockingの部分をパッチとして抜き出し、BFSのサイトから現在のNexus Sのkernelに適用できるBFSのパッチを取得して、当てるだけです。

普通にカスタムカーネル入れればいいじゃんて?、それはそのとおりなんですけどw.なるべくストックの部分を残しておきたいし、なにより過程が面白いのですね。それにAndroidのアーキテクチャへの理解も深まりますし(だよな。。)。

まずは、XDAでこのスレに注目、作者はgithubでソースを公開していますね。こっから最新のバージョンを落としてきます。そこからover clockingに関係する部分だけをpatchとして取り出します。

git clone https://github.com/netarchy/nexus-s.git
diff -cNr ./samsung/arch/arm/mach-s5pv210/ ./nexus-s/arch/arm/mach-s5pv210/ > mach-s5pv210.patch
diff -cNr ./samsung/arch/arm/plat-s5p/ ./nexus-s/arch/arm/plat-s5p/ > plat-s5p.patch

一回ビルドしちゃったカーネルソースを使うなら一度distcleanしてからpatchとりましょう。次にはpatch当て。

cd samsung
make distclean ARCH=arm
diff ..
..

patch -p0 < mach-s5pv210.patch
patch -p0 < plat-s5p.patch

この時点でmake menuconfigしてビルドしてもいいと思います。ストックのkernelコード+overclockingコードでどの程度変化するのか、自分は試してみました。Quadrantだと1.4Ghz固定で3000は超えますね。
次はCPUスケジューラの変更です。kernel mod界隈wでは、BFS(Brain Fuck Scheduler)がデファクトみたいになってるので、導入することに。BFSのサイトからこのパッチをダウンロードして、当てます。そしたら、make。

wget http://ck.kolivas.org/patches/bfs/2.6.35/2.6.35.7-sched-bfs357+penalise_fork_depth_account_threads.patch
patch -p1 < 2.6.35.7-sched-bfs357+penalise_fork_depth_account_threads.patch

cd samsung
make menuconfig ARCH=arm
(TUNとかをenableするならここで)
make -j2 ARCH=arm CROSS_COMPILE=/home/someone/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
(まつ)
mkbootimg ...

bootイメージができたら、いきなり書き込まずにfastbootでbootだけしてみて動作をチェックします。SetCPU等で動作クロックを変化させて、Quadrantベンチでもとってみましょう。Quadrantは数回実行してみるのをおすすめします。自分は1.4Ghz常用は無理かと思います。

現状のOriginal Kernelのスペックは
  • TUN Support
  • BFS
  • OverClocking 1.4Ghz Max.
  • Original Boot Splash image.
といったところですか。

0 コメント:

コメントを投稿