Chapter 4. Customizing Block Storage service (cinder) QoS specifications


You can control volume performance by creating Quality of Service (QoS) specifications for volume types. Configure different performance levels for workloads, optimize resource usage, and ensure predictable performance for cloud users. For example, you can configure high IOPS limits for production workloads and lower limits for development environments to conserve resources.

QoS specifications use consumers and property keys to define performance limits. The consumer determines where to apply the limits (front-end, back-end, or both), and property keys define specific constraints such as IOPS, throughput, or latency. Create QoS specifications first, then associate them with volume types.

4.1. Prerequisites

  • You have the oc command line tool installed on your workstation.
  • You are logged on to a workstation that has access to the RHOSO control plane as a user with cluster-admin privileges.
  • You must be a project administrator to create and configure QoS specifications.
  • To use Block Storage service cinder CLI commands, source the cloudrc file with the command $ source ./cloudrc before using them. If the cloudrc file does not exist, then you need to create it. For more information, see Creating the cloudrc file.

4.2. Consumers of Block Storage QoS specifications

When you create a QoS specification you must choose the required consumer. The consumer determines where you want to apply the QoS limits and determines which QoS property keys are available to define the QoS limits.

The Block Storage service (cinder) supports the following consumers of QoS specifications:

  • front-end: The Compute service (nova) applies the QoS limits when the volume is attached to an instance. The Compute service supports all the QoS property keys provided by the Block Storage service.
  • back-end: The back-end driver of the associated volume type applies the QoS limits. Each back-end driver supports their own set of QoS property keys. For more information on which QoS property keys the driver supports, see the back-end driver documentation.

    You would use the back-end consumer in cases where the front-end consumer is not supported. For instance, when attaching volumes to bare metal nodes through the Bare Metal Provisioning service (ironic).

  • both: Both consumers apply the QoS limits, where possible. This consumer type therefore supports the following QoS property keys:

    • When a volume is attached to an instance, then you can use every QoS property key that both the Compute service and the back-end driver supports.
    • When the volume is not attached to an instance, then you can only use the QoS property keys that the back-end driver supports.

4.3. Block Storage quality of service property keys

The Block Storage service (cinder) provides you with quality of service (QoS) property keys so that you can limit the performance of the volumes that your cloud users create. The default value for all QoS property keys is 0, which means that the limit is unrestricted.

These limits use the following two industry standard measurements of storage volume performance:

  • Input/output operations per second (IOPS)
  • Data transfer rate, measured in bytes per second

The consumer of the QoS specification determines which QoS property keys are supported. For more information, see Consumers of QoS specifications.

Block Storage cannot perform error checking of QoS property keys, because some QoS property keys are defined externally by back-end drivers. Therefore, Block Storage ignores any invalid or unsupported QoS property key. Ensure that you spell the QoS property keys correctly. The volume performance limits that contain incorrectly spelled property keys are ignored.

For both the IOPS and data transfer rate measurements, you can configure the following performance limits:

Fixed limits
Typically, fixed limits should define the average usage of the volume performance measurement.
Burst limits
All burst limits use a burst length of one second. Typically, burst limits should define periods of intense activity of the volume performance measurement. A burst limit makes allowance for an increased rate of activity for a specific time, while keeping the fixed limits low for average usage.
Total limits
Specify a global limit for both the read and write operations of the required performance limit, by using the total_* QoS property key. Read and write limits are ignored when you specify a total limit. Instead of using a total limit, you can apply separate limits to the read and write operations or choose to limit only the read or write operations.
Read limits
Specify a limit that only applies to the read operations of the required performance limit, by using the read_* QoS property key.
Write limits
Specify a limit that only applies to the write operations of the required performance limit, by using the write_* QoS property key.

You can use the following Block Storage QoS property keys to create volume performance limits for your deployment:

Expand
Table 4.1. Block Storage QoS property keys
Performance limitMeasurement unitQoS property keys

Fixed IOPS

IOPS

total_iops_sec

read_iops_sec

write_iops_sec

Fixed IOPS calculated by the size of the volume.

For more information about the usage restrictions of these limits, see QoS limits that scale according to volume size.

IOPS per GB

total_iops_sec_per_gb

read_iops_sec_per_gb

write_iops_sec_per_gb

Burst IOPS

IOPS

total_iops_sec_max

read_iops_sec_max

write_iops_sec_max

Fixed data transfer rate

Bytes per second

total_bytes_sec

read_bytes_sec

write_bytes_sec

Burst data transfer rate

