openUBMC sensor&event组件C++重构特性设计说明书

所属SIG组:bmc-core SIG
落入版本:openUBMC 26.3.0
设计人员:李晓宁
日期:2026-04-15

Copyright © 2025 openUBMC Community

您对"本文档"的复制,使用,修改及分发受木兰宽松许可证, 第2版协议(以下简称"MulanPSL2")的约束。
为了方便用户理解,您可以通过访问https://license.coscl.org.cn/MulanPSL2了解MulanPSL2的概要 (但不是替代)。
MulanPSL2的完整协议内容您可以访问如下网址获取:https://license.coscl.org.cn/MulanPSL2

修订记录

日期修订版本修订描述作者审核
2026-04-15V1.0初版创建,完成sensor&event组件C++重构特性设计李晓宁待审核

目录

[TOC]

缩略语清单

Abbreviations 缩略语Full spelling 英文全名Chinese explanation 中文解释
BMCBaseboard Management Controller基板管理控制器
SELSystem Event Log系统事件日志
SDRSensor Data Record传感器数据记录
SHMShared Memory共享内存
KPIKey Performance Indicator关键性能指标
P9999th Percentile Latency99分位延迟
RCURead-Copy-Update读多写少场景的并发更新机制

1. 特性概述

sensor组件与event组件当前均基于Lua + Skynet实现,在对象加载高峰(尤其是on_add_object批量回调)和运行期高频路径(对象索引查询、事件生成、告警计数、SEL落库、SHM更新)存在明显性能瓶颈。本特性将sensor&event核心路径统一重构为C++实现,并保留现有业务语义与外部接口兼容性。

1.1 目的

本文档用于明确sensor&event组件C++重构的架构设计、关键用例实现、性能优化路径、风险控制和验收标准,为开发、测试、评审和灰度上线提供统一依据。

1.2 范围

本特性覆盖以下内容:

  • 对象加载链路重构:on_add_object / on_add_object_complete(sensor&event统一优化)
  • 运行期核心路径优化:Sensor/Event对象索引、告警计数、健康计算、SDR/SEL/SHM
  • 数据访问层重构:SQLite写入与查询路径
  • 兼容性与迁移:接口保持、分阶段替换、灰度与回退
  • 可观测性:性能指标、调试接口、回归基线

1.3 特性需求列表

需求编号需求描述优先级
REQ-001on_add_object对象加载性能提升,支持批量分阶段处理
REQ-002消除运行期关键路径中的O(N)线性扫描
REQ-003SEL写入支持批量事务与单写线程模型
REQ-004SHM更新降低全局锁竞争,支持分片锁或快照发布
REQ-005保持现有业务接口语义兼容,支持灰度切换与回退
REQ-006建立性能KPI与自动化回归能力
REQ-007event组件告警计数、事件定义查询、健康状态计算路径优化
REQ-008sensor与event协同链路(Component/SEL/SHM)一致性保障

2. 需求场景分析

2.1 特性需求来源与价值概述

现网Lua实现主要痛点如下:

  • 对象初始化高峰期存在固定节流与逐对象保护调用,启动收敛慢
  • Sensor/Event关联路径存在多处全量遍历,规模增大后延迟抖动明显
  • event路径存在快照生成多次小颗粒调用、事件定义重复查询与全局队列串行瓶颈
  • SEL写入链路存在串行多步DB操作,吞吐与尾延迟受限
  • SHM高频更新依赖全局锁,竞争严重时放大CPU开销

价值目标:

  • 提升冷启动和动态对象加载性能
  • 降低稳态运行CPU占用和尾延迟
  • 增强可维护性、可测试性和长期可演进能力

2.2 特性场景分析

