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/ 下包含三个可比较 harness:

  • benchmarks/rs-netty:rs-netty echo server/client。
  • benchmarks/tokio:裸 Tokio echo server/client。
  • benchmarks/netty:Java Netty echo server/client。

它们对齐了 wire protocols:

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

Directional Snapshot

benchmark 结果是方向性快照,不是通用性能承诺。吞吐、延迟和 RSS 会受 host、NIC、OS、JVM warmup、TCP 设置、payload shape、并发数、in-flight 数、是否 loopback 等因素影响。

README 中的表格来自本仓库 benchmark harness 的一次本地非 loopback 运行。它适合用于理解当前实现的大致量级和相对趋势,不应作为在任意生产环境中的保证。

Runner

主入口是:

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

runner 会:

  • 自动选择非 loopback 本地 IPv4,或使用 --host
  • 拒绝 localhost127.0.0.1::1
  • build selected implementations。
  • 启动 server 并采样 server RSS。
  • 运行 matching client。
  • 解析 RESULT ... 行。
  • 写出 CSV、日志和图表。

输出包括:

  • 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

开启 --profile cpu 时,macOS sample(1) 会生成 server sample 和 profile summary。

Smoke Run

快速冒烟:

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

如果要包含 Netty,需要本机有 Maven 和 JDK。Rust harness release build 由 runner 自动执行。

rs-netty Harness Notes

benchmarks/rs-netty/src/main.rs 包含:

  • server-rs-line / server-rs-line-stringLineCodec + Handler<String>
  • server-rs-line-bytes:自定义 BytesLineCodec + Handler<Bytes>
  • server-rs-line-sync:await write_and_flush 的 line echo 变体。
  • server-rs-len:自定义组合 codec,内部使用 LengthFieldBasedFrameDecoderLengthFieldPrepender
  • server-rs-udpUtf8DatagramCodec + DatagramHandler<String>

client 端用裸 Tokio 连接、记录 latency percentiles,并打印统一 RESULT 行。