  Function as a Service (FaaS) has been gaining popularity as a way to deploy
computations to serverless backends in the cloud. This paradigm shifts the
complexity of allocating and provisioning resources to the cloud provider,
which has to provide the illusion of always-available resources (i.e., fast
function invocations without cold starts) at the lowest possible resource cost.
Doing so requires the provider to deeply understand the characteristics of the
FaaS workload. Unfortunately, there has been little to no public information on
these characteristics. Thus, in this paper, we first characterize the entire
production FaaS workload of Azure Functions. We show for example that most
functions are invoked very infrequently, but there is an 8-order-of-magnitude
range of invocation frequencies. Using observations from our characterization,
we then propose a practical resource management policy that significantly
reduces the number of function coldstarts,while spending fewerresources than
state-of-the-practice policies.
