3.8 KiB
P7 OCR soak 验收: 故障池下 99.73%,13 不变量全 PASS
- 日期: 2026-07-22;验收 run:
soak_20260722_002849(redis 双后端 × 2 worker);分支: feature/m3-ocr - 结论: M3 计划 T8 验收达成——1500 调用成功 1496(99.73%,阈值 98%),13 项裁决全 PASS(含跨进程记账归零与探针不悬挂两项 Redis 活检查)。
1. 场景与池(测试环境不放水)
| 项 | 配置 |
|---|---|
| 源池 | 源1=7866(真)、源2=7867(真,各 conc=4/rpm=120)、源3=黑洞 10.255.255.1(20s 连接超时)、源4=坏端口 7899(连接拒绝) |
| 负载 | data/soak/chs_images/ 469 张真实图像循环;text/layout 实际 1222/308(≈8:2) |
| 装配 | OcrClient.from_env(scope="SOAK_OCR"),PGW_LIMITER/BREAKER_BACKEND=redis(db3),2 worker × 并发 8 |
2. 两轮结果
| 轮 | 后端 | 成功率 | 裁决 | 备注 |
|---|---|---|---|---|
首轮 soak_20260721_232243 |
memory × 1 worker × 并发 16 | 1496/1500(99.73%) | 10 PASS + 1 SKIP(记账归零活检查 memory 不可查) | 报告 tests/outputs/soak/ |
验收轮 soak_20260722_002849 |
redis × 2 worker × 并发 8 | 1496/1500(99.73%) | 13/13 PASS | 跨进程共享闸,贴 CHS 生产形态 |
关键分布(验收轮遥测 1530 行): 逐源尝试 monkey_1=765 / monkey_2=731 / monkey_3=14 / monkey_4=20——坏源吸流仅 2.2%(阈值 15%),且真源两处 1496 行零错误;全部 34 个错误行都在坏源上(TransientError,分类干净)。延迟 p50/p95 ≈ 17.3/29.4s(两端点几乎一致——排队主导,服务侧单请求 3-15s)。
3. 冷启动穿透现象(两轮各 4 例失败的唯一来源)
现象: 起跑首几秒,并发(16)超过健康源容量(2×4 许可),溢出调用在真源"忙碌无许可"时把 _pick_runnable 的"第一个可运行源"落到黑洞/坏端口上,3 次尝试全烧在坏源 → AllSourcesExhausted(retry_exhausted)。约 30-60s 内熔断对坏源开路(源4 连接拒绝快失败先开,源3 20s 超时后开)+ 冷却备忘接管,此后 1400+ 调用零失败,坏源仅剩半开探针级流量(14/20 次)。
定性: 与 M2.5 R4"可信替代被闸跳过后穿透垫底垃圾源"同族,但量级(0.27%)远低于门槛且自愈窗口有界;chat 侧因有 AIMD 起步并发 8 天然缓解。本轮裁决: 不加机制(YAGNI——两轮数据均达标;若未来下游对冷启动窗口敏感,候选方案是选源侧"健康低于门槛且存在更健康的忙源时等待优于穿透",届时按 M2.5 流程走设计补遗)。
4. 独立 verifier 三条 Important 的处置(2026-07-22)
| # | 发现 | 处置 |
|---|---|---|
| I1 | 计划承诺的"RSS <500MB 绝对值"未实现,且验收轮起跑 RSS 达 666-695MB(SoakCorpus 全量装载 P1/P2 的 base64 语料所致,非泄漏——随后回落 ~200MB) | 根因修复: SoakCorpus 增 modalities 按需装载(P7 只装 images)+ 新增 inv_rss_absolute 检查与单测 |
| I2 | "真源零误熔"无机械化 gate 核对 | 新增 inv_healthy_gates_closed 活检查(跑后真源门态必须 CLOSED 可准入;配合遥测"真源零错误行"覆盖全程) |
| I3 | 探针取消归还分支(ocr.py CancelledError→release_probe)无测试 | 补两用例: 半开探针挂起中取消→归还且可再探;退避 sleep 中取消→穿透且 permit 归零 |
确认轮 soak_20260722_022232(修复后代码,300 调用,redis × 2 worker): 成功 296(98.67%,冷启动 4 例占比随规模缩小而放大,仍达标),16/16 不变量全 PASS(含两个新不变量);轻语料化后 RSS 峰值 92MB(修复前 695MB)。
5. 备注
- 首轮与验收轮失败数完全相同(各 4)纯属巧合,机理一致。
- OCR 无 token/成本(usage 恒 0),报告 token/cost 列为 0 属预期;TTFT 列恒 0(非流式,不适用)。
tables/para_blocks一致性抽查两轮各 20 张全 PASS(设计 §1.2 取证的持续护栏,累计 35+40 样本零不一致)。