Posted at

VirtualBoxはVMwareの5倍遅いのか改めて検証してみた

More than 3 years have passed since last update.

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 cleanactivator compileを10回繰り返すようになっています。

なお、コンパイルする対象のコードは社内のScalaプロジェクトのコードで7000行くらいです。


benchmark.sh

#!/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も選択肢に十分入ってくるかと思いました。





  1. VMware Fusionの最新版は8ですが、VagrantのアダプタとVMwareのアップグレードで2万円くらいかかりそうだったので手持ちのバージョンで試しました。