Skip to content

tuberq/pressure-test

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

tuber-pressure-testing

Black-box load tests for tuber, a Rust rewrite of beanstalkd. Exercises the server through its wire protocol only — no dependency on tuber's source — so tests survive internal refactors and also smoke-test client libraries in each language.

Layout

ruby/          Ruby raw-TCP pressure scripts (first citizen)
python/        (planned)
go/            (planned)

Each language contains:

  • a minimal raw-TCP driver used by pressure scripts, kept deliberately thin so that throughput numbers measure the server, not the client library;
  • optional gem/package smoke tests that exercise the idiomatic client library for that language at modest volume, to catch binding bugs.

Ruby — quick start

cd ruby
bundle install          # currently no external gems; runs clean
bundle exec ruby bin/flood_puts.rb --count 100000 --tube pressure

See ruby/bin/ for the available scripts.

What we target

  • Throughput under high-volume put
  • Idempotency via idp: (dedup behavior, storage growth)
  • Group / after-group chains via grp: + aft: (dependency scheduling)
  • Concurrency keys via con: (serialization correctness)
  • Mixed producer + worker workloads (reserve / delete / release / bury / kick)
  • WAL behavior under sustained write load (when -b is enabled on the server)

Benchmark: fsync interval vs put throughput (M1 MacBook Pro)

1M puts, 8 threads, 64-byte body, flood_puts.rb:

fsync ops/sec p50 (ms) p95 (ms) p99 (ms) max (ms)
10s 39,428 0.188 0.285 0.436 135
1s 39,429 0.187 0.282 0.434 180
100ms 38,203 0.189 0.286 0.446 177
50ms 38,060 0.185 0.285 0.459 189
25ms 38,141 0.178 0.286 0.478 167
20ms 37,669 0.177 0.279 0.465 214
15ms 36,825 0.171 0.279 0.542 127
10ms 34,031 0.169 0.293 4.043 130

Takeaway: ≥25ms fsync has no measurable cost vs effectively-disabled (10s). At 10ms, p99 jumps ~8x as ops begin blocking on sync completion.

Non-goals

  • Correctness unit tests of tuber internals — those belong in the tuber repo.
  • Benchmarking tuber against other beanstalkd implementations. (Out of scope for now; the tooling could support it later.)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages