  How should we schedule jobs to minimize mean queue length? In the preemptive
M/G/1 queue, we know the optimal policy is the Gittins policy, which uses any
available information about jobs' remaining service times to dynamically
prioritize jobs. For models more complex than the M/G/1, optimal scheduling is
generally intractable. This leads us to ask: beyond the M/G/1, does Gittins
still perform well? Recent results show Gittins performs well in the M/G/k,
meaning that its additive suboptimality gap is bounded by an expression which
is negligible in heavy traffic. But allowing multiple servers is just one way
to extend the M/G/1, and most other extensions remain open. Does Gittins still
perform well with non-Poisson arrival processes? Or if servers require setup
times when transitioning from idle to busy? In this paper, we give the first
analysis of the Gittins policy that can handle any combination of (a) multiple
servers, (b) non-Poisson arrivals, and (c) setup times. Our results thus cover
the G/G/1 and G/G/k, with and without setup times, bounding Gittins's
suboptimality gap in each case. Each of (a), (b), and (c) adds a term to our
bound, but all the terms are negligible in heavy traffic, thus implying
Gittins's heavy-traffic optimality in all the systems we consider. Another
consequence of our results is that Gittins is optimal in the M/G/1 with setup
times at all loads.
