VirtualBoxのディレクトリ共有機能の代わりにSambaを使う
VirtualBoxのディレクトリ共有機能はとても遅い。
代わりにSambaを使うメモ。
メリット
デメリット
- ホスト側からのアクセスが遅くなる
ゲストを起動していないとファイルにアクセスできない
ホスト側でのUT、カバレッジ出力が劇的に遅くなる
- Windows側のphpとソースのドライブが違うため、php.ini でドライブレターを省略できなくなる。
環境
- Windows7 Pro x86-64 (Host)
- CentOS-6.5 x86-64 (guest)
- VirtualBox 4.3.12
- ゲストIP: 192.168.33.10
Sambaのインストール
インストール
sudo yum install samba sudo mkdir /share sudo chown vagrant:vagrant /share
Sambaの設定
/etc/samba/smb.conf
$ diff -U0 smb.conf.org smb.conf --- smb.conf.org 2015-02-23 20:31:33.000000000 +0900 +++ smb.conf 2015-07-27 19:24:50.302015261 +0900 @@ -57,0 +58,3 @@ +unix charset = UTF-8 +dos charset = CP932 +display charset = UTF-8 @@ -74 +77 @@ - workgroup = MYGROUP + workgroup = WORKGROUP @@ -80 +83 @@ -; hosts allow = 127. 192.168.12. 192.168.13. +; hosts allow = 127. 192.168.33.1 @@ -91 +94,2 @@ - max log size = 50 + max log size = 1000 + syslog = 0 @@ -101 +105 @@ - security = user + security = share @@ -207 +211 @@ -; dns proxy = yes + dns proxy = no @@ -221 +225 @@ - load printers = yes + load printers = no @@ -288,0 +293,10 @@ + +[vagrant] + path = /share + guest ok = yes + writable = yes + browseable = yes + force user = vagrant + force create mode = 0644 + force directory mode = 0755 + map archive = no
起動&自動起動設定
sudo service smb start sudo chkconfig smb --level 35 on
windows側でマウント
コンピュータ>ネットワークドライブの割り当て>\192.168.33.10\share
速度比較
とある PHP-5.6 プロジェクトでのUT実行、カバレッジ出力で比較。
ディスクに依存する処理ほど効果が出る。
私の開発スタイルだと、UTやカバレッジ出力に大きく貢献する。
代わりにIDEのガリガリが遅くなる。
UT 14秒→5秒 約2.5倍
Time: 14.51 seconds, Memory: 14.75Mb real 0m14.767s user 0m2.286s sys 0m2.868s Time: 5.47 seconds, Memory: 14.75Mb real 0m5.558s user 0m2.086s sys 0m0.189s
カバレッジ付き 5分半→25秒 約13倍
Time: 25.62 seconds, Memory: 32.25Mb real 0m26.625s user 0m22.130s sys 0m0.623s Time: 5.32 minutes, Memory: 32.75Mb real 6m36.532s user 1m19.481s sys 1m22.665s
総括
ゲスト側のUT実行は快適になったが、ホスト側でのUT実行が劇的に遅くなったので却下。
PHPStormだと、メソッド単位でテストを実行して、そのカバレッジをマージする便利な機能がある。
最初はこの機能を使いながらホスト側でゴリゴリコーディングして、
commit前にゲスト側で全テストを流す、といったスタイルで開発してたのだけど、
ホスト側が遅くなってこれのテンポが悪くなった。
うーん。
VirtualBoxのディレクトリ共有機能を使いつつ、
commit → ゲストのテスト用ディレクトリにclone/pull → 全テスト実行 → push になるのかなぁ。