Ubuntu11.04でAndroidビルド環境を構築する Mac mini server Core i7-2635QM 2.00GHz編

やっぱり、タワーPCは持ち歩くのに往生する。
多少パフォーマンスに影響が出ても、もち歩きやすいビルドサーバーが必要だ。
そこで、一度放置していたMac mini server (Mid2011)を取り出してみる。
なんとなくいじっていたら、セカンドドライブにUbuntu11.04入れて起動できた。
ファーストドライブのLionServerはそのままの状態。
HDDは500GBもあれば、しばらくは十分かな。すぐに足りなくなるだろうけど。
RAMは貧乏にデフォルトの4GBだけ。
基本的な作業は、ここと同じ。
http://d.hatena.ne.jp/kinneko/20110831/p1


前よりコア数が少ないのは、8つもあれは普通だとして、クロックが2GHzと遅めなのがパフォーマンスに効いていくるのではないかと予想される。
ICS環境用としては、RAMが少ないのも気にかかる。

Git

kinneko@kinneko-Macmini:~$ sudo su -
root@kinneko-Macmini:~# apt-get install git git-core gitk

ビルドに必要なパッケージ

build-essential zip unzipは入ってた。残りを入れる。

root@kinneko-Macmini:~# apt-get install flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.6-dev curl valgrind zlib1g-dev

32bit環境ビルド用互換ライブラリ

これって、ICSになってもまだいるのかな。一応入れておく。

root@kinneko-Macmini:~# apt-get install gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs lib32readline5-dev lib32z1-dev

Java

もうこれは1.6でいいよね。

root@kinneko-Macmini:~# add-apt-repository "deb http://archive.canonical.com/ natty partner"
root@kinneko-Macmini:~# apt-get update
root@kinneko-Macmini:~# apt-get install sun-java6-jdk

repoの取得

ここは前と変わっている。今回は教科書的にgooglesource版にしておく。

root@kinneko-Macmini:~# exit
ログアウト
kinneko@kinneko-Macmini:~$ wget https://dl-ssl.google.com/dl/googlesource/git-repo/repo
kinneko@kinneko-Macmini:~$ chmod a+x repo

AOSPミラーの作成

ここも前と違って、今回はローカルにリポジトリのミラーを持つことに。
手順はここと同じ。
http://d.hatena.ne.jp/kinneko/20111022/p45

kinneko@kinneko-Macmini:~$ mkdir AOSP
kinneko@kinneko-Macmini:~$ cd AOSP/
kinneko@kinneko-Macmini:~/AOSP$ ../repo init --mirror -u https://android.googlesource.com/mirror/manifest
kinneko@kinneko-Macmini:~/AOSP$ ../repo sync

夜syncして、今朝起きたらハングアップしてた。NICドライバでささったっぽい。
sync終わらず。残念。kernel上げてみるかな...
今のkernelは、

kinneko@kinneko-Macmini:~$ uname -a
Linux kinneko-Macmini 2.6.38-8-generic #42-Ubuntu SMP Mon Apr 11 03:31:24 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

最新はlinux-image-2.6.38-13-genericか。
またハングアップしたら考えよう。

リポジトリの初期化

パフォーマンス比較のために、まずは前と同じ条件で2.3.4_r1にしておく。

kinneko@kinneko-Macmini:~$ mkdir mydroid
kinneko@kinneko-Macmini:~$ cd mydroid/
kinneko@kinneko-Macmini:~/mydroid$ ../repo init -u /home/kinneko/AOSP/platform/manifest.git -b android-2.3.4_r1

リポジトリの取得

kinneko@kinneko-Macmini:~/mydroid$ ../repo sync

IOが遅いので、やや同期に時間がかかる感じだ。
おそらく、HDDのスピードが足を引っ張っているのではないかな。
ビルド時にも効いてきそう。
eSATAとかついてたらよかったのに。内蔵以外の選択ができない。
FireWire使えば少しは速いだろうか。

ビルドテスト

まずは普通に。
8コア環境なので、最初から-j8でいいでしょ。

kinneko@kinneko-Macmini:~/mydroid$ source build/envsetup.sh 
including device/htc/passion/vendorsetup.sh
including device/samsung/crespo/vendorsetup.sh
kinneko@kinneko-Macmini:~/mydroid$ lunch generic-eng

============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.3.4
TARGET_PRODUCT=generic
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=GRJ22
============================================

kinneko@kinneko-Macmini:~/mydroid$ time make -j8 2>&1 |tee ../make20111228_2.3.4_r1_j8.log

ビルド中に冷却ファンがまわりはじめる。
RAMはピーク時でも3GBくらい。
普通は1-2GBくらい。

real 24m18.055s
user 145m10.620s
sys 7m41.810s

うーん、倍かかるか。
クロックダウンと、コア数ダウンにしては健闘しているってとこか。
ハードウエアとしての金額は大差ないので、6コアマシンのほうがお買い得だわ。

ICSをビルドしてみる

swapにかかるのと、IO遅いのとで、さらに足を引っ張るんだろうな...
これも、パフォーマンス比較のために最新ではなく、4.0.1_r1で試す。

