Most research on QoS-aware computing considers systems where code is generally partitioned into separately schedulable tasks with associated timing constraints. In sharp contrast to such systems is a myriad of mainstream off-the-shelf applications and services such as Web servers, caches, mail servers, and content distribution proxies where QoS guarantees may be needed, yet the software follows a best-effort one-size-serves-all model. In this model, different traffic classes are not mapped to different schedulable entities (tasks), making it impossible to use real-time scheduling meaningfully to satisfy application QoS.
This paper presents a kernel-level solution to the problem of retrofitting such best-effort systems with QoS support without changing application code. The solution has been implemented in Linux. By downloading a few kernel patches and configuring the patched kernel appropriately, a system administrator can endow a best-effort service with QoS assurances transparently to the legacy server. An extensible library is provided in a separate QoS manager that allows implementing different types of QoS guarantees within the extended service. The performance of the resulting system is evaluated on the implemented Linux-based prototype. It is shown that QoS-sensitive behavior is successfully achieved.