Benchmark Results

Local Benchmark Comparison

Detailed local-provider benchmark tables with a short interpretation layer up front.

What this page shows

This page keeps the detailed local benchmark tables, but the high-level story is simple:

  • local Trypema is built for very high in-process throughput
  • hot-key enforcement is still fast, but broad-key workloads show the full upside of local state
  • absolute and suppressed both stay in the same performance tier, with the exact winner depending on workload shape

Use this page when you want the exact tables, not just the takeaway.

Result tables

Hot key (enforced limit)

Workload:

  • --key-dist hot --rate-limit-per-s 1000
  • --key-dist hot: always uses a single key (user_0); key_space is ignored (effectively 1 key).
Backendops/sp50 (us)p95 (us)p99 (us)p99.9 (us)max (us)allowedrejectedsuppressed_allowedsuppressed_deniederrors
burster (SlidingWindowLog, absolute)387,81982044429256,98330,00011,606,906000
governor (GCRA, absolute)3,883,509152512015,68740,000116,484,081000
trypema (local + absolute)3,488,403153313219,15130,014104,631,741000
trypema (local + suppressed)3,650,5741397489,27930,76505,003109,485,6490

Uniform keys (100k keys, effectively unlimited)

Workload:

  • --key-dist uniform --key-space 100000 --rate-limit-per-s 1000000000
  • --key-dist uniform: picks a key uniformly at random from key_space keys (user_0..user_{key_space-1}).
Backendops/sp50 (us)p95 (us)p99 (us)p99.9 (us)max (us)allowedrejectedsuppressed_allowedsuppressed_deniederrors
burster (SlidingWindowLog, absolute)66,825659231,5274,60796,2552,009,6810000
governor (GCRA, absolute)6,280,022111113,295188,583,9230000
trypema (local + absolute)9,641,27611221510,023289,569,2270000
trypema (local + suppressed)7,609,67712421376,287228,537,4500000

For more comprehensive uniform key results across varying key spaces and rate limits, see Local uniform keys (matrix) below.

More detailed stress results

The remaining tables are copied from stress-harness runs. Units:

  • Throughput: ops_per_s (ops/sec)
  • Latency: lat_us in microseconds (sampled every sample_every=100 ops)

key_dist controls whether the workload concentrates on one key or spreads across many.

TargetBackendModeThreadsDuration (s)Key distKey spaceOffered loadops/sp50 (us)p95 (us)p99 (us)p99.9 (us)max (us)allowedrejectedsuppressed_deniederrors
make stress-local-hottrypema (local + absolute)max1630hot100000max3,581,224153010724,23930,014107,419,45500
make stress-local-uniformtrypema (local + absolute)max1660uniform100000max8,354,3041151451,470501,590,138000
make stress-local-bursttrypema (local + suppressed)target-qps16120skewed100000target=20k, burst=200k683,74016234849,03116,625,173065,450,3860

Local uniform keys (matrix)

These runs come from make stress-local-uniform-matrix (stress harness) and vary key_space and rate_limit_per_s while keeping the rest fixed:

  • --threads 16 --duration-s 30 --window-s 10 --group-ms 10 --mode max --key-dist uniform

The harness prints results in run groups of four (one per limiter variant). To keep it readable, the matrix is split by (key_space, rate_limit_per_s).

key_space=10, rate_limit_per_s=1

Limiterops/sp99 (us)p99.9 (us)max (us)allowedrejectedsuppressed_allowedsuppressed_deniederrors
burster (absolute)1,462,8211011972,05730043,891,804000
governor (absolute)11,539,2821122,671400346,240,036000
trypema (local + absolute)11,444,1621119,039309343,337,760000
trypema (local + suppressed)9,693,2841326,6711,020044290,851,9870

key_space=10, rate_limit_per_s=10

Limiterops/sp99 (us)p99.9 (us)max (us)allowedrejectedsuppressed_allowedsuppressed_deniederrors
burster (absolute)1,489,69710222012,3113,00044,699,153000
governor (absolute)11,565,9901117,0074,000347,044,913000
trypema (local + absolute)11,509,8561116,1753,004345,350,593000
trypema (local + suppressed)8,850,8851927,0233,9520495265,534,7120

key_space=10, rate_limit_per_s=100

Limiterops/sp99 (us)p99.9 (us)max (us)allowedrejectedsuppressed_allowedsuppressed_deniederrors
burster (absolute)1,491,9441002071,72930,00044,743,976000
governor (absolute)11,404,4191123,51940,000342,157,543000
trypema (local + absolute)11,387,0561220,12730,011341,646,817000
trypema (local + suppressed)8,996,5261824,68738,95304,996269,873,7510

key_space=10, rate_limit_per_s=10,000

Limiterops/sp99 (us)p99.9 (us)max (us)allowedrejectedsuppressed_allowedsuppressed_deniederrors
burster (absolute)1,478,0591012142,8973,000,00041,352,200000
governor (absolute)11,374,1291115,2874,000,010337,289,423000
trypema (local + absolute)11,496,4261130,0793,000,012341,955,743000
trypema (local + suppressed)8,639,02611022,8633,000,893087,211256,119,5750

key_space=10, rate_limit_per_s=100,000

