Optimizing Performance
1. Using Linked Clones
Linked clones in Vagrant provide a performance optimization by sharing the base box's disk image, reducing storage usage and speeding up VM creation.
| Feature | Description | Notes |
|---|---|---|
| linked_clone | true or false |
Enables or disables linked clone usage |
| box | Base box name | Must support linked clone functionality (e.g., VirtualBox 5.0+) |
Example: Enabling Linked Clones
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/focal64"
config.vm.provider "virtualbox" do |vb|
vb.linked_clone = true
end
end
Note: Linked clones are supported only with VirtualBox and require the base box to be built with support for this feature.
2. Configuring NFS Synced Folders
| Option | Values | Description |
|---|---|---|
| synced_folder.type | nfs |
Specifies the synced folder type as NFS |
| synced_folder.source | /host/path |
Path on the host machine to sync |
| synced_folder.destination | /guest/path |
Path on the guest machine to sync to |
| synced_folder.nfs.export_options | rw,sync,all_squash |
NFS export options (comma-separated) |
Example: Basic NFS Synced Folder Configuration
Vagrant.configure("2") do |config|
config.vm.synced_folder "/host/project", "/vagrant/project", type: "nfs"
end
Example: NFS Synced Folder with Custom Options
Vagrant.configure("2") do |config|
config.vm.synced_folder "/host/project", "/vagrant/project",
type: "nfs",
nfs: {
export_options: "rw,sync,all_squash"
}
end
Note: NFS requires the host to support NFS exports. On macOS and Linux, this is typically enabled by default. On Windows, additional setup may be required.
Warning: NFS synced folders may not work correctly on all operating systems or virtualization platforms. Ensure compatibility before using in production.
3. Disabling Unnecessary Synced Folders
| Option | Description | Default | Notes |
|---|---|---|---|
| config.vm.synced_folder | Defines a synced folder configuration | None | Can be disabled by setting :disabled => true |
| :disabled | Disables synced folder entirely | false |
Set to true to disable |
Example: Disable synced folder
Vagrant.configure("2") do |config|
config.vm.synced_folder "./app", "/app", disabled: true
end
Note: Disabling synced folders can improve performance in environments where file synchronization is not required.
4. Using RSync Instead of VirtualBox Folders
| Feature | Description | Notes |
|---|---|---|
| config.vm.synced_folder | rsync |
Use rsync for better performance in large file transfers |
| rsync.auto_correct | true |
Automatically corrects rsync errors |
| rsync.exclude | ["*.tmp", ".git"] |
Exclude files from sync process |
Example: Configure RSync
Vagrant.configure("2") do |config|
config.vm.synced_folder "./app", "/vagrant/app", type: "rsync"
config.vm.synced_folder "./data", "/vagrant/data", type: "rsync"
end
Note: RSync is more efficient than VirtualBox shared folders for large files or frequent changes.
Warning: RSync syncs on
vagrant up and vagrant reload, not continuously.
5. Allocating Sufficient Memory
| Configuration Option | Values | Description |
|---|---|---|
| config.vm.provider "virtualbox" | memory: 2048 |
Sets the amount of RAM allocated to the VM in MB |
| config.vm.provider "libvirt" | memory: 2048 |
Sets the amount of RAM allocated to the VM in MB for libvirt provider |
Example: Setting Memory for VirtualBox Provider
Vagrant.configure("2") do |config|
config.vm.provider "virtualbox" do |vb|
vb.memory = 2048
end
end
Example: Setting Memory for Libvirt Provider
Vagrant.configure("2") do |config|
config.vm.provider "libvirt" do |libvirt|
libvirt.memory = 2048
end
end
Note: Allocating sufficient memory is crucial for performance, especially when running memory-intensive applications or services inside the VM.
6. Setting CPU Count
| Option | Values | Notes |
|---|---|---|
| vcpu | 2 |
Number of virtual CPUs to allocate |
| cpus | 4 |
Alias for vcpu, used in some providers |
Example: Configure CPU count in Vagrantfile
v<span>.config</span>.vm.provider <span>"virtualbox"</span> <span>do</span> |vb|
vb.cpus = <span>4</span>
<span>end</span>
Note: Setting CPU count higher than available cores may lead to performance degradation.
7. Disabling GUI Mode
By default, Vagrant may launch a graphical user interface (GUI) for certain operations, particularly when using providers like VirtualBox. Disabling the GUI can improve performance and reduce resource consumption, especially in headless environments or CI/CD pipelines.
| Option | Values | Description |
|---|---|---|
| config.gui.enabled | false |
Disables the GUI for VirtualBox provider. |
Example: Disable GUI in Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/focal64"
config.vm.provider "virtualbox" do |vb|
vb.gui = false
end
end
Note: Disabling GUI mode is particularly useful in automated environments where graphical interfaces are not available or desired.
8. Using SSD for VM Storage
| Configuration | Description | Notes |
|---|---|---|
| config.vm.synced_folder | ["/host/path", "/vm/path", {type: "virtualbox", mount_options: ["dmode=777", "fmode=666"]}] |
Sync folder with VirtualBox-specific options |
| config.vm.provider | ["virtualbox", {vboxmanage: ["modifyvm", :id, "--ioapic", "on"]}] |
Enable IOAPIC for better I/O handling |
Example: Configure SSD Storage
Vagrant.configure("2") do |config|
config.vm.provider "virtualbox" do |vb|
vb.customize ["setextradata", :id, "VBoxInternal/Devices/ahci/0/Config/1/Location", "/path/to/ssd"]
end
end
Note: Ensure the SSD is properly formatted and has sufficient space for VMs.
Warning: Using SSDs can significantly improve I/O performance, but ensure proper configuration to avoid data loss.
9. Enabling Host I/O Cache
| Setting | Description | Value |
|---|---|---|
| io.cache | Enables or disables I/O caching for the guest | true |
| io.cache.size | Size of the I/O cache in MB | 1024 |
Example: Configuring I/O Cache
Vagrant.configure("2") do |config|
config.vm.provider "virtualbox" do |vb|
vb.io.cache = true
vb.io.cache.size = 1024
end
end
Note: Enabling I/O cache can significantly improve disk performance for I/O-intensive applications.
10. Optimizing Network Performance
| Option | Values | Notes |
|---|---|---|
| config.vm.network | "private_network", type: "dhcp" |
Use DHCP for dynamic IP assignment |
| config.vm.network | "private_network", ip: "192.168.56.10" |
Static IP for consistent access |
| config.vm.network | "private_network", type: "dhcp", auto_config: false |
Disable automatic configuration |
Note: Static IPs can improve network stability but require careful management to avoid conflicts.
| Network Type | Description | Use Case |
|---|---|---|
| private_network | Internal network between host and guest VMs | Local development, testing environments |
| public_network | Network accessible from host's network interface | Multi-VM setups, external access |
| forwarded_port | Maps guest port to host port | Accessing web apps from host |
Warning: Forwarded ports can introduce security risks if not properly configured.
Network Optimization Tips
- Use static IPs for predictable network behavior
- Minimize port forwarding to reduce exposure
- Use private networks for internal communication
11. Reducing Boot Timeout
| Option | Values | Description |
|---|---|---|
| boot_timeout | 300 |
Timeout in seconds for the VM to boot up |
Note: Setting this value too low may cause Vagrant to fail during boot if the VM is slow to start.
12. Configuring Paravirtualization
| Option | Values | Description |
|---|---|---|
| vm.provider | "virtualbox" |
Specifies the virtualization provider to use |
| vm.box | "generic/ubuntu2004" |
Base box to use for the VM |
| vm.synced_folder | "/host/path" |
Path on host machine to sync with guest |
| vm.network | "private_network" |
Network type to configure for VM |
Example: Enabling Paravirtualization in VirtualBox
Vagrant.configure("2") do |config|
config.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--paravirtprovider", "kvm"]
end
end
Note: Paravirtualization requires the host system to support hardware virtualization extensions (VT-x/AMD-V).