Bytes per second

total_bytes_sec_max

read_bytes_sec_max

write_bytes_sec_max

Size of an IO request when calculating IOPS limits.

For more information, see Set the IO request size for IOPS limits.

Bytes

size_iops_sec

4.3.1. IO request size for IOPS limits

The size_iops_sec QoS property defines the size, in bytes, of a standard IO request that the Block Storage service (cinder) uses as a reference when calculating IOPS limits. This property prevents users from circumventing IOPS limits by submitting fewer large IO requests instead of many smaller ones.

When you set size_iops_sec, the Block Storage service calculates the proportional number of standard requests represented by each submitted IO request. For example, when size_iops_sec=4096:

  • An 8 KB request is counted as two requests.
  • A 6 KB request is counted as one and a half requests.
  • Any request less than 4 KB is counted as one request.
Note

The default value of size_iops_sec is 0, which ignores the size of IO requests when applying IOPS limits.

4.3.2. IOPS limits that scale according to volume size

You can create IOPS volume performance limits that are determined by the capacity of the volumes that your users create. These Quality of Service (QoS) limits scale with the size of the provisioned volumes. For example, if the volume type has an IOPS limit of 500 per GB of volume size for read operations, then a provisioned 3 GB volume of this volume type would have a read IOPS limit of 1500.

Considerations
  • The size of the volume is determined when the volume is attached to an instance. If the size of the volume is changed while it is attached to an instance, these limits are only recalculated for the new volume size when this volume is detached and then reattached to an instance.
  • Instead of using a total limit you can apply separate limits to the read and write operations or choose to limit only the read or write operations.
  • Read and write limits are ignored when you specify a total limit.
  • The consumer of the QoS specification containing these QoS limits can either be front-end or both, but not back-end. For more information, see Consumers of Block Storage QoS specifications.

You can use the following QoS property keys, specified in IOPS per GB, to create scalable volume performance limits:

  • total_iops_sec_per_gb: Specify a global IOPS limit per GB of volume size for both the read and write operations.
  • read_iops_sec_per_gb: Specify a IOPS limit per GB of volume size that only applies to the read operations.
  • write_iops_sec_per_gb: Specify a IOPS limit per GB of volume size that only applies to the write operations.

4.4. Creating and configuring a QoS specification

A Quality of Service (QoS) specification is a list of volume performance QoS limits. You create each QoS limit by setting a QoS property key to your deployment specific value. To apply the QoS performance limits to a volume, you must associate the QoS specification with the required volume type.

Prerequisites

  • You must be a project administrator to create and configure QoS specifications.

Procedure

  1. Access the remote shell for the openstackclient pod from your workstation:

    $ oc rsh -n openstack openstackclient
    Copy to Clipboard Toggle word wrap
  2. Create the QoS specification:

    $ openstack volume qos create [--consumer <qos_spec_consumer>] --property <key>=<value> <qos_spec_name>
    Copy to Clipboard Toggle word wrap

    Add the performance limits to the QoS specification, by specifying a separate --property <key>=<value> argument for each QoS limit, as follows:

    • Replace <key> with the QoS property key of the required performance constraint. For more information, see Block Storage QoS property keys.

      Important

      Ensure that you spell the QoS property keys correctly. The volume performance limits that contain incorrectly spelled property keys are ignored.

    • Replace <value> with your deployment-specific limit for this performance constraint, in the measurement unit required by the QoS property key.
    • Optional: Replace <qos_spec_consumer> with the required consumer of this QoS specification. If not specified, the consumer defaults to both. For more information, see Consumers of QoS specifications.
    • Replace <qos_spec_name> with the name of your QoS specification.

      Example:

      $ openstack volume qos create \
       --property read_iops_sec=5000 \
       --property write_iops_sec=7000 \
        --consumer front-end \
       myqoslimits
      +------------+---------------------------------------------+
      | Field      | Value                                       |
      +------------+---------------------------------------------+
      | consumer   | front-end                                   |
      | id         | 9fc9a481-28e9-49b8-84eb-f0a476cc89a5        |
      | name       | myqoslimits                                |
      | properties | read_iops_sec='5000', write_iops_sec='7000' |
      +------------+---------------------------------------------+
      Copy to Clipboard Toggle word wrap
  3. Exit the openstackclient pod:

    $ exit
    Copy to Clipboard Toggle word wrap

4.5. Editing an existing QoS specification

You can configure an existing QoS specification to add other performance limits or to change the limits of the existing properties.

