Blink removes host CPU from LLM inference critical path via SmartNIC (DPU) frontend + GPU-resident persistent scheduler, achieving up to 8.47× P99 TTFT reduction and complete interference immunity where baselines degrade 1–2 orders of magnitude.
Current LLM serving stacks (vLLM, SGLang, TRT-LLM) keep host CPU on every-token critical path for scheduling, batching, KV-cache management, and CUDA kernel dispatch. Even with CUDA Graphs and overlapped scheduling, the scheduler must return to host after every decode step. This creates two compounding problems:
The fundamental issue is architectural: a fragile, interference-sensitive CPU sits on the critical path of every generated token.
Blink redesigns the inference serving stack around two principles: (1) the host CPU becomes a provisioning plane (loads model and captures CUDA graphs at startup, then exits entirely); (2) steady-state operation uses only DPU + GPU.
DPU frontend (NVIDIA BlueField-3, 16 ARM Cortex-A78 cores):
GPU backend (persistent scheduler):
Communication: GPU-resident lock-free ring buffer with per-slot state machine (empty → prefill_pending → prefill_processing → decode_processing → decode_completed → empty, plus decode_paused for preemption). DPU and GPU coordinate exclusively through this buffer; ownership transferred via atomic CAS with RDMA-visible memory fences.
System scope: both prefill and decode with continuous batching. Single-GPU, single-node. FCFS scheduling. Paged KV-cache managed entirely on GPU. OpenAI-compatible HTTP API with SSE streaming.
核心技术壁垒: the persistent GPU-resident scheduler. Replacing the entire host-driven decode loop with a single indefinitely-running CUDA kernel requires solving three deeply coupled problems: (a) device-side CUDA graph launch via fire-and-forget with tail-launch recovery for the undocumented 120-launch hard limit (exceeding it produces undefined behavior); (b) completion detection via device-side polling since fire-and-forget provides no host-side callbacks; (c) lock-free coordination with an external DPU through RDMA-visible memory fences without any CPU mediation. This is not offloading a function — it restructures who owns the inference control loop.
Evaluated on 4 models (Llama-3 8B, Phi-4 15B, Qwen-3 32B, Qwen-3 30B-A3B) against TRT-LLM v1.1.0, vLLM v0.13.0, SGLang v0.5.8 on NVIDIA H100.
Isolation: P99 TTFT reduced up to 8.47× (vs SGLang on Qwen-3 30B-A3B), P99 TPOT reduced up to 3.40×, decode throughput improved up to 2.1× (1437 tok/s vs 730 tok/s on MoE), energy per token reduced up to 48.6%. Highest or tied-highest saturation throughput on every model.
Under CPU interference (pbzip2 + Ninja LLVM build on 90 host cores): Blink maintains TTFT inflation 0.92–1.14×, TPOT inflation 0.97–1.04×, throughput retention 99–100%. Baselines: TTFT inflation 1.54–18.84×, throughput retention 28–64%. Blink plateau throughput 1.69–4.08× higher than baselines under interference. Energy per token reduced 41.4–70.7% vs baselines.
MoE models show amplified benefits: Qwen-3 30B-A3B activates only 3B of 30B parameters per token, so each decode step completes quickly on GPU but CPU orchestration cost remains constant, making scheduling overhead a larger fraction of step time.
Request lifecycle: Client → DPU HTTP server → tokenize → RDMA write to ring buffer → GPU persistent scheduler claims slot → selects and launches precompiled CUDA graph → inference executes → token written to ring buffer → DPU polls via RDMA → detokenize → stream to client. Host CPU participates in none of these steps after initialization.
Ring buffer: resides entirely in GPU memory. 4096 fixed slots with shared arenas for input/generated tokens. Per-slot metadata tracks prompt identity, token counts, generation progress. State machine governs ownership: DPU writes only to empty slots, GPU claims via CAS transition to prefill_pending, and only the GPU advances through processing states. Memory fences ensure RDMA-visible updates.
Scheduling: FCFS with pause-and-resume continuous batching. While a decode graph executes asynchronously, the scheduler's 256 threads scan the ring buffer for pending prefills. Three conditions gate pausing: (1) pending prefills detected, (2) free batch-slot capacity, (3) sufficient fire-and-forget launch-window headroom. New requests admitted within one decode step.
CUDA graph cache: precompiled TensorRT engines compiled into graphs for dense grid of (batch size, sequence length) pairs. Each graph consumes only 2–3 MB. Cache of 650–1000 graphs fits within 2–4 GB. Runtime selection via precomputed lookup table indexed by (batch, seq_len) in $O(1)$. Token sampling (Top-P with temperature) captured inside each graph.
无形式化作者证明 — 仅实证
This paper contains no numbered equations and no formal analytical or performance model. The argument rests entirely on controlled systems experiments:
A formal model would have clarified:
NVIDIA H100 (96 GB HBM3), 2× Intel Xeon Gold 6336Y (96 cores @ 2.40 GHz), 256 GB DDR5, ConnectX-6 200 Gbps NIC. Blink frontend on separate BlueField-3 DPU (16 ARM Cortex-A78, 32 GB) connected via 200 Gbps RDMA link (DOCA SDK v3.2.1).
| Model | System | P99 TTFT (ms) | P99 TPOT (ms) | Tput at sat. (req/s) |
|---|---|---|---|---|
| Llama-3 8B ($\lambda \leq 12$) | Blink | 653.8 | 15.1 | 11.87 |
| TRT-LLM | 880.0 | 17.7 | 10.80 | |
| vLLM | 1309.6 | 24.2 | 9.12 | |
| SGLang | 1747.1 | 30.7 | 7.88 | |
| Phi-4 15B ($\lambda \leq 7$) | Blink | 1109.4 | 25.0 | 6.72 |
| TRT-LLM | 1453.8 | 29.8 | 6.42 | |
| vLLM | 1683.7 | 34.5 | 6.05 | |
| SGLang | 2874.1 | 47.9 | 5.58 | |
| Qwen-3 32B ($\lambda \leq 2$) | Blink | 9481.3 | 113.4 | 2.00 |
| TRT-LLM | 9621.4 | 115.2 | 1.97 | |
| vLLM | 10862.4 | 133.7 | 1.88 | |
| SGLang | 11413.0 | 123.3 | 1.85 | |
| Qwen-3 30B-A3B MoE ($\lambda \leq 4$) | Blink | 1397.5 | 35.5 | 4.85 |
| TRT-LLM | 4814.7 | 65.8 | 3.61 | |
| vLLM | 8919.2 | 90.9 | 2.91 | |
| SGLang | 11839.8 | 120.8 | 2.62 |
Comparison to TRT-LLM is the cleanest control (same TensorRT inference engines). On Qwen-3 30B-A3B, Blink's P99 TTFT is 3.45× lower than TRT-LLM with 37% higher throughput — the largest gap across all models, driven by MoE's unfavorable compute-to-orchestration ratio.
| Model | System | P99 TTFT inflation | P99 TPOT inflation | Tput retention |
|---|---|---|---|---|
| Llama-3 8B | Blink | 1.00× | 1.00× | 100% |
| TRT-LLM | 18.84× | 11.10× | 38% | |
| vLLM | 11.12× | 7.35× | 44% | |
| SGLang | 8.43× | 5.77× | 48% | |
| Phi-4 15B | Blink | 0.92× | 0.98× | 101% |
| TRT-LLM | 10.66× | 6.17× | 41% | |
| vLLM | 7.14× | 4.74× | 47% | |
| SGLang | 3.82× | 3.15× | 47% | |
| Qwen-3 32B | Blink | 0.99× | 1.04× | 102% |
| TRT-LLM | 1.68× | 3.23× | 51% | |
| vLLM | 1.54× | 2.64× | 64% | |
| SGLang | 1.61× | 3.35× | 59% | |
| Qwen-3 30B-A3B | Blink | 1.14× | 0.97× | 99% |
| TRT-LLM | 4.90× | 9.19× | 28% | |
| vLLM | 2.02× | 3.04× | 54% | |
| SGLang | 1.98× | 3.96× | 45% |
Interference: pbzip2 (45 threads) + Ninja LLVM build (45 jobs) on 90 host cores, 6 cores reserved per NVIDIA guidelines.
| Condition | Blink range (mJ/tok) | Best baseline (mJ/tok) | Blink savings |
|---|---|---|---|
| Isolation | 363–1306 | 502–1580 | 13.7–48.6% |
| Interference | 423–1584 | 1045–3597 | 41.4–70.7% |
All systems draw comparable wall power (1.1–1.4 kW). When CPU contention collapses baseline throughput at constant power, their energy per token inflates 69–182%. Blink's overhead at most 21%.
vLLM v0.13 + Llama-3 8B on H100, ShareGPT traces, pbzip2 interferer:
| Metric | Baseline | 24× interference | Factor |
|---|---|---|---|
| Throughput (tok/s) | 7,475 | 1,961 | 3.8× drop |
| P99 TTFT (ms) | 150 | 20,959 | 139× inflation |
| LLC miss rate | 7.0% | 71.6% | 10.2× |
| LLC stall cycles | 450 M | 5,037 M | 11.2× |
| IPC | 1.53 | 0.72 | 2.1× drop |
| Regime | Blink advantage | Mechanism |
|---|---|---|
| MoE, any load | 3.45× P99 TTFT, 37% throughput vs TRT-LLM | Low compute-to-orchestration ratio amplifies per-token scheduling savings |
| Dense, moderate-to-high load | 1.35× P99 TTFT, 9% throughput vs TRT-LLM | Per-step CPU round-trip savings compound across output tokens |
| Dense, GPU-bound (Qwen-3 32B) | ~parity at P99; diverges at P99.9 | GPU compute dominates; scheduling overhead masked at P99 but surfaces at deep tail |
| Any model + CPU interference | Stable (0.92–1.14×) vs 1.5–18.8× degradation | CPU entirely removed from critical path |
| Models exceeding GPU memory | Not supported (baselines use CPU/DRAM offload) | Blink requires model to fit in GPU memory |
On Qwen-3 32B, TRT-LLM achieves lower P50 TTFT (531.7 ms vs 786.2 ms) — one of the few metrics where a baseline outperforms Blink, reflecting the GPU-bound regime where scheduling overhead is negligible at median.
| Model | Blink (tok/s) | TRT-LLM (tok/s) | Δ |
|---|---|---|---|
| Llama-3 8B | 3880 | 3535 | +10% |
| Phi-4 15B | 2177 | 2044 | +7% |
| Qwen-3 32B | 537 | 520 | +3% |
| Qwen-3 30B-A3B | 1437 | 1053 | +36% |
| Step | Claim | Evidence | Type |
|---|---|---|---|
| 1 | Host CPU is on every-token critical path of LLM inference | vLLM/SGLang/TRT-LLM return control to host after every decode step for scheduling, KV-cache management, kernel dispatch. CPU scheduling consumes up to 50% of e2e latency on fast accelerators (§2.1) | Architectural analysis + literature |
| 2 | CPU interference causes severe, compounding degradation | vLLM+H100 under pbzip2: 3.8× throughput drop, 139× P99 TTFT inflation. TLB invalidation + LLC pollution create cross-address-space amplification — page walks forced to DRAM, LLC stall cycles up 11.2× (§2.2, Table 1) | Controlled measurement |
| 3 | Standard mitigations fail to restore isolation | Huge pages: -16% dTLB misses, no latency improvement. Core pinning: consumes all cores, -18% throughput residual. LLC partitioning via CAT: eliminates LLC contention but <4% P99 ITL improvement (§3, Tables 2–4) | Systematic elimination |
| 4 | Root cause is architectural, not resource contention | After eliminating LLC contention, host orchestration still inflates: attention dispatch +104%, cudaLaunchKernel +115%, KV-cache dispatch +172%. GPU kernel times unchanged (0.41–0.42 ms). Dynamic core systems (Caladan, Shenango) optimize CPU capacity, not whether CPU is on critical path (§3.3) | Profiling + argument by elimination |
| 5 | CPU-free inference requires DPU + GPU-resident scheduler co-design | DPU alone cannot absorb per-token scheduling (limited core count). GPU alone cannot handle network I/O. Blink splits: DPU handles request management + RDMA transport; GPU-persistent kernel handles scheduling + execution (§4.1) | Design argument |
| 6 | Persistent GPU scheduler achieves lower overhead than host path | Device-side CUDA graph launch ≈2 µs vs host 11–17 µs (5–8× faster). 256-thread ring buffer scan in 1–5 µs. CPU path inflates makespan 1.16–1.70× on same workloads (§4.2, Figure 3) | Microbenchmark |
| 7 | Blink outperforms all baselines even in isolation | Same TensorRT engines as TRT-LLM: 1.35–3.45× lower P99 TTFT, up to 37% higher throughput. Highest saturation throughput on every model (§6.2, Table 6) | Controlled benchmark |
| 8 | Blink maintains performance under CPU interference | TTFT inflation 0.92–1.14×, TPOT 0.97–1.04×, throughput 99–100% retention. Baselines: 1.54–18.84× TTFT inflation, 28–64% retention. Plateau 1.69–4.08× higher (§6.3, Table 7) | Controlled benchmark |
[实现未公开] — no public repository at time of writing.
The persistent scheduler is a single CUDA kernel that runs indefinitely, replacing the host CPU's role in the decode loop. Three aspects make replication non-trivial:
Blink's design exposes three hardware gaps in current CUDA/NIC architecture: