2.9 KiB
2.9 KiB
libp2p performance benchmarking
This project includes the following components:
terraform/
: a Terraform scripts to provision infrastructureimpl/
: implementations of the libp2p perf protocol running on top of e.g. go-libp2p, rust-libp2p or Go's std-library https stackrunner/
: a set of scripts building and running the above implementations on the above infrastructure, reporting the results inbenchmark-results.json
Benchmark results can be visualized with https://observablehq.com/@mxinden-workspace/libp2p-performance-dashboard.
Running via GitHub Action
- Create a pull request with your changes on https://github.com/libp2p/test-plans/.
- Trigger GitHub Action for branch on https://github.com/libp2p/test-plans/actions/workflows/perf.yml (see Run workflow button).
- Wait for action run to finish and to push a commit to your branch.
- Visualize results on https://observablehq.com/@libp2p-workspace/performance-dashboard.
Running via local machine
Provision infrastructure
- Save your public SSH key as the file
./terraform/modules/short_lived/files/perf.pub
; or generate a new key pair withmake ssh-keygen
and add it to your SSH agent withmake ssh-add
. cd terraform/configs/local
terraform init
terraform apply
CLIENT_IP=$(terraform output -raw client_ip)
SERVER_IP=$(terraform output -raw server_ip)
Build and run implementations
WARNING: Running the perf tests might take a while.
cd runner
npm ci
npm run start -- --client-public-ip $CLIENT_IP --server-public-ip $SERVER_IP
Deprovision infrastructure
cd terraform/configs/local
terraform destroy
Adding a new implementation
- Add implementation to
impl/
.
- Create a folder
impl/<your-implementation-name>/<your-implementation-version>
. - In that folder include a
Makefile
that builds an executable and stores it next to theMakefile
under the nameperf
. - Requirements for the executable:
- Running as a libp2p-perf server
- Command line flags
--run-server
- Command line flags
- Running as a libp2p-perf client
- Input via command line
--server-ip-address
--transport
(seerunner/versions.ts
for possible variants)--upload-bytes
number of bytes to upload per stream.--download-bytes
number of bytes to download per stream.
- Output
- Logging MUST go to stderr.
- Measurement output is printed to stdout as JSON in the form of:
Note that the measurement includes the time to (1) establish the connection, (2) upload the bytes and (3) download the bytes.{"latency": 0.246442851}
- Input via command line
- Running as a libp2p-perf server
- In
impl/Makefile
include your implementation in theall
target. - Reference implementation in
runner/src/versions.ts
.