Prerequisites

  • You must be a project administrator to edit QoS specifications.

Procedure

  1. Access the remote shell for the openstackclient pod from your workstation:

    $ oc rsh -n openstack openstackclient
    Copy to Clipboard Toggle word wrap
  2. Configure the QoS specification to add other performance limits or to change the limits of the existing properties:

    $ openstack volume qos set --property <key>=<value> <qos_spec_name>
    Copy to Clipboard Toggle word wrap

    You can add one or more --property <key>=<value> arguments. This command does not provide any confirmation that the changes to the properties were successful. You can run the following command to review any changes made to any QoS specification:

    $ openstack volume qos list
    Copy to Clipboard Toggle word wrap

    This command provides a table of the configuration details of all the configured QoS specifications, the Properties column displays all the configured properties of each QoS specification.

  3. Exit the openstackclient pod:

    $ exit
    Copy to Clipboard Toggle word wrap

4.6. Associating a QoS specification with a volume type

You must associate a Quality of Service (QoS) specification with a volume type to apply the QoS limits to volumes.

Important

If a volume is already attached to an instance, then the QoS limits are only applied to this volume when the volume is detached and then reattached to this instance.

Prerequisites

Procedure

  1. Access the remote shell for the openstackclient pod from your workstation:n:

    $ oc rsh -n openstack openstackclient
    Copy to Clipboard Toggle word wrap
  2. Associate the required QoS specification with the required volume type:

    $ openstack volume qos associate <qos_spec_name> <volume_type>
    Copy to Clipboard Toggle word wrap
    • Replace <qos_spec_name> with the name or ID of the QoS specification. You can run the openstack volume qos list command to list the name and ID of all the QoS specifications.
    • Replace <volume_type> with the name or ID of the volume type. You can run the openstack volume type list command to list the name and ID of all the volume types.
  3. Verify that the QoS specification has been associated:

    $ openstack volume qos list
    Copy to Clipboard Toggle word wrap

    The Associations column of the output table provides the names of the volume types that are associated with each QoS specification.

    For example:

+--------------------------------------+--------------+-----------+--------------+-------------------------------------------------------------------+
| ID                                   | Name         | Consumer  | Associations | Properties                                                        |
+--------------------------------------+--------------+-----------+--------------+-------------------------------------------------------------------+
| 9fc9a481-28e9-49b8-84eb-f0a476cc89a5 | myqoslimits  | both      | MyVolType    | read_iops_sec='6500', size_iops_sec='4096', write_iops_sec='7500' |
+--------------------------------------+--------------+-----------+--------------+-------------------------------------------------------------------+
Copy to Clipboard Toggle word wrap
  1. Exit the openstackclient pod:

    $ exit
    Copy to Clipboard Toggle word wrap

4.7. Disassociating a QoS specification from volume types

You can disassociate a Quality of Service (QoS) specification from a volume type when you no longer want the QoS limits to be applied to volumes of that volume type.

You can either disassociate a specific volume type, or all the volumes types when more than one volume type is associated to the same QoS specification.

Important

If a volume is already attached to an instance, then the QoS limits are only removed from this volume when the volume is detached and then reattached to this instance.

Prerequisites

  • You must be a project administrator to create, configure, associate, and disassociate QoS specifications.

Procedure

  1. Access the remote shell for the openstackclient pod from your workstation:

    $ oc rsh -n openstack openstackclient
    Copy to Clipboard Toggle word wrap
  2. Disassociate the volume types associated with the QoS specification:

    • To disassociate a specific volume type associated with the QoS specification:

      $ openstack volume qos disassociate <qos_spec_name> --volume-type <volume_type>
      Copy to Clipboard Toggle word wrap
      • Replace <qos_spec_name> with the name or ID of the QoS specification. You can run the openstack volume qos list command to list the name and ID of all the QoS specifications.
      • Replace <volume_type> with the name or ID of the volume type associated with this QoS specification. You can run the cinder type-list command to list the name and ID of all the volume types.
    • To disassociate all volume types associated with the QoS specification:

      $ openstack volume qos disassociate <qos_spec_name> --all
      Copy to Clipboard Toggle word wrap
  3. Verify that the QoS specification has been disassociated:

    $ openstack volume qos list
    Copy to Clipboard Toggle word wrap

    The Associations column of this QoS specification should either not contain the specified volume type or should be empty when all the volume types were disassociated.

  4. Exit the openstackclient pod:

    $ exit
    Copy to Clipboard Toggle word wrap
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2026 Red Hat
맨 위로 이동