kinneko@kinneko-Macmini:~/mydroid$ rm -rf ./*
kinneko@kinneko-Macmini:~/mydroid$ ../repo init -u /home/kinneko/AOSP/platform/manifest.git -b android-4.0.1_r1
kinneko@kinneko-Macmini:~/mydroid$ ../repo sync
kinneko@kinneko-Macmini:~/mydroid$ source build/envsetup.sh
including device/samsung/maguro/vendorsetup.sh
including device/samsung/tuna/vendorsetup.sh
including device/ti/panda/vendorsetup.sh
including sdk/bash_completion/adb.bash
kinneko@kinneko-Macmini:~/mydroid$ lunch full-eng

============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=4.0.1
TARGET_PRODUCT=full
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=ITL41D
============================================

kinneko@kinneko-Macmini:~/mydroid$ time make -j8 2>&1 |tee ../make20111228_4.0.1_r1_j8.log

CPUはびったり100%ということはない、
途中三度ほど冷却ファンが止まることがあったくらい。
RAMはピーク時に3.7GBなので、ほとんどフルフル。
swapはピーク時2.8GB。コンスタントに1GBは必要だった。
RAMが足りてない。
そのせいか、CPUが遊んでいる時間が長い。
swapがはじまると、冷却ファンも停止している。
一番重いのはこのあたり。

target Dex: android.core.tests.libcore.package.com.no-core-tests-res
target Dex: android.core.tests.libcore.package.dalvik.no-core-tests-res
target Dex: android.core.tests.libcore.package.libcore.no-core-tests-res
target Dex: android.core.tests.libcore.package.org.no-core-tests-res
target Dex: android.core.tests.libcore.package.sun.no-core-tests-res

このあと、しばらくカツカツでswapがどんどん伸びていく。

real	81m21.174s
user	328m30.220s
sys	17m43.110s

j4でICSをビルドしてみる

RAM4GBでの、j8は現実的ではないので、再度j4で試す。

kinneko@kinneko-Macmini:~/mydroid$ rm -rf ./*
kinneko@kinneko-Macmini:~/mydroid$ ../repo sync -l
kinneko@kinneko-Macmini:~/mydroid$ source build/envsetup.sh
kinneko@kinneko-Macmini:~/mydroid$ lunch full-eng
kinneko@kinneko-Macmini:~/mydroid$ time make -j4 2>&1 |tee ../make20111228_4.0.1_r1_j4.log

j4なので、CPUは最初からかなり遊んでいるところが多い。
ファンは回るものの、静かなモード。
java関係のビルド時には、HTのCPUも含めて100%になることが多かった。
RAMはピーク時に3.4GBなので、ほとんどフルフル。
swapまではギリギリ使われていない。

real	66m33.540s
user	240m1.160s
sys	12m6.320s

なんと、速くなった!

ccacheを使う

キャッシュサイズは10Gで用意する。
テストはついでなので、-j3でやってみよう。

kinneko@kinneko-Macmini:~/mydroid$ rm -rf ./*
kinneko@kinneko-Macmini:~/mydroid$ ../repo sync -l
kinneko@kinneko-Macmini:~/mydroid$ export USE_CCACHE=1
kinneko@kinneko-Macmini:~/mydroid$ prebuilt/linux-x86/ccache/ccache -M 10G
Set cache size limit to 10485760k
kinneko@kinneko-Macmini:~/mydroid$ source build/envsetup.sh
kinneko@kinneko-Macmini:~/mydroid$ lunch full-eng
kinneko@kinneko-Macmini:~/mydroid$ time make -j3 2>&1 |tee ../make20111228_4.0.1_r1_j3.log

CPUは、さすがに2、3個は常にidleしている。
RAMは、ピーク時3.4GBくらい。swapは使っていない。
この環境だとj3くらいが無理させないでPCにやさしいのかも。
消費電力面でも有利かな。
ビルド終わった。

real	75m52.471s
user	212m34.980s
sys	11m17.380s

キャッシュサイズはこんなもの。

kinneko@kinneko-Macmini:~/mydroid$ prebuilt/linux-x86/ccache/ccache -s
cache directory                     /home/kinneko/.ccache
cache hit                            894
cache miss                         13741
called for link                      587
not a C/C++ file                     372
unsupported compiler option           76
files in cache                     27482
cache size                           3.1 Gbytes
max cache size                      10.0 Gbytes


二度目のビルド。
比較用にj4で。

kinneko@kinneko-Macmini:~/mydroid$ rm -rf ./*
kinneko@kinneko-Macmini:~/mydroid$ ../repo sync -l
kinneko@kinneko-Macmini:~/mydroid$ export USE_CCACHE=1
kinneko@kinneko-Macmini:~/mydroid$ source build/envsetup.sh
kinneko@kinneko-Macmini:~/mydroid$ lunch full-eng
kinneko@kinneko-Macmini:~/mydroid$ time make -j4 2>&1 |tee ../make20111228_4.0.1_r1_j4-ccache.log

終わった。

real	55m59.816s
user	182m3.860s
sys	9m50.300s

10分強の短縮か。
あんまり劇的な効果はなかったね。


というわけで、Mac mini serverでも、ICSのビルドは無理ではない。
しかし、今後のバージョンアップではどうなるだろうか。せめてRAMは増設しておきたいところ。