Previous work [4,8,12,20,21,22] has already demonstrated that application-specific extension of operating system kernels can be a key contributor to attaining high end-to-end performance. A wide range of specializations exist that can easily be realized using plugins - the spectrum of opportunities spans virtually all subsystems of a modern OS kernel. Plugins could augment a file system with custom caching or prefetching algorithms, or modify a TCP stack's back-off strategy to reflect loss properties of a particular client's link. They could enhance core system services like scheduling, by providing scheduling hints in the guise of payoff functions, or extend memory management by specializing the behavior of page replacement algorithms. Finally, kernel plugins can even be useful in high-performance kernel servers like the Linux accelerated web servers TUX and kHTTPd. Some examples of the rich set of application-specific plugins that can be deployed are (1) dynamic compression and decompression of data to effect trade-offs in server vs. client CPU needs and/or required transmission bandwidth, (2) runtime downsampling techniques reflecting a clients' preferences for fidelity vs. timeliness, (3) region-of-interest type transformations, removing unnecessary data from a communication stream, etc.
The following example kernel plugin usage scenarios have guided our research:
Smart Filtering
One usage of plugins is to permit end users to
directly affect data production, transmission, and reception at the
kernel level. For instance, if certain data is not of current interest
to the recipient, it can be eliminated early in the receiving OS
kernel, rather than being transferred to user level only to be
discarded. Similarly, if only subsets of data are of interest to
specific recipients, then source-based and client-specific data
filtering may be implemented with plugins [10]. Alternatively,
plugins can be used for `valuation' of information being captured,
processed, transmitted, or received, by applying payoff or utility
functions to it. Research has shown that such utility functions can be
a very useful adaptation tool.
Intelligent Introspection
Another possible domain of use for
kernel plugins is system monitoring and
instrumentation [23]. The idea is to deploy code that is
tailor-made for its specific purpose and to allow it to evolve
dynamically with the needs of the client, instead of having to measure
and export a large and generic set of metrics. For instance, an NFS
client experiencing degradation of service can dynamically instrument
its server's disk and network subsystems to discover where the
bottleneck is and adapt or possibly work around it.
Runtime Adaptation
A final example of a kernel plugin usage
scenario is to enable low-overhead dynamic self-adaptation of a
system's behavior, perhaps as a response to changes in monitored
conditions. For instance, the NFS client from our previous example
determines that there is a disk head scheduling bottleneck and adapts
by pushing into the NFS server an aggressive prefetch algorithm
customized to its current access patterns.