RadixFlow: Filling Execution Bubbles in Prefix-Cached Hybrid LLM Serving
Organizations: HKUST
Abstract
Prefix reuse improves LLM inference by sharing the KV cache of common prompt prefixes. This helps only if the scheduler can execute a matched branch in the current worker round. Schedulers assume that a matched prefix is ready, which holds for full attention but fails for hybrid LLMs. There, a branch (the consumer) may need recurrent state that another branch (the producer) is still computing in the same round. The native scheduler stops its waiting-queue scan at this blocked consumer, and the resulting head-of-line blocking creates execution bubbles: idle batch slots that independent work could fill. We introduce RadixFlow, which decouples prefix matching from state readiness. Its state-ready traversal turns a global scan barrier into a local wait: only the consumer is blocked until the next round, while feasible independent branches keep filling the batch under the native state check. On five hybrid models, RadixFlow lowers mean latency by 3% to 24% and worker rounds by 11% to 44% at almost unchanged reuse. On the larger Qwen3.5 models, ablations show that most of the gain comes from traversal, which adds little on a full-attention control. Heavier rounds limit how much of this saving reaches latency.
Figures & tables
| Method | Latency (s) | Replay (req/s) | Rounds | Reuse (%) |
|---|---|---|---|---|
| Qwen3.5-0.8B , , 5.0 req/s | ||||
| Radix | 0.256 | 4.806 | 19,803 | 81.362 |
| Radix+Timer5 | 0.260 | 4.805 | 19,371 | 81.367 |
| Radix+Timer10 | 0.264 | 4.805 | 19,181 | 81.373 |
| Radix+Flex | 0.249 | 4.805 | 18,409 | 81.364 |
| RadixFlow | 0.232 | 4.806 | 17,610 | 81.366 |
| Model | Rows / round | First selection (s) | ||||
|---|---|---|---|---|---|---|
| Radix | RadixFlow | Gain (%) | Radix | RadixFlow | Reduction (%) | |
| Qwen3.5-0.8B | 3.63 | 4.10 | 12.9 | 0.057 | 0.049 | 14.0 |
| Qwen3.5-4B | 5.42 | 7.31 | 34.9 | 12.576 | 9.273 | 26.3 |
| Qwen3.5-9B | 6.61 | 10.02 | 51.6 | 25.682 | 23.255 | 9.5 |
| Qwen3.5-27B | 6.51 | 12.11 | 86.0 | 160.538 | 153.314 | 4.5 |
| Nemotron-9B | 2.91 | 4.38 | 50.5 | 1.898 | 1.582 | 16.6 |
Appendix figures & tables11 assets
Supplementary material from the paper’s appendix.
Appendix
| Policy | Overlap | Reset | Total extra |
|---|---|---|---|
| Radix | 66,944 | 0 | 66,944 |
| Radix+Timer5 | 49,584 | 0 | 49,584 |
| Radix+Timer10 | 53,760 | 512 | 54,272 |
| Radix+Flex | 48,864 | 0 | 48,864 |
| RadixFlow | 182,384 | 0 | 182,384 |
| RadixFlow+Frag | 186,096 | 0 | 186,096 |
| Model | Stream | Radix | Flex | RadixFlow | Latency reduction (%) | |
|---|---|---|---|---|---|---|
| Qwen3.5-0.8B | Cold | 6,849 | 6,563 | 6,152 | 7.1 | 3.33 |
| Mixed | 6,603 | 6,101 | 5,884 | 8.7 | 3.94 | |
| Reuse | 6,351 | 5,745 | 5,574 | 13.2 | 3.88 | |
| Qwen3.5-4B | Cold | 4,477 | 4,382 | 2,753 | 10.7 | 1.49 |
| Mixed | 3,866 | 3,805 | 2,905 | 61.2 | 2.56 | |
| Reuse | 5,081 | 4,755 | 4,488 | 12.6 | 7.71 |
| Model | Policy | p50 (s) | p95 (s) | p99 (s) | Sender lag (s) | Offered latency (s) |
|---|---|---|---|---|---|---|
| Qwen3.5-0.8B | Radix | 0.217 | 0.503 | 0.767 | 0.000 | 0.256 |
| Radix+Timer5 | 0.225 | 0.512 | 0.842 | 0.000 | 0.261 | |
| Radix+Timer10 | 0.227 | 0.526 | 0.828 | 0.000 | 0.265 | |
| Radix+Flex | 0.210 | 0.521 | 0.798 | 0.000 | 0.249 | |
| RadixFlow | 0.201 | 0.455 | 0.630 | 0.000 | 0.232 | |
| RadixFlow+Frag | 0.200 | 0.443 | 0.606 | 0.000 | 0.228 |
| Model | Tokens/round | Rows/round | (ms) | |||
|---|---|---|---|---|---|---|
| Radix | RadixFlow | Radix | RadixFlow | |||
| Qwen3.5-0.8B | 1401 | 1575 | 3.63 | 4.10 | 0.51 | 0.328 |
| Qwen3.5-4B | 2173 | 2871 | 5.42 | 7.31 | 2.70 | 0.911 |
| Qwen3.5-9B | 2739 | 4060 | 6.61 | 10.02 | 3.05 | 0.957 |
| Qwen3.5-27B | 3998 | 7208 | 6.51 | 12.11 | 18.41 | 0.997 |
| Nemotron-9B | 2482 | 3701 | 2.91 | 4.38 | -0.61 | 0.238 |
| Model | Registration to first selection (s) | After first selection (s) | ||
|---|---|---|---|---|
| Radix | RadixFlow | Radix | RadixFlow | |
| Qwen3.5-0.8B | 0.057 | 0.049 | 0.120 | 0.124 |
| Qwen3.5-4B | 12.576 | 9.273 | 0.373 | 0.528 |
| Qwen3.5-9B | 25.682 | 23.255 | 0.664 | 1.013 |
| Qwen3.5-27B | 160.538 | 153.314 | 2.457 | 3.718 |
| Nemotron-9B | 1.898 | 1.582 | 0.347 | 0.396 |
| Model | Decoded agreement (%) |
|---|---|
| Qwen3.5-0.8B | 98.477 |
| Qwen3.5-4B | 99.850 |
| Qwen3.5-9B | 99.680 |
| Qwen3.5-27B | 99.995 |
| Nemotron-9B | 99.688 |
| Qwen3-8B (FA) | 99.441 |
| Model | Radix | Timer5 | Timer10 | Flex | RadixFlow | +Frag |
|---|---|---|---|---|---|---|
| Qwen3.5-0.8B | 52.95 | 52.99 | 53.09 | 53.64 | 54.24 | 53.94 |
| Qwen3.5-4B | 82.63 | 83.26 | 84.14 | 83.42 | 92.95 | 91.69 |
| Qwen3.5-9B | 112.85 | 116.78 | 116.67 | 113.38 | 145.50 | 144.16 |
| Qwen3.5-27B | 729.94 | 829.01 | 836.45 | 738.22 | 1262.95 | 1246.66 |
| Nemotron-9B | 53.06 | 53.82 | 53.10 | 53.69 | 53.87 | 54.31 |
| Qwen3-8B (FA) | 26.60 | 27.55 | 27.73 | 27.42 | 27.54 | 27.42 |
LLM Serving
Large language model serving studies how to deliver model responses with low latency, high throughput, and efficient use of compute and memory.
See all 211 papers