Quality of Service (QoS) Feature
Cloud storage is deployed for multi-tenant usage. Operators strive to provide each tenant with an experience of dedicated resources, while in practice several tenants share the same storage server (in addition to the sharing of other resources such as compute and network). This creates performance unpredictability, which is reflected in the behavior of applications (the “noisy neighbor” effect). The Lightbits value proposition is to improve TCO while maintaining Service Level Agreements (SLA).
Lightbits’ technology allows cloud providers to share and provide storage resources in multi-tenant environments. With the addition of the QoS feature, it is able to deliver performance guarantees, making the cloud more attractive and providing users with the idea that they no longer share resources. Setting user volume limits will enable operators to decrease the impact of the “noisy neighbor” effect and increase the predictability of storage performance that users get.
- Each volume has a default project.
- The default project is automatically assigned to a global-default-policy; this is a no-limit policy. (If no QoS policies were created, only the global-default-policy will be listed).
To list existing QoS policies:
lbcli list qos-policies
Creating a new QoS policy:
lbcli create qos-policy --name=iops-best --description="256 iops" --type iops --write-limit 256 --read-limit 256 --projects default
A QoS policy can be created to limit the following parameters:
- Limit IOPs per user: –type iops
- Limit bandwidth per user: –type bw
- Limit IOPs per gigabyte per user: –type iops-per-gb
- IOPs write/read limit is in increments of 256, 512, 1024 …
- The newly created policy can be assigned to any number of projects under $ --projects
List existing QoS policies:
lbcli list qos-policies
Sample Output
root@rack13-server94:~ lbcli list qos-policies
UUID Name State Type Write limit Read limit
babd2548-b6bc-444f-978c-ed556404f62c no-limit-policy Active iops 0 0 ff23f768-96b6-4874-b838-9eee41b0838e iops-best Active iops 256 256
Update the volume with the newly created QoS policy:
lbcli update volume --uuid=0e7ee2fa-5ff3-46cc-ba4a-efd110d0d8b0 --project-name=default --qospolicy-uuid=ff23f768-96b6-4874-b838-9eee41b0838e
Check the update (in the bottom of the output you will see the QoS policy that the volume is assigned to).
lbcli list volumes –uuid=0e7ee2fa-5ff3-46cc-ba4a-efd110d0d8b0 -o json
Sample Output
"qosPolicyUUID": "ff23f768-96b6-4874-b838-9eee41b0838e",
"qosPolicyName": "iops-best"
Update the existing project to use the created QoS policy as the default QoS policy.
New projects for different tenants can be created by lbcli create project --name.
In this example, we will use a default project that is created by installing the Lightbits cluster.
# Update project to use now qos policy
root@rack13-server94:~ lbcli update project --name=default --qos-policy-uuid=ff23f768-96b6-4874-838-9eee41b0838e
# Check project information
root@rack13-server94:~ lbcli list projects -o yaml
projects:
- UUID: 27e3800d-d75f-5ae1-8b58-2a16400218dd
defaultPolicies:
- policyType: qosRateLimit
policyUUID: ff23f768-96b6-4874-b838-9eee41b0838e
description: This is the default project description.
name: default
In this output, we can verify that QoS policy UUID is updated to the one we created. Any volume created under this project will inherit the project-default-policy.
# Create volume in default project
root@rack13-server94 :~ lbcli create volume --size="300 Gib" --name=2vol --acl="acl3"
--replica-count=1 --project-name=default
Name UUID State Protection State NSID Size Replicas Compression ACL Rebuild Progress
2vol 1393874c-6f8b-40b0-a4cf-bdcf30cef6c5 Creating Unknown 0 300 GiB 1 false values:"acl3"
# Check volume qos policy
root@rack13-server94:~ lbcli list volume --uuid=1393874c-6f8b-40b0-a4cf-bdcf30cef6c5 -o json
"qosPolicyUUID": "ff23f768-96b6-4874-b838-9eee41b0838e",
"qosPolicyName": "iops-best"