场景编号场景名称关键问题目标收益
SCN-001冷启动对象批量加载回调链路串行、固定sleep加载耗时下降50%+
SCN-002运行期传感器/事件更新O(N)查找退化热路径查找降为O(1)/O(logN)
SCN-003SEL高峰写入单条写入事务过多吞吐提升2x+,P99下降40%+
SCN-004SHM高频更新全局锁竞争锁冲突显著下降,CPU负载降低
SCN-005event告警与健康状态计算串行处理与重复查询事件吞吐提升3x+,健康计算耗时下降40%+

2.3 特性影响分析

  • 架构影响:由Lua脚本式控制流迁移到C++分层架构,核心能力组件化。
  • 性能影响:热点路径时间复杂度下降,数据库和锁竞争开销显著收敛。
  • 兼容性影响:保持上层接口不变,新增Feature Flag用于灰度控制。
  • 运维影响:新增指标采集、批处理状态观测、失败分布统计能力。

3. 特性/功能实现原理

3.1 目标

构建面向高并发对象管理和高频数据路径的C++ sensor&event统一核心,实现以下目标:

  1. 对象加载链路阶段化、可观测、可回退
  2. 运行期核心查找路径索引化
  3. SEL持久化单写批处理化
  4. SHM更新细粒度并发化
  5. 与现有业务语义保持一致

3.2 性能目标达成重点(评审关注)

3.2.1 对象发现过程优化重点

优化项现状问题C++优化方案预期收益
串行对象处理对象注册串行执行,加载峰值时耗时线性放大对象初始化阶段多线程并行(按position/阶段并发)冷启动与热加载耗时显著下降
大量小颗粒pcall每对象都保护调用,异常开销和调度开销高单对象粒度异常捕获(C++ try/catch),批内错误汇总异常隔离能力保持,吞吐提升
小内存频繁申请小对象创建导致频繁分配/释放和碎片人工控制内存申请(对象池/arena/批量预分配)减少分配器开销,降低碎片
sleep让出时间片固定sleep引入确定性等待,拖慢收敛使用操作系统线程调度 + 时间预算让出去除无效等待,提升CPU利用率
C++/Lua数据转换跨语言对象编解码频繁,带来额外CPU开销核心链路C++闭环处理,消除热点路径跨层转换降低序列化/反序列化成本

3.2.2 运行过程优化重点

优化项现状问题C++优化方案预期收益
数据结构多处对象扫描复杂度O(N)多索引容器,复杂度降为O(1)/O(logN)热路径延迟显著下降
共享内存并发锁操作频繁,写多时竞争严重全局锁优化为读写锁(读多写少场景)锁竞争下降,吞吐提升
数据库查询/写入all()后代码过滤;单条写入频繁SQL过滤下推;单次写入改批写入减少无效数据搬运和事务开销
属性变更回调回调运行时查找挂接点初始化时完成回调挂接降低运行态查找开销
热点函数执行高频函数调用栈与边界开销高热点函数inline与快速路径优化缩短热点路径CPU周期

3.3 总体方案

3.3.1 总体架构图(重点)

3.3.2 关键设计原则

  1. 阶段化处理:按Entity -> Sensor -> Event依赖顺序组织批处理。
  2. 控制面与数据面解耦:生命周期调度与数据落地分别优化。
  3. 读快写稳:读路径索引化,写路径串行化并批量事务化。
  4. 兼容优先:接口语义不变,内部实现可渐进替换。

3.3.3 sensor组件重构类图(重点)

3.3.4 核心类属性定义说明

