Skip to content
ML to LLMs
Labs / LLM and RAG Lab

Static vs continuous batching

Simulate requests of different lengths on a GPU and compare throughput and latency under each batching policy.

Theory and worked examples: Serving LLMs

Static vs continuous batching

30 synthetic requests, mean output 24 tokens. One step = one decode iteration; each busy slot emits one token per step.

Slot timeline for continuous batching0100200300400time stepslot 0request 0: arrived 9, ran 9–25 (16 tokens)request 1: arrived 49, ran 49–61 (12 tokens)request 3: arrived 111, ran 111–118 (7 tokens)request 6: arrived 119, ran 119–132 (13 tokens)request 9: arrived 133, ran 133–139 (6 tokens)request 10: arrived 147, ran 147–163 (16 tokens)request 14: arrived 161, ran 163–169 (6 tokens)request 15: arrived 163, ran 169–201 (32 tokens)r15request 17: arrived 218, ran 218–224 (6 tokens)request 19: arrived 247, ran 247–298 (51 tokens)r19request 23: arrived 299, ran 299–313 (14 tokens)request 24: arrived 329, ran 329–356 (27 tokens)r24request 28: arrived 359, ran 359–373 (14 tokens)slot 1request 2: arrived 59, ran 59–65 (6 tokens)request 4: arrived 113, ran 113–131 (18 tokens)request 8: arrived 130, ran 131–143 (12 tokens)request 11: arrived 153, ran 153–222 (69 tokens)r11request 20: arrived 265, ran 265–336 (71 tokens)r20request 26: arrived 336, ran 336–348 (12 tokens)request 29: arrived 361, ran 361–391 (30 tokens)r29slot 2request 5: arrived 114, ran 114–155 (41 tokens)r5request 12: arrived 156, ran 156–194 (38 tokens)r12request 18: arrived 221, ran 221–276 (55 tokens)r18request 22: arrived 287, ran 287–329 (42 tokens)r22request 25: arrived 330, ran 330–361 (31 tokens)r25slot 3request 7: arrived 121, ran 121–135 (14 tokens)request 13: arrived 160, ran 160–177 (17 tokens)request 16: arrived 172, ran 177–197 (20 tokens)request 21: arrived 265, ran 265–276 (11 tokens)request 27: arrived 343, ran 343–385 (42 tokens)r27

Each bar is one request occupying a slot from admission to its last token. Blank space is an idle slot. Hover a bar for its arrival time.

Continuous batching refills a slot on the very next step after its request finishes, so slots only go idle when nobody is waiting.

Here continuous batching gives 1.10× the throughput and 2.10× lower mean latency (p95 108 → 69 steps). The wider the spread of output lengths, the more static batching wastes.