脳みそスワップアウト

揮発性なもので。おもにPHPのこととか。

VirtualBoxのディレクトリ共有機能の代わりにSambaを使う

VirtualBoxのディレクトリ共有機能はとても遅い。
代わりにSambaを使うメモ。

メリット

  • ゲスト側からのアクセスが早くなる
  • ゲスト側でパーミッション設定ができるようになる

  • ゲスト側でのUT、カバレッジ出力が劇的に早くなる

デメリット

  • ホスト側からのアクセスが遅くなる
  • ゲストを起動していないとファイルにアクセスできない

  • ホスト側でのUT、カバレッジ出力が劇的に遅くなる

  • Windows側のphpとソースのドライブが違うため、php.ini でドライブレターを省略できなくなる。

環境

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 になるのかなぁ。