A well-known characteristic of many IO workloads is a bursty arrival pattern--fluctuating resource demand due to device and application characteristics, access locality, and other factors. A high degree of burstiness makes it difficult to provide low latency and achieve proportionate allocation.
In our environment, bursty arrivals generally occur at two distinct time scales: systematic long-term ON-OFF behavior of VMs, and sudden short-term spikes in IO workloads. To handle long-term bursts, we modify the value for a host based on the utilization of queue slots by its resident VMs. Recall that the host-level parameter is proportional to the sum of shares of all VMs (if are the shares assigned to VM , then for host , , where is a normalization constant).
To adjust
, we measure the average number of outstanding IOs
per VM,
, and each VM's share of its host window size as
, expressed
as:
For short-term fluctuations, we use a burst-aware local scheduler. This scheduler allows VMs to accumulate a bounded number of credits while idle, and then schedule requests in bursts once the VM becomes active. This also improves overall IO efficiency, since requests from a single VM typically exhibit some locality. A number of schedulers support bursty allocations [13,22,6]. Our implementation uses SFQ as the local scheduler, but allows a bounded number of IOs to be batched from each VM instead of switching among VMs purely based on their SFQ request tags.
Ajay Gulati 2009-01-14