类名关键属性类型定义建议说明
ObjectIngestorstaging_std::shared_ptr<StagingBuffer>回调入口写入缓冲区
ObjectIngestorprocessor_std::shared_ptr<BatchProcessor>触发分阶段处理与提交
StagingBufferbuckets_std::unordered_map<uint64_t, PositionBucket>position分桶暂存对象
StagingBuffermu_std::shared_mutex支持多生产者并发写入
BatchProcessorpool_ThreadPool并行处理对象初始化任务
BatchProcessorindex_mgr_std::shared_ptr<IndexManager>统一索引构建与查询
SensorObjectsensor_id_uint32_t业务唯一ID
SensorObjectsensor_number_uint16_tIPMI/SDR映射关键字段
SensorObjecthost_id_uint8_t多host场景隔离键
SensorObjectenabled_std::atomic_bool高频使能状态更新
EventObjectevent_id_uint32_t事件对象唯一ID
EventObjectevent_key_id_uint32_t事件定义查找键
EventObjectseverity_uint8_t/enum class Severity告警等级
IndexManagersensor_by_number_std::unordered_map<uint16_t, SensorObject*>O(1)编号查找
IndexManagersensor_by_id_host_std::unordered_map<SensorKey, SensorObject*>复合键查找
IndexManagerevent_by_id_std::unordered_map<uint32_t, EventObject*>事件快速定位
SdrRepositoryrecords_std::vector<SdrRecord>SDR顺序存储
SdrRepositoryfree_slots_std::vector<uint32_t>O(1)删除回收槽位
SelRepositorystmt_cache_StatementCache预编译SQL缓存
ShmPublisherrw_lock_std::shared_mutex读写分离降低锁竞争
ShmPublisherversion_std::atomic_uint64_t快照版本控制

4. Use Case一实现:on_add_object对象加载性能优化

4.1 设计思路

将原逐对象处理改为“收集 -> 预处理 -> 阶段执行 -> 统一提交”模型,避免固定节流和碎片化异常处理开销。

4.2 约束条件

  • 必须保持position语义与现有加载顺序一致
  • Entity/Sensor/Event依赖关系不可破坏
  • 批内失败对象不得阻塞整体成功对象提交

4.3 详细实现

4.3.1 状态机

Collecting -> Ready -> Processing -> Committed/Failed

4.3.2 时间片调度策略

  • 用“时间预算让出”替代固定sleep
  • 建议预算:每2~5ms检测并让出,防止长时间占用执行线程

4.3.3 多线程对象初始化策略(重点)

  • position分桶后,允许不同position并行初始化
  • 单个position内部保持Entity -> Sensor -> Event顺序,阶段内可并发执行
  • 使用线程池统一调度,避免临时线程频繁创建销毁

4.3.4 异常捕获粒度优化

  • 由“每个小步骤多次保护调用”改为“单对象粒度异常捕获”
  • 单对象失败不影响批次继续执行,失败明细进入错误队列
  • 批次结束统一上报错误摘要,减少重复日志和控制流开销

4.3.5 内存申请机制优化

  • 初始化阶段使用预分配内存池(对象元数据、索引节点、临时缓冲)
  • 批处理内使用arena分配,批次结束整体回收
  • 限制小对象频繁new/delete,减少分配器锁竞争和内存碎片

4.3.6 对象加载流程图(重点)

4.4 子系统间接口

核心接口建议:

  • enqueue_object(position, class_name, payload)
  • mark_position_complete(position)
  • process_ready_positions(budget_ms)
  • commit_position(position)
  • get_batch_metrics(position)

4.5 DFX属性设计

4.5.1 性能设计

  • 批处理吞吐:>= 3x(对比Lua基线)
  • 对象加载总耗时:>= 50%下降
  • 批提交失败率:< 0.1%(可重试)

4.5.2 异常处理设计

  • 阶段内异常隔离,错误对象进入failed_items
  • 对关键依赖缺失(如Entity不存在)记录告警并延迟重试

4.5.3 可测性设计

  • 注入混合对象序列(正常/异常/乱序)验证状态机收敛
  • 对每阶段输出统计:batch_sizelatency_msfail_count

5. Use Case二实现:运行期数据路径优化

5.1 设计思路

针对Sensor/Event/SDR/SHM四条热点路径,引入索引化、槽位化和分片化并发模型,消除全量遍历与全局锁热点。

5.2 详细实现

5.2.1 Sensor/Event索引优化

  • sensor_by_number
  • sensor_by_id_host
  • sensor_by_name
  • event_by_id

