| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
【PR】Snapshot 备份/恢复流程重构,内存申请补充备份标记能力 Co-authored-by: weixin_47917346<zhangjunyu23@huawei.com> Co-authored-by: yinhong chen<1329312243@qq.com> # message auto-generated for no-merge-commit merge: !4942 merge master into master 【PR】Snapshot 备份/恢复流程重构,内存申请补充备份标记能力 Created-by: weixin_47917346 Commit-by: weixin_47917346;yinhong chen;zhangjunyu23@huawei.com Merged-by: cann-robot Description: ## 描述 本 PR 重构 Snapshot 备份/恢复流程,新增备份/恢复 flags、版本兼容校验和 Runtime 设备内存备份标签能力。在保持 ACL 对外接口兼容的前提下,当调用方不传 Snapshot args 时继续走原有 Runtime 备份/恢复流程;当调用方传入 args 时,进入新的驱动能力校验与驱动备份/恢复流程。 ### 备份与恢复 1. 贯通 aclrtSnapShotBackupArgs / aclrtSnapShotRestoreArgs 到 Runtime、Decorator、Driver 调用链,并在新流程中支持 backupFlags / restoreFlags 透传。 2. ACL 对外接口保持兼容:aclrtSnapShotProcessBackup / aclrtSnapShotProcessRestore 允许 args 传 nullptr。 - args == nullptr:无兼容性判断概念,直接走原有 Runtime 备份/恢复流程。 - args != nullptr:进入新流程,基于设备是否支持 FEATURE_SVM_PROCESS_DEVICE_MEM_SNAPSHOT 做兼容性判断。 3. RTS 层保留旧无参 rtSnapShotProcessBackup / rtSnapShotProcessRestore 符号和语义,同时新增 rtSnapShotProcessBackupWithArgs / rtSnapShotProcessRestoreWithArgs 承接非空 args,避免破坏旧源码和旧二进制 ABI。 4. ACL 层对非空 args 做参数校验:backupFlags / restoreFlags 仅允许 0U 或 1U,非法值直接返回参数错误,不继续下传 Runtime/Driver。reserved 为冗余保留字段,当前流程不使用。 5. 备份阶段: - args == nullptr:走原有 Runtime 备份流程。 - args != nullptr 且兼容性不通过:直接返回错误,终止备份。 - args != nullptr 且兼容性通过:记录 runtime/driver API 版本,保留 ModelSqTasksBackup / halStreamBackup,跳过 Runtime 侧旧备份逻辑,通过 NpuDriver::ProcessResBackup(args->backupFlags) 交由驱动备份设备内存。 6. 恢复阶段: - args == nullptr:走原有 Runtime 恢复流程。 - args != nullptr 且兼容性不通过:直接返回错误,终止恢复。 - args != nullptr 且兼容性通过:先校验当前恢复版本与备份版本是否一致,版本不一致直接返回错误;版本一致后调用 NpuDriver::ProcessResRestore(args->restoreFlags),并跳过 RestoreModule、OpMemoryRestore、RestoreAiCpuKernelInfo 等旧内存恢复逻辑。 - 新恢复流程仍保留 stream/event/notify 资源重建、参数池刷新、ModelRestore、ACL graph 恢复、自定义 AICPU so reload、AICPU DFX 等必要恢复流程,halStreamRestore 不跳过。 ### 内存备份标签 1. 新增 DevMemAllocWithBackupFlag 接口,在 Runtime 内部申请设备内存时同步传入 Snapshot 备份标签;接口默认使用 SNAPSHOT_REQUIRED_BACKUP,仅 optional/no_backup 场景显式传参。底层通过 FlagAddBackupBit 将 SNAPSHOT_REQUIRED_BACKUP / SNAPSHOT_OPTIONAL_BACKUP 转换为驱动侧 MEM_SNAPSHOT_REQUIRED / MEM_SNAPSHOT_OPTIONAL 标志位。 2. 标签仅在 args != nullptr 且兼容性通过的新驱动流程中参与备份/恢复范围判断;当 args == nullptr 走旧 Runtime 流程时,标签不参与旧流程判断。 3. 标签划分原则: - SNAPSHOT_REQUIRED_BACKUP:新驱动流程中无论 backupFlags / restoreFlags 为 0U 还是 1U,都必须由驱动备份/恢复的 Runtime 内部设备内存。 - SNAPSHOT_OPTIONAL_BACKUP:新驱动流程中仅当 backupFlags / restoreFlags 为 1U 时由驱动备份/恢复的内存,适用于非必须备份,或恢复阶段可重新构建/重新下发的 Runtime 辅助内存。 - SNAPSHOT_NO_BACKUP:新驱动流程中也不需要驱动备份/恢复的内存,适用于恢复过程中的临时设备 buffer,用完即释放,不参与 Snapshot 备份恢复。 4. 对新驱动流程中需要保持内容一致的 Runtime 内存,在申请处补充 required 标签;对临时恢复 buffer,例如自定义 AICPU so reload 使用的 AllocAndCopyHbmBuf,标记为 no_backup。 5. 对无法直接通过分配接口传入标签、但新驱动流程中应按 required 处理的既有设备内存,在内部实现中通过 NpuDriver::MemAdvise(..., ADVISE_SNAPSHOT_REQUIRED, ...) 补充 required 标记,不改 ACL/RT 对外接口。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [x] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [x] 📝 文档内容更新 ## 如何测试 按本次变更影响范围做定向验证:Snapshot 备份/恢复接口新增 args 参数,同时保持 args == nullptr 的旧接口兼容行为;Runtime 内部设备内存申请切换为 DevMemAllocWithBackupFlag,并通过 DevMemAllocConfig 承载原有申请配置。对应同步适配已有 UT 中的 mock、stub 和测试 helper,并针对 Snapshot 备份标签策略新增定向 UT,验证空 args 旧流程、非空 args 兼容性判断、backupFlags / restoreFlags 传递以及驱动侧 flags 转换逻辑。修改后的 Runtime 相关 UT 已跑通。 | 接口或场景 | UT 覆盖结果 | 结果 | | --- | --- | --- | | ACL Snapshot 参数转发与参数校验 | acl_runtime_unittest.cpp:覆盖 aclrtSnapShotProcessBackup/Restore 成功、失败、args == nullptr 兼容旧流程、backupFlags / restoreFlags 参数转发,以及非法 flags 拦截且不下传 RTS | PASSED | | Runtime Snapshot API 路由 | rt_utest_api_snapshot_route.cc、rt_utest_runtime.cc、rt_utest_stub.cc:覆盖 Snapshot lock / backup / restore / unlock 路由及错误码映射 | PASSED | | 910B Snapshot 备份恢复流程 | rt_utest_snapshot.cc、rt_utest_api_impl.cc、rt_utest_api_impl_spec.cc:覆盖 Snapshot backup/restore 参数传入、兼容性判断、版本校验、restore 主流程及 batch load 相关路径 | PASSED | | Snapshot 标签兼容性分支(本次新增 UT) | rt_utest_snapshot.cc:覆盖 args == nullptr 时走旧 Runtime 备份/恢复流程;args != nullptr 且兼容性通过时透传 backupFlags / restoreFlags;args != nullptr 且兼容性不通过时返回错误并终止流程 | PASSED | | NpuDriver 备份恢复 flags 转换(本次新增 UT) | rt_utest_npu_driver.cc:覆盖 ProcessResBackup/Restore 中 1U 和 0U 到驱动 reserve flag 的转换 | PASSED | | Runtime 内部设备内存申请切换 | rt_utest_program.cc、rt_utest_aicpu_timeout.cc、rt_utest_arg_loader_nocopy.cc:原 mock DevMemAlloc 的用例已适配为 DevMemAllocWithBackupFlag,覆盖 module/program、AICPU timeout、ArgLoader 申请路径 | PASSED | | DevMemAllocConfig 参数适配 | rt_utest_npu_driver.cc、rt_utest_api_soma.cc、rt_utest_api.cc:覆盖 HugePage/Managed/SOMA 等路径中 readOnly、isNewApi 等配置迁移到 DevMemAllocConfig 后的行为 | PASSED | | 既有 UT helper 签名适配 | rt_utest_memory_transfer_driver.hpp:MemoryTransferTestDriver 按新 DevMemAlloc 签名适配,并从 DevMemAllocConfig 读取原 starsTillingFlag 语义 | PASSED | | UT stub 编译适配 | hal_ts copy.h、los_atomic copy.h、los_typedef copy.h、slog_stub.cc:同步适配本次接口变化导致的 UT stub 编译问题 | PASSED | See merge request: cann/runtime!4942 | 1 个月前 | |
【PR】: feat: 新增common文件加载流程 Co-authored-by: jiang-mingming01<jiangmingming16@h-partners.com> # message auto-generated for no-merge-commit merge: !4356 merge br_mingmingj_load_common_file_0817 into master 【PR】: feat: 新增common文件加载流程 Created-by: jiang-mingming01 Commit-by: jiang-mingming01 Merged-by: cann-robot Description: # Pull Request ## 描述 针对后续新增bin的场景,当查询不到对应的ini文件时,通过查询新增common ini文件和hal接口组合,达到新增bin的查询要求 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1.构造新增的common文件,需要前缀匹配,并更新对应的驱动版本 2.新增bin的soc功能查询验证 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [ ] 我已更新了相关的文档 - [ ] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [ ] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/runtime!4356 | 1 个月前 |