已关闭
[Requirement|需求建议]: Soc Version 优化:将 RtMacroValue 字段迁移到 DevProperties,重构 SoC 版本属性管理 #316
daijinling创建于  3月30日关闭于  4月28日
daijinling成员
3月30日 创建

Backgroud(背景信息)

当前 Runtime 中 SoC 版本相关的设备属性管理存在以下问题:

  1. 全局状态耦合:所有设备属性存储在全局静态变量 RtMacroValue 中,不支持多芯片场景下的属性隔离。
  2. 初始化逻辑分散:属性默认值由 MacroInitDefault() 硬编码,各平台又在 dev_info_proc_func.cc 的 macroInitFunc() 中动态覆盖,两处维护、容易遗漏。
  3. INI 覆盖机制不统一:仅 610_lite、adc 等少数平台支持从 INI 文件读取配置覆盖默认值,其他平台无此能力,扩展困难。
  4. 动态逻辑与静态配置混杂:macroInitFunc() 中既有固定赋值,又有运行时驱动特性查询,职责不清。

本需求将 RtMacroValue 中的 15 个核心字段迁移到按芯片隔离的 DevProperties 结构中,统一所有平台的 INI 覆盖机制,使属性管理更清晰、可维护、可扩展。

Origin(信息来源)

Runtime 团队重构需求。在多芯片并存场景和新 SoC 适配过程中,原有的 RtMacroValue 全局变量方案频繁暴露维护困难和属性冲突问题,由开发团队发起重构。

Benefit / Necessity (价值/作用)

  1. 架构清晰:属性按芯片隔离存储在 DevProperties 中,由 DevInfoManage 统一管理和查询,消除全局变量耦合。
  2. 支持多芯片:不同芯片的属性完全独立,支持同进程内多芯片并存场景。
  3. 统一配置机制:所有平台统一通过 INI 文件覆盖默认值,不再各自为政,新 SoC 适配只需新增 dev_info_reg.cc 注册默认值即可。
  4. 减少运行时不确定性:默认值在编译期通过 dev_info_reg.cc 确定,仅保留必须的驱动特性查询(如 910_B_93 的 SQ 动态绑定检查)。
  5. 降低维护成本:删除 11 个平台的 dev_info_proc_func.cc(约 600+ 行),减少重复代码。

应用场景:

  • 新 SoC 平台上线时,只需在对应目录创建 dev_info_reg.cc 注册属性默认值,无需编写复杂的初始化函数
  • 产品部署时,通过 Ascend.ini 的 [SoCInfo] 段即可调整流数量和深度等参数,无需修改代码

Design(设计方案)

1. 数据结构变更

新增 RtIniAttributes(临时存储 INI 配置,仅在初始化阶段使用):

struct RtIniAttributes {
    uint32_t normalStreamNum = 0U;      // [SoCInfo] normal_stream_num
    uint32_t normalStreamDepth = 0U;    // [SoCInfo] normal_stream_depth
    uint32_t hugeStreamNum = 0U;        // [SoCInfo] huge_stream_num
    uint32_t hugeStreamDepth = 0U;      // [SoCInfo] huge_stream_depth
};

DevProperties 新增 15 个字段(从 RtMacroValue 迁移):

字段 说明
maxPersistTaskNum 最大持久化任务数
maxSupportTaskNum 最大支持任务数
stubEventCount Stub Event 数量
maxReportTimeoutCnt 最大超时上报次数
rtcqDepth RTCQ 深度
baseAicpuStreamId AICPU 基础流 ID
expandStreamRsvTaskNum 扩展流预留任务数
expandStreamSqDepthAdapt 扩展流 SQ 深度适配标志
expandStreamAdditionalSqeNum 扩展流额外 SQE 数量
rsvAicpuStreamNum 预留 AICPU 流数量
maxPhysicalStreamNum 最大物理流数量
maxAllocStreamNum 最大可分配流数量
rtsqDepth RTSQ 深度
maxTaskNumPerStream 每个流最大任务数
maxTaskNumPerHugeStream 每个大流最大任务数
rtsqReservedTaskNum RTSQ 预留任务数(新增,用于计算 maxTaskNumPerStream)

2. 初始化流程重构

修改前:
  Runtime::Init()
    └─ MacroInit(chipType)
        ├─ MacroInitDefault()           // 硬编码默认值到 macroValue_
        ├─ macroInitFunc(socType, macroValue_)  // 平台函数覆盖(混杂 INI 读取)
        └─ starsPendingMax_ = macroValue_.rtsqDepth * 3/4

修改后:
  Runtime::Init()
    └─ IniAttrsInit(chipType)
        ├─ ParseIniFile(socType, iniAttrs_)         // 统一读取 INI 配置
        ├─ UpdateDevPropertiesFromIniAttrs(chipType) // INI 值覆盖 DevProperties
        │   └─ CompareAndUpdate()                   // 逐字段比对更新
        ├─ devPropsUpdateFunc(props)                // 仅保留必须的运行时查询
        └─ starsPendingMax_ = props.rtsqDepth * 3/4

3. INI 覆盖规则

新增 ini_parse_utils 工具,所有平台统一调用:

void ParseIniFile(rtSocType_t socType, RtIniAttributes& iniAttrs);

覆盖规则(CompareAndUpdate):

  • INI 值为 0 → 保留 DevProperties 原值(视为未配置)
  • INI 值 == DevProperties 值 → 无需更新
  • INI 值 != DevProperties 值 → 以 INI 值为准,打印日志记录变更

4. 各平台适配方式

  • 静态属性注册:每个平台在 dev_info_reg.cc 中注册 15 个字段的默认值(编译期确定)
  • 动态逻辑保留:仅 910_B_93 保留驱动特性查询逻辑(devPropsUpdateFunc),其余平台均删除 dev_info_proc_func.cc
  • 新增平台适配:只需创建 dev_info_reg.cc,注册属性默认值即可

5. 文件变更概要

变更类型 文件 说明
新增 ini_parse_utils.h/.cc INI 解析工具
修改 device_properties.h DevProperties 新增 15 个字段
修改 dev_info.h 新增 RtIniAttributes 结构
修改 runtime.cc 实现 IniAttrsInit 和 UpdateDevPropertiesFromIniAttrs
修改 各平台 dev_info_reg.cc 注册新字段默认值
删除 11 个平台 dev_info_proc_func.cc 移除冗余初始化逻辑
修改 v200.cmake 移除已删除文件的编译引用
likedislike
Ddaijinling成员
3月30日 添加了label:requirement
Ddaijinling成员
3月30日 将 daijinling 设为负责人
Ddaijinling成员
3月30日 修改了issue 的描述
Ddaijinling成员
3月30日 修改标题为 “[Requirement|需求建议]: Soc Version 优化:将 RtMacroValue 字段迁移到 DevProperties,重构 SoC 版本属性管理”,原标题为“[Requirement|需求建议]: ”
Ddaijinling成员
3月30日 关联了pull request:soc version优化
Ddaijinling成员
4月8日 关联了pull request:refactor: 删除废弃接口和字段(rtGetMaxModelNum/pctrace/maxSinkTaskNum/maxModelNum)
Ddaijinling成员
4月8日 关联了pull request:refactor: 将 RtMacroValue 字段迁移到 DevProperties,重构 SoC 版本属性管理
Ddaijinling成员
4月9日 关联了pull request:revert: restore ascend950 cce_file directory name
Ddaijinling成员
4月28日 issue状态由 进行中 改变为 已解决
Ddaijinling成员
4月28日 关闭了 issue