Benchmarks
Automated benchmark results from CI.
Environment: Proxmox VM, i9-13900H, 4 vCPU (pinned), Ubuntu 24.04.
Per-commit Results
Benchmarks run on every push to main.
Hybrid TCP-lane aggregation (v0.9.0)
Symmetric 2×100 Mbit / 25 ms, TCP uplink, iperf3 -P {1,2,4,8,16}, 3 reps.
The hybrid TCP stream lane terminates TCP at the client and relays it in-order over a QUIC STREAM, so even a single flow aggregates both paths — reaching ~187 Mbps (≈93 % of the 200 Mbps aggregate) at every stream count. Raw multipath (datagram tunneling) instead makes a single flow back off on cross-path reorder, so it only catches up as parallel streams grow (WLB -P 1: 96 → 187 Mbps, +95 %).


Asymmetric paths — same bench on A = 300 Mbit / 10 ms + B = 80 Mbit / 30 ms (380 Mbps aggregate). Hybrid ON saturates the aggregate on asymmetric paths too — 350–357 Mbps (≈93 % of 380 Mbps) at -P ≥ 2. Raw multipath never fully recovers here: with WLB the cross-path reorder penalty (20 ms vs 60 ms RTT legs) caps it at 330 Mbps even at 16 streams, and MinRTT keeps everything on the fast path (~275 Mbps) since it only spills when cwnd-blocked. Unlike the symmetric case, the lane's gain therefore persists at every stream count: MinRTT +29–35 %, WLB +26 % (-P 1) → +7 % (-P 16).


SRT live streaming
SRT contribution feeds over emulated impaired links (netns). mqvpn defaults (WLB scheduler, BBR v2) + SRT receiver lossmaxttl=32.
Bonding two weak or lossy links turns an unwatchable SRT feed into a stable one. Below, an 8 Mbps FHD stream where each uplink alone is only 6 Mbit — a single connection (left) vs the same two connections bonded by mqvpn (right):
| Scenario | Direct (single link) | mqvpn (2-path) |
|---|---|---|
| Starved uplinks (8 Mbps FHD over 2 × 6 Mbit) | VMAF 8.6, 1.2 s frozen | VMAF 87.7, 0 s frozen |
| Exceeds any single link (120 Mbps over 2 × 100 Mbit) | 31.5 % stream loss | 0.06 % stream loss |
| Dual cellular (42 Mbps over 40 + 30 Mbit lossy links) | 20–40 % stream loss | 0.9 % stream loss |
VMAF: perceptual video quality score, 0–100 (higher is better).
Full report and comparison videos: bench_results/srt/