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。 - 拒绝
localhost、127.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.logthroughput.pngp99_latency.pngserver_memory.pnglatency_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-string:LineCodec+Handler<String>。server-rs-line-bytes:自定义BytesLineCodec+Handler<Bytes>。server-rs-line-sync:awaitwrite_and_flush的 line echo 变体。server-rs-len:自定义组合 codec,内部使用LengthFieldBasedFrameDecoder和LengthFieldPrepender。server-rs-udp:Utf8DatagramCodec+DatagramHandler<String>。
client 端用裸 Tokio 连接、记录 latency percentiles,并打印统一 RESULT 行。