diff --git a/scripts/Lite_protocol_scripts/store/Store_multinodes.sh b/scripts/Lite_protocol_scripts/store/Store_multinodes.sh deleted file mode 100644 index ce65c241..00000000 --- a/scripts/Lite_protocol_scripts/store/Store_multinodes.sh +++ /dev/null @@ -1,87 +0,0 @@ -#!/bin/bash -set -e -# Stress Store with multiple Store nodes while running phased LPT publishers/receivers. - -STORE_NODES="/ip4/10.2.0.101/tcp/60001/p2p/16Uiu2HAkyte8uj451tGkbww4Mjcg6DRnmAHxNeWyF4zp23RbpG3n,/ip4/10.2.0.102/tcp/60001/p2p/16Uiu2HA7abcDEF451tGkbzz4Mjcg6DRnmAHxNeWyF4zp23RbpXYZ2,/ip4/10.2.0.103/tcp/60001/p2p/16Uiu2HA9LMNoPQ451tGkbww4Mjcg6DRnmAHxNeWyF4zp23Rbppppp" -RELAY_NODE_REST_ADDRESS="http://127.0.0.1:8645" -STORE_NODE_REST_ADDRESS="http://127.0.0.1:8644" -PUBSUB_TOPIC="/waku/2/default-waku/proto" -CONTENT_TOPIC="/sonda/2/polls/proto" -PHASE_SLEEP=300 - -echo "Running test..." -current_time=$(date +"%Y-%m-%d %H:%M:%S") -echo "Bringing up simulator at $current_time" - -cd ./waku-simulator -export SERVICENODE_CPU_CORES=0 -export POSTGRES_CPU_CORES=1-3 -export GF_SECURITY_ADMIN_USER=admin -export GF_SECURITY_ADMIN_PASSWORD=admin -docker compose up -d -while [ "$(docker inspect --format "{{.State.Status}}" $(docker compose ps -q servicenode))" != "running" ]; do - sleep 1 -done -cd .. - -cd ./sonda -docker build -t local-perf-sonda -f ./Dockerfile.sonda . -cat > ./perf-test.env </dev/null || true)" + [[ "$state" == "running" ]] && break + fi + sleep 1 +done + +cd ../lpt + +# -------------------- LPT common knobs (same exports) ------------------------- +export LPT_IMAGE=harbor.status.im/wakuorg/liteprotocoltester:latest +export START_PUBLISHING_AFTER=15 +export NUM_MESSAGES=0 +export MESSAGE_INTERVAL_MILLIS=100 + +export MIN_MESSAGE_SIZE=120Kb +export MAX_MESSAGE_SIZE=145Kb + +export LIGHTPUSH_SERVICE_PEER=/ip4/10.2.0.101/tcp/60001/p2p/16Uiu2HAkyte8uj451tGkbww4Mjcg6DRnmAHxNeWyF4zp23RbpG3n +export FILTER_SERVICE_PEER=/ip4/10.2.0.101/tcp/60001/p2p/16Uiu2HAkyte8uj451tGkbww4Mjcg6DRnmAHxNeWyF4zp23RbpG3n + +export PUBSUB=/waku/2/rs/66/0 +export CONTENT_TOPIC=/tester/2/light-pubsub-test/wakusim +export CLUSTER_ID=66 + +# wait time before starting traffic +sleep 60 + +# Start LPT for Phase 1 will happen after Sonda is up + +# -------------------- Sonda (Store monitor) ----------------------------------- +cd ../sonda + +docker build -t local-perf-sonda -f ./Dockerfile.sonda . + +# perf-test.env (same style as scenario_1.sh) +cat < perf-test.env +RELAY_NODE_REST_ADDRESS=http://127.0.0.1:8645 +STORE_NODE_REST_ADDRESS=http://127.0.0.1:8644 +QUERY_DELAY=0.5 +STORE_NODES=/ip4/10.2.0.101/tcp/60001/p2p/16Uiu2HAkyte8uj451tGkbww4Mjcg6DRnmAHxNeWyF4zp23RbpG3n +CLUSTER_ID=66 +SHARD=0 +EOF + +sleep 5 + +docker rm -f sonda >/dev/null 2>&1 || true +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda + +cd ../lpt + +# -------------------- Phase 1: 6 pub / 6 recv -------------------------------- +export NUM_PUBLISHER_NODES=6 +export NUM_RECEIVER_NODES=6 +docker compose down -v >/dev/null 2>&1 || true +docker compose up -d + +current_time=$(date +"%Y-%m-%d %H:%M:%S") +echo "[store_scenario1] LPT is running with 6 publishers and 6 receivers + sonda from now: $current_time" + +sleep 120 + +# -------------------- Phase 2: 3 pub / 12 recv ------------------------------- +docker compose down -v +export NUM_PUBLISHER_NODES=3 +export NUM_RECEIVER_NODES=12 +docker compose up -d + +current_time=$(date +"%Y-%m-%d %H:%M:%S") +echo "[store_scenario1] LPT is running with 3 publishers and 12 receivers from now: $current_time" + +sleep 120 + +# -------------------- Phase 3: 12 pub / 3 recv ------------------------------- +docker compose down -v +export NUM_PUBLISHER_NODES=12 +export NUM_RECEIVER_NODES=3 +docker compose up -d + +current_time=$(date +"%Y-%m-%d %H:%M:%S") +echo "[store_scenario1] LPT is running with 12 publishers and 3 receivers from now: $current_time" + +sleep 120 + +# -------------------- Phase 4: receivers down; keep publisher + sonda -------- +docker compose down -v +export NUM_PUBLISHER_NODES=12 +export NUM_RECEIVER_NODES=0 +docker compose up -d + +current_time=$(date +"%Y-%m-%d %H:%M:%S") +echo "[store_scenario1] LPT receivers are down; sonda and lightpush publisher running from now: $current_time" + +sleep 120 + +# -------------------- Phase 5: LPT down; only sonda -------------------------- +docker compose down -v + +current_time=$(date +"%Y-%m-%d %H:%M:%S") +echo "[store_scenario1] LPT down; only sonda is working from now: $current_time" + +sleep 120 + +cd .. + +current_time=$(date +"%Y-%m-%d %H:%M:%S") +echo "[store_scenario1] Test finished at $current_time" + +# finish +# exec ./stop_test.sh diff --git a/scripts/Lite_protocol_scripts/store/store_15nodes_scenario1.sh b/scripts/Lite_protocol_scripts/store/store_15nodes_scenario1.sh deleted file mode 100644 index b3360cb8..00000000 --- a/scripts/Lite_protocol_scripts/store/store_15nodes_scenario1.sh +++ /dev/null @@ -1,111 +0,0 @@ -#!/bin/bash - -set -e - -# This implements a waku-simulator with 15 nodes network, 1 service, 1 edge node added -# service node is limited to 1 cpu core with only 512 MB -# Runs different test phases with different load from sonda (STORE) side -# 1. 2 sonda instances, query every 500ms -# 2. 5 sonda instances, query every 200ms -# 3. 10 sonda instances, query every 100ms - -echo "Running test..." - -current_time=$(date +"%Y-%m-%d %H:%M:%S") -echo "Bringing up simulator at $current_time" - -cd ./waku-simulator - -# simulator exports -export NUM_NWAKU_NODES=15 -export TRAFFIC_DELAY_SECONDS=15 -export MSG_SIZE_KBYTES=10 -export SERVICENODE_CPU_CORES="0-3" -export POSTGRES_CPU_CORES="0-3" - -docker compose up -d -cd .. - -echo "Waiting 30s for service node to be ready..." -sleep 30 - -cd ./sonda - -# build sonda image -docker build -t local-perf-sonda -f Dockerfile.sonda . - -# 2 sondas 500ms - -cat < perf-test.env -RELAY_NODE_REST_ADDRESS=http://127.0.0.1:8645 -STORE_NODE_REST_ADDRESS=http://127.0.0.1:8644 -QUERY_DELAY=0.5 -STORE_NODES=/ip4/127.0.0.1/tcp/60001/p2p/ -CLUSTER_ID=66 -SHARD=0 -HEALTH_THRESHOLD=0.95 -EOF - -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda - -echo "Phase 1 running 300s..." -sleep 300 -docker kill $(docker ps -q -f "label=sonda") >/dev/null 2>&1 || true - -#5 sondas 200ms - -cat < perf-test.env -RELAY_NODE_REST_ADDRESS=http://127.0.0.1:8645 -STORE_NODE_REST_ADDRESS=http://127.0.0.1:8644 -QUERY_DELAY=0.2 -STORE_NODES=/ip4/127.0.0.1/tcp/60001/p2p/ -CLUSTER_ID=66 -SHARD=0 -HEALTH_THRESHOLD=0.95 -EOF - -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda - -echo "Phase 2 running 300s..." -sleep 300 -docker kill $(docker ps -q -f "label=sonda") >/dev/null 2>&1 || true - -#10 sondas 100ms -cat < perf-test.env -RELAY_NODE_REST_ADDRESS=http://127.0.0.1:8645 -STORE_NODE_REST_ADDRESS=http://127.0.0.1:8644 -QUERY_DELAY=0.1 -STORE_NODES=/ip4/127.0.0.1/tcp/60001/p2p/ -CLUSTER_ID=66 -SHARD=0 -HEALTH_THRESHOLD=0.95 -EOF - -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda - -echo "Phase 3 running 300s..." -sleep 300 -docker kill $(docker ps -q -f "label=sonda") >/dev/null 2>&1 || true - -cd .. - -cd ./waku-simulator -docker compose down -cd .. - -current_time=$(date +"%Y-%m-%d %H:%M:%S") -echo "Test finished at $current_time" diff --git a/scripts/Lite_protocol_scripts/store/store_15nodes_scenario2.sh b/scripts/Lite_protocol_scripts/store/store_15nodes_scenario2.sh deleted file mode 100644 index ae7a5989..00000000 --- a/scripts/Lite_protocol_scripts/store/store_15nodes_scenario2.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash - -set -e - -echo "Running test..." - -# This implements a short version of 1st store scenario. -# waku-simulator with 15 nodes network, 1 service, 1 edge node added -# service node is limited to 1 cpu core with only 512 MB -# Runs 1 phase with sonda load: -# 1. 10 sonda instances, each queries in every 100ms - -cd ./waku-simulator - -export NUM_NWAKU_NODES=15 -export TRAFFIC_DELAY_SECONDS=10 -export MSG_SIZE_KBYTES=8 - -docker compose up -d -cd .. - -echo "Waiting 20s for service node..." -sleep 20 - -cd ./sonda - -docker build -t local-perf-sonda -f Dockerfile.sonda . - -cat < perf-test.env -RELAY_NODE_REST_ADDRESS=http://127.0.0.1:8645 -STORE_NODE_REST_ADDRESS=http://127.0.0.1:8644 -QUERY_DELAY=0.1 -STORE_NODES=/ip4/127.0.0.1/tcp/60001/p2p/ -CLUSTER_ID=66 -SHARD=0 -HEALTH_THRESHOLD=0.95 -EOF - -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda - -echo "Phase running 300s..." -sleep 300 - -docker kill $(docker ps -q -f "label=sonda") >/dev/null 2>&1 || true - -cd .. - -cd ./waku-simulator -docker compose down -cd .. diff --git a/scripts/Lite_protocol_scripts/store/store_15nodes_stress_scenario.sh b/scripts/Lite_protocol_scripts/store/store_15nodes_stress_scenario.sh deleted file mode 100644 index f2a68521..00000000 --- a/scripts/Lite_protocol_scripts/store/store_15nodes_stress_scenario.sh +++ /dev/null @@ -1,182 +0,0 @@ -#!/bin/bash - - -# waku-simulator with 15 nodes network, 1 service, 1 edge node added -# service node is limited to 1 cpu core with only 512 MB -# This scenario intended to stress test service node STORE queries with high request frequency -# Increasing number of sonda instances and decreasing query delay ms -# 16 sondas 100ms -# 16 sondas 50ms -# 24 sondas 50ms -# 24 sondas 20ms - -set -e - -echo "Running test..." - -cd ./waku-simulator - -export NUM_NWAKU_NODES=15 -export TRAFFIC_DELAY_SECONDS=10 -export MSG_SIZE_KBYTES=12 - -docker compose up -d -cd .. - -echo "Waiting 30s for service node..." -sleep 30 - -cd ./sonda - -docker build -t local-perf-sonda -f Dockerfile.sonda . - -#16 sondas 100ms -cat < perf-test.env -RELAY_NODE_REST_ADDRESS=http://127.0.0.1:8645 -STORE_NODE_REST_ADDRESS=http://127.0.0.1:8644 -QUERY_DELAY=0.1 -STORE_NODES=/ip4/127.0.0.1/tcp/60001/p2p/ -CLUSTER_ID=66 -SHARD=0 -HEALTH_THRESHOLD=0.95 -EOF - -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda - -echo "Phase 1 300s..." -sleep 300 -docker kill $(docker ps -q -f "label=sonda") >/dev/null 2>&1 || true - -# 16 sondas 50ms -cat < perf-test.env -RELAY_NODE_REST_ADDRESS=http://127.0.0.1:8645 -STORE_NODE_REST_ADDRESS=http://127.0.0.1:8644 -QUERY_DELAY=0.05 -STORE_NODES=/ip4/127.0.0.1/tcp/60001/p2p/ -CLUSTER_ID=66 -SHARD=0 -HEALTH_THRESHOLD=0.95 -EOF - -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda - -echo "Phase 2 300s..." -sleep 300 -docker kill $(docker ps -q -f "label=sonda") >/dev/null 2>&1 || true - -# 24 sondas 50ms -cat < perf-test.env -RELAY_NODE_REST_ADDRESS=http://127.0.0.1:8645 -STORE_NODE_REST_ADDRESS=http://127.0.0.1:8644 -QUERY_DELAY=0.05 -STORE_NODES=/ip4/127.0.0.1/tcp/60001/p2p/ -CLUSTER_ID=66 -SHARD=0 -HEALTH_THRESHOLD=0.95 -EOF - -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda - -echo "Phase 3 300s..." -sleep 300 -docker kill $(docker ps -q -f "label=sonda") >/dev/null 2>&1 || true - -#24 sondas 20ms -cat < perf-test.env -RELAY_NODE_REST_ADDRESS=http://127.0.0.1:8645 -STORE_NODE_REST_ADDRESS=http://127.0.0.1:8644 -QUERY_DELAY=0.02 -STORE_NODES=/ip4/127.0.0.1/tcp/60001/p2p/ -CLUSTER_ID=66 -SHARD=0 -HEALTH_THRESHOLD=0.95 -EOF - -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -# repeat 23 more times -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda -docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda - -echo "Phase 4 300s..." -sleep 300 -docker kill $(docker ps -q -f "label=sonda") >/dev/null 2>&1 || true - -cd .. - -cd ./waku-simulator -docker compose down -cd .. diff --git a/scripts/Lite_protocol_scripts/store/store_cpu_stress.sh b/scripts/Lite_protocol_scripts/store/store_cpu_stress.sh new file mode 100755 index 00000000..05536c0f --- /dev/null +++ b/scripts/Lite_protocol_scripts/store/store_cpu_stress.sh @@ -0,0 +1,114 @@ +#!/bin/bash +set -e + +# ========================= +# IDs (same style) +# ========================= +export SCENARIO_ID="cpu_store_stress" +export TEST_NAME="${SCENARIO_ID}_$(date +%Y%m%d_%H%M%S)" +echo "[${TEST_NAME}] start" + +# ========================= +# Images (match your scripts) +# ========================= +export LPT_IMAGE="harbor.status.im/wakuorg/liteprotocoltester:latest" + +# ========================= +# Compose-required vars +# ========================= +export GF_SECURITY_ADMIN_USER="admin" +export GF_SECURITY_ADMIN_PASSWORD="admin" +export NODEKEY="${NODEKEY:-}" +export STORAGE_SIZE="${STORAGE_SIZE:-}" + +# ========================= +# Resource knobs +# ========================= +export SERVICENODE_CPU_CORES="0-1" +export POSTGRES_CPU_CORES="2-3" +export SERVICE_MEM_LIMIT="2g" +export POSTGRES_MEM_LIMIT="2g" +export POSTGRES_SHM_SIZE="1g" + +# ========================= +# Topic / shard +# ========================= +export CLUSTER_ID=66 +export SHARD=0 +export PUBSUB_TOPIC="/waku/2/rs/${CLUSTER_ID}/${SHARD}" +export CONTENT_TOPIC="/sonda/2/polls/proto" + +# ========================= +# REST endpoints +# ========================= +export RELAY_NODE_REST_ADDRESS="http://127.0.0.1:8645" +export STORE_NODE_REST_ADDRESS="http://127.0.0.1:8644" + +# ========================= +# Phase 0 — bring up simulator +# ========================= +echo "[${TEST_NAME}] Phase 0: bring up simulator" +cd ./waku-simulator +docker compose up -d +cd .. +echo "[${TEST_NAME}] wait 30s" +sleep 30 + +# ========================= +# Phase 1 — CPU-heavy writers (small msgs, high rate) +# ========================= +export NUM_PUBLISHER_NODES=24 +export NUM_RECEIVER_NODES=8 +export MESSAGE_INTERVAL_MILLIS=10 +export MIN_MESSAGE_SIZE=256 +export MAX_MESSAGE_SIZE=1024 +export START_PUBLISHING_AFTER=10 +export NUM_MESSAGES=0 + +echo "[${TEST_NAME}] Phase 1: start writers" +docker run -d --rm --name lpt_cpu \ + -e PUB_NODES=${NUM_PUBLISHER_NODES} \ + -e RCV_NODES=${NUM_RECEIVER_NODES} \ + -e MSG_INTERVAL_MS=${MESSAGE_INTERVAL_MILLIS} \ + -e MIN_MSG=${MIN_MESSAGE_SIZE} \ + -e MAX_MSG=${MAX_MESSAGE_SIZE} \ + -e PUBSUB_TOPIC=${PUBSUB_TOPIC} \ + --network host ${LPT_IMAGE} + +# ========================= +# Phase 2 — Sonda (exact style from your scripts) +# build image + write env + run with --env-file +# ========================= +echo "[${TEST_NAME}] Phase 2: build and start Sonda" +cd ../sonda +docker build -t local-perf-sonda -f ./Dockerfile.sonda . + +cat < perf-test.env +RELAY_NODE_REST_ADDRESS=http://127.0.0.1:8645 +STORE_NODE_REST_ADDRESS=http://127.0.0.1:8644 +QUERY_DELAY=0.5 +STORE_NODES=/ip4/10.2.0.101/tcp/60001/p2p/16Uiu2HAkyte8uj451tGkbww4Mjcg6DRnmAHxNeWyF4zp23RbpG3n +CLUSTER_ID=66 +SHARD=0 +EOF + +docker run --env-file perf-test.env -l sonda -d --network host local-perf-sonda +cd ../waku-lite/waku-protocol-perf-test + +echo "[${TEST_NAME}] hold 12m" +sleep 720 + +# ========================= +# Phase 3 — recovery +# ========================= +echo "[${TEST_NAME}] Phase 3: stop writers; observe 120s" +docker kill lpt_cpu || true +sleep 120 + +# ========================= +# Cleanup +# ========================= +echo "[${TEST_NAME}] cleanup" +docker kill $(docker ps -q --filter "label=sonda") || true +cd ./waku-simulator +docker compose down -v diff --git a/scripts/Lite_protocol_scripts/store/store_different_payloads.sh b/scripts/Lite_protocol_scripts/store/store_different_payloads.sh deleted file mode 100644 index 6b2e5985..00000000 --- a/scripts/Lite_protocol_scripts/store/store_different_payloads.sh +++ /dev/null @@ -1,82 +0,0 @@ -#!/bin/bash -# Scenario 6: Alternate tiny and huge payloads at fast rates to stress allocators and CPU. -set -e - -STORE_NODES="/ip4/10.2.0.101/tcp/60001/p2p/16Uiu2HAkyte8uj451tGkbww4Mjcg6DRnmAHxNeWyF4zp23RbpG3n" -RELAY_NODE_REST_ADDRESS="http://127.0.0.1:8645" -STORE_NODE_REST_ADDRESS="http://127.0.0.1:8644" -PUBSUB_TOPIC="/waku/2/default-waku/proto" -CONTENT_TOPIC="/sonda/2/polls/proto" -PHASE_SLEEP=240 - -echo "Running test..." -current_time=$(date +"%Y-%m-%d %H:%M:%S") -echo "Bringing up simulator at $current_time" - -cd ./waku-simulator -export SERVICENODE_CPU_CORES=0 -export POSTGRES_CPU_CORES=1-3 -export GF_SECURITY_ADMIN_USER=admin -export GF_SECURITY_ADMIN_PASSWORD=admin -docker compose up -d -while [ "$(docker inspect --format "{{.State.Status}}" $(docker compose ps -q servicenode))" != "running" ]; do - sleep 1 -done -cd .. - -cd ./sonda -docker build -t local-perf-sonda -f ./Dockerfile.sonda . -cat > ./perf-test.env < ./perf-topic-a.env < ./perf-topic-b.env < 1x5 -> 5x1 -> receivers down -> lpt down -# ------------------------------------------------------------------------------ - -# >>> EDIT THESE IF YOUR SETUP DIFFERS <<< -STORE_NODES="/ip4/10.2.0.101/tcp/60001/p2p/16Uiu2HAkyte8uj451tGkbww4Mjcg6DRnmAHxNeWyF4zp23RbpG3n" -RELAY_NODE_REST_ADDRESS="http://127.0.0.1:8645" -STORE_NODE_REST_ADDRESS="http://127.0.0.1:8644" -PUBSUB_TOPIC="/waku/2/default-waku/proto" -CONTENT_TOPIC="/sonda/2/polls/proto" -# <<< EDIT ABOVE >>> - -echo "Running test..." - -current_time=$(date +"%Y-%m-%d %H:%M:%S") -echo "Bringing up simulator at $current_time" - -cd ./waku-simulator - -# same style: exports before compose -export SERVICENODE_CPU_CORES=0 # 1 core for service node -export POSTGRES_CPU_CORES=1-3 # keep DB off core 0 -export GF_SECURITY_ADMIN_USER=admin -export GF_SECURITY_ADMIN_PASSWORD=admin -export NWAKU_IMAGE=wakuorg/nwaku:latest -export NUM_NWAKU_NODES=15 -export RLN_ENABLED=false - -docker compose up -d - -# Wait for servicenode to be running (scenario_1.sh style) -while [ "$(docker inspect --format "{{.State.Status}}" $(docker compose ps -q servicenode))" != "running" ]; do - sleep 1 -done - -cd .. - -# ------------------------------------------------------------------------------ -# Start Sonda (like scenario_1.sh: build & run with env-file, host network) -# ------------------------------------------------------------------------------ -cd ./sonda - -docker build -t local-perf-sonda -f ./Dockerfile.sonda . - -cat > ./perf-test.env < per-message CPU (encode/verify/route) dominates. +export NUM_PUBLISHER_NODES=24 +export NUM_RECEIVER_NODES=8 # keep some receivers to drive end-to-end +export MESSAGE_INTERVAL_MILLIS=8 # ~125 msg/s per publisher (adjust if too hot) +export MIN_MESSAGE_SIZE=256 # bytes +export MAX_MESSAGE_SIZE=1024 # bytes +export START_PUBLISHING_AFTER=10 +export NUM_MESSAGES=0 # unlimited + +echo "[${TEST_NAME}] phase1 writers: ${NUM_PUBLISHER_NODES} pubs @ ${MESSAGE_INTERVAL_MILLIS}ms, 256-1024B" +docker run -d --rm --name lpt_cpu \ + -e PUB_NODES=${NUM_PUBLISHER_NODES} \ + -e RCV_NODES=${NUM_RECEIVER_NODES} \ + -e MSG_INTERVAL_MS=${MESSAGE_INTERVAL_MILLIS} \ + -e MIN_MSG=${MIN_MESSAGE_SIZE} \ + -e MAX_MSG=${MAX_MESSAGE_SIZE} \ + -e PUBSUB_TOPIC=${PUBSUB_TOPIC} \ + --network host ${LPT_IMAGE} + +# ---------- Phase 2: Store read hammer (concurrent readers) ---------- +# Mix includeData true/false and page sizes to exercise CPU (serialization/JSON) & DB. +echo "[${TEST_NAME}] phase2 store readers" +docker run -d --rm --name sonda_idx \ + --network host ${SONDA_IMAGE} \ + --relay-node-rest-address "${RELAY_NODE_REST_ADDRESS}" \ + --store-node-rest-address "${STORE_NODE_REST_ADDRESS}" \ + --pubsub-topic "${PUBSUB_TOPIC}" \ + --store-nodes "${STORE_NODES}" \ + --delay-seconds 0.07 --health-threshold ${HEALTH_THRESHOLD} \ + --metrics-port 8004 --include-data=false --page-size 150 + +docker run -d --rm --name sonda_smallpages \ + --network host ${SONDA_IMAGE} \ + --relay-node-rest-address "${RELAY_NODE_REST_ADDRESS}" \ + --store-node-rest-address "${STORE_NODE_REST_ADDRESS}" \ + --pubsub-topic "${PUBSUB_TOPIC}" \ + --store-nodes "${STORE_NODES}" \ + --delay-seconds 0.05 --health-threshold ${HEALTH_THRESHOLD} \ + --metrics-port 8005 --include-data=true --page-size 5 + +docker run -d --rm --name sonda_bigpages \ + --network host ${SONDA_IMAGE} \ + --relay-node-rest-address "${RELAY_NODE_REST_ADDRESS}" \ + --store-node-rest-address "${STORE_NODE_REST_ADDRESS}" \ + --pubsub-topic "${PUBSUB_TOPIC}" \ + --store-nodes "${STORE_NODES}" \ + --delay-seconds 0.05 --health-threshold ${HEALTH_THRESHOLD} \ + --metrics-port 8006 --include-data=true --page-size 50 + +# Extra readers to push CPU on the service process: +docker run -d --rm --name sonda_mix1 \ + --network host ${SONDA_IMAGE} \ + --relay-node-rest-address "${RELAY_NODE_REST_ADDRESS}" \ + --store-node-rest-address "${STORE_NODE_REST_ADDRESS}" \ + --pubsub-topic "${PUBSUB_TOPIC}" \ + --store-nodes "${STORE_NODES}" \ + --delay-seconds 0.03 --health-threshold ${HEALTH_THRESHOLD} \ + --metrics-port 8007 --include-data=true --page-size 25 + +docker run -d --rm --name sonda_mix2 \ + --network host ${SONDA_IMAGE} \ + --relay-node-rest-address "${RELAY_NODE_REST_ADDRESS}" \ + --store-node-rest-address "${STORE_NODE_REST_ADDRESS}" \ + --pubsub-topic "${PUBSUB_TOPIC}" \ + --store-nodes "${STORE_NODES}" \ + --delay-seconds 0.03 --health-threshold ${HEALTH_THRESHOLD} \ + --metrics-port 8008 --include-data=false --page-size 200 + +echo "[${TEST_NAME}] hold 12m" +sleep 720 + +# ---------- Phase 3: plateau & recovery ---------- +echo "[${TEST_NAME}] phase3 stop writers; keep readers 2m (recovery CPU/GC)" +docker kill lpt_cpu || true +sleep 120 + +# ---------- Cleanup ---------- +echo "[${TEST_NAME}] cleanup" +docker kill sonda_idx sonda_smallpages sonda_bigpages sonda_mix1 sonda_mix2 || true +cd ./waku-simulator +docker compose down -v diff --git a/scripts/Lite_protocol_scripts/store/store_stress1.sh b/scripts/Lite_protocol_scripts/store/store_stress1.sh deleted file mode 100644 index ddee3d1e..00000000 --- a/scripts/Lite_protocol_scripts/store/store_stress1.sh +++ /dev/null @@ -1,96 +0,0 @@ -#!/bin/bash -set -e - -STORE_NODES="/ip4/10.2.0.101/tcp/60001/p2p/16Uiu2HAkyte8uj451tGkbww4Mjcg6DRnmAHxNeWyF4zp23RbpG3n,/ip4/10.2.0.102/tcp/60001/p2p/16Uiu2HA7abcDEF451tGkbzz4Mjcg6DRnmAHxNeWyF4zp23RbpXYZ2" -RELAY_NODE_REST_ADDRESS="http://127.0.0.1:8645" -STORE_NODE_REST_ADDRESS="http://127.0.0.1:8644" -PUBSUB_TOPIC="/waku/2/default-waku/proto" -CONTENT_TOPIC="/sonda/2/polls/proto" -PHASE_SLEEP=300 - -echo "Running test..." -current_time=$(date +"%Y-%m-%d %H:%M:%S") -echo "Bringing up simulator at $current_time" - -cd ./waku-simulator -export SERVICENODE_CPU_CORES=0 -export POSTGRES_CPU_CORES=1-3 -export GF_SECURITY_ADMIN_USER=admin -export GF_SECURITY_ADMIN_PASSWORD=admin -docker compose up -d -while [ "$(docker inspect --format "{{.State.Status}}" $(docker compose ps -q servicenode))" != "running" ]; do - sleep 1 -done -cd .. - -cd ./sonda -docker build -t local-perf-sonda -f ./Dockerfile.sonda . -cat > ./perf-test.env < ./perf-test.env < ./perf-test.env < ./perf-test.env </dev/null || true)" + [[ "$state" == "running" ]] && break + fi + sleep 1 +done + +cd ../lpt + +# -------------------- LPT config --------------------------- +export LPT_IMAGE=harbor.status.im/wakuorg/liteprotocoltester:latest +export START_PUBLISHING_AFTER=15 +export NUM_MESSAGES=0 +export MESSAGE_INTERVAL_MILLIS=100 + +# Service peers +export LIGHTPUSH_SERVICE_PEER=/ip4/10.2.0.101/tcp/60001/p2p/16Uiu2HAkyte8uj451tGkbww4Mjcg6DRnmAHxNeWyF4zp23RbpG3n +export FILTER_SERVICE_PEER=/ip4/10.2.0.101/tcp/60001/p2p/16Uiu2HAkyte8uj451tGkbww4Mjcg6DRnmAHxNeWyF4zp23RbpG3n + +# Topics +export PUBSUB=/waku/2/rs/66/0 +export CONTENT_TOPIC=/tester/2/light-pubsub-test/wakusim +export CLUSTER_ID=66 + +# sleep before traffic +sleep 60 + +cd ../sonda +docker build -t local-perf-sonda -f ./Dockerfile.sonda . + +cat < perf-test.env +RELAY_NODE_REST_ADDRESS=http://127.0.0.1:8645 +STORE_NODE_REST_ADDRESS=http://127.0.0.1:8644 +QUERY_DELAY=0.5 +STORE_NODES=/ip4/10.2.0.101/tcp/60001/p2p/16Uiu2HAkyte8uj451tGkbww4Mjcg6DRnmAHxNeWyF4zp23RbpG3n +CLUSTER_ID=66 +SHARD=0 +EOF + +sleep 5 + +# Clean up +docker rm -f sonda1 sonda2 sonda3 sonda4 sonda5 >/dev/null 2>&1 || true + +# Start a baseline Sonda (0.5s) +docker run -d --name sonda1 --network host -l sonda \ + --env-file ./perf-test.env local-perf-sonda + +cd ../lpt + +# ============================================================================ # +# PHASE 1: Moderate traffic +# LPT 6/6, 50–90 KB; Sonda x1 time 0.5s +# ============================================================================ # +export NUM_PUBLISHER_NODES=6 +export NUM_RECEIVER_NODES=6 +export MIN_MESSAGE_SIZE=50Kb +export MAX_MESSAGE_SIZE=90Kb + +docker compose down -v >/dev/null 2>&1 || true +docker compose up -d + +current_time=$(date +"%Y-%m-%d %H:%M:%S") +echo "[scenario_6_store_stress] Phase 1: LPT 6/6, 50–90KB; Sonda x1 @0.5s — $current_time" +sleep 120 + +# ============================================================================ # +# PHASE 2: Same traffic but triple query rate +# Keep LPT, add Sonda x2 more time 0.1s +# ============================================================================ # +docker run -d --name sonda2 --network host -l sonda \ + --env-file ../sonda/perf-test.env -e QUERY_DELAY=0.1 local-perf-sonda +docker run -d --name sonda3 --network host -l sonda \ + --env-file ../sonda/perf-test.env -e QUERY_DELAY=0.1 local-perf-sonda + +current_time=$(date +"%Y-%m-%d %H:%M:%S") +echo "[scenario_6_store_stress] Phase 2: add Sonda x2 @0.1s (total 3) — $current_time" +sleep 120 + +# ============================================================================ # +# PHASE 3: Heavier traffic + peak query rate +# LPT 10/10, 130–149 KB; add Sonda x2 more time 0.05s +# ============================================================================ # +docker compose down -v +export NUM_PUBLISHER_NODES=10 +export NUM_RECEIVER_NODES=10 +export MIN_MESSAGE_SIZE=130Kb +export MAX_MESSAGE_SIZE=149Kb +docker compose up -d + +docker run -d --name sonda4 --network host -l sonda \ + --env-file ../sonda/perf-test.env -e QUERY_DELAY=0.05 local-perf-sonda +docker run -d --name sonda5 --network host -l sonda \ + --env-file ../sonda/perf-test.env -e QUERY_DELAY=0.05 local-perf-sonda + +current_time=$(date +"%Y-%m-%d %H:%M:%S") +echo "[scenario_6_store_stress] Phase 3: LPT 10/10, 130–149KB; Sonda total x5 (0.5s + 0.1s + 0.05s) — $current_time" +sleep 120 + +# ============================================================================ # +# PHASE 4: Store-only +# Stop LPT; keep all Sonda x5 times +# ============================================================================ # +docker compose down -v + +current_time=$(date +"%Y-%m-%d %H:%M:%S") +echo "[scenario_6_store_stress] Phase 4: LPT down; Store-only flood via Sonda x5 — $current_time" +sleep 120 + +# -------------------- Cleanup ------------------------------------------------- +docker rm -f sonda1 sonda2 sonda3 sonda4 sonda5 >/dev/null 2>&1 || true + +cd .. + +current_time=$(date +"%Y-%m-%d %H:%M:%S") +echo "[scenario_6_store_stress] Test finished at $current_time" + +# finish +# exec ./stop_test.sh