效果:将多处线性查找降为O(1)/O(logN)。

5.2.2 SDR管理优化

  • 从“数组删除搬移”改为vector + free-listslot-map
  • 删除操作O(1)回收,减少重排成本

5.2.3 SHM更新优化

  • 分区锁:static_sdrdynamic_sdrsel_metasel_records
  • 在读多写少场景下采用读写锁替代互斥锁
  • 可选双缓冲快照发布:写侧构建新版本,读侧原子切换版本号

5.2.4 属性变更回调与热点函数优化

  • 属性变更回调在对象初始化时完成挂接,运行期直接触发,避免频繁查找
  • 高频小函数(如键构造、索引命中判断、状态校验)内联化处理
  • 对热点路径启用快速分支(fast-path),将慢路径下沉到异常分支

5.2.5 热路径优化图

6. Use Case三实现:数据库访问层与SEL性能优化

6.1 设计思路

构建统一数据库访问层,分离“查询接口”和“写入执行器”,通过预编译语句缓存、批量事务和单写线程提升性能并保证一致性。

6.2 总体架构

6.3 关键策略(重点)

  1. 单写线程:规避多线程写锁冲突,稳定尾延迟。
  2. 批量事务:按时间窗(如10ms)或条数阈值(如128条)刷盘。
  3. 预编译语句缓存:减少SQL编译与对象构建开销。
  4. SQL过滤下推:将all()后代码过滤优化为SQL条件过滤,减少无效数据返回。
  5. 查询分层:热查询走内存索引,冷查询走SQLite。
  6. 错误模型统一:返回码与错误类型标准化,便于重试与告警。

6.4 性能目标

指标基线方向目标
SEL写入吞吐Lua串行写入提升>=2x
SEL写入P99高频场景波动大降低>=40%
DB操作CPU占用查询/写入竞争降低>=30%

7. 兼容性与迁移设计

7.1 迁移策略

  • Phase 0 基线测量:建立Lua性能与正确性基线
  • Phase 1 并行实现:C++核心链路与Lua并行验证
  • Phase 2 热点替换:优先替换P0链路(加载、索引、SEL、SHM)
  • Phase 3 灰度上线:Feature Flag按平台/批次逐步放量
  • Phase 4 全量切换:保留回退窗口后完成切换

7.2 兼容原则

  • 外部接口参数与返回语义保持不变
  • 关键行为(告警触发、SDR生成、SEL记录)逐项一致性比对
  • 回退可在单版本内完成,不依赖数据格式破坏性迁移

7.3 重构前后业务功能一致性保障

7.3.1 一致性边界定义

  • 模型设计保持不变:对象模型、关键状态机、告警语义不变
  • 对外接口保持不变:接口入参、返回码、错误语义、调用时序不变
  • 可见行为保持不变:SDR输出、SEL记录、属性变更回调业务效果不变

7.3.2 AI检视差异机制

  • 通过AI辅助对比新旧版本在相同输入下的输出差异
  • 对比维度包括:接口返回、事件序列、日志关键字段、数据库落盘结果
  • 差异结果自动归类为:预期差异、可接受差异、阻断差异
  • 阻断差异进入缺陷闭环,未收敛前不得进入全量发布

7.3.3 历史DT与全量自动化保障

  • 接入历史DT(Design Test/回归数据集)作为重构基准样本
  • 在CI中执行全量自动化用例,覆盖启动、运行、异常、升级回退路径
  • 建立新旧版本双跑比对任务,按日输出一致性报告
  • 以“功能一致性100%(白名单差异除外)”作为发布门禁

7.3.4 一致性校验流程

7.4 重构前后版本兼容性设计

