diff --git a/cmd/benchmark/.claude/settings.local.json b/cmd/benchmark/.claude/settings.local.json new file mode 100644 index 0000000..cb787be --- /dev/null +++ b/cmd/benchmark/.claude/settings.local.json @@ -0,0 +1,9 @@ +{ + "permissions": { + "allow": [ + "Bash(ls:*)" + ], + "deny": [], + "ask": [] + } +} diff --git a/cmd/benchmark/docker-compose.ramdisk.yml b/cmd/benchmark/docker-compose.ramdisk.yml index fab702e..8a6ba30 100644 --- a/cmd/benchmark/docker-compose.ramdisk.yml +++ b/cmd/benchmark/docker-compose.ramdisk.yml @@ -13,21 +13,6 @@ services: volumes: - /dev/shm/benchmark/next-orly-badger:/data - # Next.orly.dev relay with DGraph - next-orly-dgraph: - volumes: - - /dev/shm/benchmark/next-orly-dgraph:/data - - # DGraph Zero - cluster coordinator - dgraph-zero: - volumes: - - /dev/shm/benchmark/dgraph-zero:/data - - # DGraph Alpha - data node - dgraph-alpha: - volumes: - - /dev/shm/benchmark/dgraph-alpha:/data - # Next.orly.dev relay with Neo4j next-orly-neo4j: volumes: diff --git a/cmd/benchmark/docker-compose.yml b/cmd/benchmark/docker-compose.yml index 4eaded1..42f3420 100644 --- a/cmd/benchmark/docker-compose.yml +++ b/cmd/benchmark/docker-compose.yml @@ -26,78 +26,6 @@ services: retries: 3 start_period: 40s - # Next.orly.dev relay with DGraph (this repository) - next-orly-dgraph: - build: - context: ../.. - dockerfile: cmd/benchmark/Dockerfile.next-orly - container_name: benchmark-next-orly-dgraph - environment: - - ORLY_DATA_DIR=/data - - ORLY_LISTEN=0.0.0.0 - - ORLY_PORT=8080 - - ORLY_LOG_LEVEL=off - - ORLY_DB_TYPE=dgraph - - ORLY_DGRAPH_URL=dgraph-alpha:9080 - volumes: - - ./data/next-orly-dgraph:/data - ports: - - "8007:8080" - networks: - - benchmark-net - depends_on: - dgraph-alpha: - condition: service_healthy - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:8080/"] - interval: 30s - timeout: 10s - retries: 3 - start_period: 60s - - # DGraph Zero - cluster coordinator - dgraph-zero: - image: dgraph/dgraph:v23.1.0 - container_name: benchmark-dgraph-zero - working_dir: /data/zero - ports: - - "5080:5080" - - "6080:6080" - volumes: - - ./data/dgraph-zero:/data - command: dgraph zero --my=dgraph-zero:5080 - networks: - - benchmark-net - healthcheck: - test: ["CMD", "sh", "-c", "dgraph version || exit 1"] - interval: 5s - timeout: 3s - retries: 3 - start_period: 5s - - # DGraph Alpha - data node - dgraph-alpha: - image: dgraph/dgraph:v23.1.0 - container_name: benchmark-dgraph-alpha - working_dir: /data/alpha - ports: - - "8088:8080" - - "9080:9080" - volumes: - - ./data/dgraph-alpha:/data - command: dgraph alpha --my=dgraph-alpha:7080 --zero=dgraph-zero:5080 --security whitelist=0.0.0.0/0 - networks: - - benchmark-net - depends_on: - dgraph-zero: - condition: service_healthy - healthcheck: - test: ["CMD", "sh", "-c", "dgraph version || exit 1"] - interval: 5s - timeout: 3s - retries: 6 - start_period: 10s - # Next.orly.dev relay with Neo4j (this repository) next-orly-neo4j: build: @@ -300,8 +228,6 @@ services: depends_on: next-orly-badger: condition: service_healthy - next-orly-dgraph: - condition: service_healthy next-orly-neo4j: condition: service_healthy khatru-sqlite: @@ -317,7 +243,7 @@ services: rely-sqlite: condition: service_healthy environment: - - BENCHMARK_TARGETS=rely-sqlite:3334,next-orly-badger:8080,next-orly-dgraph:8080,next-orly-neo4j:8080,khatru-sqlite:3334,khatru-badger:3334,relayer-basic:7447,strfry:8080,nostr-rs-relay:8080 + - BENCHMARK_TARGETS=rely-sqlite:3334,next-orly-badger:8080,next-orly-neo4j:8080,khatru-sqlite:3334,khatru-badger:3334,relayer-basic:7447,strfry:8080,nostr-rs-relay:8080 - BENCHMARK_EVENTS=50000 - BENCHMARK_WORKERS=24 - BENCHMARK_DURATION=60s diff --git a/cmd/benchmark/reports/run_20251203_222024/aggregate_report.txt b/cmd/benchmark/reports/run_20251203_222024/aggregate_report.txt new file mode 100644 index 0000000..de8d62e --- /dev/null +++ b/cmd/benchmark/reports/run_20251203_222024/aggregate_report.txt @@ -0,0 +1,176 @@ +================================================================ +NOSTR RELAY BENCHMARK AGGREGATE REPORT +================================================================ +Generated: 2025-12-03T22:47:18+00:00 +Benchmark Configuration: + Events per test: 50000 + Concurrent workers: 24 + Test duration: 60s + +Relays tested: 8 + +================================================================ +SUMMARY BY RELAY +================================================================ + +Relay: rely-sqlite +---------------------------------------- +Status: COMPLETED +Events/sec: 16694.18 +Events/sec: 6270.43 +Events/sec: 16694.18 +Success Rate: 100.0% +Success Rate: 100.0% +Success Rate: 100.0% +Avg Latency: 1.339216ms +Bottom 10% Avg Latency: 779.552µs +Avg Latency: 1.281976ms +P95 Latency: 1.894111ms +P95 Latency: 2.087148ms +P95 Latency: 910.529µs + +Relay: next-orly-badger +---------------------------------------- +Status: COMPLETED +Events/sec: 17987.95 +Events/sec: 6246.39 +Events/sec: 17987.95 +Success Rate: 100.0% +Success Rate: 100.0% +Success Rate: 100.0% +Avg Latency: 1.16914ms +Bottom 10% Avg Latency: 675.419µs +Avg Latency: 1.301155ms +P95 Latency: 1.605171ms +P95 Latency: 2.260728ms +P95 Latency: 911.513µs + +Relay: next-orly-neo4j +---------------------------------------- +Status: COMPLETED +Events/sec: 17437.04 +Events/sec: 6060.82 +Events/sec: 17437.04 +Success Rate: 100.0% +Success Rate: 100.0% +Success Rate: 100.0% +Avg Latency: 1.250926ms +Bottom 10% Avg Latency: 735.971µs +Avg Latency: 1.493295ms +P95 Latency: 1.757814ms +P95 Latency: 2.404304ms +P95 Latency: 896.796µs + +Relay: khatru-sqlite +---------------------------------------- +Status: COMPLETED +Events/sec: 17531.15 +Events/sec: 6335.87 +Events/sec: 17531.15 +Success Rate: 100.0% +Success Rate: 100.0% +Success Rate: 100.0% +Avg Latency: 1.233875ms +Bottom 10% Avg Latency: 707.713µs +Avg Latency: 1.239192ms +P95 Latency: 1.713051ms +P95 Latency: 1.880869ms +P95 Latency: 918.848µs + +Relay: khatru-badger +---------------------------------------- +Status: COMPLETED +Events/sec: 15958.89 +Events/sec: 6352.78 +Events/sec: 15958.89 +Success Rate: 100.0% +Success Rate: 100.0% +Success Rate: 100.0% +Avg Latency: 1.414398ms +Bottom 10% Avg Latency: 791.675µs +Avg Latency: 1.183812ms +P95 Latency: 2.191322ms +P95 Latency: 1.80172ms +P95 Latency: 903.25µs + +Relay: relayer-basic +---------------------------------------- +Status: COMPLETED +Events/sec: 17757.23 +Events/sec: 6227.33 +Events/sec: 17757.23 +Success Rate: 100.0% +Success Rate: 100.0% +Success Rate: 100.0% +Avg Latency: 1.193531ms +Bottom 10% Avg Latency: 679.232µs +Avg Latency: 1.304ms +P95 Latency: 1.679267ms +P95 Latency: 2.155365ms +P95 Latency: 930.632µs + +Relay: strfry +---------------------------------------- +Status: COMPLETED +Events/sec: 17794.50 +Events/sec: 6252.01 +Events/sec: 17794.50 +Success Rate: 100.0% +Success Rate: 100.0% +Success Rate: 100.0% +Avg Latency: 1.192717ms +Bottom 10% Avg Latency: 676.594µs +Avg Latency: 1.270724ms +P95 Latency: 1.645564ms +P95 Latency: 2.251457ms +P95 Latency: 915.623µs + +Relay: nostr-rs-relay +---------------------------------------- +Status: COMPLETED +Events/sec: 17174.61 +Events/sec: 6311.06 +Events/sec: 17174.61 +Success Rate: 100.0% +Success Rate: 100.0% +Success Rate: 100.0% +Avg Latency: 1.281647ms +Bottom 10% Avg Latency: 742.249µs +Avg Latency: 1.260479ms +P95 Latency: 1.836808ms +P95 Latency: 1.893887ms +P95 Latency: 922.647µs + + +================================================================ +DETAILED RESULTS +================================================================ + +Individual relay reports are available in: + - /reports/run_20251203_222024/khatru-badger_results.txt + - /reports/run_20251203_222024/khatru-sqlite_results.txt + - /reports/run_20251203_222024/next-orly-badger_results.txt + - /reports/run_20251203_222024/next-orly-neo4j_results.txt + - /reports/run_20251203_222024/nostr-rs-relay_results.txt + - /reports/run_20251203_222024/relayer-basic_results.txt + - /reports/run_20251203_222024/rely-sqlite_results.txt + - /reports/run_20251203_222024/strfry_results.txt + +================================================================ +BENCHMARK COMPARISON TABLE +================================================================ + +Relay Status Peak Tput/s Avg Latency Success Rate +---- ------ ----------- ----------- ------------ +rely-sqlite OK 16694.18 1.339216ms 100.0% +next-orly-badger OK 17987.95 1.16914ms 100.0% +next-orly-neo4j OK 17437.04 1.250926ms 100.0% +khatru-sqlite OK 17531.15 1.233875ms 100.0% +khatru-badger OK 15958.89 1.414398ms 100.0% +relayer-basic OK 17757.23 1.193531ms 100.0% +strfry OK 17794.50 1.192717ms 100.0% +nostr-rs-relay OK 17174.61 1.281647ms 100.0% + +================================================================ +End of Report +================================================================ diff --git a/cmd/benchmark/reports/run_20251203_222024/khatru-badger_results.txt b/cmd/benchmark/reports/run_20251203_222024/khatru-badger_results.txt new file mode 100644 index 0000000..43873df --- /dev/null +++ b/cmd/benchmark/reports/run_20251203_222024/khatru-badger_results.txt @@ -0,0 +1,201 @@ +Starting Nostr Relay Benchmark (Badger Backend) +Data Directory: /tmp/benchmark_khatru-badger_8 +Events: 50000, Workers: 24, Duration: 1m0s +1764801231368401ℹ️ migrating to version 1... /build/pkg/database/migrations.go:68 +1764801231368486ℹ️ migrating to version 2... /build/pkg/database/migrations.go:75 +1764801231368519ℹ️ migrating to version 3... /build/pkg/database/migrations.go:82 +1764801231368527ℹ️ cleaning up ephemeral events (kinds 20000-29999)... /build/pkg/database/migrations.go:304 +1764801231368536ℹ️ cleaned up 0 ephemeral events from database /build/pkg/database/migrations.go:349 +1764801231368548ℹ️ migrating to version 4... /build/pkg/database/migrations.go:89 +1764801231368553ℹ️ converting events to optimized inline storage (Reiser4 optimization)... /build/pkg/database/migrations.go:357 +1764801231368563ℹ️ found 0 events to convert (0 regular, 0 replaceable, 0 addressable) /build/pkg/database/migrations.go:446 +1764801231368569ℹ️ migration complete: converted 0 events to optimized inline storage, deleted 0 old keys /build/pkg/database/migrations.go:555 +1764801231368582ℹ️ migrating to version 5... /build/pkg/database/migrations.go:96 +1764801231368586ℹ️ re-encoding events with optimized tag binary format... /build/pkg/database/migrations.go:562 +1764801231368621ℹ️ found 0 events with e/p tags to re-encode /build/pkg/database/migrations.go:649 +1764801231368649ℹ️ no events need re-encoding /build/pkg/database/migrations.go:652 +1764801231368698ℹ️ migrating to version 6... /build/pkg/database/migrations.go:103 +1764801231368705ℹ️ converting events to compact serial-reference format... /build/pkg/database/migrations.go:706 +1764801231368720ℹ️ found 0 events to convert to compact format /build/pkg/database/migrations.go:846 +1764801231368725ℹ️ no events need conversion /build/pkg/database/migrations.go:849 + +╔════════════════════════════════════════════════════════╗ +║ BADGER BACKEND BENCHMARK SUITE ║ +╚════════════════════════════════════════════════════════╝ + +=== Starting Badger benchmark === +RunPeakThroughputTest (Badger).. + +=== Peak Throughput Test === +2025/12/03 22:33:51 INFO: Successfully loaded embedded libsecp256k1 v5.0.0 from /tmp/orly-libsecp256k1/libsecp256k1.so +Events saved: 50000/50000 (100.0%), errors: 0 +Duration: 3.133049501s +Events/sec: 15958.89 +Avg latency: 1.414398ms +P90 latency: 1.890809ms +P95 latency: 2.191322ms +P99 latency: 3.903963ms +Bottom 10% Avg latency: 791.675µs +Wiping database between tests... +RunBurstPatternTest (Badger).. + +=== Burst Pattern Test === +Burst completed: 5000 events in 324.488191ms +Burst completed: 5000 events in 290.052978ms +Burst completed: 5000 events in 282.1799ms +Burst completed: 5000 events in 293.897308ms +Burst completed: 5000 events in 291.897961ms +Burst completed: 5000 events in 289.485539ms +Burst completed: 5000 events in 274.266496ms +Burst completed: 5000 events in 267.924152ms +Burst completed: 5000 events in 270.096418ms +Burst completed: 5000 events in 279.041228ms +Burst test completed: 50000 events in 7.870569084s, errors: 0 +Events/sec: 6352.78 +Wiping database between tests... +RunMixedReadWriteTest (Badger).. + +=== Mixed Read/Write Test === +Generating 1000 unique synthetic events (minimum 300 bytes each)... +Generated 1000 events: + Average content size: 312 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Pre-populating database for read tests... +Generating 50000 unique synthetic events (minimum 300 bytes each)... +Generated 50000 events: + Average content size: 314 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Mixed test completed: 25000 writes, 25000 reads in 24.293101466s +Combined ops/sec: 2058.20 +Wiping database between tests... +RunQueryTest (Badger).. + +=== Query Test === +Generating 10000 unique synthetic events (minimum 300 bytes each)... +Generated 10000 events: + Average content size: 313 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Pre-populating database with 10000 events for query tests... +Query test completed: 414124 queries in 1m0.005028928s +Queries/sec: 6901.49 +Avg query latency: 2.186993ms +P95 query latency: 8.150708ms +P99 query latency: 12.392244ms +Wiping database between tests... +RunConcurrentQueryStoreTest (Badger).. + +=== Concurrent Query/Store Test === +Generating 5000 unique synthetic events (minimum 300 bytes each)... +Generated 5000 events: + Average content size: 313 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Pre-populating database with 5000 events for concurrent query/store test... +Generating 50000 unique synthetic events (minimum 300 bytes each)... +Generated 50000 events: + Average content size: 314 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Concurrent test completed: 315470 operations (265470 queries, 50000 writes) in 1m0.003725813s +Operations/sec: 5257.51 +Avg latency: 1.463937ms +Avg query latency: 1.521887ms +Avg write latency: 1.156254ms +P95 latency: 3.595486ms +P99 latency: 9.347708ms + +=== Badger benchmark completed === + + +================================================================================ +BENCHMARK REPORT +================================================================================ + +Test: Peak Throughput +Duration: 3.133049501s +Total Events: 50000 +Events/sec: 15958.89 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 189 MB +Avg Latency: 1.414398ms +P90 Latency: 1.890809ms +P95 Latency: 2.191322ms +P99 Latency: 3.903963ms +Bottom 10% Avg Latency: 791.675µs +---------------------------------------- + +Test: Burst Pattern +Duration: 7.870569084s +Total Events: 50000 +Events/sec: 6352.78 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 172 MB +Avg Latency: 1.183812ms +P90 Latency: 1.587121ms +P95 Latency: 1.80172ms +P99 Latency: 3.298169ms +Bottom 10% Avg Latency: 529.205µs +---------------------------------------- + +Test: Mixed Read/Write +Duration: 24.293101466s +Total Events: 50000 +Events/sec: 2058.20 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 186 MB +Avg Latency: 384.638µs +P90 Latency: 808.86µs +P95 Latency: 903.25µs +P99 Latency: 1.120102ms +Bottom 10% Avg Latency: 1.02527ms +---------------------------------------- + +Test: Query Performance +Duration: 1m0.005028928s +Total Events: 414124 +Events/sec: 6901.49 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 198 MB +Avg Latency: 2.186993ms +P90 Latency: 6.624883ms +P95 Latency: 8.150708ms +P99 Latency: 12.392244ms +Bottom 10% Avg Latency: 8.999206ms +---------------------------------------- + +Test: Concurrent Query/Store +Duration: 1m0.003725813s +Total Events: 315470 +Events/sec: 5257.51 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 188 MB +Avg Latency: 1.463937ms +P90 Latency: 2.911413ms +P95 Latency: 3.595486ms +P99 Latency: 9.347708ms +Bottom 10% Avg Latency: 5.359325ms +---------------------------------------- + +Report saved to: /tmp/benchmark_khatru-badger_8/benchmark_report.txt +AsciiDoc report saved to: /tmp/benchmark_khatru-badger_8/benchmark_report.adoc + +RELAY_NAME: khatru-badger +RELAY_URL: ws://khatru-badger:3334 +TEST_TIMESTAMP: 2025-12-03T22:37:08+00:00 +BENCHMARK_CONFIG: + Events: 50000 + Workers: 24 + Duration: 60s diff --git a/cmd/benchmark/reports/run_20251203_222024/khatru-sqlite_results.txt b/cmd/benchmark/reports/run_20251203_222024/khatru-sqlite_results.txt new file mode 100644 index 0000000..c0d1932 --- /dev/null +++ b/cmd/benchmark/reports/run_20251203_222024/khatru-sqlite_results.txt @@ -0,0 +1,201 @@ +Starting Nostr Relay Benchmark (Badger Backend) +Data Directory: /tmp/benchmark_khatru-sqlite_8 +Events: 50000, Workers: 24, Duration: 1m0s +1764801029566947ℹ️ migrating to version 1... /build/pkg/database/migrations.go:68 +1764801029567062ℹ️ migrating to version 2... /build/pkg/database/migrations.go:75 +1764801029567087ℹ️ migrating to version 3... /build/pkg/database/migrations.go:82 +1764801029567092ℹ️ cleaning up ephemeral events (kinds 20000-29999)... /build/pkg/database/migrations.go:304 +1764801029567102ℹ️ cleaned up 0 ephemeral events from database /build/pkg/database/migrations.go:349 +1764801029567115ℹ️ migrating to version 4... /build/pkg/database/migrations.go:89 +1764801029567122ℹ️ converting events to optimized inline storage (Reiser4 optimization)... /build/pkg/database/migrations.go:357 +1764801029567131ℹ️ found 0 events to convert (0 regular, 0 replaceable, 0 addressable) /build/pkg/database/migrations.go:446 +1764801029567137ℹ️ migration complete: converted 0 events to optimized inline storage, deleted 0 old keys /build/pkg/database/migrations.go:555 +1764801029567154ℹ️ migrating to version 5... /build/pkg/database/migrations.go:96 +1764801029567160ℹ️ re-encoding events with optimized tag binary format... /build/pkg/database/migrations.go:562 +1764801029567169ℹ️ found 0 events with e/p tags to re-encode /build/pkg/database/migrations.go:649 +1764801029567174ℹ️ no events need re-encoding /build/pkg/database/migrations.go:652 +1764801029567187ℹ️ migrating to version 6... /build/pkg/database/migrations.go:103 +1764801029567192ℹ️ converting events to compact serial-reference format... /build/pkg/database/migrations.go:706 +1764801029567211ℹ️ found 0 events to convert to compact format /build/pkg/database/migrations.go:846 +1764801029567217ℹ️ no events need conversion /build/pkg/database/migrations.go:849 + +╔════════════════════════════════════════════════════════╗ +║ BADGER BACKEND BENCHMARK SUITE ║ +╚════════════════════════════════════════════════════════╝ + +=== Starting Badger benchmark === +RunPeakThroughputTest (Badger).. + +=== Peak Throughput Test === +2025/12/03 22:30:29 INFO: Successfully loaded embedded libsecp256k1 v5.0.0 from /tmp/orly-libsecp256k1/libsecp256k1.so +Events saved: 50000/50000 (100.0%), errors: 0 +Duration: 2.852065909s +Events/sec: 17531.15 +Avg latency: 1.233875ms +P90 latency: 1.547505ms +P95 latency: 1.713051ms +P99 latency: 3.452631ms +Bottom 10% Avg latency: 707.713µs +Wiping database between tests... +RunBurstPatternTest (Badger).. + +=== Burst Pattern Test === +Burst completed: 5000 events in 297.229736ms +Burst completed: 5000 events in 291.618719ms +Burst completed: 5000 events in 295.763107ms +Burst completed: 5000 events in 320.083794ms +Burst completed: 5000 events in 306.954958ms +Burst completed: 5000 events in 294.350551ms +Burst completed: 5000 events in 266.492151ms +Burst completed: 5000 events in 258.415169ms +Burst completed: 5000 events in 279.574451ms +Burst completed: 5000 events in 274.042853ms +Burst test completed: 50000 events in 7.891576755s, errors: 0 +Events/sec: 6335.87 +Wiping database between tests... +RunMixedReadWriteTest (Badger).. + +=== Mixed Read/Write Test === +Generating 1000 unique synthetic events (minimum 300 bytes each)... +Generated 1000 events: + Average content size: 312 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Pre-populating database for read tests... +Generating 50000 unique synthetic events (minimum 300 bytes each)... +Generated 50000 events: + Average content size: 314 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Mixed test completed: 25000 writes, 25000 reads in 24.900476855s +Combined ops/sec: 2007.99 +Wiping database between tests... +RunQueryTest (Badger).. + +=== Query Test === +Generating 10000 unique synthetic events (minimum 300 bytes each)... +Generated 10000 events: + Average content size: 313 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Pre-populating database with 10000 events for query tests... +Query test completed: 410621 queries in 1m0.004293618s +Queries/sec: 6843.19 +Avg query latency: 2.208463ms +P95 query latency: 8.264ms +P99 query latency: 12.52398ms +Wiping database between tests... +RunConcurrentQueryStoreTest (Badger).. + +=== Concurrent Query/Store Test === +Generating 5000 unique synthetic events (minimum 300 bytes each)... +Generated 5000 events: + Average content size: 313 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Pre-populating database with 5000 events for concurrent query/store test... +Generating 50000 unique synthetic events (minimum 300 bytes each)... +Generated 50000 events: + Average content size: 314 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Concurrent test completed: 308780 operations (258780 queries, 50000 writes) in 1m0.002949862s +Operations/sec: 5146.08 +Avg latency: 1.517721ms +Avg query latency: 1.590458ms +Avg write latency: 1.141264ms +P95 latency: 3.798681ms +P99 latency: 9.90181ms + +=== Badger benchmark completed === + + +================================================================================ +BENCHMARK REPORT +================================================================================ + +Test: Peak Throughput +Duration: 2.852065909s +Total Events: 50000 +Events/sec: 17531.15 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 288 MB +Avg Latency: 1.233875ms +P90 Latency: 1.547505ms +P95 Latency: 1.713051ms +P99 Latency: 3.452631ms +Bottom 10% Avg Latency: 707.713µs +---------------------------------------- + +Test: Burst Pattern +Duration: 7.891576755s +Total Events: 50000 +Events/sec: 6335.87 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 282 MB +Avg Latency: 1.239192ms +P90 Latency: 1.634621ms +P95 Latency: 1.880869ms +P99 Latency: 3.451389ms +Bottom 10% Avg Latency: 633.361µs +---------------------------------------- + +Test: Mixed Read/Write +Duration: 24.900476855s +Total Events: 50000 +Events/sec: 2007.99 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 179 MB +Avg Latency: 632.275µs +P90 Latency: 820.942µs +P95 Latency: 918.848µs +P99 Latency: 1.159557ms +Bottom 10% Avg Latency: 3.463779ms +---------------------------------------- + +Test: Query Performance +Duration: 1m0.004293618s +Total Events: 410621 +Events/sec: 6843.19 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 183 MB +Avg Latency: 2.208463ms +P90 Latency: 6.696276ms +P95 Latency: 8.264ms +P99 Latency: 12.52398ms +Bottom 10% Avg Latency: 9.093268ms +---------------------------------------- + +Test: Concurrent Query/Store +Duration: 1m0.002949862s +Total Events: 308780 +Events/sec: 5146.08 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 137 MB +Avg Latency: 1.517721ms +P90 Latency: 3.086927ms +P95 Latency: 3.798681ms +P99 Latency: 9.90181ms +Bottom 10% Avg Latency: 5.471135ms +---------------------------------------- + +Report saved to: /tmp/benchmark_khatru-sqlite_8/benchmark_report.txt +AsciiDoc report saved to: /tmp/benchmark_khatru-sqlite_8/benchmark_report.adoc + +RELAY_NAME: khatru-sqlite +RELAY_URL: ws://khatru-sqlite:3334 +TEST_TIMESTAMP: 2025-12-03T22:33:46+00:00 +BENCHMARK_CONFIG: + Events: 50000 + Workers: 24 + Duration: 60s diff --git a/cmd/benchmark/reports/run_20251203_222024/next-orly-badger_results.txt b/cmd/benchmark/reports/run_20251203_222024/next-orly-badger_results.txt new file mode 100644 index 0000000..f62e3c7 --- /dev/null +++ b/cmd/benchmark/reports/run_20251203_222024/next-orly-badger_results.txt @@ -0,0 +1,201 @@ +Starting Nostr Relay Benchmark (Badger Backend) +Data Directory: /tmp/benchmark_next-orly-badger_8 +Events: 50000, Workers: 24, Duration: 1m0s +1764800626547123ℹ️ migrating to version 1... /build/pkg/database/migrations.go:68 +1764800626547201ℹ️ migrating to version 2... /build/pkg/database/migrations.go:75 +1764800626547221ℹ️ migrating to version 3... /build/pkg/database/migrations.go:82 +1764800626547228ℹ️ cleaning up ephemeral events (kinds 20000-29999)... /build/pkg/database/migrations.go:304 +1764800626547238ℹ️ cleaned up 0 ephemeral events from database /build/pkg/database/migrations.go:349 +1764800626547252ℹ️ migrating to version 4... /build/pkg/database/migrations.go:89 +1764800626547257ℹ️ converting events to optimized inline storage (Reiser4 optimization)... /build/pkg/database/migrations.go:357 +1764800626547269ℹ️ found 0 events to convert (0 regular, 0 replaceable, 0 addressable) /build/pkg/database/migrations.go:446 +1764800626547275ℹ️ migration complete: converted 0 events to optimized inline storage, deleted 0 old keys /build/pkg/database/migrations.go:555 +1764800626547291ℹ️ migrating to version 5... /build/pkg/database/migrations.go:96 +1764800626547296ℹ️ re-encoding events with optimized tag binary format... /build/pkg/database/migrations.go:562 +1764800626547303ℹ️ found 0 events with e/p tags to re-encode /build/pkg/database/migrations.go:649 +1764800626547308ℹ️ no events need re-encoding /build/pkg/database/migrations.go:652 +1764800626547323ℹ️ migrating to version 6... /build/pkg/database/migrations.go:103 +1764800626547329ℹ️ converting events to compact serial-reference format... /build/pkg/database/migrations.go:706 +1764800626547351ℹ️ found 0 events to convert to compact format /build/pkg/database/migrations.go:846 +1764800626547357ℹ️ no events need conversion /build/pkg/database/migrations.go:849 + +╔════════════════════════════════════════════════════════╗ +║ BADGER BACKEND BENCHMARK SUITE ║ +╚════════════════════════════════════════════════════════╝ + +=== Starting Badger benchmark === +RunPeakThroughputTest (Badger).. + +=== Peak Throughput Test === +2025/12/03 22:23:46 INFO: Successfully loaded embedded libsecp256k1 v5.0.0 from /tmp/orly-libsecp256k1/libsecp256k1.so +Events saved: 50000/50000 (100.0%), errors: 0 +Duration: 2.779639238s +Events/sec: 17987.95 +Avg latency: 1.16914ms +P90 latency: 1.459324ms +P95 latency: 1.605171ms +P99 latency: 3.239809ms +Bottom 10% Avg latency: 675.419µs +Wiping database between tests... +RunBurstPatternTest (Badger).. + +=== Burst Pattern Test === +Burst completed: 5000 events in 289.152592ms +Burst completed: 5000 events in 284.512743ms +Burst completed: 5000 events in 285.58317ms +Burst completed: 5000 events in 283.486103ms +Burst completed: 5000 events in 351.630471ms +Burst completed: 5000 events in 410.422971ms +Burst completed: 5000 events in 272.00462ms +Burst completed: 5000 events in 258.981762ms +Burst completed: 5000 events in 287.217917ms +Burst completed: 5000 events in 274.519636ms +Burst test completed: 50000 events in 8.004626821s, errors: 0 +Events/sec: 6246.39 +Wiping database between tests... +RunMixedReadWriteTest (Badger).. + +=== Mixed Read/Write Test === +Generating 1000 unique synthetic events (minimum 300 bytes each)... +Generated 1000 events: + Average content size: 312 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Pre-populating database for read tests... +Generating 50000 unique synthetic events (minimum 300 bytes each)... +Generated 50000 events: + Average content size: 314 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Mixed test completed: 25000 writes, 25000 reads in 24.365264731s +Combined ops/sec: 2052.10 +Wiping database between tests... +RunQueryTest (Badger).. + +=== Query Test === +Generating 10000 unique synthetic events (minimum 300 bytes each)... +Generated 10000 events: + Average content size: 313 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Pre-populating database with 10000 events for query tests... +Query test completed: 395932 queries in 1m0.004955045s +Queries/sec: 6598.32 +Avg query latency: 2.330632ms +P95 query latency: 8.751923ms +P99 query latency: 13.223897ms +Wiping database between tests... +RunConcurrentQueryStoreTest (Badger).. + +=== Concurrent Query/Store Test === +Generating 5000 unique synthetic events (minimum 300 bytes each)... +Generated 5000 events: + Average content size: 313 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Pre-populating database with 5000 events for concurrent query/store test... +Generating 50000 unique synthetic events (minimum 300 bytes each)... +Generated 50000 events: + Average content size: 314 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Concurrent test completed: 309032 operations (259032 queries, 50000 writes) in 1m0.003111764s +Operations/sec: 5150.27 +Avg latency: 1.47962ms +Avg query latency: 1.571532ms +Avg write latency: 1.003456ms +P95 latency: 3.833182ms +P99 latency: 9.589651ms + +=== Badger benchmark completed === + + +================================================================================ +BENCHMARK REPORT +================================================================================ + +Test: Peak Throughput +Duration: 2.779639238s +Total Events: 50000 +Events/sec: 17987.95 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 217 MB +Avg Latency: 1.16914ms +P90 Latency: 1.459324ms +P95 Latency: 1.605171ms +P99 Latency: 3.239809ms +Bottom 10% Avg Latency: 675.419µs +---------------------------------------- + +Test: Burst Pattern +Duration: 8.004626821s +Total Events: 50000 +Events/sec: 6246.39 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 335 MB +Avg Latency: 1.301155ms +P90 Latency: 1.847122ms +P95 Latency: 2.260728ms +P99 Latency: 3.744669ms +Bottom 10% Avg Latency: 634.48µs +---------------------------------------- + +Test: Mixed Read/Write +Duration: 24.365264731s +Total Events: 50000 +Events/sec: 2052.10 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 167 MB +Avg Latency: 386.252µs +P90 Latency: 816.533µs +P95 Latency: 911.513µs +P99 Latency: 1.142853ms +Bottom 10% Avg Latency: 1.03593ms +---------------------------------------- + +Test: Query Performance +Duration: 1m0.004955045s +Total Events: 395932 +Events/sec: 6598.32 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 202 MB +Avg Latency: 2.330632ms +P90 Latency: 7.016915ms +P95 Latency: 8.751923ms +P99 Latency: 13.223897ms +Bottom 10% Avg Latency: 9.659987ms +---------------------------------------- + +Test: Concurrent Query/Store +Duration: 1m0.003111764s +Total Events: 309032 +Events/sec: 5150.27 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 170 MB +Avg Latency: 1.47962ms +P90 Latency: 3.082944ms +P95 Latency: 3.833182ms +P99 Latency: 9.589651ms +Bottom 10% Avg Latency: 5.322657ms +---------------------------------------- + +Report saved to: /tmp/benchmark_next-orly-badger_8/benchmark_report.txt +AsciiDoc report saved to: /tmp/benchmark_next-orly-badger_8/benchmark_report.adoc + +RELAY_NAME: next-orly-badger +RELAY_URL: ws://next-orly-badger:8080 +TEST_TIMESTAMP: 2025-12-03T22:27:02+00:00 +BENCHMARK_CONFIG: + Events: 50000 + Workers: 24 + Duration: 60s diff --git a/cmd/benchmark/reports/run_20251203_222024/next-orly-neo4j_results.txt b/cmd/benchmark/reports/run_20251203_222024/next-orly-neo4j_results.txt new file mode 100644 index 0000000..b7c5b16 --- /dev/null +++ b/cmd/benchmark/reports/run_20251203_222024/next-orly-neo4j_results.txt @@ -0,0 +1,201 @@ +Starting Nostr Relay Benchmark (Badger Backend) +Data Directory: /tmp/benchmark_next-orly-neo4j_8 +Events: 50000, Workers: 24, Duration: 1m0s +1764800827923617ℹ️ migrating to version 1... /build/pkg/database/migrations.go:68 +1764800827923722ℹ️ migrating to version 2... /build/pkg/database/migrations.go:75 +1764800827923845ℹ️ migrating to version 3... /build/pkg/database/migrations.go:82 +1764800827923903ℹ️ cleaning up ephemeral events (kinds 20000-29999)... /build/pkg/database/migrations.go:304 +1764800827923913ℹ️ cleaned up 0 ephemeral events from database /build/pkg/database/migrations.go:349 +1764800827923932ℹ️ migrating to version 4... /build/pkg/database/migrations.go:89 +1764800827923938ℹ️ converting events to optimized inline storage (Reiser4 optimization)... /build/pkg/database/migrations.go:357 +1764800827923950ℹ️ found 0 events to convert (0 regular, 0 replaceable, 0 addressable) /build/pkg/database/migrations.go:446 +1764800827923957ℹ️ migration complete: converted 0 events to optimized inline storage, deleted 0 old keys /build/pkg/database/migrations.go:555 +1764800827923975ℹ️ migrating to version 5... /build/pkg/database/migrations.go:96 +1764800827923981ℹ️ re-encoding events with optimized tag binary format... /build/pkg/database/migrations.go:562 +1764800827923992ℹ️ found 0 events with e/p tags to re-encode /build/pkg/database/migrations.go:649 +1764800827923997ℹ️ no events need re-encoding /build/pkg/database/migrations.go:652 +1764800827924024ℹ️ migrating to version 6... /build/pkg/database/migrations.go:103 +1764800827924030ℹ️ converting events to compact serial-reference format... /build/pkg/database/migrations.go:706 +1764800827924051ℹ️ found 0 events to convert to compact format /build/pkg/database/migrations.go:846 +1764800827924056ℹ️ no events need conversion /build/pkg/database/migrations.go:849 + +╔════════════════════════════════════════════════════════╗ +║ BADGER BACKEND BENCHMARK SUITE ║ +╚════════════════════════════════════════════════════════╝ + +=== Starting Badger benchmark === +RunPeakThroughputTest (Badger).. + +=== Peak Throughput Test === +2025/12/03 22:27:07 INFO: Successfully loaded embedded libsecp256k1 v5.0.0 from /tmp/orly-libsecp256k1/libsecp256k1.so +Events saved: 50000/50000 (100.0%), errors: 0 +Duration: 2.867458976s +Events/sec: 17437.04 +Avg latency: 1.250926ms +P90 latency: 1.579234ms +P95 latency: 1.757814ms +P99 latency: 3.529624ms +Bottom 10% Avg latency: 735.971µs +Wiping database between tests... +RunBurstPatternTest (Badger).. + +=== Burst Pattern Test === +Burst completed: 5000 events in 325.40241ms +Burst completed: 5000 events in 303.100725ms +Burst completed: 5000 events in 322.600483ms +Burst completed: 5000 events in 368.813118ms +Burst completed: 5000 events in 344.272535ms +Burst completed: 5000 events in 313.590737ms +Burst completed: 5000 events in 285.903125ms +Burst completed: 5000 events in 371.578395ms +Burst completed: 5000 events in 304.71264ms +Burst completed: 5000 events in 303.146753ms +Burst test completed: 50000 events in 8.249715579s, errors: 0 +Events/sec: 6060.82 +Wiping database between tests... +RunMixedReadWriteTest (Badger).. + +=== Mixed Read/Write Test === +Generating 1000 unique synthetic events (minimum 300 bytes each)... +Generated 1000 events: + Average content size: 312 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Pre-populating database for read tests... +Generating 50000 unique synthetic events (minimum 300 bytes each)... +Generated 50000 events: + Average content size: 314 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Mixed test completed: 25000 writes, 25000 reads in 24.349183827s +Combined ops/sec: 2053.46 +Wiping database between tests... +RunQueryTest (Badger).. + +=== Query Test === +Generating 10000 unique synthetic events (minimum 300 bytes each)... +Generated 10000 events: + Average content size: 313 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Pre-populating database with 10000 events for query tests... +Query test completed: 401050 queries in 1m0.005784437s +Queries/sec: 6683.52 +Avg query latency: 2.274359ms +P95 query latency: 8.507568ms +P99 query latency: 12.862634ms +Wiping database between tests... +RunConcurrentQueryStoreTest (Badger).. + +=== Concurrent Query/Store Test === +Generating 5000 unique synthetic events (minimum 300 bytes each)... +Generated 5000 events: + Average content size: 313 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Pre-populating database with 5000 events for concurrent query/store test... +Generating 50000 unique synthetic events (minimum 300 bytes each)... +Generated 50000 events: + Average content size: 314 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Concurrent test completed: 306446 operations (256446 queries, 50000 writes) in 1m0.003089159s +Operations/sec: 5107.17 +Avg latency: 1.529829ms +Avg query latency: 1.613393ms +Avg write latency: 1.101234ms +P95 latency: 3.928746ms +P99 latency: 10.421101ms + +=== Badger benchmark completed === + + +================================================================================ +BENCHMARK REPORT +================================================================================ + +Test: Peak Throughput +Duration: 2.867458976s +Total Events: 50000 +Events/sec: 17437.04 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 210 MB +Avg Latency: 1.250926ms +P90 Latency: 1.579234ms +P95 Latency: 1.757814ms +P99 Latency: 3.529624ms +Bottom 10% Avg Latency: 735.971µs +---------------------------------------- + +Test: Burst Pattern +Duration: 8.249715579s +Total Events: 50000 +Events/sec: 6060.82 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 207 MB +Avg Latency: 1.493295ms +P90 Latency: 2.04999ms +P95 Latency: 2.404304ms +P99 Latency: 4.303908ms +Bottom 10% Avg Latency: 768.239µs +---------------------------------------- + +Test: Mixed Read/Write +Duration: 24.349183827s +Total Events: 50000 +Events/sec: 2053.46 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 176 MB +Avg Latency: 379.443µs +P90 Latency: 799.27µs +P95 Latency: 896.796µs +P99 Latency: 1.119981ms +Bottom 10% Avg Latency: 1.022564ms +---------------------------------------- + +Test: Query Performance +Duration: 1m0.005784437s +Total Events: 401050 +Events/sec: 6683.52 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 176 MB +Avg Latency: 2.274359ms +P90 Latency: 6.877657ms +P95 Latency: 8.507568ms +P99 Latency: 12.862634ms +Bottom 10% Avg Latency: 9.365763ms +---------------------------------------- + +Test: Concurrent Query/Store +Duration: 1m0.003089159s +Total Events: 306446 +Events/sec: 5107.17 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 218 MB +Avg Latency: 1.529829ms +P90 Latency: 3.147159ms +P95 Latency: 3.928746ms +P99 Latency: 10.421101ms +Bottom 10% Avg Latency: 5.559413ms +---------------------------------------- + +Report saved to: /tmp/benchmark_next-orly-neo4j_8/benchmark_report.txt +AsciiDoc report saved to: /tmp/benchmark_next-orly-neo4j_8/benchmark_report.adoc + +RELAY_NAME: next-orly-neo4j +RELAY_URL: ws://next-orly-neo4j:8080 +TEST_TIMESTAMP: 2025-12-03T22:30:24+00:00 +BENCHMARK_CONFIG: + Events: 50000 + Workers: 24 + Duration: 60s diff --git a/cmd/benchmark/reports/run_20251203_222024/nostr-rs-relay_results.txt b/cmd/benchmark/reports/run_20251203_222024/nostr-rs-relay_results.txt new file mode 100644 index 0000000..4f69385 --- /dev/null +++ b/cmd/benchmark/reports/run_20251203_222024/nostr-rs-relay_results.txt @@ -0,0 +1,201 @@ +Starting Nostr Relay Benchmark (Badger Backend) +Data Directory: /tmp/benchmark_nostr-rs-relay_8 +Events: 50000, Workers: 24, Duration: 1m0s +1764801836806913ℹ️ migrating to version 1... /build/pkg/database/migrations.go:68 +1764801836806998ℹ️ migrating to version 2... /build/pkg/database/migrations.go:75 +1764801836807017ℹ️ migrating to version 3... /build/pkg/database/migrations.go:82 +1764801836807022ℹ️ cleaning up ephemeral events (kinds 20000-29999)... /build/pkg/database/migrations.go:304 +1764801836807029ℹ️ cleaned up 0 ephemeral events from database /build/pkg/database/migrations.go:349 +1764801836807042ℹ️ migrating to version 4... /build/pkg/database/migrations.go:89 +1764801836807046ℹ️ converting events to optimized inline storage (Reiser4 optimization)... /build/pkg/database/migrations.go:357 +1764801836807056ℹ️ found 0 events to convert (0 regular, 0 replaceable, 0 addressable) /build/pkg/database/migrations.go:446 +1764801836807061ℹ️ migration complete: converted 0 events to optimized inline storage, deleted 0 old keys /build/pkg/database/migrations.go:555 +1764801836807076ℹ️ migrating to version 5... /build/pkg/database/migrations.go:96 +1764801836807081ℹ️ re-encoding events with optimized tag binary format... /build/pkg/database/migrations.go:562 +1764801836807094ℹ️ found 0 events with e/p tags to re-encode /build/pkg/database/migrations.go:649 +1764801836807124ℹ️ no events need re-encoding /build/pkg/database/migrations.go:652 +1764801836807178ℹ️ migrating to version 6... /build/pkg/database/migrations.go:103 +1764801836807185ℹ️ converting events to compact serial-reference format... /build/pkg/database/migrations.go:706 +1764801836807242ℹ️ found 0 events to convert to compact format /build/pkg/database/migrations.go:846 +1764801836807283ℹ️ no events need conversion /build/pkg/database/migrations.go:849 + +╔════════════════════════════════════════════════════════╗ +║ BADGER BACKEND BENCHMARK SUITE ║ +╚════════════════════════════════════════════════════════╝ + +=== Starting Badger benchmark === +RunPeakThroughputTest (Badger).. + +=== Peak Throughput Test === +2025/12/03 22:43:56 INFO: Successfully loaded embedded libsecp256k1 v5.0.0 from /tmp/orly-libsecp256k1/libsecp256k1.so +Events saved: 50000/50000 (100.0%), errors: 0 +Duration: 2.911273959s +Events/sec: 17174.61 +Avg latency: 1.281647ms +P90 latency: 1.626819ms +P95 latency: 1.836808ms +P99 latency: 3.758588ms +Bottom 10% Avg latency: 742.249µs +Wiping database between tests... +RunBurstPatternTest (Badger).. + +=== Burst Pattern Test === +Burst completed: 5000 events in 292.272251ms +Burst completed: 5000 events in 287.701125ms +Burst completed: 5000 events in 286.616429ms +Burst completed: 5000 events in 293.830439ms +Burst completed: 5000 events in 301.388252ms +Burst completed: 5000 events in 287.188158ms +Burst completed: 5000 events in 263.711266ms +Burst completed: 5000 events in 318.616274ms +Burst completed: 5000 events in 310.007309ms +Burst completed: 5000 events in 273.375973ms +Burst test completed: 50000 events in 7.922605603s, errors: 0 +Events/sec: 6311.06 +Wiping database between tests... +RunMixedReadWriteTest (Badger).. + +=== Mixed Read/Write Test === +Generating 1000 unique synthetic events (minimum 300 bytes each)... +Generated 1000 events: + Average content size: 312 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Pre-populating database for read tests... +Generating 50000 unique synthetic events (minimum 300 bytes each)... +Generated 50000 events: + Average content size: 314 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Mixed test completed: 25000 writes, 25000 reads in 24.449120282s +Combined ops/sec: 2045.06 +Wiping database between tests... +RunQueryTest (Badger).. + +=== Query Test === +Generating 10000 unique synthetic events (minimum 300 bytes each)... +Generated 10000 events: + Average content size: 313 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Pre-populating database with 10000 events for query tests... +Query test completed: 417600 queries in 1m0.004478253s +Queries/sec: 6959.48 +Avg query latency: 2.151151ms +P95 query latency: 8.027278ms +P99 query latency: 12.154981ms +Wiping database between tests... +RunConcurrentQueryStoreTest (Badger).. + +=== Concurrent Query/Store Test === +Generating 5000 unique synthetic events (minimum 300 bytes each)... +Generated 5000 events: + Average content size: 313 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Pre-populating database with 5000 events for concurrent query/store test... +Generating 50000 unique synthetic events (minimum 300 bytes each)... +Generated 50000 events: + Average content size: 314 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Concurrent test completed: 317282 operations (267282 queries, 50000 writes) in 1m0.002851777s +Operations/sec: 5287.78 +Avg latency: 1.438019ms +Avg query latency: 1.509815ms +Avg write latency: 1.054223ms +P95 latency: 3.604275ms +P99 latency: 8.983541ms + +=== Badger benchmark completed === + + +================================================================================ +BENCHMARK REPORT +================================================================================ + +Test: Peak Throughput +Duration: 2.911273959s +Total Events: 50000 +Events/sec: 17174.61 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 127 MB +Avg Latency: 1.281647ms +P90 Latency: 1.626819ms +P95 Latency: 1.836808ms +P99 Latency: 3.758588ms +Bottom 10% Avg Latency: 742.249µs +---------------------------------------- + +Test: Burst Pattern +Duration: 7.922605603s +Total Events: 50000 +Events/sec: 6311.06 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 207 MB +Avg Latency: 1.260479ms +P90 Latency: 1.672696ms +P95 Latency: 1.893887ms +P99 Latency: 3.384445ms +Bottom 10% Avg Latency: 627.786µs +---------------------------------------- + +Test: Mixed Read/Write +Duration: 24.449120282s +Total Events: 50000 +Events/sec: 2045.06 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 160 MB +Avg Latency: 393.867µs +P90 Latency: 827.906µs +P95 Latency: 922.647µs +P99 Latency: 1.157515ms +Bottom 10% Avg Latency: 1.038892ms +---------------------------------------- + +Test: Query Performance +Duration: 1m0.004478253s +Total Events: 417600 +Events/sec: 6959.48 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 205 MB +Avg Latency: 2.151151ms +P90 Latency: 6.525088ms +P95 Latency: 8.027278ms +P99 Latency: 12.154981ms +Bottom 10% Avg Latency: 8.836851ms +---------------------------------------- + +Test: Concurrent Query/Store +Duration: 1m0.002851777s +Total Events: 317282 +Events/sec: 5287.78 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 168 MB +Avg Latency: 1.438019ms +P90 Latency: 2.919631ms +P95 Latency: 3.604275ms +P99 Latency: 8.983541ms +Bottom 10% Avg Latency: 5.142371ms +---------------------------------------- + +Report saved to: /tmp/benchmark_nostr-rs-relay_8/benchmark_report.txt +AsciiDoc report saved to: /tmp/benchmark_nostr-rs-relay_8/benchmark_report.adoc + +RELAY_NAME: nostr-rs-relay +RELAY_URL: ws://nostr-rs-relay:8080 +TEST_TIMESTAMP: 2025-12-03T22:47:13+00:00 +BENCHMARK_CONFIG: + Events: 50000 + Workers: 24 + Duration: 60s diff --git a/cmd/benchmark/reports/run_20251203_222024/relayer-basic_results.txt b/cmd/benchmark/reports/run_20251203_222024/relayer-basic_results.txt new file mode 100644 index 0000000..32c0e34 --- /dev/null +++ b/cmd/benchmark/reports/run_20251203_222024/relayer-basic_results.txt @@ -0,0 +1,201 @@ +Starting Nostr Relay Benchmark (Badger Backend) +Data Directory: /tmp/benchmark_relayer-basic_8 +Events: 50000, Workers: 24, Duration: 1m0s +1764801433220018ℹ️ migrating to version 1... /build/pkg/database/migrations.go:68 +1764801433220118ℹ️ migrating to version 2... /build/pkg/database/migrations.go:75 +1764801433220142ℹ️ migrating to version 3... /build/pkg/database/migrations.go:82 +1764801433220148ℹ️ cleaning up ephemeral events (kinds 20000-29999)... /build/pkg/database/migrations.go:304 +1764801433220157ℹ️ cleaned up 0 ephemeral events from database /build/pkg/database/migrations.go:349 +1764801433220179ℹ️ migrating to version 4... /build/pkg/database/migrations.go:89 +1764801433220185ℹ️ converting events to optimized inline storage (Reiser4 optimization)... /build/pkg/database/migrations.go:357 +1764801433220202ℹ️ found 0 events to convert (0 regular, 0 replaceable, 0 addressable) /build/pkg/database/migrations.go:446 +1764801433220208ℹ️ migration complete: converted 0 events to optimized inline storage, deleted 0 old keys /build/pkg/database/migrations.go:555 +1764801433220225ℹ️ migrating to version 5... /build/pkg/database/migrations.go:96 +1764801433220231ℹ️ re-encoding events with optimized tag binary format... /build/pkg/database/migrations.go:562 +1764801433220263ℹ️ found 0 events with e/p tags to re-encode /build/pkg/database/migrations.go:649 +1764801433220299ℹ️ no events need re-encoding /build/pkg/database/migrations.go:652 +1764801433220355ℹ️ migrating to version 6... /build/pkg/database/migrations.go:103 +1764801433220361ℹ️ converting events to compact serial-reference format... /build/pkg/database/migrations.go:706 +1764801433220380ℹ️ found 0 events to convert to compact format /build/pkg/database/migrations.go:846 +1764801433220384ℹ️ no events need conversion /build/pkg/database/migrations.go:849 + +╔════════════════════════════════════════════════════════╗ +║ BADGER BACKEND BENCHMARK SUITE ║ +╚════════════════════════════════════════════════════════╝ + +=== Starting Badger benchmark === +RunPeakThroughputTest (Badger).. + +=== Peak Throughput Test === +2025/12/03 22:37:13 INFO: Successfully loaded embedded libsecp256k1 v5.0.0 from /tmp/orly-libsecp256k1/libsecp256k1.so +Events saved: 50000/50000 (100.0%), errors: 0 +Duration: 2.81575396s +Events/sec: 17757.23 +Avg latency: 1.193531ms +P90 latency: 1.503923ms +P95 latency: 1.679267ms +P99 latency: 3.258063ms +Bottom 10% Avg latency: 679.232µs +Wiping database between tests... +RunBurstPatternTest (Badger).. + +=== Burst Pattern Test === +Burst completed: 5000 events in 282.513648ms +Burst completed: 5000 events in 298.930177ms +Burst completed: 5000 events in 368.119471ms +Burst completed: 5000 events in 344.305787ms +Burst completed: 5000 events in 299.829461ms +Burst completed: 5000 events in 328.253293ms +Burst completed: 5000 events in 268.415756ms +Burst completed: 5000 events in 258.778746ms +Burst completed: 5000 events in 281.496082ms +Burst completed: 5000 events in 291.526061ms +Burst test completed: 50000 events in 8.029129461s, errors: 0 +Events/sec: 6227.33 +Wiping database between tests... +RunMixedReadWriteTest (Badger).. + +=== Mixed Read/Write Test === +Generating 1000 unique synthetic events (minimum 300 bytes each)... +Generated 1000 events: + Average content size: 312 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Pre-populating database for read tests... +Generating 50000 unique synthetic events (minimum 300 bytes each)... +Generated 50000 events: + Average content size: 314 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Mixed test completed: 25000 writes, 25000 reads in 24.368434728s +Combined ops/sec: 2051.83 +Wiping database between tests... +RunQueryTest (Badger).. + +=== Query Test === +Generating 10000 unique synthetic events (minimum 300 bytes each)... +Generated 10000 events: + Average content size: 313 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Pre-populating database with 10000 events for query tests... +Query test completed: 399766 queries in 1m0.004004537s +Queries/sec: 6662.32 +Avg query latency: 2.299802ms +P95 query latency: 8.583876ms +P99 query latency: 12.879727ms +Wiping database between tests... +RunConcurrentQueryStoreTest (Badger).. + +=== Concurrent Query/Store Test === +Generating 5000 unique synthetic events (minimum 300 bytes each)... +Generated 5000 events: + Average content size: 313 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Pre-populating database with 5000 events for concurrent query/store test... +Generating 50000 unique synthetic events (minimum 300 bytes each)... +Generated 50000 events: + Average content size: 314 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Concurrent test completed: 319713 operations (269713 queries, 50000 writes) in 1m0.004382807s +Operations/sec: 5328.16 +Avg latency: 1.408648ms +Avg query latency: 1.486258ms +Avg write latency: 990µs +P95 latency: 3.553437ms +P99 latency: 8.491811ms + +=== Badger benchmark completed === + + +================================================================================ +BENCHMARK REPORT +================================================================================ + +Test: Peak Throughput +Duration: 2.81575396s +Total Events: 50000 +Events/sec: 17757.23 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 279 MB +Avg Latency: 1.193531ms +P90 Latency: 1.503923ms +P95 Latency: 1.679267ms +P99 Latency: 3.258063ms +Bottom 10% Avg Latency: 679.232µs +---------------------------------------- + +Test: Burst Pattern +Duration: 8.029129461s +Total Events: 50000 +Events/sec: 6227.33 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 314 MB +Avg Latency: 1.304ms +P90 Latency: 1.833241ms +P95 Latency: 2.155365ms +P99 Latency: 3.621225ms +Bottom 10% Avg Latency: 577.319µs +---------------------------------------- + +Test: Mixed Read/Write +Duration: 24.368434728s +Total Events: 50000 +Events/sec: 2051.83 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 302 MB +Avg Latency: 393.704µs +P90 Latency: 831.964µs +P95 Latency: 930.632µs +P99 Latency: 1.162684ms +Bottom 10% Avg Latency: 1.038382ms +---------------------------------------- + +Test: Query Performance +Duration: 1m0.004004537s +Total Events: 399766 +Events/sec: 6662.32 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 154 MB +Avg Latency: 2.299802ms +P90 Latency: 6.959824ms +P95 Latency: 8.583876ms +P99 Latency: 12.879727ms +Bottom 10% Avg Latency: 9.428864ms +---------------------------------------- + +Test: Concurrent Query/Store +Duration: 1m0.004382807s +Total Events: 319713 +Events/sec: 5328.16 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 181 MB +Avg Latency: 1.408648ms +P90 Latency: 2.876838ms +P95 Latency: 3.553437ms +P99 Latency: 8.491811ms +Bottom 10% Avg Latency: 4.993856ms +---------------------------------------- + +Report saved to: /tmp/benchmark_relayer-basic_8/benchmark_report.txt +AsciiDoc report saved to: /tmp/benchmark_relayer-basic_8/benchmark_report.adoc + +RELAY_NAME: relayer-basic +RELAY_URL: ws://relayer-basic:7447 +TEST_TIMESTAMP: 2025-12-03T22:40:30+00:00 +BENCHMARK_CONFIG: + Events: 50000 + Workers: 24 + Duration: 60s diff --git a/cmd/benchmark/reports/run_20251203_222024/rely-sqlite_results.txt b/cmd/benchmark/reports/run_20251203_222024/rely-sqlite_results.txt new file mode 100644 index 0000000..262fa8a --- /dev/null +++ b/cmd/benchmark/reports/run_20251203_222024/rely-sqlite_results.txt @@ -0,0 +1,202 @@ +Starting Nostr Relay Benchmark (Badger Backend) +Data Directory: /tmp/benchmark_rely-sqlite_8 +Events: 50000, Workers: 24, Duration: 1m0s +1764800424570824ℹ️ migrating to version 1... /build/pkg/database/migrations.go:68 +1764800424571528ℹ️ migrating to version 2... /build/pkg/database/migrations.go:75 +1764800424571758ℹ️ migrating to version 3... /build/pkg/database/migrations.go:82 +1764800424571773ℹ️ cleaning up ephemeral events (kinds 20000-29999)... /build/pkg/database/migrations.go:304 +1764800424571799ℹ️ cleaned up 0 ephemeral events from database /build/pkg/database/migrations.go:349 +1764800424571834ℹ️ migrating to version 4... /build/pkg/database/migrations.go:89 +1764800424571844ℹ️ converting events to optimized inline storage (Reiser4 optimization)... /build/pkg/database/migrations.go:357 +1764800424571863ℹ️ found 0 events to convert (0 regular, 0 replaceable, 0 addressable) /build/pkg/database/migrations.go:446 +1764800424571878ℹ️ migration complete: converted 0 events to optimized inline storage, deleted 0 old keys /build/pkg/database/migrations.go:555 +1764800424571916ℹ️ migrating to version 5... /build/pkg/database/migrations.go:96 +1764800424571927ℹ️ re-encoding events with optimized tag binary format... /build/pkg/database/migrations.go:562 +1764800424571949ℹ️ found 0 events with e/p tags to re-encode /build/pkg/database/migrations.go:649 +1764800424571958ℹ️ no events need re-encoding /build/pkg/database/migrations.go:652 +1764800424571993ℹ️ migrating to version 6... /build/pkg/database/migrations.go:103 +1764800424572004ℹ️ converting events to compact serial-reference format... /build/pkg/database/migrations.go:706 +1764800424572070ℹ️ found 0 events to convert to compact format /build/pkg/database/migrations.go:846 +1764800424572082ℹ️ no events need conversion /build/pkg/database/migrations.go:849 + +╔════════════════════════════════════════════════════════╗ +║ BADGER BACKEND BENCHMARK SUITE ║ +╚════════════════════════════════════════════════════════╝ + +=== Starting Badger benchmark === +RunPeakThroughputTest (Badger).. + +=== Peak Throughput Test === +2025/12/03 22:20:24 INFO: Extracted embedded libsecp256k1 to /tmp/orly-libsecp256k1/libsecp256k1.so +2025/12/03 22:20:24 INFO: Successfully loaded embedded libsecp256k1 v5.0.0 from /tmp/orly-libsecp256k1/libsecp256k1.so +Events saved: 50000/50000 (100.0%), errors: 0 +Duration: 2.995055353s +Events/sec: 16694.18 +Avg latency: 1.339216ms +P90 latency: 1.68929ms +P95 latency: 1.894111ms +P99 latency: 3.956722ms +Bottom 10% Avg latency: 779.552µs +Wiping database between tests... +RunBurstPatternTest (Badger).. + +=== Burst Pattern Test === +Burst completed: 5000 events in 287.657346ms +Burst completed: 5000 events in 297.188663ms +Burst completed: 5000 events in 367.265309ms +Burst completed: 5000 events in 331.9274ms +Burst completed: 5000 events in 304.066462ms +Burst completed: 5000 events in 310.832609ms +Burst completed: 5000 events in 268.076751ms +Burst completed: 5000 events in 264.808751ms +Burst completed: 5000 events in 267.153131ms +Burst completed: 5000 events in 269.523097ms +Burst test completed: 50000 events in 7.973932498s, errors: 0 +Events/sec: 6270.43 +Wiping database between tests... +RunMixedReadWriteTest (Badger).. + +=== Mixed Read/Write Test === +Generating 1000 unique synthetic events (minimum 300 bytes each)... +Generated 1000 events: + Average content size: 312 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Pre-populating database for read tests... +Generating 50000 unique synthetic events (minimum 300 bytes each)... +Generated 50000 events: + Average content size: 314 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Mixed test completed: 25000 writes, 25000 reads in 24.337287687s +Combined ops/sec: 2054.46 +Wiping database between tests... +RunQueryTest (Badger).. + +=== Query Test === +Generating 10000 unique synthetic events (minimum 300 bytes each)... +Generated 10000 events: + Average content size: 313 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Pre-populating database with 10000 events for query tests... +Query test completed: 406493 queries in 1m0.003860956s +Queries/sec: 6774.45 +Avg query latency: 2.248129ms +P95 query latency: 8.401333ms +P99 query latency: 12.724368ms +Wiping database between tests... +RunConcurrentQueryStoreTest (Badger).. + +=== Concurrent Query/Store Test === +Generating 5000 unique synthetic events (minimum 300 bytes each)... +Generated 5000 events: + Average content size: 313 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Pre-populating database with 5000 events for concurrent query/store test... +Generating 50000 unique synthetic events (minimum 300 bytes each)... +Generated 50000 events: + Average content size: 314 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Concurrent test completed: 318750 operations (268750 queries, 50000 writes) in 1m0.003885697s +Operations/sec: 5312.16 +Avg latency: 1.416974ms +Avg query latency: 1.494262ms +Avg write latency: 1.001551ms +P95 latency: 3.592498ms +P99 latency: 8.935176ms + +=== Badger benchmark completed === + + +================================================================================ +BENCHMARK REPORT +================================================================================ + +Test: Peak Throughput +Duration: 2.995055353s +Total Events: 50000 +Events/sec: 16694.18 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 168 MB +Avg Latency: 1.339216ms +P90 Latency: 1.68929ms +P95 Latency: 1.894111ms +P99 Latency: 3.956722ms +Bottom 10% Avg Latency: 779.552µs +---------------------------------------- + +Test: Burst Pattern +Duration: 7.973932498s +Total Events: 50000 +Events/sec: 6270.43 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 200 MB +Avg Latency: 1.281976ms +P90 Latency: 1.779141ms +P95 Latency: 2.087148ms +P99 Latency: 3.70878ms +Bottom 10% Avg Latency: 616.517µs +---------------------------------------- + +Test: Mixed Read/Write +Duration: 24.337287687s +Total Events: 50000 +Events/sec: 2054.46 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 167 MB +Avg Latency: 393.526µs +P90 Latency: 818.886µs +P95 Latency: 910.529µs +P99 Latency: 1.137331ms +Bottom 10% Avg Latency: 1.057702ms +---------------------------------------- + +Test: Query Performance +Duration: 1m0.003860956s +Total Events: 406493 +Events/sec: 6774.45 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 218 MB +Avg Latency: 2.248129ms +P90 Latency: 6.801515ms +P95 Latency: 8.401333ms +P99 Latency: 12.724368ms +Bottom 10% Avg Latency: 9.254973ms +---------------------------------------- + +Test: Concurrent Query/Store +Duration: 1m0.003885697s +Total Events: 318750 +Events/sec: 5312.16 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 145 MB +Avg Latency: 1.416974ms +P90 Latency: 2.911313ms +P95 Latency: 3.592498ms +P99 Latency: 8.935176ms +Bottom 10% Avg Latency: 5.052685ms +---------------------------------------- + +Report saved to: /tmp/benchmark_rely-sqlite_8/benchmark_report.txt +AsciiDoc report saved to: /tmp/benchmark_rely-sqlite_8/benchmark_report.adoc + +RELAY_NAME: rely-sqlite +RELAY_URL: ws://rely-sqlite:3334 +TEST_TIMESTAMP: 2025-12-03T22:23:41+00:00 +BENCHMARK_CONFIG: + Events: 50000 + Workers: 24 + Duration: 60s diff --git a/cmd/benchmark/reports/run_20251203_222024/strfry_results.txt b/cmd/benchmark/reports/run_20251203_222024/strfry_results.txt new file mode 100644 index 0000000..03ea910 --- /dev/null +++ b/cmd/benchmark/reports/run_20251203_222024/strfry_results.txt @@ -0,0 +1,201 @@ +Starting Nostr Relay Benchmark (Badger Backend) +Data Directory: /tmp/benchmark_strfry_8 +Events: 50000, Workers: 24, Duration: 1m0s +1764801635484762ℹ️ migrating to version 1... /build/pkg/database/migrations.go:68 +1764801635484837ℹ️ migrating to version 2... /build/pkg/database/migrations.go:75 +1764801635484863ℹ️ migrating to version 3... /build/pkg/database/migrations.go:82 +1764801635484869ℹ️ cleaning up ephemeral events (kinds 20000-29999)... /build/pkg/database/migrations.go:304 +1764801635484879ℹ️ cleaned up 0 ephemeral events from database /build/pkg/database/migrations.go:349 +1764801635484894ℹ️ migrating to version 4... /build/pkg/database/migrations.go:89 +1764801635484899ℹ️ converting events to optimized inline storage (Reiser4 optimization)... /build/pkg/database/migrations.go:357 +1764801635484909ℹ️ found 0 events to convert (0 regular, 0 replaceable, 0 addressable) /build/pkg/database/migrations.go:446 +1764801635484915ℹ️ migration complete: converted 0 events to optimized inline storage, deleted 0 old keys /build/pkg/database/migrations.go:555 +1764801635484931ℹ️ migrating to version 5... /build/pkg/database/migrations.go:96 +1764801635484936ℹ️ re-encoding events with optimized tag binary format... /build/pkg/database/migrations.go:562 +1764801635484945ℹ️ found 0 events with e/p tags to re-encode /build/pkg/database/migrations.go:649 +1764801635484951ℹ️ no events need re-encoding /build/pkg/database/migrations.go:652 +1764801635484969ℹ️ migrating to version 6... /build/pkg/database/migrations.go:103 +1764801635484974ℹ️ converting events to compact serial-reference format... /build/pkg/database/migrations.go:706 +1764801635484993ℹ️ found 0 events to convert to compact format /build/pkg/database/migrations.go:846 +1764801635485001ℹ️ no events need conversion /build/pkg/database/migrations.go:849 + +╔════════════════════════════════════════════════════════╗ +║ BADGER BACKEND BENCHMARK SUITE ║ +╚════════════════════════════════════════════════════════╝ + +=== Starting Badger benchmark === +RunPeakThroughputTest (Badger).. + +=== Peak Throughput Test === +2025/12/03 22:40:35 INFO: Successfully loaded embedded libsecp256k1 v5.0.0 from /tmp/orly-libsecp256k1/libsecp256k1.so +Events saved: 50000/50000 (100.0%), errors: 0 +Duration: 2.809857459s +Events/sec: 17794.50 +Avg latency: 1.192717ms +P90 latency: 1.483896ms +P95 latency: 1.645564ms +P99 latency: 3.557014ms +Bottom 10% Avg latency: 676.594µs +Wiping database between tests... +RunBurstPatternTest (Badger).. + +=== Burst Pattern Test === +Burst completed: 5000 events in 277.530017ms +Burst completed: 5000 events in 298.041629ms +Burst completed: 5000 events in 282.179602ms +Burst completed: 5000 events in 291.10499ms +Burst completed: 5000 events in 337.732105ms +Burst completed: 5000 events in 419.28426ms +Burst completed: 5000 events in 273.162241ms +Burst completed: 5000 events in 266.443777ms +Burst completed: 5000 events in 276.847799ms +Burst completed: 5000 events in 268.986549ms +Burst test completed: 50000 events in 7.997424399s, errors: 0 +Events/sec: 6252.01 +Wiping database between tests... +RunMixedReadWriteTest (Badger).. + +=== Mixed Read/Write Test === +Generating 1000 unique synthetic events (minimum 300 bytes each)... +Generated 1000 events: + Average content size: 312 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Pre-populating database for read tests... +Generating 50000 unique synthetic events (minimum 300 bytes each)... +Generated 50000 events: + Average content size: 314 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Mixed test completed: 25000 writes, 25000 reads in 24.336991819s +Combined ops/sec: 2054.49 +Wiping database between tests... +RunQueryTest (Badger).. + +=== Query Test === +Generating 10000 unique synthetic events (minimum 300 bytes each)... +Generated 10000 events: + Average content size: 313 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Pre-populating database with 10000 events for query tests... +Query test completed: 405590 queries in 1m0.005592222s +Queries/sec: 6759.20 +Avg query latency: 2.253836ms +P95 query latency: 8.385881ms +P99 query latency: 12.734892ms +Wiping database between tests... +RunConcurrentQueryStoreTest (Badger).. + +=== Concurrent Query/Store Test === +Generating 5000 unique synthetic events (minimum 300 bytes each)... +Generated 5000 events: + Average content size: 313 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Pre-populating database with 5000 events for concurrent query/store test... +Generating 50000 unique synthetic events (minimum 300 bytes each)... +Generated 50000 events: + Average content size: 314 bytes + All events are unique (incremental timestamps) + All events are properly signed + +Concurrent test completed: 318685 operations (268685 queries, 50000 writes) in 1m0.004113189s +Operations/sec: 5311.05 +Avg latency: 1.408868ms +Avg query latency: 1.488688ms +Avg write latency: 979.939µs +P95 latency: 3.553949ms +P99 latency: 8.372585ms + +=== Badger benchmark completed === + + +================================================================================ +BENCHMARK REPORT +================================================================================ + +Test: Peak Throughput +Duration: 2.809857459s +Total Events: 50000 +Events/sec: 17794.50 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 153 MB +Avg Latency: 1.192717ms +P90 Latency: 1.483896ms +P95 Latency: 1.645564ms +P99 Latency: 3.557014ms +Bottom 10% Avg Latency: 676.594µs +---------------------------------------- + +Test: Burst Pattern +Duration: 7.997424399s +Total Events: 50000 +Events/sec: 6252.01 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 285 MB +Avg Latency: 1.270724ms +P90 Latency: 1.812071ms +P95 Latency: 2.251457ms +P99 Latency: 3.733049ms +Bottom 10% Avg Latency: 565.205µs +---------------------------------------- + +Test: Mixed Read/Write +Duration: 24.336991819s +Total Events: 50000 +Events/sec: 2054.49 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 166 MB +Avg Latency: 389.259µs +P90 Latency: 819.049µs +P95 Latency: 915.623µs +P99 Latency: 1.128529ms +Bottom 10% Avg Latency: 1.043578ms +---------------------------------------- + +Test: Query Performance +Duration: 1m0.005592222s +Total Events: 405590 +Events/sec: 6759.20 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 211 MB +Avg Latency: 2.253836ms +P90 Latency: 6.794068ms +P95 Latency: 8.385881ms +P99 Latency: 12.734892ms +Bottom 10% Avg Latency: 9.272721ms +---------------------------------------- + +Test: Concurrent Query/Store +Duration: 1m0.004113189s +Total Events: 318685 +Events/sec: 5311.05 +Success Rate: 100.0% +Concurrent Workers: 24 +Memory Used: 234 MB +Avg Latency: 1.408868ms +P90 Latency: 2.883582ms +P95 Latency: 3.553949ms +P99 Latency: 8.372585ms +Bottom 10% Avg Latency: 4.976512ms +---------------------------------------- + +Report saved to: /tmp/benchmark_strfry_8/benchmark_report.txt +AsciiDoc report saved to: /tmp/benchmark_strfry_8/benchmark_report.adoc + +RELAY_NAME: strfry +RELAY_URL: ws://strfry:8080 +TEST_TIMESTAMP: 2025-12-03T22:43:51+00:00 +BENCHMARK_CONFIG: + Events: 50000 + Workers: 24 + Duration: 60s diff --git a/cmd/benchmark/run-benchmark.sh b/cmd/benchmark/run-benchmark.sh index 8624e23..01b7a4e 100755 --- a/cmd/benchmark/run-benchmark.sh +++ b/cmd/benchmark/run-benchmark.sh @@ -136,17 +136,17 @@ echo "Preparing data directories at ${DATA_BASE}..." if [ "$USE_RAMDISK" = true ]; then # Create ramdisk directories - mkdir -p "${DATA_BASE}"/{next-orly-badger,next-orly-dgraph,next-orly-neo4j,dgraph-zero,dgraph-alpha,neo4j,neo4j-logs,khatru-sqlite,khatru-badger,relayer-basic,strfry,nostr-rs-relay,rely-sqlite,postgres} - chmod 777 "${DATA_BASE}"/{next-orly-badger,next-orly-dgraph,next-orly-neo4j,dgraph-zero,dgraph-alpha,neo4j,neo4j-logs,khatru-sqlite,khatru-badger,relayer-basic,strfry,nostr-rs-relay,rely-sqlite,postgres} + mkdir -p "${DATA_BASE}"/{next-orly-badger,next-orly-neo4j,neo4j,neo4j-logs,khatru-sqlite,khatru-badger,relayer-basic,strfry,nostr-rs-relay,rely-sqlite,postgres} + chmod 777 "${DATA_BASE}"/{next-orly-badger,next-orly-neo4j,neo4j,neo4j-logs,khatru-sqlite,khatru-badger,relayer-basic,strfry,nostr-rs-relay,rely-sqlite,postgres} else # Create disk directories (relative path) - mkdir -p data/{next-orly-badger,next-orly-dgraph,next-orly-neo4j,dgraph-zero,dgraph-alpha,neo4j,neo4j-logs,khatru-sqlite,khatru-badger,relayer-basic,strfry,nostr-rs-relay,rely-sqlite,postgres} - chmod 777 data/{next-orly-badger,next-orly-dgraph,next-orly-neo4j,dgraph-zero,dgraph-alpha,neo4j,neo4j-logs,khatru-sqlite,khatru-badger,relayer-basic,strfry,nostr-rs-relay,rely-sqlite,postgres} + mkdir -p data/{next-orly-badger,next-orly-neo4j,neo4j,neo4j-logs,khatru-sqlite,khatru-badger,relayer-basic,strfry,nostr-rs-relay,rely-sqlite,postgres} + chmod 777 data/{next-orly-badger,next-orly-neo4j,neo4j,neo4j-logs,khatru-sqlite,khatru-badger,relayer-basic,strfry,nostr-rs-relay,rely-sqlite,postgres} fi echo "Building fresh Docker images..." # Force rebuild to pick up latest code changes -$DOCKER_COMPOSE $COMPOSE_FILES build --no-cache benchmark-runner next-orly-badger next-orly-dgraph next-orly-neo4j rely-sqlite +$DOCKER_COMPOSE $COMPOSE_FILES build --no-cache benchmark-runner next-orly-badger next-orly-neo4j rely-sqlite echo "" echo "Starting benchmark suite..."