run-benchmark

Runs k6-based load benchmarks against Ethereum JSON-RPC endpoints and generates comparison reports.

1|2|Updated Jun 5, 2025
One-click install
npx skills add https://github.com/NethermindEth/json-bench --skill run-benchmark-nethermindeth
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: run-benchmark
Source: https://github.com/NethermindEth/json-bench/tree/main/.claude/skills/run-benchmark
Command: npx skills add https://github.com/NethermindEth/json-bench --skill run-benchmark-nethermindeth

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? Measuring and comparing the performance of Ethereum JSON-RPC clients (Geth, Nethermind, Reth, Erigon) requires careful setup: consistent request sets, correct load configuration, and comparable metrics. This Skill orchestrates the repository's Go runner to execute reproducible k6 load tests and produce analysis-ready reports. ## Core Features & Use Cases - Configurable Load Testing: Runs benchmarks from YAML workload profiles (mixed, read-heavy, eth_call contracts) with explicit duration, rps, and VU settings. - Reproducible Comparisons: Pre-generates a shared request set via generate-requests so multiple targets or repeat runs receive identical requests. - Remote On-Host Execution: Supports running benchmarks over SSH directly on the target node to eliminate network latency, with Prometheus metrics tunneled back for Grafana visualization. - Use Case: Compare Nethermind and Geth latency on the same machine by running each on-host with the same pre-generated requests.csv, then reviewing per-method p95/p99 latency and error rates in the generated ANALYSIS.md. ## Quick Start Run a benchmark of my local Nethermind node at http://localhost:8545 using the mixed workload profile for one minute and give me a latency comparison report.

Frequently Asked Questions about run-benchmark

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I benchmark an Ethereum JSON-RPC endpoint with k6?▼

Build the Go runner, pick or create a benchmark YAML config defining the workload mix, duration, rps, and vus, then run the benchmark subcommand against a clients registry pointing at your RPC endpoint. Results are written as JSON, CSV, and optionally HTML reports.

How do I compare performance of Geth vs Nethermind fairly?▼

Pre-generate one request set with the generate-requests subcommand and reference it via calls_file in every run's config, so each client receives identical requests. Run each client on its own host over SSH against its local RPC to remove network latency from the comparison.

Why is my benchmark achieving lower throughput than the requested rps?▼

The VU count is likely too small for the slowest method in the mix; a few VUs blocked on multi-second calls like eth_getLogs cannot sustain the requested rate. Always set vus explicitly and size it for the slowest call, since the loader's automatic inference rounds to zero at low rates.

Can I export benchmark metrics to Prometheus and Grafana?▼

Yes, pass the --prometheus flag with your Prometheus base URL and the runner remote-writes k6 metrics for Grafana visualization. For remote on-host runs, open an SSH reverse tunnel so the node can reach your local Prometheus instance.

Why does my benchmark config send no traffic for some calls?▼

Only the weight field controls call frequency; older profiles using a frequency percentage key are silently ignored, giving those calls zero traffic. Convert frequency values to weight when deriving configs from older profiles.