libp2p / specs

Technical specifications for the libp2p networking stack
https://libp2p.io
1.56k stars 273 forks source link

Introduce `perf` spec #478

Closed MarcoPolo closed 1 year ago

MarcoPolo commented 1 year ago

A simple protocol to run client-driven benchmarks inspired by https://datatracker.ietf.org/doc/html/draft-banks-quic-performance.

mxinden commented 1 year ago

Wrote a draft implementation of this specification on top of rust-libp2p. See https://github.com/libp2p/rust-libp2p/pull/3508.

Draft only for now. Don't (yet) expect this to produce reliable performance metrics.

Server implementation is deployed at /dns4/libp2p-perf.max-inden.de/tcp/4001.

Easiest way to test from your machine:

docker run -ti --rm --entrypoint perf-client mxinden/libp2p-perf --server-address /dns4/libp2p-perf.max-inden.de/tcp/4001

Finished run: Sent 10 MiB in 9.497557834 s with 8.423217989114063 MiBit/s and received 10 MiB in 6.494584597 s with 12.317954875351667 MiBit/s

For server machine metrics, see https://libp2p-perf.max-inden.de/d/rYdddlPWk/node-exporter-full

mxinden commented 1 year ago

Is there any value in merging this early? If not, I would suggest holding off until we have a first implementation.

https://github.com/libp2p/rust-libp2p/pull/3508 just merged in case you were holding off merging here till there is at least one implementation @MarcoPolo.

MarcoPolo commented 1 year ago

Merging this since we have 4 implementations out already (Rust, Go, JS, and Zig). I'll leave it as 1A for now since all of these are prototypes and we haven't merged anything yet (with the exception of the Rust impl). We can update that in a future PR.