| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
【PR】: 新增aclrt接口支持acl接口劫持 Co-authored-by: Leon0930<lili233@huawei.com> # message auto-generated for no-merge-commit merge: !3947 merge feature/support-prof-hook into master 【PR】: 新增aclrt接口支持acl接口劫持 Created-by: Leon0930 Commit-by: Leon0930 Merged-by: cann-robot Description: # Pull Request ## 描述 本次 PR 新增 aclrt API Hook 基础设施,支持性能分析工具(如Profiling)通过注入Hook函数的方式拦截部分Runtime接口调用。 主要变更: 1. include/external/acl/acl_rt.h 新增 aclrtApiFunc 类型定义和 aclrtApiInjectionSetFunc/aclrtApiInjectionGetFunc 两个对外接口声明。 2. acl_rt_wrapper.h 新增 Hook 宏体系:ACL_HOOK_DECL/ACL_HOOK_DEF/ACL_RT_CPP_HOOKABLE,通过符号名编码实现每个可Hook接口的独立全局 Entry,避免枚举和表索引,decltype 自动推导函数指针类型避免签名漂移。 3. acl_rt.cpp 在 ACL_RT_API_HOOK_ENABLE 编译宏开启时,将 ACL_RT_FUNC_MAP、ACL_RT_ALLOCATOR_FUNC_MAP、ACL_MDLRI_FUNC_MAP 中的接口从直接转发切换为可Hook间接调用;关闭时回退为直接转发,零额外开销。 4. dfx.cpp 实现名称查找表和 aclrtApiInjectionSetFuncImpl/aclrtApiInjectionGetFuncImpl:SetFunc 使用 __atomic_store_n release 语义写入 currentFunc,GetFunc 使用 __atomic_load_n acquire 语义读取;不可Hook的接口名返回 ACL_ERROR_INVALID_PARAM。 5. 进程启动时通过 __attribute__((constructor)) 自动向 Profiling 模块注册 SetFunc/GetFunc 入口,无需手动初始化。 6. CMakeLists.txt 和 runtime.cmake 在嵌入式平台(ascend031/ascend035)以外启用 ACL_RT_API_HOOK_ENABLE。 7. 新增 docs/zh/api_ref/27_api_hook.md API 参考文档,覆盖产品支持情况、功能说明、参数说明、约束说明。 8. 新增 acl_rt_api_hook_unittest.cpp UT,覆盖初始状态校验、Hook注入与恢复、多工具链式调用、非法接口名/null参数/非Hook接口等异常场景,共12条测试用例。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [x] 📝 文档内容更新 ## 关联的Issue ## 如何测试 1. 编译 runtime:bash build.sh 2. 运行 UT:执行 acl_rt_api_hook_unittest 中的 UTEST_AclRtApiHook.* 用例 3. 验证 Hook 注入:SetFunc 后调用 aclrtGetDevice 确认返回 Hook 函数的哨兵值 4. 验证 Hook 恢复:SetFunc(originFunc) 后确认 API 回到原始实现 5. 验证多工具链式:两个 Hook 依次注册后确认调用链正确传递 6. 验证异常场景:非法接口名、null 参数、非Hook接口(如 aclInit)均返回 ACL_ERROR_INVALID_PARAM 7. 验证嵌入式平台:ascend031/ascend035 上接口返回 ACL_ERROR_FEATURE_UNSUPPORTED,API 走直接转发无额外开销 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 - Hook 查找表采用线性扫描(约250个条目),仅在工具初始化时调用,冷路径性能可接受。 - currentFunc 写入使用 release 语义原子存储,读取使用 acquire 语义原子加载,保证多线程场景下的可见性。 - 嵌入式平台(ascend031/ascend035)编译为返回 ACL_ERROR_FEATURE_UNSUPPORTED 的桩实现,API 直接转发,零额外开销。 See merge request: cann/runtime!3947 | 27 天前 | |
【PR】: fix:修复asc-tools加载libruntime.so和libacl_rt.so时序问题导致hook不生效问题 Co-authored-by: Leon0930<lili233@huawei.com> # message auto-generated for no-merge-commit merge: !4646 merge fix/hook-dlsym-lookup into master 【PR】: fix:修复asc-tools加载libruntime.so和libacl_rt.so时序问题导致hook不生效问题 Created-by: Leon0930 Commit-by: Leon0930 Merged-by: cann-robot Description: # Pull Request ## 描述 修复asc-tools加载libruntime.so和libacl_rt.so时序问题导致hook不生效的问题。 **问题现象:** 先加载libruntime.so,后加载libacl_rt.so:1. libruntime.so加载完成后,弱引用g_hook_aclXXX为null,不影响加载,hook功能降级不可用。2.libacl_rt.so加载,libacl_rt.so need libruntime.so,libruntime.so step1已经加载,不在重复load,弱符号不刷新,仍为null,hook功能仍不可用。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> 无 ## 如何测试 1.asc-tools执行用例测试 2.写测试脚本,先执行dlopen(libruntime.so) (或者融合编译的libascendcl.so),后加载libacl_rt.so,aclrtApiInjectionGetFunc可以获取到对应函数指针并劫持成功 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 将libruntime.so中的弱符号g_hook_aclXX等全部删除,仅保留引用g_hookLookupTable。g_hookLookupTable改用注册模式,定义赋值在libacl_rt.so(不在有弱符号),同时在libacl_rt.so加载时将g_hookLookupTable注册至libruntime.so。 **具体场景如下:** 正常场景,拉起libacl_rt.so: libacl_rt.so need libruntime.so, libruntime.so加载成功 -> libacl_rt.so加载成功(currFunc等静态初始化完成),g_hookLookupTable注册至libruntime.so,hook功能enable。 只加载libruntime.so:g_hookLookupTable为nullptr,不影响加载,hook功能降级不可用。 劫持libacl_rt.so: currFunc等静态初始化在libacl_rt.so,可劫持成功。 先加载libruntime.so,后加载libacl_rt.so:1. libruntime.so加载完成后,g_hookLookupTable为nullptr,不影响加载,hook功能降级不可用。2.libacl_rt.so加载,libacl_rt.so need libruntime.so,libruntime.so step1已经加载,不在重复load,libacl_rt.so构造函数注册g_hookLookupTable到libruntime.so,libruntime.so的g_hookLookupTable不为nullptr,hook功能生效。 See merge request: cann/runtime!4646 | 19 天前 | |
elevate acl_rt_headers visibility to device level Co-authored-by: liuyang163<yangliu163@huawei.com> # message auto-generated for no-merge-commit merge: !2324 merge master into master elevate acl_rt_headers visibility to device level Created-by: liuyang163 Commit-by: liuyang163 Merged-by: cann-robot Description: # Pull Request ## 描述 elevate acl_rt_headers visibility to device level ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. 2. ## 核对清单 <!-- [x] 表示选中 --> - [ ] 我的代码遵循了项目的代码风格 - [ ] 我已对代码进行了自测 - [ ] 我已更新了相关的文档 - [ ] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [ ] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/runtime!2324 | 3 个月前 | |
Initial commit | 8 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 27 天前 | ||
| 19 天前 | ||
| 3 个月前 | ||
| 8 个月前 |