Devshard Load Testing #1685
aikuznetsov
started this conversation in
Protocol Improvements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Scope: define a repeatable path for load testing Devshards locally and on
TestNet, using the existing testenv, TestNet harness, gateway, escrow tooling,
and observability surfaces.
This is intentionally a proposal, not a full runbook. The detailed command
reference should live near the tools it documents.
TL;DR
Add a concurrent load mode to
test-net-cloud/devshard-testing.Use it in three layers:
The first useful version should answer:
settlement failures, or long-lived backlog;
Why This Needs Structure
The current pieces already exist, but they serve different purposes:
settlement against a real chain;
DEVSHARDS_JSON;The missing piece is not another one-off script. It is a reusable runner that
can apply the same request profiles across local and TestNet environments and
write comparable summary artifacts.
Existing Building Blocks
devshard/testenvdevshard/testenv/scripts/lease-race-load.shdevshard/testenv/scripts/lease-race-monitor.shtest-net-cloud/devshard-testingdeploy/join/config.devshard.env.templateDEVSHARDS_JSONdocs/observability/observability-overview.mdProposed Test Layers
flowchart TD L1["Layer 1: local testenv<br/>mock-chain + mock-dapi + mock-openai + versiond/devshardd<br/><b>Purpose:</b> cheap correctness and pressure rehearsal"] L2["Layer 2: TestNet harness<br/>real chain escrows + devshardctl/gateway + real participants<br/><b>Purpose:</b> controlled real-chain load and settlement validation"] L3["Layer 3: TestNet soak<br/>multi-devshard gateway + longer duration + observability review<br/><b>Purpose:</b> stability, drift, validation backlog, host degradation"] L1 --> L2 --> L3devshard/testenvProposed Runner
Extend the existing harness instead of adding a second load tool:
Keep the current sequential behavior as the default smoke mode.
Minimum new controls:
--gateway-url--concurrency--rps--duration--requests--stream-ratio--prompt-tokens--max-tokens--summary-file--latency-file--settle-at-endScheduler behavior:
Nescrows.--durationor--requestsis reached.max_noncebudget.Output Artifacts
Each run should produce enough data to compare local, TestNet, and soak runs
without digging through logs first.
load-summary.jsonshould include:latencies.csvshould include one row per request with timestamps, latency,model, streaming mode, HTTP status, bounded error category, selected devshard,
prompt target, and output cap.
Standard Profiles
These profiles are starting points. Exact SLOs should be model-specific.
count=3,requests=30,concurrency=3, short promptscount=8,duration=15m,concurrency=32, short promptsprompt-tokens=45000,concurrency=10stream-ratio=0.5, mixed promptscount=16,duration=3h,concurrency=16,rps=4TestNet Devshard Version Rollout
Load testing a new DevShard build on TestNet should normally be a devshard-only
rollout, not a full TestNet redeploy.
Relevant docs:
devshard/docs/upgrade.md,devshard/docs/rolling-update.md,proposals/versioned/README.md,and
test-net-cloud/nebius/README.md.Rollout path:
Pick the route name and binary build ID.
approved_versions.name, for examplev5.v4, and change onlybinaryandsha256.Build the artifact:
Publish
devshardd.zipat a URL reachable by TestNetversiond.Submit a governance proposal that preserves current params and updates only
devshard_escrow_params.approved_versions.Wait for DAPI
/versionsto expose the approved version.Verify
versionddownloaded, verified, and started the binary.Run the smoke profile against
/devshard/<name>.Move to baseline and soak only after smoke passes.
Avoid using
deploy-test-net-cloud.ymlfor this path. That workflow is a broader cloud redeploy path and is not the
right primitive for a devshard runtime update.
Local Workflow
Local runs should be cheap and deterministic:
devshard/testenvwith the generated compose stack and observability.test-net-cloud/devshard-testing.--mode loadagainst--gateway-url http://localhost:8081.lease-race-monitor.shafter the run to assert lease uniqueness.The detailed local command reference should stay in
devshard/testenv/README.mdor the harness README, not in this proposal.
TestNet Workflow
Preflight:
devshard_escrow_params.devshard_requests_enabled=true.max_nonceis sufficient for the planned run.Example shape: run
--mode loadagainst TestNet gRPC/REST endpoints, target/devshard/<name>, usecount=8,duration=15m,concurrency=32, and writeboth JSON summary and CSV latency samples.
Post-run:
config, and TestNet height range.
Metrics To Watch
Start with a short metrics list in the proposal. Keep the full dashboard query
reference in a separate runbook.
devshard_requests_enabled,max_nonce,validation_rate, gateway status, memory, pprof captures during soakAcceptance Criteria
The first implementation is accepted when:
test-net-cloud/devshard-testingsupports--mode load;prompt profiles, and output files;
http://localhost:8081;max_nonce;committed.
Documentation Split
Keep this GitHub discussion under roughly 300 lines and move detailed material
to tool-local docs:
test-net-cloud/devshard-testing/README.mddevshard/testenv/README.mddevshard/docs/testnet-devshard-rollout.mddocs/observability/...Open Questions
harness spawn a temporary one?
validation drain time?
existing Compressa prompt files?
TestNet?
All reactions