QoS is a complex topic, with many variations that can be very complex to implement. This blueprint seeks to prototype a relatively simple, but scalable QoS algorithm for storage.
Syed Billah (Red Hat)
Josh Durgin (Red Hat)
Working on a prototype in ceph
Try out the dmClock algorithm: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.182.4720
- R - reservation (minimum IOPS)
- L - limit (maximum IOPS)
- W - weight (proportional share of capacity if extra capacity or system oversubscribed)
- delta - the number of IOs this client completed in all OSDs since the last request to the current OSD
- rho - the number of IOs this client completed as part of the R (reservation) tag in all OSDs since the last request to the current OSD
This is quite scalable, requiring no global state or aggregation, and reasonably simple to implement.
On the OSD side, the main work is replacing the PrioritizedWorkQueue with one that uses mClock.