Limiterops/sp99 (us)p99.9 (us)max (us)allowedrejectedsuppressed_allowedsuppressed_deniederrors
burster (absolute)1,461,87010019298130,000,00013,867,219000
governor (absolute)11,230,7051123,07140,000,075296,935,126000
trypema (local + absolute)11,122,1161323,35930,000,013303,687,477000
trypema (local + suppressed)8,639,49911035,29530,000,7930547,347228,677,4710

key_space=1,000, rate_limit_per_s=1

Limiterops/sp99 (us)p99.9 (us)max (us)allowedrejectedsuppressed_allowedsuppressed_deniederrors
burster (absolute)1,469,712731,19914,58330,00744,074,915000
governor (absolute)6,261,2211120,46339,220187,830,595000
trypema (local + absolute)6,510,1311113,59130,007195,310,397000
trypema (local + suppressed)6,254,48415216,86334,58303,999187,616,5420

key_space=1,000, rate_limit_per_s=10

Limiterops/sp99 (us)p99.9 (us)max (us)allowedrejectedsuppressed_allowedsuppressed_deniederrors
burster (absolute)1,480,674711,13319,935300,00844,132,533000
governor (absolute)11,380,1361121,519399,199341,077,110000
trypema (local + absolute)11,923,1621120,719300,013357,471,864000
trypema (local + suppressed)9,637,79012611,999319,895049,000288,779,4830

key_space=1,000, rate_limit_per_s=100

Limiterops/sp99 (us)p99.9 (us)max (us)allowedrejectedsuppressed_allowedsuppressed_deniederrors
burster (absolute)1,456,029811,15916,6393,000,00840,695,894000
governor (absolute)6,259,9111114,3113,999,244183,826,239000
trypema (local + absolute)11,931,0781124,8953,000,019355,000,796000
trypema (local + suppressed)6,269,13416911,0952,999,759062,035185,026,2360

key_space=1,000, rate_limit_per_s=10,000

Limiterops/sp99 (us)p99.9 (us)max (us)allowedrejectedsuppressed_allowedsuppressed_deniederrors
burster (absolute)1,520,512711,06616,34345,631,2490000
governor (absolute)6,258,4291110,087187,771,8340000
trypema (local + absolute)11,175,8041111,743300,000,01835,324,813000
trypema (local + suppressed)10,165,15311315,063213,629,662089,715,6971,671,0190

key_space=1,000, rate_limit_per_s=100,000

Limiterops/sp99 (us)p99.9 (us)max (us)allowedrejectedsuppressed_allowedsuppressed_deniederrors
burster (absolute)1,436,225731,16731,67943,094,6500000
governor (absolute)6,306,8211119,023189,232,2990000
trypema (local + absolute)6,411,4871621,119192,376,6620000
trypema (local + suppressed)10,078,77411314,207302,399,6960000

key_space=10,000, rate_limit_per_s=1

Limiterops/sp99 (us)p99.9 (us)max (us)allowedrejectedsuppressed_allowedsuppressed_deniederrors
burster (absolute)1,000,018342,10919,903300,02029,714,952000
governor (absolute)11,508,7731134,879390,007344,961,238000
trypema (local + absolute)11,832,5811121,375300,020354,794,617000
trypema (local + suppressed)8,984,41522248,295277,835039,903269,296,7890

key_space=10,000, rate_limit_per_s=10

Limiterops/sp99 (us)p99.9 (us)max (us)allowedrejectedsuppressed_allowedsuppressed_deniederrors
burster (absolute)992,127362,10723,3273,000,01926,775,548000
governor (absolute)6,362,2681124,1913,990,008186,927,711000
trypema (local + absolute)6,509,8601126,1913,000,026192,360,589000
trypema (local + suppressed)8,689,74122063,5052,973,493083,118257,693,3510

key_space=10,000, rate_limit_per_s=100

Limiterops/sp99 (us)p99.9 (us)max (us)allowedrejectedsuppressed_allowedsuppressed_deniederrors
burster (absolute)997,518331,90217,29528,348,4471,588,838000
governor (absolute)11,452,8471130,17539,989,991303,689,537000
trypema (local + absolute)11,784,1031123,83930,000,028323,564,650000
trypema (local + suppressed)8,786,16622588,37529,970,0360563,427233,103,3670

key_space=10,000, rate_limit_per_s=10,000

Limiterops/sp99 (us)p99.9 (us)max (us)allowedrejectedsuppressed_allowedsuppressed_deniederrors
burster (absolute)1,053,736232,04436,19131,621,6720000
governor (absolute)11,319,0921110,527339,629,1090000
trypema (local + absolute)11,152,9811128,391334,715,7390000
trypema (local + suppressed)9,949,94812069,703298,589,7480000

key_space=10,000, rate_limit_per_s=100,000

Limiterops/sp99 (us)p99.9 (us)max (us)allowedrejectedsuppressed_allowedsuppressed_deniederrors
burster (absolute)997,546362,36922,35129,935,8250000
governor (absolute)11,123,1701123,775333,740,8320000
trypema (local + absolute)10,987,3231179,591329,685,2810000
trypema (local + suppressed)9,600,00912176,875288,083,5370000