Skip to main content

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.
Administrator Access Required — This operation requires the admin role. Contact your Polystack administrator if you do not have sufficient permissions.
Prerequisites
  • Admin credentials sourced from 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)

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 enforces QoS through its rbd_qos_* parameters, configured in ceph.conf and overridable per volume via extra specs.
Ceph QoS is enforced at the librbd layer — inside the QEMU process on the hypervisor. It does not require OSD-level configuration changes and applies per-volume independently.
NetApp adaptive QoS adjusts limits automatically based on volume size (TB) — expected and peak IOPS/TB values are set in the ONTAP adaptive policy group.
Pure Storage enforces QoS at the array level — limits apply to the volume regardless of which host or hypervisor is accessing it.

Create QoS Specifications

Navigate to QoS Specs

Navigate to Storage > Volume Types (QoS Specs tab, admin view). Click Create QoS Spec.

Define the spec

Click Confirm to save the spec.

Add key-value pairs

Open the newly created spec and click Edit Keys. Add the desired performance parameters:
Click Confirm to apply the key-value pairs to the spec.

Associate with a volume type

Navigate to Storage > Volume Types (admin view), select a volume type, click Manage QoS Spec, and select the QoS spec from the dropdown.
All new volumes created from this volume type inherit the QoS limits automatically.

Backend-Specific QoS Examples

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
Set rbd_qos_iops_burst to 2× the sustained rbd_qos_iops_limit to absorb short IO spikes (e.g., application startup, database checkpoint) without violating the sustained limit.

QoS Capability Comparison


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
Deleting a QoS spec that is still associated with a volume type will fail. Disassociate from all volume types before deleting the spec.

Monitoring QoS Compliance

Navigate to Monitoring → Storage → Volume Metrics in Polystack Monitoring. Per-volume IOPS and throughput graphs show whether volumes are hitting their QoS limits:
  • IOPS at or near the total_iops_sec limit — 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
Set Monitoring alerts for volumes that sustain QoS-constrained behavior for more than 5 minutes — this signals that the volume type’s QoS limit may be too low for the workload.

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 Monitoring before applying QoS limits. Setting limits below actual peak workload demand causes application performance degradation.

Tiered QoS Profiles

Polystack provides pre-defined tiered QoS profiles that align with common workload classes. Each profile sets per-instance IOPS limits, bandwidth caps, and burst allowances with separate read and write thresholds. Key capabilities of tiered QoS profiles:
  • Per-instance 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
Assign profiles to volume types so every volume inherits the correct QoS automatically. See Storage Tiers for aligning QoS profiles with hardware tiers.

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