已关闭
[Requirement|需求建议]: 新增 Runtime API Hook 调用计数样例 #1066
Yanxijiu创建于  27 天前关闭于  26 天前
Yanxijiu
Yanxijiu成员
27 天前 创建

Backgroud(背景信息)

Runtime API Hook 接口提供了函数替换能力,但当前缺少一个可直接构建、运行并校验调用次数及恢复行为的单 Device 样例,工具开发者难以验证 Hook 是否正确转发原实现。

Origin(信息来源)

来自 Runtime7 样例补充需求,目标目录为 example/2_advanced_features/api_hook/0_call_count,覆盖 aclrtApiInjectionGetFunc 和 aclrtApiInjectionSetFunc。

Benefit / Necessity (价值/作用)

为性能观测工具开发者提供调用计数参考,展示保持接口原有行为、控制调用时序和在失败路径恢复原函数的方法。

Design(设计方案)

  1. 初始化并绑定单个逻辑 Device 0,读取 aclrtGetDevice 原始及当前函数指针;已有 Hook 时退出,避免覆盖其他工具。
  2. 在主线程串行安装计数 Hook。Hook 增加计数并直接转发保存的原始实现,避免递归调用。
  3. 执行一次查询,验证 Device ID 为 0、调用计数为 1,同时验证 Hook 安装前后的函数指针状态。
  4. 恢复原函数,再查询一次,确认返回的 Device ID 仍为 0 且计数保持为 1。
  5. 失败路径也尝试恢复原函数;恢复和资源清理错误影响最终退出码。
  6. 提供源码、双语 README、CMake、运行脚本和父主题导航。关键 API 文档支持范围为 A2/A3/A5。

验证:已在 CANN 9.3.0-weekly.20260923.01、Ascend910_9362 环境构建运行通过;查询失败注入验证恢复及非零退出通过;本地 Pre-commit、Shell 语法、空白和文档链接检查通过。A2/A5 尚未实机验证,远端 CodeCheck 待 PR 流水线核验。

likedislike
YanxijiuYanxijiu成员
27 天前 添加了label:requirement
YanxijiuYanxijiu成员
27 天前 关联了pull request:feat: 新增 API Hook 调用计数样例(#1066)
YanxijiuYanxijiu成员
27 天前 将 2403_89963296 设为负责人
CANN-robotCANN-robot成员
26 天前 关闭了 issue
CANN-robotCANN-robot成员
26 天前 添加了label:resolved