Gatling Benchmarks

Benchmark: Anthropic LLM models under load

How Claude models actually behave under real streaming load generated with Gatling.

Takeaway

Speed and price don't move together

The clearest signal in this benchmark isn't which model is fastest. It's that a premium-tier model can cost several times more per request without being proportionally faster. That gap only shows up under real load, not on a pricing page, which is the whole point of testing it directly instead of assuming it.

All results at a glance

Performance by prompt size

Lower total time is better. Every model was sent the exact same three prompts (short, medium, long) under identical load conditions.

ModelPrompt sizeInput tokensOutput tokensTTFTTotal timeCost / request
Claude Haiku 4.5Short14212635 ms2,642 ms$0.0011
Claude Opus 4.8Short143861,068 ms6,226 ms$0.0097
Claude Sonnet 5Short143861,800 ms6,428 ms$0.0039
Claude Haiku 4.5Medium68–882,404644 ms17,836 ms$0.0121
Claude Opus 4.8Medium68–881,4051,162 ms21,054 ms$0.0356
Claude Sonnet 5Medium68–881,7991,068 ms21,388 ms$0.0182
Claude Haiku 4.5Long315–4372,8942,100 ms32,484 ms$0.0148
Claude Opus 4.8Long315–4372,6901,116 ms45,508 ms$0.0694
Claude Sonnet 5Long315–4373,6271,104 ms45,881 ms$0.0371
Short prompts · ~14 input tokens

Speed under load: short prompts

Higher tokens/sec is better. A simple one-line question, sent under identical concurrent load to every model.

Claude Haiku 4.5 leads at 80.7 tokens/sec on short prompts, 29% faster than Opus 4.8.
Claude Haiku 4.5Claude Sonnet 5Claude Opus 4.8

Tokens generated per second, short prompts, under concurrent load.

Medium prompts · ~80 input tokens

Speed under load: medium prompts

A multi-part technical question requiring a structured answer.

Claude Haiku 4.5 more than doubles its throughput on medium prompts, reaching 133.6 tokens/sec.
Claude Haiku 4.5Claude Sonnet 5Claude Opus 4.8

Tokens generated per second, medium prompts, under concurrent load.

Long prompts · ~400 input tokens

Speed under load: long prompts

A multi-paragraph diagnostic scenario, the kind of prompt a real production troubleshooting assistant would receive.

Claude Haiku 4.5 stays fastest even at long context length, at 88.4 tokens/sec.
Claude Haiku 4.5Claude Sonnet 5Claude Opus 4.8

Tokens generated per second, long prompts, under concurrent load.

Cost under load

Speed and cost don't scale together

Lower is better. Real cost per request, long prompts: the widest gap in the whole benchmark.

Opus 4.8 costs 4.7× more per request than Haiku 4.5 on long prompts, for a model that's only 1.5× slower under this load.
Claude Haiku 4.5Claude Sonnet 5Claude Opus 4.8

Real $ cost per request (input + output), long prompts.

The verdict

Ranking, by prompt size

Based on this load benchmark only. Response quality is a separate discipline and isn't measured here.

Prompt sizeMost cost-efficientFastest under load
Short promptClaude Haiku 4.5: $0.0011/reqClaude Haiku 4.5: 80.7 tok/s
Medium promptClaude Haiku 4.5: $0.0121/reqClaude Haiku 4.5: 133.6 tok/s
Long promptClaude Haiku 4.5: $0.0148/reqClaude Haiku 4.5: 88.4 tok/s

Claude Haiku 4.5 wins both categories at every prompt size in this benchmark, a real result, not a rounding artifact. Claude Sonnet 5 and Claude Opus 4.8 trade places behind it depending on prompt size (see the full breakdown table above).

Open methodology

How we benchmark

Every request went through Gatling's own SSE streaming client against Anthropic's live API, the same tool you'd use to load test your own AI feature, not a synthetic timer.

3
Models compared
3
Prompt sizes tested
10
Concurrent virtual users per model
180
Total requests

Each model received the exact same three prompts: short (~14 tokens), medium (~80 tokens), and long (~400 tokens), under an open workload model with 10 concurrent virtual users per model, each sending 6 requests in sequence, real streaming SSE connections, and no mocking. Time to first token and total generation time are captured separately, per the same distinction that makes AI load testing mechanically different from testing a traditional API: response time is not fixed, it's a function of how much the model decides to generate.

  • 20 requests per model per prompt size (180 total), enough to treat percentile figures as meaningful rather than purely directional, though a larger run would still tighten the tails further.
  • Every request's stop reason was captured and verified. No refusals, truncations, or anomalies are hidden in the numbers above.

Your all-in-one load testing platform

Design complex tests, manage global infrastructure, and turn results into action on one powerful platform.

Need technical references and tutorials?

Minimal features, for local use only