A
Microkernel
Virtual Machine: Building Security with Clear Interfaces. Xiaoqi Lu,
Scott Smith, PLAS 2006, 6, Ottawa, Ontario, Canada.
Abstract: In this paper we propose a novel microkernel-based virtual
machine (µKVM), a new code-based security framework with a simple and
declarative security architecture. The main design goals of the µKVM are to put
a clear, inviolable programming interface between different codebases or
security components, and to limit the size of the trusted codebase in the spirit
of a microkernel. Security policies are enforced solely on the interface because
all data must explicitly pass through the inviolable interface. The architecture
of the µKVM effectively removes the need for expensive runtime stack inspection,
and applies the principle of least privilege to both library and application
code elegantly and efficiently. We have implemented a prototype of the proposed
µKVM. A series of benchmarks show that the prototype preserves the original
functionality of Java and compares favorably with the J2SDK performance-wise.
The Microkernel Virtual Machine (µKVM) Benchmark
Four groups of test programs have been developed to benchmark the µKVM:
File Open Benchmark : measure the time and memory consumption in file open operations.
File Read/Write Benchmark : read/write a big chuck of data
from/to a file, measure the time and memory consumption these operations
Network Benchmark: test message transfer time
between a server and a client.
Thread Benchmark: measure thread creation time, duration time and memory consumption.
Security Overhead Benchmark: measure time and memory overhead on file open operation when security checks are enforced.
In each test group, there are two set of almost identical test programs for the Java and the µKVM respectively. Test programs for the µKVM always have a prefix "K". For example, the MemoryTest.java is the test program for the Java, while KMemoryTest.java is for the µKVM.
J2SDK : MemoryTest.java
µKVM : KMemoryTest.java
usage: java [K]MemoryTest [file_num]file_num The number of files to be opened at once.
J2SDK : TestRead.java
TestWrite.java
µKVM : KTestRead.java
KTestWrite.java
usage: java [K]TestRead/[K]TestWrite file_size test_round stepfile_size The size (bytes) of data to be read.
test_round The number of times that file_size data will be read.
step Specify how many block sizes will be used in testing. Block size is the bytes of data each read/write gets. It starts from 64 and increases by power of 2. For example, if steps is set to 3, then the block size 64,128 and 256 will be tested respectively.
J2SDK : Server.java and Client.java
µKVM : KServer.java and KClient.java
usage: java [K]Server message_size message_number
java [K]Client [server_name] message_size message_number
message_size The size (in bytes) of each message to be transferred.
message_number The total number of the messages to be transferred.
J2SDK : ThreadBenchmark.java and TestThread.java
µKVM : KVMThreadBenchmark.java and KVMTestThread.java
usage: java [K]ThreadBenchmark thread_number
thread_number The number of threads to be created.
J2SKD : MemoryTest.java
µKVM : SKMemoryTest.java
security policy file
usage: java -Djava.security.mananger -Djava.security.policy=rw.policy [K]Memorytest [file_num]
file_num The number of files to be opened at once.
Part II: Benchmark Results and Analysis
The benmark.pdf file contains the complete benchmark results of running test programs listed in Part I and a detailed analysis on those data.