USENIX Conference Policies
Kernel Plugins: When a VM Is Too Much
This paper presents kernel plugins, a framework for dynamic kernel specialization inspired by ideas borrowed from virtualization research. Plugins can be created and updated inexpensively on-the-fly and they can execute arbitrary user-supplied functions such that neither safety nor performance are compromised. Three key techniques are used to implement kernel plugins: (1) hardware fault isolation, (2) dynamic code generation, and (3) dynamic linking. Hardware fault isolation protects kernel-level services from plugin misbehavior, dynamic code generation enables rapid online creation of arbitrary plugins, and dynamic linking governs the kernel/plugin interface.
We discuss the design and implementation of the kernel plugin
facility, as well as its advantages and shortcomings. Its use is
demonstrated by a range of micro- and macro-benchmarks and a real-life
application featuring plugins that dynamically transcode images served
by a high-performance kernel web server. Benefits realized from
plugins can be both qualitative (adapting services to clients' needs),
and quantitative (improving performance through co-location of
application plugin code with kernel services). Plugins are implemented
in GNU/Linux on the Intel x86 platform. Reported performance results
include plugin upcalls in 0.45-0.62
, dynamic code generation
in 4
, and linking/unlinking in 3.1/1.6
for an image
grayscaling plugin - a dynamically code generated 66-line function
written in a subset of C. All results are measured on an 866 MHz
Pentium III.
author = {Ivan Ganev and Greg Eisenhauer and Karsten Schwan},
title = {Kernel Plugins: When a {VM} Is Too Much},
booktitle = {3rd Virtual Machine Research \& Technology Symposium (VM 04)},
year = {2004},
address = {San Jose, CA},
url = {https://www.usenix.org/conference/vm-04/kernel-plugins-when-vm-too-much},
publisher = {USENIX Association},
month = may
}