Overview
Storage QoS (Quality of Service) specifications define performance boundaries for block storage volumes — capping IOPS, throughput, and burst behavior at the hypervisor-to-storage layer. QoS specs are attached to volume types, so every volume created from that type automatically inherits the performance constraints. This prevents high-throughput workloads from starving adjacent volumes on shared storage.Prerequisites
- Admin credentials sourced from
admin-openrc.sh - Block Storage service deployed and healthy
- Volume types configured (Volume Types Admin Guide)
- QoS support enabled on the target storage backend (Ceph, NetApp, or Pure Storage)
QoS Specification Parameters
Storage QoS specs define performance limits using key-value pairs. The specific keys supported depend on the storage backend driver.Standard QoS Keys (all backends)
Standard QoS Keys (all backends)
| Key | Unit | Description |
|---|---|---|
total_iops_sec | IOPS | Maximum combined read + write IOPS |
read_iops_sec | IOPS | Maximum read IOPS |
write_iops_sec | IOPS | Maximum write IOPS |
total_bytes_sec | bytes/s | Maximum combined read + write throughput |
read_bytes_sec | bytes/s | Maximum read throughput |
write_bytes_sec | bytes/s | Maximum write throughput |
total_iops_sec_max | IOPS | Burst IOPS ceiling |
total_bytes_sec_max | bytes/s | Burst throughput ceiling |
size_iops_sec | IOPS/GB | IOPS scaling factor (per GB of volume size) |
size_iops_sec scales limits proportionally to volume size. A spec of size_iops_sec=10 grants a 100 GB volume 1,000 IOPS and a 500 GB volume 5,000 IOPS automatically.Ceph RBD QoS Keys
Ceph RBD QoS Keys
Ceph RBD enforces QoS through its
rbd_qos_* parameters, configured in ceph.conf and overridable per volume via extra specs.| Key | Unit | Description |
|---|---|---|
rbd_qos_iops_limit | IOPS | Combined read+write IOPS cap |
rbd_qos_read_iops_limit | IOPS | Read IOPS cap |
rbd_qos_write_iops_limit | IOPS | Write IOPS cap |
rbd_qos_bps_limit | bytes/s | Combined throughput cap |
rbd_qos_read_bps_limit | bytes/s | Read throughput cap |
rbd_qos_write_bps_limit | bytes/s | Write throughput cap |
rbd_qos_iops_burst | IOPS | Burst IOPS above the sustained limit |
rbd_qos_bps_burst | bytes/s | Burst throughput above sustained limit |
NetApp ONTAP QoS Keys
NetApp ONTAP QoS Keys
| Key | Unit | Description |
|---|---|---|
netapp:qos_policy_group | Policy name | Reference to an ONTAP QoS policy group |
netapp:qos_adaptive_policy_group | Policy name | Reference to an ONTAP adaptive QoS policy |
total_iops_sec | IOPS | Enforced via ONTAP QoS policy |
total_bytes_sec | bytes/s | Enforced via ONTAP QoS policy |
expected and peak IOPS/TB values are set in the ONTAP adaptive policy group.Pure Storage QoS Keys
Pure Storage QoS Keys
| Key | Unit | Description |
|---|---|---|
pure_qos_max_bandwidth | bytes/s | Maximum combined read + write throughput |
pure_qos_max_iops | IOPS | Maximum combined IOPS |
Create QoS Specifications
- Dashboard
- CLI
Navigate to QoS Specs
Log in to the Xloud Dashboard (
https://connect.<your-domain>) as an administrator
and navigate to Admin → Volume → QoS Specs. Click Create QoS Spec.Define the spec
| Field | Value | Description |
|---|---|---|
| Name | e.g., bronze-1000iops | Descriptive name |
| Consumer | front-end | Where limits are enforced: front-end (hypervisor), back-end (storage array), or both |
Add key-value pairs
Open the newly created spec and click Edit Keys. Add the desired performance parameters:
| Key | Example Value |
|---|---|
total_iops_sec | 1000 |
total_bytes_sec | 104857600 (100 MB/s) |
total_iops_sec_max | 2000 |
Click Save to apply the key-value pairs to the spec.
Backend-Specific QoS Examples
- Ceph RBD
- Standard (libvirt)
- Size-Scaled QoS
For Ceph RBD backends, use the
rbd_qos_* keys. These are enforced by the QEMU librbd driver on the hypervisor.Create Ceph-specific QoS spec
Associate with Ceph volume type
QoS Capability Comparison
| Capability | Ceph RBD | NetApp ONTAP | Pure Storage | Standard (libvirt) |
|---|---|---|---|---|
| IOPS limit | Yes | Yes | Yes | Yes |
| Throughput limit | Yes | Yes | Yes | Yes |
| Burst IOPS | Yes | Yes (adaptive) | No | Yes |
| Burst throughput | Yes | Yes (adaptive) | No | Yes |
| Per-read/write limits | Yes | No | No | Yes |
| Size-scaled IOPS | No | Yes (adaptive) | No | Yes |
| Enforcement layer | Hypervisor (librbd) | Array | Array | Hypervisor (libvirt) |
| Live update | Yes (libvirt) | Yes | Yes | Yes (libvirt) |
Manage QoS Specs
List all QoS specifications
Show a QoS spec and its properties
Update a QoS spec property
Remove a property from a QoS spec
Disassociate QoS spec from a volume type
Delete a QoS spec
Monitoring QoS Compliance
- Xloud Dashboard (XIMP)
- CLI
Navigate to Monitoring → Storage → Volume Metrics in Xloud XIMP. Per-volume IOPS and throughput graphs show whether volumes are hitting their QoS limits:
- IOPS at or near the
total_iops_seclimit — the volume is QoS-constrained - Sustained IOPS below limit — the workload does not require the full allocation
- Burst IOPS exceeding sustained limit but below burst cap — normal burst behavior
Best Practices
Align with Volume Types
Define one QoS spec per volume tier (bronze, silver, gold). Attach specs to volume
types so QoS is automatically applied without per-volume manual steps.
Set Burst at 2x Sustained
Configure burst limits at 2× the sustained limit to absorb application startup
and checkpoint IO spikes without permanently raising the sustained cap.
Use Size-Scaled for Databases
Apply
size_iops_sec to database volume types. Larger database volumes
automatically receive proportionally more IOPS without manual reconfiguration.Monitor Before Limiting
Baseline actual workload IOPS using XIMP before applying QoS limits. Setting limits
below actual peak workload demand causes application performance degradation.
Tiered QoS Profiles
Xloud-Developed — This capability is developed by Xloud and ships with XAVS / XPCI.
| Profile | IOPS (sustained) | Throughput | Burst IOPS | Target Workload |
|---|---|---|---|---|
| Bronze | 500 | 50 MB/s | 1,000 | Development, test environments |
| Silver | 2,000 | 200 MB/s | 4,000 | General-purpose applications |
| Gold | 10,000 | 1 GB/s | 15,000 | Transactional databases, analytics |
| Platinum | 50,000 | 3 GB/s | 75,000 | High-frequency trading, real-time ingestion |
- Per-VM enforcement — limits apply at the individual instance level, not shared across a tenant
- Read/write-differentiated limits — separate IOPS and bandwidth caps for read and write operations allow tuning for read-heavy or write-heavy workloads independently
- Burst support — short IO spikes (application startup, checkpoints) are absorbed up to the burst ceiling without throttling
Next Steps
Volume Types Admin
Create and manage volume types to associate with QoS specs
Storage Tiers
Configure tiered storage pools aligned with QoS tiers
Storage Backends
Review backend-specific capabilities and QoS driver support
Block Storage Architecture
Understand how QoS is enforced across the storage service stack