Quick Fix in 30 Seconds: Limit Disk I/O via the Proxmox GUI
Have you ever watched a backup VM bring your entire system to a crawl? On Proxmox, you can fix this directly from the web interface — no extra tools required.
- Open the Proxmox Web UI and select the VM you want to throttle.
- Go to Hardware, select the disk (Hard Disk), and click Edit.
- Click the Advanced button at the bottom to expand additional options.
- Fill in the values for Read limit (MB/s) and Write limit (MB/s).
- Click OK to apply.
Changes take effect immediately. You don’t need to restart the VM — incredibly useful when you need to rescue a server that’s suddenly choking on I/O.
The Noisy Neighbor Problem: When One VM Ruins It for Everyone
Back when I was running a homelab with around 12 VMs on a single SATA SSD, I ran into the classic Noisy Neighbor problem firsthand. A VM running a continuous data-crawling script completely saturated the disk’s bandwidth.
The result: every VM running a database or web server suffered serious latency. CPU and RAM were barely touched, yet the system felt sluggish across the board. Disk I/O throttling acts like a traffic controller — redistributing data flow fairly so every service gets its share.
IOPS vs. Bandwidth: Which One Should You Limit?
Before configuring limits, you need to understand both metrics to avoid throttling the wrong resource:
- Bandwidth (MB/s): The total volume of data transferred. Apply limits here for workloads involving large file copies, streaming, or scheduled backups.
- IOPS: The number of read/write operations per second. This is the critical metric for databases (MySQL, PostgreSQL) or any application handling thousands of small transactions per second.
From my experience: if you’re on a traditional HDD, be strict with IOPS (typically under 100–150). With NVMe SSDs you have more headroom, but you should still set limits to prevent a single VM from exhausting the controller’s I/O queue.
Advanced Configuration via Command Line (KVM/Libvirt)
If you manage bare-metal KVM through virsh, the blkdeviotune command is your best friend. It offers far more granular control than the graphical interface.
To check the current configuration for a disk, run:
virsh blkdeviotune <vm_name> <disk_device>
For example, to limit the VM “ubuntu-srv” (disk vda) to 1000 IOPS and 50 MB/s bandwidth, use:
virsh blkdeviotune ubuntu-srv vda --total-iops-sec 1000 --total-bytes-sec 52428800 --live
Note: 52428800 bytes equals exactly 50 MB. The --live flag applies the change immediately without shutting down the VM.
Burst Mode: Smart Short-Term Speed Boosts
Clamping bandwidth too tightly can make a VM boot at a snail’s pace. Fortunately, KVM supports a Burst mechanism. It lets the VM run at a higher speed for a few seconds before throttling back down to the sustained limit.
Here’s an optimal configuration example for a web server:
- Limit: 30 MB/s (sustained steady-state throughput).
- Burst: 150 MB/s (allows spikes when loading large files or booting the OS).
This setup keeps the user experience smooth while protecting the overall system from prolonged high-I/O spikes.
Real-World Tips for Optimizing Your System
After many headaches caused by spikes in Disk Wait (iowait), I’ve distilled four golden rules:
- Throttle backup VMs aggressively: Always cap VMs running rsync or backup jobs at around 30% of total disk throughput. Never let a backup job take down your production environment.
- Prioritize VirtIO: Always use VirtIO Block or VirtIO SCSI. These drivers deliver the best performance and the most accurate throttling support available today.
- Monitor with iostat: Install
sysstaton the host machine. Runiostat -x 1and watch the%utilcolumn. If it consistently hits 100%, it’s time to tighten your I/O limits. - Don’t overlook Containers (LXC): Even though LXC containers share the host kernel, Proxmox still lets you set I/O limits under Resources. It works exactly the same way as for VMs.
The goal of Disk I/O throttling isn’t to cripple your VMs — it’s to implement QoS (Quality of Service) intelligently. Here’s to taking full control of your system resources!

