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は増設しておきたいところ。