Files
rustfs/docs/operations/issue-712-third-batch-false-negative-followup-zh.md
T
houseme a30357d21e feat(storage): extend PUT path tuning and observability (#3829)
* 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
2026-06-25 19:24:35 +08:00

108 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Issue #712 第三批继续验证结果总结
## 1. 背景
`#712` 第三批的第一轮静默 baseline 已经确认:
1. `multipart_set_disk_encode` 是当前最主要热点
2. `multipart_complete_tail` 可见但不是第一瓶颈
在继续推进 multipart encode 优化线时,又出现了一次“指标空结果”的假阴性,需要单独记录,避免后续团队误判为打点无效。
## 2. 假阴性根因
现象:
1. multipart benchmark 成功完成
2. `summary.csv` 正常生成
3. Prometheus 中却只出现 ordinary PUT 的 stage
- `ingress_prepare`
- `set_disk_writer_setup`
- `set_disk_encode`
- `set_disk_rename`
4. 没有任何 `multipart_*` stage
根因:
1. 本轮 benchmark 实际命中了 `127.0.0.1:9000` 上残留的旧 RustFS 进程
2. 该旧进程不是当前 worktree 的新二进制
3. 因此即使 benchmark 是 multipart PUT,也不会产出本批新增的 multipart stage 标签
这次问题的本质不是“新打点代码无效”,而是“验证目标进程不对”。
## 3. 如何识别这类假阴性
推荐直接查询:
```promql
topk(
40,
count by (__name__, stage) (
{__name__=~"rustfs_s3_put_object_stage_duration_ms.*"}
)
)
```
如果你跑的是 multipart PUT,但结果里只有 ordinary PUT stage,而没有:
1. `multipart_ingress_prepare`
2. `multipart_set_disk_writer_setup`
3. `multipart_set_disk_encode`
4. `multipart_complete_tail`
则优先判断为“验证目标进程可能不对”,而不要先判断为“metrics 打点无效”。
## 4. 前台纠偏复测
为了排除旧进程干扰,本轮直接使用当前 worktree 的 `target/debug/rustfs` 前台拉起服务,再做最小化 focused smoke。
复测 profile
1. `2g-128m-pc4`
复测结果:
1. Throughput: `373.78 MiB/s`
2. Request rate: `2.92 obj/s`
3. Avg latency: `5471.4ms`
结果目录:
1. `target/bench/issue712-multipart-server-path-foreground-smoke/summary.csv`
## 5. 前台复测阶段指标
Prometheus 近窗口查询已经确认 multipart 四阶段都正常出现。
P95
1. `multipart_ingress_prepare`: `4.75ms`
2. `multipart_set_disk_writer_setup`: `4.86ms`
3. `multipart_set_disk_encode`: `7375ms`
4. `multipart_complete_tail`: `13ms`
同时还能看到 ordinary PUT 的阶段指标,但这不影响判断;关键是:
1. multipart stage 已经实际落盘到 TSDB
2. encode 依旧是最显著热点
## 6. 当前直接结论
这轮继续验证后的结论没有变化,反而更稳:
1. `multipart_set_disk_encode` 仍然是 `>1GiB multipart PUT` 当前最主要优化目标
2. `multipart_complete_tail` 仍然是次级问题,不应抢在 encode 之前
3. `multipart_ingress_prepare``multipart_set_disk_writer_setup` 暂时不是第一优先级
4. 后续优化应继续围绕 multipart encode path,而不是先转去 complete tail / ingress
## 7. 对后续验证的要求
后续再做 multipart server-path 对照验证时,建议强制执行:
1. 先确认服务进程确实来自当前 worktree 二进制
2. 先确认 `multipart_*` stage 能被 Prometheus 查询到
3. 再读取 `summary.csv`
4. 最后再判断 encode 优化是否真的有效
否则很容易再次出现“summary 正常,但阶段指标是旧进程数据”的假阴性。