Files
PolyGateway/research-wiki/findings/2026-07-22-p7-ocr-soak.md
T

3.8 KiB
Raw Blame History

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 样本零不一致)。