The standard synced folders set up in Vagrant uses the VirtualBox’s shared folders feature. Unfortunately, the performance of shared folders leaves a lot to be desired. There is a solution to this poor performance, which involves switching to an NFS-based solution.
This can be done simply by adding the nfs
flag to the config.vm.synced_folder
setting in your Vagrantfile
:
config.vm.synced_folder '.', '/vagrant', nfs: true
You also need to make sure you are using Vagrant’s private_network
networking option:
config.vm.network "private_network", ip: "192.168.56.101"
Once you have done this, you can vagrant up
(if your VM is not currently running) or vagrant reload
(if you VM is currently running) to get NFS up and running. When you do this for the first time, you’ll likely be prompted to enter your administrator’s password so that the NFS details can be saved to /etc/exports
:
==> default: Preparing to edit /etc/exports. Administrator privileges will be required...
Password:
The performance increase you experience will vary, but on my 1.3 GHz Intel Core i5 MacBook Air, I experienced a 6x performance boost. I used wrk
to benchmark the VM web server performance before and after:
Using VirtualBox shared folders:
$ wrk http://localhost:8000 Running 10s test @ http://localhost:8000 2 threads and 10 connections Thread Stats Avg Stdev Max +/- Stdev Latency 0.00us 0.00us 0.00us nan% Req/Sec 4.11 3.22 9.00 55.56% 10 requests in 10.04s, 1.22MB read Socket errors: connect 0, read 0, write 0, timeout 10 Requests/sec: 1.00 Transfer/sec: 124.20KB
Using NFS:
$ wrk http://localhost:8000 Running 10s test @ http://localhost:8000 2 threads and 10 connections Thread Stats Avg Stdev Max +/- Stdev Latency 1.38s 214.51ms 1.86s 63.24% Req/Sec 5.33 3.83 19.00 71.43% 68 requests in 10.05s, 8.40MB read Requests/sec: 6.76 Transfer/sec: 855.64KB