MAServeBench: Benchmarking Multi-Agent LLM Serving Systems with Hierarchical Collaboration Workloads
Organizations: Peking University · Georgia Institute of Technology
Abstract
Large language model (LLM)-based multi-agent systems (MAS) coordinate specialized agents to solve complex tasks, turning each user request into interdependent model and tool operations. Unlike independent requests, these operations become ready at different times and consume evolving context as agents coordinate and exchange results. This creates changing patterns of concurrency, computation, and memory demand that can expose different bottlenecks in LLM serving hardware. Yet benchmarking these effects requires capturing the collaboration rules that generate serving workloads, beyond the requests observed during execution. We present MAServeBench, a benchmark that treats multi-agent collaboration as a configurable dimension of serving workloads for LLM serving and hardware evaluation. Its composable stages capture how agents coordinate and exchange context in documented MAS workflows, enabling native executions to generate different workloads even when task inputs and tools remain unchanged. Hierarchical Semantic Traces preserve realized operations and dependencies for reproducible comparisons of legal release constraints at fixed work. Task-linked measurements connect these workloads to serving execution and GPU/NPU hardware behavior, revealing why serving efficiency does not always translate into timely task completion. The benchmark code is available at https://github.com/ShengxuanQiu/MAServeBench.
Figures & tables
| Field Name | Data Type | Description |
|---|---|---|
| metadata | TraceMetadata | Version and identity |
| tasks | TaskRecord[] | End-to-end tasks |
| stages | StageInstance[] | Realized stages |
| sessions | AgentSession[] | Runtime participants |
| artifacts | ArtifactRecord[] | Delivered artifacts |
| shared_state | StateRecord[] | Versioned state |
| Field Name | Data Type | Description |
|---|---|---|
| operation_id | string | Unique operation ID |
| operation_type | enum(OpType) | LLM, tool, transform, state |
| task_id | string | Parent task |
| stage_instance_id | string | Parent stage instance |
| session_id | optional string | Parent agent/session |
| iteration | uint32 | Iteration index |
| Workflow | Templates / participants | Workflow | Templates / participants |
|---|---|---|---|
| MetaGPT startup Hong et al. (2024) | : Sequential Handoff Product Manager, Architect, Project Manager, Engineer | OWL Workforce CAMEL-AI (2025) | Spawn Planner, Coordinator, Workers |
| ChatDev Default Qian et al. (2024) | Refinement Loop Programmer, Code Reviewer, Software Test Engineer | TradingAgents Xiao et al. (2024) | Debate Bull and Bear Researchers, Risk Analysts |
| Magentic-One Fourney et al. (2024) | Spawn Orchestrator, Selected Workers | Virtual Lab Swanson et al. (2025) | Fork–Join, Debate Meeting Leads and Members, Merge Participants |
| MindSearch Chen et al. (2025) | Spawn Planner, Searcher | Claude Code PR review Anthropic (2026) | Fork–Join Lead, Security, Performance, Test Reviewers |
| GPT Researcher GPT Researcher Contributors (2026) | Fork–Join, Refinement Loop Editor, Researcher, Reviewer, Reviser, Writer | DeerFlow literature review ByteDance (2026) | Spawn, Fork–Join Lead, Extraction Subagents |
| Open Deep Research LangChain (2026) | Spawn, Fork–Join Supervisor, Researchers | Agyn issue resolution Benkovich and Valkov (2026) | Spawn, Refinement Loop Manager, Researcher, Engineer, Reviewer |
| Platform | Application workload | Matched operator |
|---|---|---|
| A800 | Qwen3.5-4B/9B/27B | Qwen3.5-9B projections |
| PRO 5000 | Qwen3.5-9B | Qwen3.5-9B projections |
| 910C | Qwen3.5-9B; Qwen3-8B | Matrix, normalization, gather; full attention |
| 950DT | Qwen3.5-9B captures | Matrix, normalization, gather; Qwen3-8B attention |
| GPU | ||
| Feature | A800 (Ampere) | PRO 5000 (Blackwell) |
| Architecture | GA100, sm_80 | GB202, sm_120 |
| BF16 matrix | 3rd-gen Tensor Cores | 5th-gen Tensor Cores |
| L2 cache | 40 MiB | 96 MiB |
| Memory | 80 GB HBM2e | 48 GB GDDR7 |
| Bandwidth | 2.04 TB/s | 1.34 TB/s |
Appendix figures & tables61 assets
Supplementary material from the paper’s appendix.
Appendix
| Structure | Operations | Model calls | Depth | Width |
|---|---|---|---|---|
| Spawn | 6 | 5 | 3 | 4 |
| Fork–join | 5 | 5 | 2 | 4 |
| Loop | 3 | 2 | 3 | 1 |
| Debate | 13 | 12 | 4 | 4 |
| C1 | 13 | 11 | 7 | 4 |
| C2 | 17 | 15 | 8 | 4 |
| Framework | Execution | Workflow / abstraction | Quality | LLM | Tools | Input (k) | Output (k) |
| SWE-bench Verified Resolved rate (%) | |||||||
| Agyn | Reference | Original issue-resolution team | 60.4% | 37 | 125 | 1,156 | 175 |
| MAServeBench | Spawn + Refinement Loop | 62.4% | 41 | 129 | 1,074 | 168 | |
| SWE-Debate | Reference | Localization, debate, and MCTS patch search | 55.6% | 52 | 146 | 1,066 | 167 |
| MAServeBench | Candidate generation + Debate + iterative search | 53.4% | 48 | 143 | 989 | 174 | |
| GAIA (dev) Answer accuracy (%) | |||||||
| Metric | Reference | MAServeBench | Paired difference | P90 (R/M) |
|---|---|---|---|---|
| Model calls | 30 [28, 30] | 30 [28, 30] | 0 [0, 0.2] | 30/30 |
| Retrieval calls | 4 [4, 4] | 4 [4, 4] | 0 [0, 0] | 4/4 |
| LLM required edges | 31 [29, 31] | 31 [29, 31] | 0 [0, 0.2] | 31/31 |
| LLM depth (calls) | 20 [18, 20] | 20 [18, 20] | 0 [0, 0.2] | 20/20 |
| LLM level width | 3 [3, 3] | 3 [3, 3] | 0 [0, 0] | 3/3 |
| LLM antichain width | 3 [3, 3] | 3 [3, 3] | 0 [0, 0] | 3/3 |
| Structure | Native | Replay | Median | Maximum |
|---|---|---|---|---|
| Composed | 2 | 4 | 0.118% | 0.172% |
| f&j | 1 | 2 | 0.136% | 0.145% |
| Loop | 2 | 4 | 0.471% | 0.797% |
| Earlier f&j | 1 | 2 | 0.577% | 0.658% |
| Protocol | Attempts | Eligible | Replays |
|---|---|---|---|
| Earlier thinking on | 2 | 1 | 2 |
| Continuation thinking off | 5 | 5 | 10 |
| Total | 7 | 6 | 12 |
| Case | Roots | Cache | Pairs | Median | Root range |
|---|---|---|---|---|---|
| FJ | 1 | Off | 3 | ||
| FJ | 1 | On | 3 | ||
| FJ | 16 | Off | 48 | ||
| FJ | 16 | On | 48 | ||
| FJR | 1 | Off | 3 | ||
| FJR | 1 | On | 3 |
| Workflow | Roots | Cache off | Cache on |
|---|---|---|---|
| FJ | 1 | 0.992 [0.987, 1.003] | 0.995 [0.986, 0.997] |
| FJ | 3 | 0.994 [0.993, 1.003] | 0.994 [0.989, 0.997] |
| FJR | 1 | 1.000 [0.991, 1.002] | 1.000 [0.993, 1.001] |
| FJR | 3 | 0.993 [0.991, 0.995] | 0.999 [0.990, 1.004] |
| Study | Model / platform | Users | Limit/shape |
|---|---|---|---|
| Demand (Fig. 3 ) | Qwen3-8B / 910C | 32/64/128 | 128 |
| Execution shapes (Fig. 5 ) | Qwen3-8B / 910C | 64 | 128 |
| Attention captures (Fig. 8 a) | Qwen3-8B / 910C | 64 | 64 |
| State pressure (Fig. 9 ) | Qwen3-8B / 910C | 64 | 128 |
| Stage/root (Fig. G.2 ) | Qwen3.5-9B / RTX PRO 5000 | 64 | 64 |
| NPU hybrid captures (Sec. 6.3 ) | Qwen3.5-9B / 910C and 950DT | 32 | 32 |
| Quantity | Scope and unit | Statistic |
|---|---|---|
| Arithmetic intensity | Qwen3-8B scheduler steps; FLOP/byte | for scheduled work and logical traffic; progress-bin duration weighting; aggregate |
| Allocated KV | Scheduler pool; GiB | Allocated blocks times block capacity; residency integrates occupancy over cohort wall time |
| Kernel-duration share | Native capture; percent | Duration sum of one mutually exclusive kernel family divided by all classified kernel duration in that capture |
| Projection time | Matched primitive; microseconds | CUDA events on GPUs; corresponding native Memory-pass ranges on NPUs |
| Physical DRAM reads | Counter pass; bytes per complete primitive | All constituent kernels summed per marked primitive, then median across complete samples; one BF16 weight normalizes the plotted reads |
| Stage and root latency | Unprofiled run; seconds | Within-binding means balanced across common task bindings; paired block ratios summarized by their median |
| Rate (roots/s) | Release | KV (GiB) | Goodput: med/min/max | Attainment: med/min/max |
|---|---|---|---|---|
| 0.00677316 | DAG | 16 | 0.008466/0.005927/0.010160 | 1.000/1.000/1.000 |
| 0.00677316 | DAG | 40 | 0.008466/0.005927/0.010160 | 1.000/1.000/1.000 |
| 0.00677316 | Barrier | 16 | 0.002540/0.002540/0.005080 | 0.429/0.300/0.500 |
| 0.00677316 | Barrier | 40 | 0.003387/0.002540/0.003387 | 0.400/0.333/0.429 |
| 0.01625559 | DAG | 16 | 0.018626/0.014393/0.021166 | 1.000/0.917/1.000 |
| 0.01625559 | DAG | 40 | 0.018626/0.014393/0.021166 | 1.000/0.917/1.000 |
| Release | KV (GiB) | Preemptions | Prefill factor | Root P95 (s) | Output TPS |
|---|---|---|---|---|---|
| DAG | 16 | 628/754/0 | 1.981 | 948.7 | 813.3 |
| DAG | 40 | 0/0/0 | 1.000 | 801.8 | 876.2 |
| Barrier | 16 | 480/590/0 | 1.748 | 1067.3 | 775.4 |
| Barrier | 40 | 0/0/0 | 1.000 | 999.6 | 800.5 |
| Context | Block | Mean root time | KV integral |
|---|---|---|---|
| Full | 1 | 1.266 | 0.953 |
| Full | 2 | 1.264 | 0.954 |
| Full | 3 | 1.257 | 0.957 |
| Selected | 1 | 1.280 | 0.958 |
| Selected | 2 | 1.283 | 0.957 |
| Selected | 3 | 1.281 | 0.951 |
| Control | Context | Input tokens | Root (s) | KV (GiB s) |
|---|---|---|---|---|
| Parallel | Full | 1275.4 | 11.318 | 11.522 |
| Serial | Full | 1286.8 | 14.431 | 11.644 |
| Parallel | Selected | 906.7 | 10.753 | 8.585 |
| Serial | Selected | 895.1 | 13.850 | 8.216 |
| Binding | Calls | Input (k) | Output (k) |
|---|---|---|---|
| Asyncio | 28/28 | 77.038/73.496 | 19.589/18.122 |
| cgroup v2 | 30/30 | 85.928/77.785 | 24.324/24.785 |
| HTTP cache | 25/30 | 68.495/87.922 | 16.154/23.131 |
| Binding | Calls | Refine- ments | Writing passes | Edges | Depth |
|---|---|---|---|---|---|
| Asyncio | 28/28 | 3/3 | 3/3 | 29/29 | 18/18 |
| cgroup v2 | 30/30 | 4/4 | 3/3 | 31/31 | 20/20 |
| HTTP cache | 25/30 | 3/4 | 2/3 | 26/31 | 15/20 |
| Family | Instances | MiB/weight | ||
|---|---|---|---|---|
| Auxiliary | 64 | 4096 | 24 | 0.5 |
| Output | 4096 | 4096 | 32 | 32 |
| Down | 4096 | 12288 | 32 | 96 |
| Attention input | 10240 | 4096 | 8 | 80 |
| Recurrent input | 12288 | 4096 | 24 | 96 |
| Gate/up | 24576 | 4096 | 32 | 192 |
| A800 | RTX PRO 5000 | ||
|---|---|---|---|
| 512 | 4096 | 90.83 | 121.85 |
| 512 | 24576 | 447.50 | 549.53 |
| Rows | 910C | 950DT | Ratio |
|---|---|---|---|
| 1 | 4.397 | 2.007 | 2.19 |
| 8 | 3.445 | 2.867 | 1.20 |
| 32 | 5.480 | 5.017 | 1.09 |
| Early | Late | Late | |||
|---|---|---|---|---|---|
| Workflow | Modal | Share | Modal | Share | |
| Serving | 64 | 100.0 | 24 | 92.5 | 0.0 |
| Spawn | 64 | 100.0 | 128 | 84.0 | 15.6 |
| Fork–Join | 128 | 100.0 | 128 | 66.9 | 32.7 |
| Loop | 64 | 100.0 | 64 | 100.0 | 0.0 |
| Debate | 128 | 100.0 | 128 | 89.9 | 9.8 |
| Family | Rows | Weights | A800 | RTX PRO | Ratio |
|---|---|---|---|---|---|
| Auxiliary | 1 | 1 | 6.696 | 2.964 | 2.259 |
| Auxiliary | 1 | 8 | 6.528 | 2.960 | 2.205 |
| Output | 1 | 1 | 23.312 | 13.089 | 1.781 |
| Output | 1 | 8 | 25.136 | 37.601 | 0.668 |
| Down | 1 | 1 | 67.032 | 37.980 | 1.765 |
| Down | 1 | 8 | 66.832 | 109.479 | 0.610 |
| Bytes | Layout | Template | Path | Time | Binary SHA |
|---|---|---|---|---|---|
| 64 | ordered | SIMD | SIMD | 24.608 | 377f67f79470 |
| 64 | ordered | Hybrid | SIMD | 24.660 | 377f67f79470 |
| 64 | ordered | SIMT | SIMT | 3.566 | 01a1d6e8b3e6 |
| 64 | permuted | SIMD | SIMD | 24.475 | 377f67f79470 |
| 64 | permuted | Hybrid | SIMD | 24.507 | 377f67f79470 |
| 64 | permuted | SIMT | SIMT | 3.724 | 01a1d6e8b3e6 |
| Workflow | Arm | Quantile | Full | Half | Ratio |
|---|---|---|---|---|---|
| Mixed | MAS | 0.25 | 551.8 | 288.0 | 1.92 |
| Mixed | MAS | 0.75 | 743.4 | 383.3 | 1.94 |
| Mixed | independent | 0.25 | 691.1 | 362.1 | 1.91 |
| Mixed | independent | 0.75 | 742.4 | 376.3 | 1.97 |
| f&j | MAS | 0.25 | 415.7 | 207.8 | 2.00 |
| f&j | MAS | 0.75 | 512.0 | 263.0 | 1.95 |
| Family | Rows | Weights | One weight | A800 reads | RTX PRO reads |
|---|---|---|---|---|---|
| Auxiliary | 1 | 1 | 0.500 | 0.000000 | 0.000000 |
| Auxiliary | 1 | 8 | 0.500 | 0.000000 | 0.000000 |
| Output | 1 | 1 | 32.000 | 25.621948 | 0.000000 |
| Output | 1 | 8 | 32.000 | 32.013550 | 31.997192 |
| Down | 1 | 1 | 96.000 | 96.031555 | 60.832153 |
| Down | 1 | 8 | 96.000 | 96.031921 | 96.000488 |
| Block | Preemptions | Victims | Processed prefill | Source input | Factor | Loop evictions | Loop factor |
|---|---|---|---|---|---|---|---|
| 0 | 470 | 186 | 1052422 | 571973 | 1.840 | 0 | 1.000 |
| 1 | 471 | 189 | 1025513 | 570441 | 1.798 | 0 | 1.000 |
| 2 | 431 | 180 | 1004811 | 571822 | 1.757 | 0 | 1.000 |
| Block | Budget | Actual | Preemptions | Factor | P95 |
|---|---|---|---|---|---|
| 1 | 16 | 15.996 | 887 | 2.523 | 1344.587 |
| 2 | 16 | 15.996 | 899 | 2.557 | 1347.172 |
| 3 | 16 | 15.996 | 900 | 2.478 | 1323.505 |
| 1 | 32 | 31.992 | 460 | 1.843 | 1141.455 |
| 2 | 32 | 31.992 | 511 | 1.933 | 1157.747 |
| 3 | 32 | 31.992 | 425 | 1.791 | 1130.362 |
| Block | Calls | Input | Output | A share | B share |
|---|---|---|---|---|---|
| 1 | 236 | 180,249 | 517,259 | 96.278% | 31.474% |
| 2 | 236 | 179,890 | 516,780 | 96.275% | 31.442% |
| 3 | 236 | 180,229 | 515,145 | 96.280% | 31.461% |
| Binding | Block | Call 1 (s) | Call 2 (s) | Root change |
|---|---|---|---|---|
| GSM8K | 1 | -24.027 | +31.264 | +2.169% |
| GSM8K | 2 | -21.461 | +32.747 | +3.439% |
| GSM8K | 3 | -23.953 | +28.384 | +1.351% |
| PubMedQA | 1 | -17.206 | +23.613 | +2.136% |
| PubMedQA | 2 | -14.452 | +24.905 | +3.525% |
| PubMedQA | 3 | -16.170 | +19.943 | +1.253% |
| Block | Background | Calls | Input tokens | Output tokens | Target mean | Target P95 |
|---|---|---|---|---|---|---|
| 1 | Loop only | 110 | 76,503 | 290,861 | 256.203 | 295.974 |
| 1 | Perturbed | 116 | 79,911 | 304,773 | 268.939 | 309.799 |
| 2 | Loop only | 110 | 76,144 | 290,382 | 257.026 | 296.631 |
| 2 | Perturbed | 116 | 79,552 | 304,294 | 268.380 | 308.671 |
| 3 | Loop only | 110 | 76,483 | 288,747 | 257.521 | 296.758 |
| 3 | Perturbed | 116 | 79,891 | 302,659 | 267.643 | 307.455 |
| Call | Input | Block 1 | Block 2 | Block 3 |
|---|---|---|---|---|
| 1 | 1 | 2.654 | 2.405 | 2.011 |
| 1 | 2 | 3.068 | 2.717 | 2.704 |
| 1 | 3 | 3.075 | 2.711 | 2.651 |
| 2 | 1 | 1.868 | 1.590 | 1.503 |
| 2 | 2 | 2.094 | 1.872 | 1.552 |
| 2 | 3 | 2.293 | 2.376 | 1.945 |
| Workflow | Root | Pre-submit | Residence |
|---|---|---|---|
| Loop | +129.48 | +118.49 | +11.21 |
| Sequence | -635.39 | -586.36 | -49.05 |
| Spawn–f&j–loop | -178.56 | -167.44 | -10.93 |
| f&j–debate–loop | -264.74 | -231.78 | -33.03 |
| Class | Separate runs | Roots/ run | Separate total | Mixed/ block | Mixed total | Audit total |
|---|---|---|---|---|---|---|
| Spawn | 3 | 64 | 192 | 10 | 30 | 222 |
| Fork–Join | 3 | 64 | 192 | 9 | 27 | 219 |
| Loop | 3 | 64 | 192 | 9 | 27 | 219 |
| Debate | 3 | 64 | 192 | 9 | 27 | 219 |
| C1 | 3 | 64 | 192 | 9 | 27 | 219 |
| C2 | 3 | 64 | 192 | 9 | 27 | 219 |
| Workflow | Stage | S0 | M0 | S1 | M1 | S2 | M2 |
|---|---|---|---|---|---|---|---|
| Spawn | S1 | 275.73 | 311.09 | 275.35 | 316.60 | 277.97 | 319.44 |
| Fork–Join | S1 | 272.41 | 252.68 | 270.12 | 256.39 | 269.67 | 274.15 |
| Loop | S1 | 154.64 | 276.15 | 153.14 | 292.11 | 154.54 | 282.51 |
| Debate | S1 | 593.07 | 428.92 | 591.09 | 419.20 | 590.47 | 437.42 |
| C1 | S1 | 302.02 | 341.09 | 302.86 | 312.72 | 305.40 | 298.56 |
| C1 | S2 | 412.10 | 211.89 | 411.93 | 221.74 | 409.25 | 235.69 |
| Block | Background | Target mean (s) | Background tokens |
|---|---|---|---|
| 1 | Same class | 254.946 | 367,364 |
| 1 | Heterogeneous | 451.322 | 1,808,641 |
| 2 | Same class | 256.105 | 366,526 |
| 2 | Heterogeneous | 411.475 | 1,798,945 |
| 3 | Same class | 257.084 | 365,230 |
| 3 | Heterogeneous | 491.703 | 1,838,309 |
| Block | A/B | Root (s) | Pre (ms) | Wait (ms) | Res (s) |
|---|---|---|---|---|---|
| 1 | 0.9975 | -0.657 | -0.005 | -6.73 | -0.651 |
| 2 | 1.0035 | +0.924 | -0.002 | -5.14 | +0.930 |
| 3 | 0.9920 | -2.124 | +0.042 | +9.33 | -2.134 |
LLM Agent Serving
Large language model agent serving runs tool-using, multi-step agents efficiently by coordinating inference, memory, and workflow execution.
See all 37 papers