Skip to main content

Stress tests

Kevlar and Polly v8 run the same composed timeout, retry, and circuit-breaker workload under sustained parallel load. Alternating measurement rounds run in a single process, so they use the same GitHub runner while balancing early- and late-run conditions.

Last updated 2026-08-21 23:14 UTC (commit ab37156).

note

Shared CI runners vary. Treat one run as a sustained-load health check, not a universal capacity claim. Compare ratios and allocation behavior, then measure your own workload.

Latest result

LibraryThroughputOperationsAllocatedAllocated/opManaged heap (before / after)GC collections (0 / 1 / 2)
Kevlar3.52M ops/s1.58B8.66 KiB0.00 B225.32 KiB / 266.00 KiB0 / 0 / 0
Polly2.79M ops/s1.26B56.13 GiB48.00 B217.98 KiB / 8.90 MiB3610 / 44 / 4

Kevlar completed 1.26× as many operations per second as Polly in this run.

Method

  • 4 parallel workers; 15 minutes total measured time, split equally between libraries across 4 alternating rounds.
  • Each pipeline warmed for 2 seconds before measurement.
  • Each operation returns 42 successfully through Timeout(10 s) → Retry(3, no delay) → CircuitBreaker(10% over 30 s, min 100, break 5 s).
  • Process-wide allocation counters include all worker threads. GC counts are captured separately for each phase.
  • Peak working set for the shared process: 69.04 MiB.

Environment

  • Ubuntu 24.04.4 LTS
  • .NET 10.0.11
  • 4 logical processors visible to .NET

Reproduce

dotnet run -c Release --project benchmarks/Kevlar.StressTests -- --duration 00:15:00

Use --workers, --warmup, and --output to override the defaults. The stress workflow runs weekly and republishes this page.