ad43602e63
Multiple perf runs have failed due to "no space left on device". See e.g. https://github.com/libp2p/test-plans/actions/runs/5727165977/job/15527780097. The perf terraform launch template previously did not specify a root volume size. Thus terraform used the default: ``` df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 4.0M 0 4.0M 0% /dev tmpfs 63G 0 63G 0% /dev/shm tmpfs 25G 540K 25G 1% /run /dev/nvme0n1p1 8.0G 1.9G 6.1G 24% / tmpfs 63G 0 63G 0% /tmp tmpfs 13G 0 13G 0% /run/user/1000 ``` With this commit the root volume is increased to 100GB: ``` df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 4.0M 0 4.0M 0% /dev tmpfs 63G 0 63G 0% /dev/shm tmpfs 25G 564K 25G 1% /run /dev/nvme0n1p1 100G 2.6G 98G 3% / tmpfs 63G 8.0K 63G 1% /tmp tmpfs 13G 0 13G 0% /run/user/0 tmpfs 13G 0 13G 0% /run/user/1000 ``` |
||
---|---|---|
.. | ||
impl | ||
runner | ||
terraform | ||
Makefile | ||
README.md |
README.md
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/@libp2p-workspace/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 or a new version
- Add implementation to
impl/
.- For a new implementation, create a folder
impl/<your-implementation-name>/
- For a new version of an existing implementation, 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
- For a new implementation, create a folder
- For a new implementation, in
impl/Makefile
include your implementation in theall
target. - For a new version, reference version in
runner/src/versions.ts
.