perf: tune cloud seeding and lower hot fill target
This commit is contained in:
@@ -71,13 +71,13 @@ run_seed() {
|
|||||||
echo "==> nostr-bench seed ${relay_url}"
|
echo "==> nostr-bench seed ${relay_url}"
|
||||||
"$bench_bin" seed --json \
|
"$bench_bin" seed --json \
|
||||||
--target-accepted "$target_accepted" \
|
--target-accepted "$target_accepted" \
|
||||||
-c "${PARRHESIA_BENCH_SEED_CONNECTION_COUNT:-5000}" \
|
-c "${PARRHESIA_BENCH_SEED_CONNECTION_COUNT:-512}" \
|
||||||
-r "${PARRHESIA_BENCH_SEED_CONNECTION_RATE:-5000}" \
|
-r "${PARRHESIA_BENCH_SEED_CONNECTION_RATE:-512}" \
|
||||||
-k "${PARRHESIA_BENCH_SEED_KEEPALIVE_SECONDS:-0}" \
|
-k "${PARRHESIA_BENCH_SEED_KEEPALIVE_SECONDS:-0}" \
|
||||||
-t "${bench_threads}" \
|
-t "${bench_threads}" \
|
||||||
--send-strategy "${PARRHESIA_BENCH_SEED_SEND_STRATEGY:-pipelined}" \
|
--send-strategy "${PARRHESIA_BENCH_SEED_SEND_STRATEGY:-pipelined}" \
|
||||||
--inflight "${PARRHESIA_BENCH_SEED_INFLIGHT:-32}" \
|
--inflight "${PARRHESIA_BENCH_SEED_INFLIGHT:-128}" \
|
||||||
--ack-timeout "${PARRHESIA_BENCH_SEED_ACK_TIMEOUT:-30}" \
|
--ack-timeout "${PARRHESIA_BENCH_SEED_ACK_TIMEOUT:-20}" \
|
||||||
"${relay_url}"
|
"${relay_url}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -40,14 +40,17 @@ const NOSTREAM_REDIS_IMAGE = "redis:7.0.5-alpine3.16";
|
|||||||
const SEED_TOLERANCE_RATIO = 0.01;
|
const SEED_TOLERANCE_RATIO = 0.01;
|
||||||
const SEED_MAX_ROUNDS = 4;
|
const SEED_MAX_ROUNDS = 4;
|
||||||
const SEED_KEEPALIVE_SECONDS = 0;
|
const SEED_KEEPALIVE_SECONDS = 0;
|
||||||
const SEED_CONNECTION_COUNT = 5000;
|
const SEED_EVENTS_PER_CONNECTION_TARGET = 500;
|
||||||
const SEED_CONNECTION_RATE = 5000;
|
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_SEND_STRATEGY = "pipelined";
|
||||||
const EVENT_INFLIGHT = 32;
|
const EVENT_INFLIGHT = 32;
|
||||||
const EVENT_ACK_TIMEOUT_SECONDS = 30;
|
const EVENT_ACK_TIMEOUT_SECONDS = 30;
|
||||||
const SEED_SEND_STRATEGY = "pipelined";
|
const SEED_SEND_STRATEGY = "pipelined";
|
||||||
const SEED_INFLIGHT = 32;
|
const SEED_INFLIGHT = 128;
|
||||||
const SEED_ACK_TIMEOUT_SECONDS = 30;
|
const SEED_ACK_TIMEOUT_SECONDS = 20;
|
||||||
const PHASE_PREP_OFFSET_MINUTES = 3;
|
const PHASE_PREP_OFFSET_MINUTES = 3;
|
||||||
|
|
||||||
const DEFAULTS = {
|
const DEFAULTS = {
|
||||||
@@ -72,7 +75,7 @@ const DEFAULTS = {
|
|||||||
monitoring: true,
|
monitoring: true,
|
||||||
yes: false,
|
yes: false,
|
||||||
warmEvents: 50000,
|
warmEvents: 50000,
|
||||||
hotEvents: 500000,
|
hotEvents: 250000,
|
||||||
bench: {
|
bench: {
|
||||||
connectCount: 50000,
|
connectCount: 50000,
|
||||||
connectRate: 10000,
|
connectRate: 10000,
|
||||||
@@ -990,6 +993,25 @@ function splitCountAcrossClients(total, clients) {
|
|||||||
return Array.from({ length: clients }, (_, i) => base + (i < remainder ? 1 : 0));
|
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) {
|
function extractSeedAccepted(parsed) {
|
||||||
const finalAccepted = Number(parsed?.seed_final?.accepted);
|
const finalAccepted = Number(parsed?.seed_final?.accepted);
|
||||||
if (Number.isFinite(finalAccepted) && finalAccepted >= 0) {
|
if (Number.isFinite(finalAccepted) && finalAccepted >= 0) {
|
||||||
@@ -1050,8 +1072,8 @@ async function runClientSeedingRound({
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const seedConnectionCount = SEED_CONNECTION_COUNT;
|
const { connectionCount: seedConnectionCount, connectionRate: seedConnectionRate } =
|
||||||
const seedConnectionRate = SEED_CONNECTION_RATE;
|
computeSeedConnectionPlan(desiredAccepted);
|
||||||
|
|
||||||
const seedEnvPrefix = [
|
const seedEnvPrefix = [
|
||||||
`PARRHESIA_BENCH_SEED_TARGET_ACCEPTED=${desiredAccepted}`,
|
`PARRHESIA_BENCH_SEED_TARGET_ACCEPTED=${desiredAccepted}`,
|
||||||
|
|||||||
Reference in New Issue
Block a user