  We study the problem of scheduling VMs (Virtual Machines) in a distributed
server platform, motivated by cloud computing applications. The VMs arrive
dynamically over time to the system, and require a certain amount of resources
(e.g. memory, CPU, etc) for the duration of their service. To avoid costly
preemptions, we consider non-preemptive scheduling: Each VM has to be assigned
to a server which has enough residual capacity to accommodate it, and once a VM
is assigned to a server, its service \textit{cannot} be disrupted (preempted).
Prior approaches to this problem either have high complexity, require
synchronization among the servers, or yield queue sizes/delays which are
excessively large. We propose a non-preemptive scheduling algorithm that
resolves these issues. In general, given an approximation algorithm to Knapsack
with approximation ratio $r$, our scheduling algorithm can provide $r\beta$
fraction of the throughput region for $\beta < r$. In the special case of a
greedy approximation algorithm to Knapsack, we further show that this condition
can be relaxed to $\beta<1$. The parameters $\beta$ and $r$ can be tuned to
provide a tradeoff between achievable throughput, delay, and computational
complexity of the scheduling algorithm. Finally extensive simulation results
using both synthetic and real traffic traces are presented to verify the
performance of our algorithm.