7.4.1 组件版本与manifest绑定策略

  • 在manifest中显式声明sensor与event组件版本与启动模式绑定关系
  • 旧组件版本固定走旧启动方式(Lua启动链路)
  • 新组件版本固定走新启动方式(C++启动链路)
  • 禁止“旧版本组件 + 新启动方式”或“新版本组件 + 旧启动方式”的交叉组合

7.4.2 启动决策规则

text
if sensor.version < X.Y.Z:
    use sensor_legacy_bootstrap
else:
    use sensor_cpp_bootstrap

if event.version < A.B.C:
    use event_legacy_bootstrap
else:
    use event_cpp_bootstrap
  • 启动前进行版本-模式一致性校验,校验失败直接阻断启动并告警
  • 提供灰度开关仅用于同版本下的发布节奏控制,不改变版本绑定规则

7.4.3 升级与回退兼容策略

  • 升级时:先校验manifest绑定关系,再切换启动模式
  • 回退时:组件版本回退后自动恢复旧启动方式
  • 保证单次升级/回退过程不引入额外数据格式破坏
  • 通过升级回退自动化用例验证“可升级、可回退、可重入”

8. 可靠性、安全与可观测性设计

8.1 可靠性设计

  • 批处理失败隔离与重试队列
  • DB写入失败降级策略(缓存+重试)
  • SHM发布失败回退到上个稳定版本

8.2 安全设计

  • 输入对象字段严格校验,避免异常对象污染索引
  • 日志脱敏(设备标识、账号信息)
  • 数据库操作参数化,避免注入风险

8.3 可观测性设计

新增指标:

  • sensor.batch.load.latency_ms
  • sensor.batch.fail.count
  • sensor.sel.writer.queue_depth
  • sensor.sel.flush.latency_ms
  • sensor.shm.publish.latency_ms
  • sensor.index.hit_ratio

9. 测试与验收标准

9.1 测试策略

  • 单元测试:索引正确性、批处理状态机、DB仓储层
  • 集成测试:对象加载全流程、SEL/SDR一致性
  • 性能测试:冷启动、高峰告警、长稳压测
  • 回归测试:与Lua版本输出对齐比对
  • 一致性测试:AI差异检视 + 历史DT回放 + 全量自动化门禁
  • 兼容性测试:组件版本与manifest绑定启动方式校验、升级回退场景

9.2 KPI验收

指标验收标准
启动对象加载耗时下降>=50%
on_add_object批处理吞吐提升>=3x
对象初始化小内存分配次数下降>=60%
C++/Lua热点路径数据转换耗时下降>=80%
运行期CPU占用下降>=30%
对象查找平均复杂度O(N) -> O(1)/O(logN)
SHM读路径并发等待时间下降>=40%
SEL写入吞吐提升>=2x
SEL查询无效记录扫描比例下降>=70%
关键接口语义一致性100%
历史DT回放通过率100%
全量自动化通过率100%
版本-启动方式绑定校验通过率100%

10. Use Case四实现:event组件C++重构

10.1 特性概述

event组件与sensor组件同属bmc-core核心组件,当前基于Lua + Skynet实现。在对象加载高峰(on_add_object批量回调)和运行期高频路径(告警计数更新、事件生成、健康状态计算)存在与sensor组件类似的性能瓶颈。本章节明确event组件C++重构的架构设计与性能优化路径,并与前文sensor设计统一成一套重构方法论。

10.1.1 event组件业务背景

event组件负责管理bmc系统中所有硬件告警与事件,主要模块包括:

模块功能描述
event_app.lua主入口,注册on_add_object回调
event_management.lua事件核心管理,处理Event/PowerEvent注册
events.lua事件策略管理,告警计数、健康状态
event_handler.lua事件记录处理,SEL数据库操作
event_database.lua数据库访问层,SQLite操作
hardware_event.lua硬件事件对象,属性监听与事件生成

10.1.2 与sensor组件重构的差异性

维度sensor组件event组件
核心数据Sensor/SDR数据Event/Alarm告警数据
热点路径SDR管理、SHM更新告警计数、事件生成
触发模式轮询/主动上报阈值触发/状态变化
依赖关系依赖Entity对象依赖Component对象
持久化SDR持久化SEL + 告警持久化

10.2 需求场景分析

10.2.1 现网痛点

  • 对象初始化高峰期:逐对象串行注册 + 固定sleep让出,启动收敛慢
  • generate_snapshot():每对象20次pcall读取DescArg/SuggArg,开销大
  • 事件定义查询:每对象单独query_event_definition()数据库查询
  • 全局队列串行化:所有事件回调共用一个skynet.queue,串行执行
  • check_regenerate():State非空时多次数据库查询多语言告警

10.2.2 目标收益

场景编号场景名称目标收益
SCN-E001冷启动对象批量加载加载耗时下降>=50%
SCN-E002告警计数更新O(N)->O(1),计数更新耗时下降>=60%
SCN-E003事件生成路径吞吐量提升>=3x
SCN-E004健康状态计算计算耗时下降>=40%

10.3 详细实现原理

10.3.1 对象加载链路优化

完整耗时链路分析

lua
do_event_register(obj)
├── check_event()           ← 字典查找 + Component非空检查
├── generate_event_object()
│   ├── hardware_event.new()
│   │   ├── db:query_event_definition()  ← 数据库查询
│   │   └── healthevents初始化
│   └── eobj:register_to_component()

├── eobj:register()
│   ├── check_state()         ← 读取 MaskStateReset/PowerOff + check_mask_state()
│   ├── check_resume_policy() ← lifecycle=4/8 时查 Component 对象
│   ├── check_regenerate()   ← State非空时查 db:query_alarm_list
│   ├── listen()
│   │   ├── property_changed:on()  ← 注册回调
│   │   ├── generate_snapshot()   ← 20pcall 读 DescArg/SuggArg ← 最大开销
│   │   └── push_queue()       ← 首次异步检查

关键耗时点量化

序号耗时操作频率开销占比
1generate_snapshot() 20次pcall每对象1次~35%
2db:query_event_definition()每对象1次~20%
3check_regenerate() 多语言查询State=真时~15%
4property_changed:on() 注册回调每对象1次~10%
5批量sleep: skynet.sleep(20)每20对象~15%

10.3.2 C++重构优化方案

方案1:批量并行初始化(消除sleep)

cpp
// Lua: 每20对象 sleep(20) → C++: 线程池并行
class EventRegistrationPipeline {
private:
    ThreadPool thread_pool_;  // N个worker线程
    std::atomic<uint32_t> completed_count_{0};
    
public:
    void register_batch(std::vector<EventObject*>& events) {
        // 并行注册代替串行
        parallel_for(events.begin(), events.end(), [&](EventObject* e) {
            e->register();
        });
        
        // 等待所有任务完成而非sleep
        thread_pool_.wait_for([&]{
            return completed_count_.load() == events.size();
        });
    }
};

方案2:属性批量读取(消除20次pcall)

cpp
// Lua: for i=1,10 do pcall(...) end
// C++: 一次性序列化读取
struct EventSnapshot {
    std::array<std::string, 10> desc_args;
    std::array<std::string, 10> sugg_args;
};

void EventObject::generate_snapshot() {
    // 使用批量读取接口替代逐个读取
    auto values = mdb_client_.batch_get_properties({
        "DescArg1", "DescArg2", ..., "DescArg10",
        "SuggArg1", ..., "SuggArg10"
    });
    
    for (int i = 0; i < 10; ++i) {
        desc_args[i] = values["DescArg" + std::to_string(i+1)];
        sugg_args[i] = values["SuggArg" + std::to_string(i+1)];
    }
}

方案3:预加载事件定义(消除DB查询)

