Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 16 additions & 9 deletions benchmark.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import argparse
import concurrent.futures
import socket
import ssl
import json
import sys
import time
Expand Down Expand Up @@ -41,10 +42,15 @@
}


def scan(host, port, start_range):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
def scan(host, port, start_range, tls=False):
raw = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
raw.settimeout(600)
if tls:
ctx = ssl.create_default_context()
sock = ctx.wrap_socket(raw, server_hostname=host)
else:
sock = raw
sock.connect((host, port))
sock.settimeout(600)

sock.sendall(json.dumps({
"jsonrpc": "2.0", "method": "server.version",
Expand Down Expand Up @@ -102,7 +108,7 @@ def format_number(n):
return f"{n:,}"


def run_benchmarks(host, port, end_height, markdown, clients, max_periods=0):
def run_benchmarks(host, port, end_height, markdown, clients, max_periods=0, tls=False):
period_list = PERIODS[:max_periods] if max_periods > 0 else PERIODS
periods = []
for desc, short, blocks in period_list:
Expand All @@ -113,18 +119,18 @@ def run_benchmarks(host, port, end_height, markdown, clients, max_periods=0):
# Warmup scan (first scan on a new connection has overhead from
# precompute table loading in the DuckDB read pool)
print("Warming up...", end="", flush=True)
scan(host, port, periods[0][4])
scan(host, port, periods[0][4], tls=tls)
print(" done.\n")

results = []
for desc, short, blocks, start, height_range, txns in periods:
sys.stdout.write(f" Scanning {short}...")
sys.stdout.flush()
if clients == 1:
elapsed, count = scan(host, port, height_range)
elapsed, count = scan(host, port, height_range, tls=tls)
else:
with concurrent.futures.ThreadPoolExecutor(max_workers=clients) as pool:
futures = [pool.submit(scan, host, port, height_range) for _ in range(clients)]
futures = [pool.submit(scan, host, port, height_range, tls) for _ in range(clients)]
thread_results = [f.result() for f in futures]
elapsed = max(e for e, c in thread_results)
tps = round(clients * txns / elapsed) if txns and elapsed > 0 else None
Expand Down Expand Up @@ -180,18 +186,19 @@ def main():
parser = argparse.ArgumentParser(
description="Benchmark Frigate Silent Payments scanning performance.",
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="Examples:\n python3 benchmark.py\n python3 benchmark.py --end-height 920000 --markdown\n python3 benchmark.py --host 192.168.1.10 --port 57001\n python3 benchmark.py --clients 4",
epilog="Examples:\n python3 benchmark.py\n python3 benchmark.py --end-height 920000 --markdown\n python3 benchmark.py --host 192.168.1.10 --port 57001\n python3 benchmark.py --clients 4\n python3 benchmark.py --tls --host frigate.example.com --port 50002",
)
parser.add_argument("--host", default=DEFAULT_HOST, help=f"server host (default: {DEFAULT_HOST})")
parser.add_argument("--port", type=int, default=DEFAULT_PORT, help=f"server port (default: {DEFAULT_PORT})")
parser.add_argument("--end-height", type=int, default=DEFAULT_END_HEIGHT, help=f"end block height (default: {DEFAULT_END_HEIGHT})")
parser.add_argument("--markdown", action="store_true", help="output as markdown table")
parser.add_argument("--clients", type=int, default=1, help="number of concurrent clients per scan period (default: 1)")
parser.add_argument("--periods", type=int, default=0, help="number of periods to run (default: all)")
parser.add_argument("--tls", action="store_true", help="connect over TLS")
args = parser.parse_args()

try:
run_benchmarks(args.host, args.port, args.end_height, args.markdown, args.clients, args.periods)
run_benchmarks(args.host, args.port, args.end_height, args.markdown, args.clients, args.periods, args.tls)
except ConnectionRefusedError:
print(f"Error: could not connect to {args.host}:{args.port}", file=sys.stderr)
sys.exit(1)
Expand Down