Skip to content

fix(bench): give sqs its own drain corpus instead of a 51-hour pass - #163

Merged
zannis merged 1 commit into
mainfrom
zannis/fix/deviate-sqs-drain-corpus
Sep 8, 2026
Merged

fix(bench): give sqs its own drain corpus instead of a 51-hour pass#163
zannis merged 1 commit into
mainfrom
zannis/fix/deviate-sqs-drain-corpus

Conversation

@zannis

@zannis zannis commented Sep 7, 2026

Copy link
Copy Markdown
Owner

Depends-on: none — this touches only scripts/bench.sh and benches/README.md. It changes no Rust, no committed results document and no committed SVG, so nothing gates it and no merge order with #162 misrenders an intermediate state.

The drain corpus is a message *count*, and six million was sized for the
fastest cell — in-process at ~4.7 M msg/s, where it buys a window of about a
second. SQS measures LocalStack at ~900 msg/s and fills at ~660, so the same
count buys a 1.7-hour window to measure what a minute measures, and the full
pass runs about 51 hours. One count means two different things on backends
three orders of magnitude apart.

SQS now drains 60 000, as `SQS_DRAIN_MESSAGES`, substituted into the matrix
for that target alone. Substituted rather than appended after `--`, because
the harness rejects a knob given twice — the runbook already says so.

Nothing that makes a drain row a rate changes at this size: the window runs
tens of seconds against chartgen's 1 s floor, the group assembles in the
first handful of messages, and `--drain-max-bytes` still binds the 64 KiB leg
at 49 152, so that leg is not deviated at all. Every other knob is shared, so
this is a per-backend corpus, not a second matrix.

The deviation is recorded where a reader will meet it rather than only in the
script: the script prints a `deviation:` line into the log, every drain row
already carries `drain.corpus`, and the charts name the backend whose corpus
differs.

Also replaces "about an hour per Docker backend" with the measured per-backend
rates. That budget was derived from the only two backends ever published, and
RabbitMQ at ~18 000 msg/s wants closer to two hours.
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
shove-docs 9b53491 Commit Preview URL

Branch Preview URL
Sep 07 2026, 09:22 PM

@codecov

codecov Bot commented Sep 7, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@zannis
zannis merged commit 7bf656c into main Sep 8, 2026
19 checks passed
zannis added a commit that referenced this pull request Sep 8, 2026
Measure SQS against LocalStack on the same host as the other published runs,
with both SQS deviations in place: the 60 000-message drain corpus from #163
and the 100-per-worker FIFO corpus from #173, plus the SNS byte-limit fix
from #171 so the 64 KiB batch publishes go through. 60 rows, no failures;
consumer_group and broadcast are recorded as unsupported, as the capability
traits say.

The document now holds every backend. The README and performance page say
so, and say what the SQS rows measure: LocalStack, at a recorded corpus, not
the AWS service.
zannis added a commit that referenced this pull request Sep 8, 2026
* bench(results): add the sqs run to the results document

Measure SQS against LocalStack on the same host as the other published runs,
with both SQS deviations in place: the 60 000-message drain corpus from #163
and the 100-per-worker FIFO corpus from #173, plus the SNS byte-limit fix
from #171 so the 64 KiB batch publishes go through. 60 rows, no failures;
consumer_group and broadcast are recorded as unsupported, as the capability
traits say.

The document now holds every backend. The README and performance page say
so, and say what the SQS rows measure: LocalStack, at a recorded corpus, not
the AWS service.

* test(chartgen): assert the grown canvas's plot minimum from the y axis, not the ticks

Tick labels stop short of the plot boundaries, so a tick span at 0.8 of the
minimum could pass an undersized plot. The y axis is a two-point vertical
polyline and bounds the plot body exactly; assert the full minimum from it.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant