Files

44 lines
3.8 KiB
Markdown
Raw Permalink 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.
# 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 样本零不一致)。