Hi everyone,
I'm running a infrastructure with Proxmox VE 9 and have noticed significant TCP performance issues when using the built-in VM bandwidth limiter (rate).
The problem becomes more noticeable as RTT increases (10–15 ms, and especially 20–25 ms). With low latency, performance is generally much better.
Test setup:
- Proxmox VE 9, Linux Bridge, VirtIO, firewall enabled
- VM bandwidth limit: rate=80 (80 MiB/s / ~671 Mbit/s)
- AlmaLinux VM with default TCP CUBIC
- Large static file downloads over HTTP/HTTPS
My test results:
| Configuration | Single TCP download | Two parallel TCP downloads |
|---|
| Proxmox Police/Drop + CUBIC (in vm) | ~66–67 MB/s | ~76 MB/s total, unstable and uneven sharing |
| Proxmox Police/Drop + BBR (in vm) | ~76 MB/s | ~76 MB/s total, ~ stable 38 + 38 MB/s |
| Proxmox Police HTB + FQ-CoDel + CUBIC (in vm) | ~76 MB/s | ~76 MB/s total, stable 38 + 38 MB/s |
With the standard Proxmox policer, a single TCP connection cannot reach the same throughput as two parallel connections. With two downloads, the total throughput improves, but bandwidth sharing is unstable and one connection can dominate the other.
With HTB + FQ-CoDel, both single and parallel TCP downloads perform very well, with stable and fair bandwidth distribution.
TCP retransmission statistics:
- Police/Drop + BBR: 2,149 policer drops during 30 seconds, approximately 138 MB retransmitted (5.51%).
- HTB + FQ-CoDel + CUBIC: approximately 0.016% TCP retransmitted bytes, with only 7 FQ-CoDel drops during a separate 45-second measurement.
These measurements were collected during separate test runs, but the performance differences have been consistent.
Replacing the standard Proxmox ingress policer with HTB + FQ-CoDel (same bandwidth limit) significantly improved throughput stability, TCP fairness and retransmission rates.
For hosting providers serving users with different RTTs and connection speeds, this seems particularly important.
Is there currently a simple and officially supported way to switch from the default Police/Drop mechanism to HTB + FQ-CoDel in Proxmox, without having to maintain custom scripts or make complex changes to the networking configuration?
If not, would it be possible to offer HTB + FQ-CoDel as an optional shaping mode directly in the VM network settings?
This would be particularly useful for hosting providers, allowing better TCP performance and fairer bandwidth sharing without modifying the congestion control algorithm inside customer VMs or maintaining custom tc configurations.
Thanks to the Proxmox team for their great work!