  Virtual execution environments provide strong isolation, on-demand
infrastructure, simplified device models, and many other benefits for systems
and application programmers. However, these environments are often perceived as
heavyweight and rife with performance pitfalls for fine-grained or low-latency
tasks. While others have shown that a virtual environment's footprint can be
drastically reduced by paring down the guest and host software stacks, in this
paper we take a different approach. We probe the limits of fine-grained,
virtual execution by investigating the viability of hardware virtualized
environments at function call granularity. We introduce a new abstraction
called a virtine, or virtualized subroutine, and present the design of a new
microhypervisor called Wasp that enables them. Through a series of examples we
show that Wasp can enable virtines with start-up latencies as low as 100
$\mu$s. We also provide two convenient programming interfaces to virtines,
using the Rust language and using extensions to C. Using these extensions we
implement a simple HTTP server and integrate virtines into an off-the-shelf
implementation of OpenSSL.
