Minos: Exploiting Cloud Performance Variation with Function-as-a-Service Instance Selection
Trever Schirmer, Natalie Carl, Nils Höller, Tobias Pfandzelter, David Bermbach
TL;DR
Problem: FaaS platforms exhibit per-instance performance variation due to shared infrastructure, causing longer execution and higher costs for slow instances. Method: Minos benchmarks new function instances at cold start and terminates underperformers to keep a pool of fast ones, using an elysium threshold to decide locally; an initial pre-test sets this threshold; benchmarking can run in parallel with setup steps. Contributions: a proof-of-concept on Google Cloud Functions, a concrete termination policy with the $c_{\textsf{exec}}$ cost model, and an evaluation showing up to $13\%$ improvement in resource-intensive steps and up to $4\%$ overall speedup and $0.9\%$ cost reduction. Significance: demonstrates that exploiting platform variability can yield performance and cost benefits, while prompting discussion of fairer virtualization and live-threshold updates.
Abstract
Serverless Function-as-a-Service (FaaS) is a popular cloud paradigm to quickly and cheaply implement complex applications. Because the function instances cloud providers start to execute user code run on shared infrastructure, their performance can vary. From a user perspective, slower instances not only take longer to complete, but also increase cost due to the pay-per-use model of FaaS services where execution duration is billed with microsecond accuracy. In this paper, we present Minos, a system to take advantage of this performance variation by intentionally terminating instances that are slow. Fast instances are not terminated, so that they can be re-used for subsequent invocations. One use case for this are data processing and machine learning workflows, which often download files as a first step, during which Minos can run a short benchmark. Only if the benchmark passes, the main part of the function is actually executed. Otherwise, the request is re-queued and the instance crashes itself, so that the platform has to assign the request to another (potentially faster) instance. In our experiments, this leads to a speedup of up to 13% in the resource intensive part of a data processing workflow, resulting in up to 4% faster overall performance (and consequently 4% cheaper prices). Longer and complex workflows lead to increased savings, as the pool of fast instances is re-used more often. For platforms exhibiting this behavior, users get better performance and save money by wasting more of the platforms resources.
