Stopping the ‘Noisy Neighbor’: How to Effectively Limit Disk I/O on Proxmox & KVM

Virtualization tutorial - IT technology blog
Virtualization tutorial - IT technology blog

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.

  1. Open the Proxmox Web UI and select the VM you want to throttle.
  2. Go to Hardware, select the disk (Hard Disk), and click Edit.
  3. Click the Advanced button at the bottom to expand additional options.
  4. Fill in the values for Read limit (MB/s) and Write limit (MB/s).
  5. 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:

  1. 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.
  2. Prioritize VirtIO: Always use VirtIO Block or VirtIO SCSI. These drivers deliver the best performance and the most accurate throttling support available today.
  3. Monitor with iostat: Install sysstat on the host machine. Run iostat -x 1 and watch the %util column. If it consistently hits 100%, it’s time to tighten your I/O limits.
  4. 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!

Share: