Java
Windows
Ubuntu
Build
performance

Ubuntu on Windowsビルド速度

はじめに

Javaやらnode.jsの大き目のプロジェクトを開発していて、開発環境として、WindowsとLinuxどっちがいいのかという話がでました。この中で Ubuntu on Windowsを使うことで、両方のいいところを使えるんじゃないかと提案してみましたが、Ubuntu on Windowsはディスクアクセスが遅く、ビルドが遅いから使うのをためらうという話が出たので実際に計測してみました。比較用にVirtual Box(以下VBox)も用意。

評価環境

  • ビルド対象は Elasticsearch のソース(5/18版)をgithubから。長めのビルドが走るならなんでもよかったので特にElasticsearchであることに意味はありません。
  • Javaによるビルドなので、Windows/Linuxどちらもやってることはそんなに変わらないのではないかと考えます。なお、Javaは Oracle Java 10を使用
  • ビルド環境は、ホスト CPU 16 Core、 メモリ16GB、 SSD。VBoxは CPU 8Core, メモリ8GBでホストと同一マシン上に構築。
  • ビルドコマンドは gradlew clean assemble これを各条件につき3回ずつ実行して、実行時間を見る。初回のgradlewはmavenとか色々ダウンロードしてくるので、初回の結果は無視。
  • 同一のソースコードに対して、Windowsから直ビルド、Ubuntu on Windowsでビルド、VBoxのUbuntu18でビルドの3パターンを試す

評価結果その1

Windows Ubuntu on Windows Ubuntu on VBox
13:08 14:14 5:36
12:55 12:56 5:41
13:11 12:45 5:36

単位は 分:秒

考察

ここまでやってみて、Windows/Ubuntu on Windowsが妙に遅いことが分かりましたが、ちょっとこの結果に違和感も感じました。そもそもVBoxは今回このためだけに用意したまっさらな環境であるというアドバンテージもあります。

ビルドは細かいファイルが作成・削除・変更が走るのでこういうファイルをいちいち見に行くようなものってことでWindows Defenderのリアルタイムファイル保護を外すことにしました。あまりセキュリティを落とすわけにもいかないので、ビルド用のフォルダだけスキャンの例外にするのがよいでしょう。

リアルタイムスキャンの除外方法

評価結果その2

ビルド用フォルダのリアルタイムスキャンを止めたことで大きく改善したことがわかりました。VBoxは、VBoxのディスクを保存しているフォルダのスキャンを外しましたが改善は見られませんでした、あまり細かくI/Oをフラッシュしていないので影響が少ないのでしょう。

Windows Ubuntu on Windows Ubuntu on VBox
8:24 8:35 5:37
8:13 8:14 5:37
8:28 8:21 5:38

単位は 分:秒

まとめ

  • ビルドする分には、Windows直でのビルドも、Ubuntu on Windowsもそんなに速度は変わらなかった。
  • リアルタイムスキャンの有無がビルド時間に大きく影響する。git用のフォルダをスキャン例外に登録するなどの対策が有効。
  • VBoxでのビルドはホストでのビルドに比べて遜色ない。今回はこの目的のためだけに作ったVMのため余分なツールが入っておらず、むしろホストより早かった。
  • VBox上に本格的に開発環境をセットアップしていくことで同程度に近づいていくと予想します。