cpp
// Lua: 每对象单独 query_event_definition()
//// C++: 启动时全量加载 + Hash索引
class EventDefinitionCache {
private:
    flat_hash_map<std::string, EventDefinition> by_key_id_;  // EventKeyId→Definition
    flat_hash_map<std::string, EventDefinition> by_code_;    // EventCode→Definition
    
public:
    void initialize() {
        // 启动时一次性加载所有定义到内存
        auto all_defs = db_.select_all<EventDefinition>();
        for (auto& def : all_defs) {
            by_key_id_[def.EventKeyId] = def;
            by_code_[def.EventCode] = def;
        }
    }
    
    EventDefinition* find_by_key_id(const std::string& key_id) {
        auto it = by_key_id_.find(key_id);
        return (it != by_key_id_.end()) ? &it->second : nullptr;
    }
};

方案4:延迟初始化策略

cpp
// Lua: 立即执行所有检查
// C++: 延迟到首次使用时初始化

class LazyEventObject {
    State state_ = State::kNotInitialized;
    
public:
    void register() {
        // 仅注册属性监听,不做预检查
        register_property_callback();
        // 其他延迟到首次触发时
    }
    
    void on_property_changed(const Property& prop) {
        if (state_ == State::kNotInitialized) {
            lazy_initialize();  // 延迟初始化
        }
        // 正常处理
    }
};

方案5:无锁队列替代push_queue

cpp
// Lua: event_util.event_queue = queue()  // 全局串行
// C++: MPMC队列并行

class EventProcessor {
    MPMCRingQueue<Task> queue_;  // 多生产者单消费者
    
    void push_task(TaskCallback&& cb) {
        queue_.enqueue(Task{std::move(cb)};  // 无锁入队
    }
    
    void process_loop() {
        while (auto task = queue_.try_dequeue()) {
            task();  // 消费者处理
        }
    }
};

10.3.3 event组件架构设计

10.3.4 与sensor组件协同设计

event组件与sensor组件在bmc-core中强耦合,重构时需保持以下协同:

协同点耦合内容设计策略
Component引用event依赖sensor创建的Component对象Component初始化完成后触发event注册
Health状态event告警影响Component健康状态双向索引,告警变化时更新Component Health
SEL记录sensor生成事件写入SEL共用SEL写入Pipeline,event与sensor合并处理
SHM发布告警状态发布到SHM共用SHM分片锁机制

10.4 兼容性设计

10.4.1 接口兼容性

  • 资源树接口保持不变:bmc.kepler.Managers.EventService
  • D-Bus方法语义不变:StartTransfer、QueryEvents等
  • 属性变更回调行为一致

10.4.2 数据兼容性

  • SQLite表结构保持兼容
  • 事件定义格式不变
  • 告警持久化格式不变

10.4.3 迁移策略

  • Phase 1:与sensor组件并行验证
  • Phase 2:优先替换对象加载路径
  • Phase 3:替换告警计数与健康状态计算
  • Phase 4:灰度放量与全量切换

10.5 性能目标

指标基线方向目标
对象加载耗时Lua串行注册+sleep下降>=50%
generate_snapshot开销20次pcall下降>=70%
事件定义查询每对象DB查询下降>=90%
告警计数更新O(N)遍历O(1)查找
事件生成吞吐单对象串行提升>=3x

11. 测试与验收补充(sensor&event统一)

11.1 联合验收策略

  • sensor/event统一回归:相同输入下对比新旧版本输出一致性
  • 交叉链路验收:Component健康状态、SEL写入、SHM发布三条链路联合验证
  • 版本绑定验收:manifest中组件版本与启动模式绑定策略自动校验

11.2 联合KPI补充

指标验收标准
event对象加载耗时下降>=50%
event快照生成开销下降>=70%
event定义查询开销下降>=90%
event告警计数更新复杂度O(N) -> O(1)
sensor&event协同场景一致性100%

12. 参考资料清单

  1. SQLite官方文档:https://www.sqlite.org/docs.html
  2. C++并发参考:https://en.cppreference.com/w/cpp/thread