Commit Graph

31 Commits

Author SHA1 Message Date
Max Inden 0a8dbab87c
feat(perf): continuosly measure on single conn (iperf-style) (#276)
Our current throughput tests open a connection, open a stream,
up- or download 100MB and close the connection. 100 MB is not enough on the
given path (60ms, ~5gbit/s) to exit congestion controller's slow-start. See
https://github.com/libp2p/test-plans/issues/261 for details.

Instead of downloading 100MB multiple times, each on a new connection, establish
a single connection and continuously measure the throughput for a fixed
duration (20s).
2023-10-25 13:24:08 +02:00
Chad Nehemiah a96d930eb4
fix(perf): re-introduce js-libp2p + add encryption (#299) 2023-09-14 18:49:46 +02:00
github-actions[bot] 09d15c0e8b
chore: add go-libp2p@v0.31.0 to perf/impl/go-libp2p (#295)
* chore: add go-libp2p@v0.31.0 to perf/impl/go-libp2p

* perf: update benchmark results

---------

Co-authored-by: galargh <galargh@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-09-04 11:28:35 +02:00
Piotr Galar 353e2db77c
fix: how new go-libp2p versions are added to perf (#294) 2023-09-04 09:40:32 +02:00
Piotr Galar 2980863ebc
feat: automate adding new go-libp2p versions to perf (#256)
* feat: automate adding new go-libp2p versions to perf

* fix: put add-new-impl-versions.yml on schedule
2023-09-02 10:16:35 +02:00
Max Inden 73dba1a5bc
feat(perf/rust-libp2p): upgrade to v0.52.3 and remove master (#290)
- Upgrade rust-libp2p `v0.52` implementation to rust-libp2p `v0.52.3`.
- Remove rust-libp2p `master` implementation. Given that `v0.52.3` contains the
  stable QUIC implementation, there is no more need for `master`.
2023-09-01 19:59:53 +02:00
Chad Nehemiah fbb92b75b2
fix(perf): adjust cli flags for perf runner for testing purposes (#275)
Co-authored-by: Max Inden <mail@max-inden.de>
2023-09-01 19:59:30 +02:00
Max Inden a68c19699e
Revert "feat(perf): add js-libp2p NodeJS (#244)" (#292)
This reverts commit c39bfb9b32.

Reverting due to https://github.com/libp2p/test-plans/issues/291. Can revert
revert once resolved.
2023-09-01 19:58:31 +02:00
Max Inden fd1889fedb
feat(perf): use m5.xlarge (#284)
Instead of `m5n.8xlarge`, use `m5.xlarge`.

Rational:
- Closer to real-world libp2p deployments (e.g. < 25 Gibps)
- Cheaper (~2 USD vs ~0.2 USD)

m5n.8xlarge:
- 32 vCPUs
- 128.0 GiB of memory
- 25 Gibps of bandwidth - 2019

m5.xlarge
- 4 vCPUs
- 16.0 GiB of memory
- up to 10 Gibps of bandwidth
2023-09-01 19:55:45 +02:00
Chad Nehemiah c39bfb9b32
feat(perf): add js-libp2p NodeJS (#244)
Co-authored-by: Max Inden <mail@max-inden.de>
2023-08-25 11:09:01 +02:00
Max Inden d1ff642e9b
fix(perf): remove obsolete quinn build infra (#274)
Implementation has been removed with https://github.com/libp2p/test-plans/pull/246.
2023-08-24 15:08:23 +02:00
Chad Nehemiah eebc07b1b4
docs(perf): Added new CLI flags for iterations + updated docs (#258) 2023-08-23 23:19:11 -07:00
Max Inden 826444d867
fix(perf): install nvm for ec2-user instead of root (#267)
On root the nvm install script can not find a shell config.

```
=> Profile not found. Tried ~/.bashrc, ~/.bash_profile, ~/.zprofile, ~/.zshrc, and ~/.profile.
```
2023-08-21 10:22:39 +02:00
Max Inden f57408de37
chore(perf): install NodeJS LTS on VMs (#266)
Needed for js-libp2p perf implementation.

https://github.com/libp2p/test-plans/pull/244/
2023-08-18 14:23:06 +02:00
Max Inden e5b7e0e16e
fix(perf): use `$Default` launch template (#257)
Our perf terraform setup differentiates in long lived and short lived resources.
On CI, our long lived resources are spun up once and our short lived resources
are spun up on each CI run. From time to time we have to adjust the long lived
resources. End result is a new launch template that needs to be referenced in
the short lived resources by version.

Next to our CI, the perf terraform setup can as well be used on personal AWS
accounts. Their long lived launch template version likely doesn't match the
configured launch template version of the short lived aws_instance.

Instead of specifying a specific version, instruct terraform to use the default,
thus supporting both our CI and personal AWS account use-case.
2023-08-17 15:02:23 +02:00
Max Inden 8e2c837599
fix(perf): increase maximum udp send buffer size (#254)
Previously only the maximum udp **receive** buffer size was increased to
`2500000` bytes. With this commit both the send and the receive buffer size is increase.
2023-08-14 16:08:41 +02:00
Max Inden ad43602e63
fix(perf): increase root volume size (#249)
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
```
2023-08-04 18:50:32 +02:00
Max Inden cfd1049e8a
fix(perf): run iperf on TCP and set TCP windows to bdp (#241)
This commit makes iperf use TCP instead of UDP. Using UDP allows the sender to
send as much data as they can, not as much data as the receiver can handle.
Using TCP measures the actual bandwidth of the connection.

This commit sets the TCP send and receive window to the bandwidth-delay-product.
In order to exhaust the whole bandwidth between the two nodes, TCP needs to be
able to buffer all bytes on the wire in the case of packet loss.
2023-08-04 10:23:47 +02:00
Max Inden ffc7ae0d5f
fix(perf): replace rust-libp2p-quinn/ with rust-libp2p/master (#246)
With https://github.com/libp2p/rust-libp2p/pull/3454 merged we can now test the
new rust-libp2p QUIC implementation based on upstream quinn directly from
rust-libp2p `master`.

This commit does the following in libp2p/test-plans:

1. Remove the `perf/impl/rust-libp2p-quinn` implementation.
2. Introduce the `perf/impl/rust-libp2p/master` version of the rust-libp2p implementation.

We can promote the latter to a proper version on the next rust-libp2p release.
2023-08-01 16:40:02 +02:00
Max Inden 3d9be81c9a
docs(perf): document how to add a new version of existing impl (#243) 2023-07-26 18:41:49 +02:00
Max Inden 35eb403b2d
feat(perf): add go-libp2p v0.29 (#242) 2023-07-26 14:01:46 +02:00
Steve Loeppky 7e074ba39a
Update README.md - fix link to libp2p observable (#238) 2023-07-19 09:38:18 -07:00
Max Inden d7391f13e1
fix(perf): increase iterations (#213)
- Increase upload/download benchmark iterations. Still conservative value of `10` due to slow rust-libp2p tcp. See https://github.com/libp2p/rust-yamux/issues/162. Note however that this is 10x an upload of 100MB.
- Increase latency benchmark iterations.
2023-07-10 05:06:51 +02:00
Max Inden acea8b5e0c
fix(perf): increase MAX_AGE_MINUTES to 120 (#215)
- When experimenting with increasing iterations, instances are taken down
prematurely. See e.g. https://github.com/libp2p/test-plans/actions/runs/5418669631/jobs/9850992882

- When benchmarking from a local developer machine, experimenting for longer is useful.

- The AWS Lambda is only a safety net machanism. In the rare case where we
miss to clean up, running the machines for <1h or 2h doesn't matter cost wise.
2023-07-05 07:06:39 +02:00
Piotr Galar 1b187a379c
chore: move perf cleanup test code to a test directory (#216) 2023-07-05 05:46:58 +02:00
Max Inden 0df7762587
chore(perf): document GitHub action usage (#212) 2023-06-30 04:25:05 +02:00
Max Inden 67960902e8
feat(perf/go-libp2p): add v0.28.1 (#209) 2023-06-27 03:24:19 +02:00
Max Inden cdf7820037
refactor(perf): expose single latency measurement (#207) 2023-06-26 10:35:44 +02:00
Max Inden b1cfea4f52
fix(perf/go-libp2p): close write after sending in client (#205)
Follow up to https://github.com/libp2p/test-plans/pull/184.
2023-06-23 03:43:06 +02:00
Max Inden 2ddea6a139
fix(perf/https): request downloadBytes instead of uploadBytes (#203) 2023-06-22 14:49:42 +02:00
Max Inden 53ff8b5db1
feat(perf): add (automation, provision, build, run) tooling (#184)
This project includes the following components:

- `terraform/`: a Terraform scripts to provision infrastructure
- `impl/`: implementations of the [libp2p perf
  protocol](https://github.com/libp2p/specs/blob/master/perf/perf.md) running on
  top of e.g. go-libp2p, rust-libp2p or Go's std-library https stack
- `runner/`: a set of scripts building and running the above implementations on
  the above infrastructure, reporting the results in `benchmark-results.json`

Benchmark results can be visualized with
https://observablehq.com/@mxinden-workspace/libp2p-performance-dashboard.

Co-authored-by: Marco Munizaga <git@marcopolo.io>
Co-authored-by: Marten Seemann <martenseemann@gmail.com>
Co-authored-by: Piotr Galar <piotr.galar@gmail.com>
2023-06-22 13:54:09 +02:00