Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Benchmarks

benchmarks/ contains three comparable harnesses:

  • benchmarks/rs-netty: rs-netty echo servers and clients.
  • benchmarks/tokio: bare Tokio echo servers and clients.
  • benchmarks/netty: Java Netty echo servers and clients.

They align the wire protocols:

  • line: TCP line echo, payload + "\n".
  • len: TCP length-field echo, u32be length + payload.
  • udp: UDP datagram echo.

Directional Snapshot

Benchmark results are directional snapshots, not general performance promises. Throughput, latency, and RSS depend on host, NIC, OS, JVM warmup, TCP settings, payload shape, connection count, in-flight count, loopback usage, and other factors.

The table in the README comes from one local non-loopback run of this repository’s benchmark harness. It is useful for understanding approximate scale and relative trends, not as a guarantee in arbitrary production environments.

Runner

Main entry point:

python3 benchmarks/run.py \
  --impls rs-netty tokio netty \
  --protocols line len udp \
  --connections 100 \
  --messages 1000000 \
  --payload 128 \
  --in-flight 16 \
  --output-dir benchmarks/results

The runner:

  • auto-selects a non-loopback local IPv4 address, or uses --host.
  • rejects localhost, 127.0.0.1, and ::1.
  • builds selected implementations.
  • starts the server and samples server RSS.
  • runs the matching client.
  • parses the RESULT ... line.
  • writes CSV, logs, and charts.

Output includes:

  • results.csv
  • *.server.out.log
  • *.server.err.log
  • *.client.out.log
  • *.client.err.log
  • throughput.png
  • p99_latency.png
  • server_memory.png
  • latency_percentiles.png

With --profile cpu, macOS sample(1) also produces server samples and profile summaries.

Smoke Run

Quick smoke run:

python3 benchmarks/run.py \
  --impls rs-netty tokio \
  --protocols len \
  --connections 2 \
  --messages 100 \
  --payload 32 \
  --in-flight 4

Including Netty requires Maven and a JDK. The runner builds Rust harnesses in release mode automatically.

rs-netty Harness Notes

benchmarks/rs-netty/src/main.rs contains:

  • server-rs-line / server-rs-line-string: LineCodec + Handler<String>.
  • server-rs-line-bytes: custom BytesLineCodec + Handler<Bytes>.
  • server-rs-line-sync: line echo variant that awaits write_and_flush.
  • server-rs-len: custom composite codec using LengthFieldBasedFrameDecoder and LengthFieldPrepender.
  • server-rs-udp: Utf8DatagramCodec + DatagramHandler<String>.

Clients use bare Tokio connections, record latency percentiles, and print a uniform RESULT line.