mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-28 07:57:01 +00:00
a30357d21e
* feat(storage): add multipart put stage metrics * feat(scripts): add multipart put focus runner * docs(operations): add multipart put server-path guides * chore(scripts): add local rustfs restart helper * docs(observability): add local metrics backend guide * docs(observability): add localized multipart guides * fix(ecstore): validate multipart batching path * feat(obs): add erasure encode overlap metrics * docs(ops): update overlap retest summary * docs(ops): add batchblocks retest matrix * docs(ops): extend overlap candidate summary * docs(ops): capture 8-run overlap summary * feat(storage): switch rename_data to msgpack map * test(storage): add rename_data payload checks * feat(object): add zero_copy_eager put path * docs(ops): add zero_copy_eager put guide * docs(ops): add deeper zero-copy next steps
4.5 KiB
4.5 KiB
Issue #712 RUSTFS_ERASURE_ENCODE_BATCH_BLOCKS 候选值低噪声复测矩阵
1. 目标
本文用于下一轮更小面、更低噪声的复测。
本轮只回答一个问题:
RUSTFS_ERASURE_ENCODE_BATCH_BLOCKS=2是否比4更稳地改善2g-128m-pc4的 multipart batched 路径
当前不回答:
- 是否直接改代码默认值
- 是否扩展到 ordinary PUT
- 是否继续引入新的 encode 调度语义
2. 固定范围
只保留一个 profile:
2g-128m-pc4
只保留两个候选值:
RUSTFS_ERASURE_ENCODE_BATCH_BLOCKS=4RUSTFS_ERASURE_ENCODE_BATCH_BLOCKS=2
不再混入:
1g-64m-pc42g-256m-pc4- 其他 batching / inflight 配置
3. 低噪声原则
本轮强制执行以下原则:
- 每一轮都重启 RustFS 进程,避免 counters/sums 混轮
- 每一轮之间固定冷却
30s - 每一轮都固定只跑
2m - 每一轮都只抓:
summary.csvpath.jsoninternal_count.jsoninternal_sum.json
- 不看过程日志,不在中间临时扩项
4. 推荐矩阵
推荐使用交叉顺序,避免单边连续运行:
b4-r1b2-r1b2-r2b4-r2b4-r3b2-r3
这是一个偏保守的 ABBAAB 顺序。
原因:
- 不让
2总是出现在后面 - 不让
4总是出现在后面 - 能更快看出“只是后跑更快”还是“候选值真的更优”
5. 目录约定
建议统一使用:
target/bench/issue712-batchblocks-candidate-runs/
b4-r1/
b2-r1/
b2-r2/
b4-r2/
b4-r3/
b2-r3/
每轮目录固定包含:
summary.csvpath.jsoninternal_count.jsoninternal_sum.json
6. 单轮执行模板
6.1 batch_blocks=4
启动:
env \
RUSTFS_UNSAFE_BYPASS_DISK_CHECK=true \
RUSTFS_ADDRESS=127.0.0.1:9000 \
RUSTFS_ACCESS_KEY=rustfsadmin \
RUSTFS_SECRET_KEY=rustfsadmin \
RUSTFS_RPC_SECRET=rustfs-rpc-secret \
RUSTFS_REGION=us-east-1 \
RUSTFS_CONSOLE_ENABLE=false \
RUSTFS_OBS_ENDPOINT=http://127.0.0.1:4318 \
RUSTFS_ERASURE_ENCODE_BATCH_BLOCKS=4 \
target/debug/rustfs server \
/private/tmp/issue708-single-node-multidisk/d1 \
/private/tmp/issue708-single-node-multidisk/d2 \
/private/tmp/issue708-single-node-multidisk/d3 \
/private/tmp/issue708-single-node-multidisk/d4
运行:
bash scripts/run_gt1g_multipart_put_server_path_focus.sh \
--host 127.0.0.1:9000 \
--access-key rustfsadmin \
--secret-key rustfsadmin \
--profiles 2g-128m-pc4 \
--duration 2m \
--out-dir target/bench/issue712-batchblocks-candidate-runs/b4-r1
采集:
curl -fsS 'http://127.0.0.1:9090/api/v1/query?query=rustfs_s3_put_object_path_total{path=~"multipart_.*"}' \
> target/bench/issue712-batchblocks-candidate-runs/b4-r1/path.json
curl -fsS 'http://127.0.0.1:9090/api/v1/query?query=rustfs_internal_stage_duration_ms_count{stage=~"erasure_encode.*"}' \
> target/bench/issue712-batchblocks-candidate-runs/b4-r1/internal_count.json
curl -fsS 'http://127.0.0.1:9090/api/v1/query?query=rustfs_internal_stage_duration_ms_sum{stage=~"erasure_encode.*"}' \
> target/bench/issue712-batchblocks-candidate-runs/b4-r1/internal_sum.json
6.2 batch_blocks=2
只改一个变量:
RUSTFS_ERASURE_ENCODE_BATCH_BLOCKS=2
其余命令完全保持一致。
7. 每轮必须核对的点
7.1 path 命中
必须确认:
multipart_write_pipeline_batched_large已命中
如果没有命中:
- 该轮结果无效
- 不要纳入比较
7.2 internal stages
至少比较以下 3 组:
erasure_encode_batched_recv_waiterasure_encode_batched_writeerasure_encode_cpu
8. 推荐的人工比较方式
对每一轮,记录:
- throughput
- avg latency
recv_wait_avg = internal_sum / internal_countwrite_avg = internal_sum / internal_countcpu_avg = internal_sum / internal_count
重点不是单看 throughput,而是看:
2是否更稳定地降低recv_wait_avg2是否没有把write_avg或cpu_avg反向放大
9. 建议的判定门槛
只有同时满足下面两条,才建议继续往“默认值候选”方向推进:
- 在至少
3轮对照中,batch_blocks=2的 throughput / latency 有>= 2轮优于4 recv_wait_avg的下降方向在大多数轮次都成立
如果只满足其中一条:
- 保持它为候选 env 配置
- 暂不改代码默认值
10. 当前建议
当前阶段最稳妥的动作顺序是:
- 先按这份矩阵补足
6轮 - 再做一次汇总表
- 最后才决定是否让 multipart batched path 默认使用
2