Vagrant(もしくはVirtualBox)でストレージにHDDを使用していて、ランダムアクセスでの書き込みが多い使い方をしている場合にディスクのパフォーマンスが非常に悪い場合があります。
この場合、以下の手順でVirtualBoxの設定を変更し、ホストOS側のI/Oキャッシュを有効にするとディスクの書き込み性能が劇的に改善する場合があります。
I/Oキャッシュの変更手順
左メニューよりストレージを選択し、"コントローラ:SATA"を選択します。
右に出てくる"ホストのI/Oキャッシュを使う"にチェックを入れて、OKをクリックします。
手元の環境では、上記の設定を変更後、VMを再起動すると劇的にディスクI/Oの性能が改善しました。
(うるさかったHDDのシーク音が静かになり、明らかにディスクへのランダムアクセス回数が減りました)
I/OキャッシュをOnにすることのデメリット
VirtualBoxでは、I/OキャッシュはデフォルトでOffにされています。あえてOffにしているのは理由がある為で、この値を本当に書き換えてよいかは検討が必要です。
データを失うリスクがある
ディスクキャッシュをOnにするという事は、ゲストOS上で書き込んだはずのデータが、ホストOS上でディスク書き込みされている事を保証できないという事です。ですので、本番稼働しているDBサーバなど、データを失ってはならない環境でキャッシュをOnにすることは推奨されません。
これは、正常に運用しているときは問題ないのですが、停電やホストのクラッシュなど、PCが異常終了したときにデータを失うリスクがあります。
開発環境や、大量のデータをバッチ処理していて結果を別の環境に書き出しているなど、万が一のことがあったときに、ダウンタイムがあっても良かったり、再実行すればデータのロストが発生しないような環境の場合はOnにしておくとストレスが減るかもしれません。
メモリを余分に使う
通常はゲスト側のVMでもI/Oに関するキャッシュを持っているので、I/OキャッシュをホストとゲストOSの両方で行うことになり、メモリの使用効率は良くないです。
メモリに余裕がある環境の場合は問題ないですが、ホストOSのメモリ不足で困っている環境の場合はこれが原因でパフォーマンスが落ちる可能性があります。
ホストのI/Oキャッシュが溢れがちになる
多数のゲストOSを起動していている場合、すべてのVMでI/OキャッシュをOnにしてしまうと、直ぐにキャッシュを使い切ってしまい逆に遅くなる可能性があります。