R8-Fix-4:Display Source Drain 与持久化链路解耦修复方案与实施结果
1. 现场证据与根因证伪
Build 64/65 实测否定了 stdout wire 背压为主因(wire 队列积压仅 2 条 / 22KB,丢弃数恒为 0)。真实根因在于:高频 ActivityTrace Source Drain(约 120Hz)在消费循环中与磁盘落盘链路(RawSessionRecorder + IncrementalMetricRecorder + OnlineReportSession + PeriodicCheckpoint)同步串行等待。每帧 2~5ms 的 I/O 阻塞导致 consumer 发生严重饥饿(576 delivered 仅 3 consumed,573 条 backlog)。
2. 核心架构解耦方案
- 全局有序入队解耦(OrderedRawIngress):维护单进程有界 FIFO 队列(8192 records / 32 MiB)。超限触发
writer-backpressure-overflowfail-closed 退出,绝不静默丢弃原始 Raw 记录。 - Display 实时投影前移与非阻塞入队:高频 FrameLifetime 专享
enqueue_nowait快路径,并在入队前执行projector.consume(raw)计算实时 FPS 与 FrameTime,完全消除对磁盘落盘与 redundant decoded 写入的同步等待。 - Durable Writer 批量写入:单线程单写者贪婪聚合(64 条 / 512 KiB / 10ms),单锁批量推进,避免每帧跨线程切换与锁竞争。
- 退出安全重排:严格执行 Stop sources → drain consumer tasks → close ingress → drain writer → stop worker → shutdown executor → finalize → seal。
3. E2 性能基准与测试验证
| 指标 / 门禁 | 门禁要求 | 实测结果 | 结论 |
|---|---|---|---|
| accepted_count / persisted_count | 7200 / 7200 | 7200 / 7200 | PASS |
| overflow_count / dropped_count | 0 / 0 | 0 / 0 | PASS |
| Source → Ingress P50 延迟 | - | 0.009 ms | PASS |
| Source → Ingress P95 延迟 | < 2.0 ms | 0.028 ms | PASS(70x 余量) |
| Source → Ingress Max 延迟 | < 10.0 ms | 1.45 ms | PASS |
| Writer 持续吞吐量 | ≥ 240 events/s | > 5,000 events/s | PASS(20x 余量) |
| Sidecar 全量测试 | 全通过 | 596 / 596 PASS | PASS |
| MacApp Swift 测试 | 全通过 | 183 / 183 PASS (3 skipped) | PASS |
4. 当前状态与后续门禁
当前交付状态为 implemented · gate-open,证据等级为 E2 completed / E4 pending。等待 Build 66 真实 iOS 设备现场验收。