JBビルドにおけるコア数と速度の関係

予想されるボトルネックは、RAMが少なめなので、swapはじまるところと、HDDのIOかな。


マシンはいつもの。
マウスコンピューター MDV-AGG9280X。
http://www.mouse-jp.co.jp/company/news/2011/news_20110705_01.html

1年くらい前のスペック。
これより速いのは持ってないし。
Ubuntu 11.04だったかな。
ccacheは使わず。


準備。

kinneko@BuildSV:~$ mkdir timeattack
kinneko@BuildSV:~$ cd timeattack/
kinneko@BuildSV:~/timeattack$ ../repo init  -u /home/kinneko/AOSP/platform/manifest.git -b android-4.1.1_r4
kinneko@BuildSV:~/timeattack$ ../repo sync
kinneko@BuildSV:~/timeattack$ . build/envsetup.sh
including device/asus/grouper/vendorsetup.sh
including device/generic/armv7-a-neon/vendorsetup.sh
including device/generic/armv7-a/vendorsetup.sh
including device/moto/wingray/vendorsetup.sh
including device/samsung/crespo/vendorsetup.sh
including device/samsung/maguro/vendorsetup.sh
including device/ti/panda/vendorsetup.sh
including sdk/bash_completion/adb.bash
kinneko@BuildSV:~/timeattack$ lunch full-user

============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=4.1.1
TARGET_PRODUCT=full
TARGET_BUILD_VARIANT=user
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a
HOST_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-2.6.38-8-generic-x86_64-with-Ubuntu-11.04-natty
HOST_BUILD_TYPE=release
BUILD_ID=JRO03L
OUT_DIR=out
============================================


順次並列実行数を変えてビルドしてみる。
-j12まではswapを使っていない。

kinneko@BuildSV:~/timeattack$ time make -j4
(snip)
real	49m0.715s
user	191m5.860s
sys	11m6.910s

kinneko@BuildSV:~/timeattack$ make clean && make installclean
kinneko@BuildSV:~/timeattack$ time make -j8
(snip)
real	34m34.315s
user	237m37.890s
sys	13m52.170s

kinneko@BuildSV:~/timeattack$ make clean && make installclean
kinneko@BuildSV:~/timeattack$ time make -j12
(snip)
real	31m49.661s
user	294m20.710s
sys	18m35.870s

kinneko@BuildSV:~/timeattack$ make clean && make installclean
kinneko@BuildSV:~/timeattack$ time make -j16
(snip)
real	32m6.438s
user	297m51.640s
sys	18m25.950s

kinneko@BuildSV:~/timeattack$ make clean && make installclean
kinneko@BuildSV:~/timeattack$ time make -j20
(snip)
real	32m16.082s
user	299m18.580s
sys	18m29.560s

後はやっても仕方なさそうね。


swapの具合は、-j12でもこんな感じ。

kinneko@BuildSV:~$ free
             total       used       free     shared    buffers     cached
Mem:      12323396   11172832    1150564          0      59432    8053120
 -/+ buffers/cache:    3060280    9263116
Swap:     12572668      14400   12558268

-j16でもぴくりともしない、と思ったが、最後のほうで若干数メガだけ使っている。
-j20では、v8ビルドから後で何回か少しswapに入った。
あと重いのは最後のほうでdex作るあたり。
スパイク的に不足している模様。


というわけで、結果はこんな感じ。

-j real user sys
4 49m0.715s 191m5.860s 11m6.910s
8 34m34.315s 237m37.890s 13m52.170s
12 31m49.661s 294m20.710s 18m35.870s
16 32m6.438s 297m51.640s 18m25.950s
20 32m16.082s 299m18.580s 18m29.560s

グラフにするのもあまりにつまらない程度の結果。


使っているドライブは、ST31000524AS。
SATA3.0対応。
3.5inch 1TB。

[    3.355465] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[    3.356745] ata1.00: ATA-8: ST31000524AS, JC4B, max UDMA/133
[    3.356749] ata1.00: 1953525168 sectors, multi 0: LBA48 NCQ (depth 31/32)
[    3.358231] ata1.00: configured for UDMA/133
[    3.358430] scsi 0:0:0:0: Direct-Access     ATA      ST31000524AS     JC4B PQ: 0 ANSI: 5
[    3.358600] sd 0:0:0:0: Attached scsi generic sg0 type 0
[    3.358673] sd 0:0:0:0: [sda] 1953525168 512-byte logical blocks: (1.00 TB/931 GiB)
[    3.358755] sd 0:0:0:0: [sda] Write Protect is off
[    3.358760] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00
[    3.358803] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA


わりかし早くディスクIOのボトルネックに達するので、これ以上に速度をあげようと思ったら、ramdiskとか、SSDとか使うしかなさそう。