From 8309a89ba771b821156bb546137cf9356447c61c Mon Sep 17 00:00:00 2001 From: Steffen Beyer Date: Fri, 20 Mar 2026 21:33:17 +0100 Subject: [PATCH] perf: tune cloud seeding and lower hot fill target --- scripts/cloud_bench_client.sh | 8 +++---- scripts/cloud_bench_orchestrate.mjs | 36 +++++++++++++++++++++++------ 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/scripts/cloud_bench_client.sh b/scripts/cloud_bench_client.sh index dfab2bf..6995c56 100755 --- a/scripts/cloud_bench_client.sh +++ b/scripts/cloud_bench_client.sh @@ -71,13 +71,13 @@ run_seed() { echo "==> nostr-bench seed ${relay_url}" "$bench_bin" seed --json \ --target-accepted "$target_accepted" \ - -c "${PARRHESIA_BENCH_SEED_CONNECTION_COUNT:-5000}" \ - -r "${PARRHESIA_BENCH_SEED_CONNECTION_RATE:-5000}" \ + -c "${PARRHESIA_BENCH_SEED_CONNECTION_COUNT:-512}" \ + -r "${PARRHESIA_BENCH_SEED_CONNECTION_RATE:-512}" \ -k "${PARRHESIA_BENCH_SEED_KEEPALIVE_SECONDS:-0}" \ -t "${bench_threads}" \ --send-strategy "${PARRHESIA_BENCH_SEED_SEND_STRATEGY:-pipelined}" \ - --inflight "${PARRHESIA_BENCH_SEED_INFLIGHT:-32}" \ - --ack-timeout "${PARRHESIA_BENCH_SEED_ACK_TIMEOUT:-30}" \ + --inflight "${PARRHESIA_BENCH_SEED_INFLIGHT:-128}" \ + --ack-timeout "${PARRHESIA_BENCH_SEED_ACK_TIMEOUT:-20}" \ "${relay_url}" } diff --git a/scripts/cloud_bench_orchestrate.mjs b/scripts/cloud_bench_orchestrate.mjs index 932ac13..9194811 100755 --- a/scripts/cloud_bench_orchestrate.mjs +++ b/scripts/cloud_bench_orchestrate.mjs @@ -40,14 +40,17 @@ const NOSTREAM_REDIS_IMAGE = "redis:7.0.5-alpine3.16"; const SEED_TOLERANCE_RATIO = 0.01; const SEED_MAX_ROUNDS = 4; const SEED_KEEPALIVE_SECONDS = 0; -const SEED_CONNECTION_COUNT = 5000; -const SEED_CONNECTION_RATE = 5000; +const SEED_EVENTS_PER_CONNECTION_TARGET = 500; +const SEED_CONNECTIONS_MIN = 64; +const SEED_CONNECTIONS_MAX = 5000; // set to 0 for no cap +const SEED_CONNECTION_RATE_MIN = 64; +const SEED_CONNECTION_RATE_MAX = 5000; // set to 0 for no cap const EVENT_SEND_STRATEGY = "pipelined"; const EVENT_INFLIGHT = 32; const EVENT_ACK_TIMEOUT_SECONDS = 30; const SEED_SEND_STRATEGY = "pipelined"; -const SEED_INFLIGHT = 32; -const SEED_ACK_TIMEOUT_SECONDS = 30; +const SEED_INFLIGHT = 128; +const SEED_ACK_TIMEOUT_SECONDS = 20; const PHASE_PREP_OFFSET_MINUTES = 3; const DEFAULTS = { @@ -72,7 +75,7 @@ const DEFAULTS = { monitoring: true, yes: false, warmEvents: 50000, - hotEvents: 500000, + hotEvents: 250000, bench: { connectCount: 50000, connectRate: 10000, @@ -990,6 +993,25 @@ function splitCountAcrossClients(total, clients) { return Array.from({ length: clients }, (_, i) => base + (i < remainder ? 1 : 0)); } +function computeSeedConnectionPlan(desiredAccepted) { + const desired = Math.max(1, Number(desiredAccepted) || 1); + + let connectionCount = Math.max( + SEED_CONNECTIONS_MIN, + Math.ceil(desired / SEED_EVENTS_PER_CONNECTION_TARGET), + ); + if (SEED_CONNECTIONS_MAX > 0) { + connectionCount = Math.min(SEED_CONNECTIONS_MAX, connectionCount); + } + + let connectionRate = Math.max(SEED_CONNECTION_RATE_MIN, connectionCount); + if (SEED_CONNECTION_RATE_MAX > 0) { + connectionRate = Math.min(SEED_CONNECTION_RATE_MAX, connectionRate); + } + + return { connectionCount, connectionRate }; +} + function extractSeedAccepted(parsed) { const finalAccepted = Number(parsed?.seed_final?.accepted); if (Number.isFinite(finalAccepted) && finalAccepted >= 0) { @@ -1050,8 +1072,8 @@ async function runClientSeedingRound({ }; } - const seedConnectionCount = SEED_CONNECTION_COUNT; - const seedConnectionRate = SEED_CONNECTION_RATE; + const { connectionCount: seedConnectionCount, connectionRate: seedConnectionRate } = + computeSeedConnectionPlan(desiredAccepted); const seedEnvPrefix = [ `PARRHESIA_BENCH_SEED_TARGET_ACCEPTED=${desiredAccepted}`,