Q3 万 Tag 压测报告 — 2026 Q3

内容
版本 V1.0
日期 2026-06-28
测试用例 TestQ3_TenThousandTagBenchmark
源码 internal/core/q3_10k_tag_benchmark_test.go
对标文档 边缘计算南向采集优化方案2026第三季度.md §6.3 C3

1. 测试目标

验证 Q3 统一数据面在 1 万 Tag · 1s Scan Class 规模下的:

  • 调度 SLA(P95 lag ≤ 100ms)
  • 内存稳定性(2h 目标漂移 < 5%)
  • 端到端吞吐(ScanEngine → ShadowCore → Pipeline)
  • 无 panic / 无任务失败

2. 测试配置

参数
设备数 100
每设备 Tag 数 100
总 Tag 数 10,000
Scan Interval 1s(normal class)
协议模式 modbus-tcp(parallel)
驱动 mockStressDriver(零 I/O 延迟模拟)
数据面 ShadowCore + ShadowBridge + DataPipeline
Worker 数 32
Goroutine 上限 512

2.1 运行时长

模式 命令 时长
CI / 快速验证 go test -run TestQ3_TenThousandTagBenchmark ./internal/core/ 10s warmup + 60s 测量
完整验收(2h) Q3_BENCH_DURATION=7200 go test -run TestQ3_TenThousandTagBenchmark ./internal/core/ 10s warmup + 7200s

CI 采用 60s 测量窗口;2h 长跑为 Q3 末验收标准,需在目标硬件上单独执行。


3. 实测结果(2026-06-28)

环境:macOS darwin 21.6.0,Go 1.x,本地开发机

指标 目标 实测(60s + 10s warmup) 通过
任务成功率 100% 7000/7000 succeeded, 0 failed
Scan lag P95 ≤ 100ms 7.37 ms
Scan lag avg 2.83 ms
Scan lag max 10.80 ms
内存漂移(heap inuse) < 5% 4.17%(5.62 → 5.86 MB)
Pipeline 吞吐 11,667 points/s
Pipeline 接收总量 ≈ tasks × 100 700,000 values
Shadow 设备数 100 100
task_overdue_total 0 0
starvation_rescue_total 0 0
Goroutine 泄漏 137 → 3(测试结束)
Panic / Crash

3.1 原始日志摘录

duration=1m0s warmup=10s interval=1s devices=100 points/device=100 total_tags=10000
memory(heap_inuse): start=5.62MB end=5.86MB drift=4.17% heap_objs=19381->18719
scan: executed=7000 succeeded=7000 failed=0 lag_avg=2.83ms lag_p95=7.37ms lag_max=10.80ms
pipeline_values=700000 shadow_devices=100 throughput=11667 points/s goroutines=137->3

4. 数据面闭环验证

压测同时验证了 Q3-A 统一数据面架构:

ScanEngine → mockStressDriver.ReadPoints
          → ShadowCore.WriteShadowDevice(增量 notify)
          → ShadowBridge.pushFromShadow
          → DataPipeline.PushBatch
          → Handler 计数(模拟 ECM / NBM / Storage 扇出)

集成测试覆盖:

测试 路径 状态
TestScanEngine_ShadowPipelineEndToEnd ScanEngine → Shadow → Pipeline
TestShadowPipelineIntegration Shadow → Pipeline 单值/批量 handler
TestVirtualShadowEngine_PipelineFanOut 虚拟影子 → Pipeline
TestSouthToNorth_CollectionPublishesToPipeline 南向采集 → 北向 handler

5. 本次优化项

基于压测数据,实施以下针对性优化:

优化 文件 效果
Shadow 增量 notify shadow_core.go 仅克隆变更点位推送订阅者,100 Tag/设备场景减少 ~99% 克隆开销
P95 lag 指标 scan_engine_metrics.go 新增 scan_lag_p95_msscan_lag_max_ms,暴露于 /api/diagnostics/scan-engine
10k 压测基础设施 q3_10k_tag_benchmark_test.go 可配置时长、warmup、内存/吞吐/lag 全量采集
E2E 采集闭环测试 shadow_pipeline_integration_test.go ScanEngine 周期采集经 Pipeline 扇出验证

6. 验收结论

Q3 验收项 结论
C3 万 Tag 压测报告 ✅ 本文档
1s Class P95 lag ≤ 100ms ✅ 7.37 ms
1w Tag 内存漂移 < 5% ✅ 4.17%(60s 稳态窗口)
数据四路一致 ✅ 集成测试通过
2h 长跑 ⬜ 待生产硬件执行 Q3_BENCH_DURATION=7200

总体判定:Q3-C 万 Tag 基线 通过(CI 60s 窗口);2h 长跑为 Q3 末可选加班验收项。


7. Q4 建议

  1. 2h / 72h 长跑:在目标 ARM/x86 网关硬件上执行完整时长压测。
  2. 真实驱动压测:当前使用 mock 驱动;Modbus/OPC UA 真机 10k Tag 需单独报告。
  3. 100k points/s:推迟 Q4,当前 ~11.6k points/s 为 mock 基线。
  4. Pipeline 合并窗口:北向限频(Publish Rate)在高频场景可进一步 batch 合并。

8. 复现命令

# 快速验证(~70s)
go test -run TestQ3_TenThousandTagBenchmark -v ./internal/core/

# 2h 完整压测
Q3_BENCH_DURATION=7200 go test -run TestQ3_TenThousandTagBenchmark -v ./internal/core/

# 全部集成测试
go test ./internal/core/ -short -count=1

*报告版本 V1.0 2026-06-28 维护:架构组*

4. 复测结果(2026-07-04)

环境:macOS darwin,Go 1.26,Intel i5-5257U
命令make bench-q3(= go test ./internal/core/ -run TestQ3_TenThousandTagBenchmark -count=1 -timeout=15m
结论:✅ PASSscan_miss_deadline_total=0

指标 目标 实测(60s + 10s warmup,修复后) 通过
任务成功率 100% 5674/5674 succeeded, 0 failed
Scan lag P95 ≤ 100ms 1.25 ms
Scan lag avg 0.67 ms
Scan lag max 54.20 ms
Scan drift avg ≤ 50ms 0.00 ms
Scan miss deadline 0 0
GC pause max ≤ 20ms 0.05 ms
内存漂移(heap inuse) < 5% -4.20%
Pipeline 吞吐 9457 points/s
Goroutines 139 → 3

初测 fail(miss=3):enforceHardJitterClamp 在 dispatch 前计数;修复后 clamp 仅作用于 dispatch 后仍滞留堆中的任务。详见 q3_phase_abcd_verification_2026-07-04.md