『ScalaのコンパイルはVirtualBox環境だと5倍時間がかかる』とのことですが、VirtualBox 5が出た今、VirtualBoxがVMwareと比べてどのくらい遅いのか調べてみました。
検証に使ったバージョン
- Vagrant 1.7.4
- VirtualBox 5.0.4
- VMware Fusion 7.1.1 1
- ホストマシンはMacのOSX 10.10.5
- Docker 1.8.2
割当CPUは8、割当メモリは2GBです。
ベンチマークスクリプト
普段Vagrant上のDockerコンテナでScalaのコンパイルをしているので、開発の実情に合うように、ベンチマークもDockerコンテナ上でコンパイルするようにします。元記事によれば、Dockerがボトルネックではないそうなので、問題ないかと思います。
次のスクリプトがベンチマークを取るために書いたコードです。単純にactivator clean
とactivator compile
を10回繰り返すようになっています。
なお、コンパイルする対象のコードは社内のScalaプロジェクトのコードで7000行くらいです。
#!/usr/bin/env bash
set -eu
# clean up target directory
git clean -fdXq .
echo "architecture: $(uname -s) $(uname -m)"
if [[ $(uname -s) == "Darwin" ]]; then
echo "cpus: $(sysctl -n hw.ncpu)"
echo "memory: $(sysctl -n hw.memsize)"
java -version 2>&1 | head -n 1
activator() {
./activator "$@"
}
fi
if [[ $(uname -s) == "Linux" ]]; then
echo "cpus: $(nproc)"
echo "memory: $(cat /proc/meminfo | grep MemTotal | awk '{ print $2 }')"
docker run --rm java:8u66 java -version 2>&1 | head -n 1
activator() {
docker run --rm \
-v $(pwd):/wd \
-v /vagrant/.ivy2:/root/.ivy2 \
-v /vagrant/.sbt:/root/.sbt \
-w /wd \
java:8u66 ./activator "$@"
}
fi
activator --version || true
echo "scalaVersion $(activator scalaVersion | tail -n 1)"
echo "repeat activator clean and compile 10 times"
for i in {1..10}
do
activator clean > /dev/null
activator compile | tail -n 1
done
測定結果
OSX(ホストマシン)
参考値として、ホストマシンでもベンチマークを取ってみました。大体、26秒くらいでコンパイルできています。
architecture: Darwin x86_64
cpus: 8
memory: 17179869184
java version "1.8.0_45"
sbt launcher version 0.13.8
scalaVersion [info] 2.11.7
repeat activator clean and compile 10 times
[success] Total time: 24 s, completed 2015/09/18 17:17:39
[success] Total time: 24 s, completed 2015/09/18 17:18:10
[success] Total time: 25 s, completed 2015/09/18 17:18:43
[success] Total time: 26 s, completed 2015/09/18 17:19:16
[success] Total time: 26 s, completed 2015/09/18 17:19:49
[success] Total time: 27 s, completed 2015/09/18 17:20:24
[success] Total time: 26 s, completed 2015/09/18 17:20:57
[success] Total time: 26 s, completed 2015/09/18 17:21:31
[success] Total time: 26 s, completed 2015/09/18 17:22:04
[success] Total time: 26 s, completed 2015/09/18 17:22:38
VirtualBox 5
次にVirtualBoxの結果です。58〜64秒かかりました。
architecture: Linux x86_64
cpus: 8
memory: 2048376
openjdk version "1.8.0_66-internal"
sbt launcher version 0.13.8
scalaVersion [info] 2.11.7
repeat activator clean and compile 10 times
[success] Total time: 58 s, completed Sep 18, 2015 8:28:46 AM
[success] Total time: 60 s, completed Sep 18, 2015 8:30:03 AM
[success] Total time: 61 s, completed Sep 18, 2015 8:31:20 AM
[success] Total time: 62 s, completed Sep 18, 2015 8:32:39 AM
[success] Total time: 62 s, completed Sep 18, 2015 8:33:58 AM
[success] Total time: 64 s, completed Sep 18, 2015 8:35:19 AM
[success] Total time: 62 s, completed Sep 18, 2015 8:36:38 AM
[success] Total time: 63 s, completed Sep 18, 2015 8:37:59 AM
[success] Total time: 63 s, completed Sep 18, 2015 8:39:20 AM
[success] Total time: 63 s, completed Sep 18, 2015 8:40:41 AM
VMware Fusion 7
最後に、VMWareの結果です。33〜36秒かかりました。
architecture: Linux x86_64
cpus: 8
memory: 2048392
openjdk version "1.8.0_66-internal"
sbt launcher version 0.13.8
scalaVersion [info] 2.11.7
repeat activator clean and compile 10 times
[success] Total time: 36 s, completed Sep 18, 2015 3:25:28 PM
[success] Total time: 33 s, completed Sep 18, 2015 3:26:10 PM
[success] Total time: 34 s, completed Sep 18, 2015 3:26:54 PM
[success] Total time: 34 s, completed Sep 18, 2015 3:27:37 PM
[success] Total time: 34 s, completed Sep 18, 2015 3:28:21 PM
[success] Total time: 34 s, completed Sep 18, 2015 3:29:04 PM
[success] Total time: 35 s, completed Sep 18, 2015 3:29:48 PM
[success] Total time: 35 s, completed Sep 18, 2015 3:30:32 PM
[success] Total time: 34 s, completed Sep 18, 2015 3:31:16 PM
[success] Total time: 34 s, completed Sep 18, 2015 3:32:00 PM
まとめると
以上の測定結果をまとめると
- ホストマシン: 24〜27秒
- VirtualBox: 58〜64秒
- VMware: 33〜36秒
という結果になりました。
結論
結論としては、
- VMwareはVirtualBoxの約2倍早くコンパイルできる
ということが言えるのではないでしょうか。
元記事が書かれたのは1年前だったので5倍の差があったものの、最近リリースされたVirtualBox 5ではパフォーマンスがかなり改善されているのかもしれませんね。
VirtualBoxは2倍遅いとしても、VMware環境を作るのにFusion 8 Proが24,690円、VagrantのVMwareアダプタが79ドル(約9,500円)と、3.4万円ほどかかってしまうことを考えたら、VirtualBoxも選択肢に十分入ってくるかと思いました。
-
VMware Fusionの最新版は8ですが、VagrantのアダプタとVMwareのアップグレードで2万円くらいかかりそうだったので手持ちのバージョンで試しました。 ↩