  In this paper, we present PerfEnforce, a scaling engine designed to enable
cloud providers to sell performance levels for data analytics cloud services.
PerfEnforce scales a cluster of virtual machines allocated to a user in a way
that minimizes cost while probabilistically meeting the query runtime
guarantees offered by a service level agreement. With PerfEnforce, we show how
to scale a cluster in a way that minimally disrupts a user's query session. We
further show when to scale the cluster using one of three methods: feedback
control, reinforcement learning, or perceptron learning. We find that
perceptron learning outperforms the other two methods when making cluster
scaling decisions.
