JBビルドにおけるコア数と速度の関係
予想されるボトルネックは、RAMが少なめなので、swapはじまるところと、HDDのIOかな。
マシンはいつもの。
マウスコンピューター MDV-AGG9280X。
http://www.mouse-jp.co.jp/company/news/2011/news_20110705_01.html
- Intel Core i7-980 3.33GHz 6core HT対応
- 12GB DDR3 PC3-10600 (ただしPC3-8500で動作)
- Intel X58 Express チップセット
- 1TB シリアルATA III (7200rpm)
- DVDスーパーマルチドライブ
- NVIDIA GeForce GTX560 Ti (ビデオメモリ 1GB)
- Windows 7 Home Premium with SP1 64ビット 正規版
- 定価13万9,860円(税込)
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とか使うしかなさそう。