mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-27 15:37:02 +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.9 KiB
4.9 KiB
Issue #712 multipart PUT server-path 静默验证 Runbook
1. 目的
本文给 #712 第二批工作提供一个只关注 multipart server path 的静默验证 runbook。
目标:
- 不再扩散客户端参数矩阵
- 固定当前推荐 baseline
- 把注意力集中到 server-path 观测增强后的阶段结果
2. 固定 baseline
当前固定 baseline:
1GiB -> 64MiB part / pc42GiB -> 128MiB part / pc4
可选补充:
2GiB -> 256MiB part / pc4
但默认不作为首选 baseline。
3. 推荐脚本
直接使用:
scripts/run_gt1g_multipart_put_server_path_focus.sh
该脚本默认只跑:
1g-64m-pc42g-128m-pc4
可选补充:
2g-256m-pc4
4. 静默执行命令
4.1 默认两组
bash scripts/run_gt1g_multipart_put_server_path_focus.sh \
--host 127.0.0.1:9000 \
--access-key rustfsadmin \
--secret-key rustfsadmin \
--bucket-prefix issue712-multipart-focus \
--duration 10m \
--out-dir target/bench/issue712-multipart-server-path-focus
4.2 加上 2g-256m-pc4
bash scripts/run_gt1g_multipart_put_server_path_focus.sh \
--host 127.0.0.1:9000 \
--access-key rustfsadmin \
--secret-key rustfsadmin \
--bucket-prefix issue712-multipart-focus \
--duration 10m \
--profiles 1g-64m-pc4,2g-128m-pc4,2g-256m-pc4 \
--out-dir target/bench/issue712-multipart-server-path-focus-wide
5. 强制要求
这轮 runbook 的要求是:
- 静默跑
- 只读
summary.csv - 如需解释异常,再去看 dashboard / 日志
6. 结果目录
建议统一:
target/bench/
issue712-multipart-server-path-focus/
run_manifest.txt
commands.txt
summary.csv
logs/
benchdata/
7. 需要记录的指标
最终结果表之外,强制记录以下阶段:
multipart_ingress_preparemultipart_set_disk_writer_setupmultipart_set_disk_encodemultipart_complete_tail
同时建议固定记录 multipart path 计数:
multipart_write_pipelinemultipart_write_pipeline_batched_largemultipart_write_single_block_non_inline
8. 本轮的判断顺序
先看:
summary.csv
再看:
multipart_complete_tailmultipart_set_disk_encodemultipart_set_disk_writer_setupmultipart_ingress_prepare
9. 结果解释
9.1 summary.csv 先分出好坏组合
先回答:
1GiB / 64MiB / pc4是否仍是最稳 baseline2GiB / 128MiB / pc4是否仍是最稳 baseline
9.2 再用 Dashboard 回答热点层
再回答:
multipart_complete_tail是否最高multipart_set_disk_encode是否主导multipart_set_disk_writer_setup是否异常高multipart_ingress_prepare是否已经被 body buffering 放大
10. 下一步动作判定
如果 multipart_set_disk_encode 最高
下一步优先:
- multipart part 专用 batching gate
- multipart encode path 单独策略
如果 multipart_complete_tail 最高
下一步优先:
- complete path metadata / checksum / rename tail 优化
如果 multipart_set_disk_writer_setup 最高
下一步优先:
- writer init / bitrot writer path 优化
如果 multipart_ingress_prepare 最高
下一步优先:
- part ingress buffer 分层
- body read / HashReader 前的缓冲调整
11. multipart_* 指标为空时的排查顺序
如果本轮跑的是 multipart PUT,但 Prometheus 里查不到任何 multipart_* stage:
- 先不要直接判定“新打点无效”
- 先查当前
rustfs_s3_put_object_stage_duration_ms里到底有哪些 stage - 如果只看到了 ordinary PUT 的
ingress_prepare/set_disk_writer_setup/set_disk_encode/set_disk_rename,要优先怀疑当前127.0.0.1:9000上跑的不是预期的新二进制
推荐先查:
topk(
40,
count by (__name__, stage) (
{__name__=~"rustfs_s3_put_object_stage_duration_ms.*"}
)
)
如果结果里只有 ordinary stage,而没有:
multipart_ingress_preparemultipart_set_disk_writer_setupmultipart_set_disk_encodemultipart_complete_tail
则应优先检查:
- 本轮 RustFS 进程是否确实来自当前 worktree 的
target/debug/rustfs - 重启脚本是否真的清掉了旧进程
RUSTFS_OBS_ENDPOINT是否仍然指向当前可查询 backend
12. 已确认的假阴性根因样例
在 2026-06-24 的第三批继续验证中,出现过一次典型假阴性:
- multipart benchmark 已经成功跑完
- Prometheus 里却只有 ordinary PUT stage,没有任何
multipart_* - 根因并不是打点代码失效,而是
127.0.0.1:9000上仍然挂着更早启动的旧 RustFS 进程
纠偏方式:
- 用当前 worktree 的
target/debug/rustfs前台直接拉起服务 - 再跑最小化 focused smoke
- 立刻查询
multipart_*stage
这次纠偏后的前台复测已经确认:
multipart_*四个阶段可以正常上报- 当前热点仍然稳定落在
multipart_set_disk_encode