Quality of Service (QoS) is defined as the ability to meet resource requirements in order to satisfy Service Level Agreements (SLA) between application/platform provider and end users. In a cloud environment multiple tenants share the same physical infrastructure and QoS can span across compute, network and storage. Due to the above characteristics of multi-tenancy and resource sharing, cloud environments must deal with issues such as noisy neighbor, priority inversion etc and enforce policies so that efficient and predictable resource utilization takes place.
To quantitatively implement QoS, several aspects such as network bandwidth, throughput, lossless and low latency, CPU allocation, disk throughput need to be considered. Specifically from a network point of view, as traffic from video workloads co-exist and traverse within the data center network with other network traffic, QoS will need to be defined and enforced at multiple layers in order to meet the requirements of the flow.
The OpenStack platform provides multiple QoS options spread across multiple projects.
OpenStack Networking service, Neutron, provides support for limiting egress bandwidth for VMs with hypervisor and SR-IOV ports on a Neutron network and port level.
OpenStack Block Storage service, Cinder, provides volume types QoS specs for limiting throughput and IOPs at the hypervisor front-end or the storage back-end for volumes.
OpenStack Compute service, Compute, provides instance resource quota for CPU, disk IO and network bandwidth at the hypervisor level. Additionally, it also provides options for CPU pinning and isolation for compute resource guarantee.
The community continues to improve towards providing additional QoS features such as DSCP marking on Neutron network and ports etc and will be soon part of upcoming OpenStack releases (Newton).