CANN Runtime 中 mstx 打点与 domain 过滤实践:基于 3_mstx_with_domain 样例的默认/自定义 domain 与 msprof 采集控制

发布时间:2026/9/19 22:45:11
CANN Runtime 中 mstx 打点与 domain 过滤实践:基于 3_mstx_with_domain 样例的默认/自定义 domain 与 msprof 采集控制 CANNAscend人工智能任务调度【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址https://gitcode.com/cann/runtime点击查看免费下载本篇文章围绕 CANN runtime 开源仓库中的example/5_performance/profiling/3_mstx_with_domain样例展开系统讲解如何在算子执行流程中使用 MindStudio Tools Extension LibrarymsTX接口在默认 domain 与自定义 domain 中分别完成瞬时事件Mark与范围事件Range打点并通过 msprof 的--mstx-domain-include/--mstx-domain-exclude参数按 domain 精确控制采集范围。读完本文后你将掌握 mstx domain 的创建、打点、销毁的完整生命周期管理方法以及 domain 级采集过滤的实战命令从而在性能分析中把自定义业务阶段精确映射到 Profiling 时间线。样例概述mstx 在默认 domain 与自定义 domain 中的打点3_mstx_with_domain是 Profiling 性能分析方向的进阶样例其核心目的是演示 msTX 接口在默认 domain与自定义 domain两种场景下的打点方式。样例以aclnnAdd向量加法算子为计算载体在执行流程的各个关键节点插入 mstx 打点运行完成后可用 msprof 按 domain 有选择地采集这些打点数据。样例整体结构如下example/5_performance/profiling/3_mstx_with_domain/ ├── common/ │ ├── util_acl.h # aclInit/Context/Stream 初始化与释放的通用封装 │ └── util_mstx.h # ACL_CALL / CHECK_RET / LOG_PRINT 辅助宏 ├── CMakeLists.txt # 工程构建脚本链接 ascendcl、nnopbase、msprofiler、opapi 等库 ├── README.md # 样例使用说明本文讲解对象 ├── README_en.md # 英文版使用说明 ├── mstx_with_domain.cpp # 样例主程序源码 └── run.sh # 一键编译并运行脚本从源码结构看样例的运行链路为main→Init初始化 acl 资源→MstxDomainInit创建自定义 domain→TestMstxWithDomain默认 domain 打点 执行算子→DoAclAdd自定义 domain 打点 算子执行→MstxDomainDeInit销毁自定义 domain→DeInit释放 acl 资源。产品支持情况本样例支持以下产品README 声明产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√需要说明的是样例 README 中的产品支持表仅列出当前样例已完成验证或已明确声明支持的产品参见 example/README.md 中的产品支持表说明未在表格中列出的产品不代表不支持若某产品明确不支持会以×标识。因此在实际使用前建议结合自身硬件型号与 CANN 版本确认 mstx 组件的可用性。环境准备与 msTX 依赖检查设置 CANN 环境变量编译运行样例前需要将样例代码放到已安装 CANN 软件的环境中并加载环境变量# ${install_root} 替换为 CANN 安装根目录默认安装在 /usr/local/Ascend 目录 source ${install_root}/cann/set_env.sh在example/README.md的环境准备章节中还额外要求设置ASCEND_INSTALL_PATHexport ASCEND_INSTALL_PATH${install_root}/cann此外本样例的run.sh脚本会直接读取ASCEND_HOME_PATH环境变量来定位 CANN 安装路径与 msTX 头文件因此建议一并设置export ASCEND_HOME_PATH${install_root}/cann这一点在 Profiling 系列的 1_msproftx 样例中也有明确说明run.sh还会读取ASCEND_HOME_PATH请一并设置为同一路径。检查 msTX 组件本样例依赖 CANN Toolkit 中的 MindStudio Tools Extension LibrarymsTX组件。执行以下命令检查当前环境是否存在样例所需的 msTX 头文件ls -l ${ASCEND_HOME_PATH}/include/mstx/ms_tools_ext.h若命令正常显示该文件信息表示当前环境已包含样例所需的 msTX 头文件可以继续编译运行。若命令提示文件不存在请按以下方式处理确认ASCEND_HOME_PATH指向 CANN Toolkit 的实际安装目录若当前环境未安装 msTX请选择与当前 CANN 软件版本配套的 msTX 版本并参见《msTX 安装指南》中的在线安装或离线安装章节完成安装若需要升级 msTX请参见《msTX 安装指南》中的升级章节。安装或升级完成后重新执行source ${install_root}/cann/set_env.sh加载 CANN 环境变量并再次执行上述检查确认头文件可通过${ASCEND_HOME_PATH}/include/mstx/ms_tools_ext.h访问。切换到样例目录并运行cd ${git_clone_path}/example/5_performance/profiling/3_mstx_with_domain bash run.shrun.sh内部完成的工作包括校验ASCEND_HOME_PATH是否设置、加载${ASCEND_HOME_PATH}/bin/setenv.bash、创建build目录并用 CMake 编译、最终运行可执行文件并将输出通过tee同时打印到终端和output_msg.txt文件源码见 run.sh。从 CMakeLists.txt 可以看到编译期的关键配置最低 CMake 版本要求为3.16.0通过ASCEND_HOME_PATH定位 CANN 头文件目录与lib64链接目录可执行文件mstx_with_domain链接了libascendcl.so、libnnopbase.so、libmsprofiler.so、libopapi.so、libc_sec.so以及dl其中libmsprofiler.so承载 msprof 采集能力。源码解析domain 生命周期与两类打点方式自定义 domain 的创建与销毁样例在程序启动后、执行主流程前创建自定义 domain程序结束时销毁。相关代码位于 mstx_with_domain.cppnamespace { aclrtContext context; aclrtStream stream; mstxDomainHandle_t domainRange; std::string g_domainRangeName DoAclAdd_Inner; ... void MstxDomainInit() { domainRange mstxDomainCreateA(g_domainRangeName.c_str()); } void MstxDomainDeInit() { mstxDomainDestroy(domainRange); } } // namespace int main(int argc, const char** argv) { int32_t deviceId 0; int ret Init(deviceId, context, stream); if (ret ! ACL_SUCCESS) { return ret; } MstxDomainInit(); ret TestMstxWithDomain(); MstxDomainDeInit(); auto deinitRet DeInit(deviceId, context, stream); return ret ! ACL_SUCCESS ? ret : deinitRet; }这里自定义 domain 的名称被定义为DoAclAdd_InnermstxDomainCreateA返回mstxDomainHandle_t类型句柄之后所有自定义 domain 打点接口都要以该句柄作为第一个入参。main中的执行顺序为先Init初始化 acl 资源再MstxDomainInit创建 domain执行TestMstxWithDomain最后MstxDomainDeInit销毁 domain 并DeInit释放资源体现了domain 句柄先创建、后使用、最后销毁的标准生命周期管理。Init/DeInit的 acl 资源初始化流程封装在 common/util_acl.h 中aclInit初始化系统资源、aclrtSetDevice设置 Device、aclrtCreateContext创建 Context、aclrtSetCurrentContext设为当前 Context、aclrtCreateStream创建 Stream释放时按相反顺序调用aclrtDestroyStream、aclrtDestroyContext、aclrtResetDevice、aclFinalize。默认 domain 打点mstxMarkA / mstxRangeStartA / mstxRangeEndTestMstxWithDomain演示了默认 domain 下的打点方式——不需要 domain 句柄直接调用以mstx为前缀的接口static int TestMstxWithDomain() { // range with default domain start uint64_t id mstxRangeStartA(TestMstxWithDomain, stream); ACL_CALL(aclrtSetCurrentContext(context)); // mark with default domain end mstxMarkA(DoAclAdd Start, stream); ACL_CALL(DoAclAdd(context, stream)); // range with default domain end mstxRangeEnd(id); return ACL_SUCCESS; }其中mstxRangeStartA(TestMstxWithDomain, stream)开启一个默认 domain 下的范围事件Range入参为描述字符串和关联 Stream返回uint64_t类型的范围 idmstxMarkA(DoAclAdd Start, stream)记录默认 domain 下的瞬时事件Mark用于标记某个时刻发生的业务动作mstxRangeEnd(id)用起始接口返回的 id 关闭对应的范围事件。整个TestMstxWithDomain函数体被一对 Range 包裹恰好覆盖切换 Context 触发算子执行这段业务逻辑可在时间线上直观看到该阶段的整体耗时。自定义 domain 打点mstxDomainMarkA / mstxDomainRangeStartA / mstxDomainRangeEndDoAclAdd内部演示了自定义 domain即DoAclAdd_Inner下的打点所有接口均以mstxDomain为前缀且第一个入参是mstxDomainCreateA返回的句柄int DoAclAdd(aclrtContext context, aclrtStream stream) { ... ACL_CALL(CreateAclTensor(selfHostData, selfShape, selfDeviceAddr, aclDataType::ACL_FLOAT, self)); ACL_CALL(CreateAclTensor(otherHostData, otherShape, otherDeviceAddr, aclDataType::ACL_FLOAT, other)); // mark with DoAclAdd_Inner domain mstxDomainMarkA(domainRange, Create alpha aclScalar, stream); alpha aclCreateScalar(alphaValue, aclDataType::ACL_FLOAT); ... ACL_CALL(aclnnAddGetWorkspaceSize(self, other, alpha, out, workspaceSize, executor)); ... ACL_CALL(aclnnAdd(workspaceAddr, workspaceSize, executor, stream)); // range with DoAclAdd_Inner domain start uint64_t id mstxDomainRangeStartA(domainRange, After aclnnAdd, stream); ACL_CALL(aclrtSynchronizeStream(stream)); ... // 拷贝结果并打印 // range with DoAclAdd_Inner domain end mstxDomainRangeEnd(domainRange, id); return ret; }自定义 domain 打点与默认 domain 的关键区别在于多一个 domain 句柄参数mstxDomainMarkA(domainRange, message, stream)记录瞬时事件mstxDomainRangeStartA(domainRange, message, stream)返回范围 idmstxDomainRangeEnd(domainRange, id)结束范围。由于这些打点归属于名为DoAclAdd_Inner的独立 domain后续采集时就可以通过 domain 过滤机制把它们与其他打点区分开。msprof 采集按 domain 精确控制采集范围样例运行本身不依赖 msprof但若要采集 mstx 打点数据需在运行命令前叠加 msprof 采集前缀。README 提供了三种典型场景# 采集所有打点数据包括默认 domain 和自定义 domain msprof --msproftxon bash run.sh # 只采集 default domain 的打点数据 msprof --msproftxon --mstx-domain-includedefault bash run.sh # 采集 default domain 之外的打点数据 msprof --msproftxon --mstx-domain-excludedefault bash run.sh参数使用要点--msproftxon开启 msproftx/mstx 打点数据的采集是采集 mstx 数据的前置开关--mstx-domain-include只采集指定 domain 的打点数据未被列出的 domain 不采集--mstx-domain-exclude采集除指定 domain 之外的打点数据--mstx-domain-include与--mstx-domain-exclude互斥不可同时配置如需指定多个 domain使用逗号隔开例如--mstx-domain-includedefault,DoAclAdd_Inner。对照本样例的打点分布可以直观理解过滤效果过滤参数采集到的内容不加 domain 参数默认 domain 的mstxRangeStartA/mstxMarkA/mstxRangeEnd与自定义 domainDoAclAdd_Inner的全部打点--mstx-domain-includedefault仅TestMstxWithDomain中的mstxMarkA(DoAclAdd Start)、mstxRangeStartA(TestMstxWithDomain)及其 Range 范围--mstx-domain-excludedefault仅DoAclAdd中DoAclAdd_Inner域下的mstxDomainMarkA(Create alpha aclScalar)、mstxDomainRangeStartA(After aclnnAdd)及其 Range 范围这种按 domain 过滤的能力非常适合将框架侧打点与业务侧打点分离采集业务代码可以把自身逻辑放在独立 domain 中分析时通过 include/exclude 只关注自己关心的那部分时间线避免被其他 domain 的标记干扰。采集产物的解析与字段解读msprof 采集完成后会生成 Profiling 原始数据目录。根据 profiling_artifact_analysis.md 的说明结果目录由采集方式和路径配置优先级决定使用msprof命令时--output指定存放目录未指定--output且设置了ASCEND_WORK_PATH时结果目录为ASCEND_WORK_PATH/profiling_data通过msprof [msprof arguments] app [app arguments]启动应用且均未配置时结果保存在当前目录。解析与导出命令如下# 解析原始采集数据 msprof --parseon --outputprofiling_result_dir # 导出文本csv/json summary msprof --exporton --outputprofiling_result_dir --summary-formatcsv --typetext msprof --exporton --outputprofiling_result_dir --summary-formatjson --typetext # 导出数据库文件 msprof --exporton --outputprofiling_result_dir --typedb与本样例强相关的导出字段有两个msproftx messageaclprofMark、aclprofPush、aclprofRangeStart或mstx 标记携带的描述用于把应用自定义阶段映射到性能时间线Domainmstx domain 名称用于按 domain 过滤或归类应用自定义打点。也就是说样例中传入 mstx 接口的字符串描述如DoAclAdd Start、After aclnnAdd最终会以msproftx message形式出现在导出结果中而default与DoAclAdd_Inner会作为Domain字段值出现。分析时建议先确认打点消息是否出现在导出结果中再按消息对应的业务阶段分析耗时参见 profiling_artifact_analysis.md 的分析建议章节。示例输出与结果验证编译运行成功后终端以及output_msg.txt文件会输出类似如下的内容[INFO]: AscendHome is set to ... ... result[0] is: 1.200000 result[1] is: 2.200000 result[2] is: 3.200000 result[3] is: 5.400000 result[4] is: 6.400000 result[5] is: 7.400000 result[6] is: 9.600000 result[7] is: 10.600000这些result[i]对应selfHostData {0,1,2,3,4,5,6,7}与otherHostData {1,1,1,2,2,2,3,3}按alpha 1.2f执行alpha * self other的计算结果例如1.2 * 1 1 2.2、1.2 * 5 3 9.0附近的数值符合预期实际输出以运行环境为准说明算子执行与打点流程均正常结束。随后即可按上文 msprof 命令叠加采集并在导出产物中检索Domain与msproftx message字段验证默认 domain 与自定义 domain 的打点是否按预期分别采集。小结3_mstx_with_domain样例完整覆盖了 msTX 组件在 CANN Runtime 场景中的核心用法domain 生命周期mstxDomainCreateA创建自定义 domain 句柄mstxDomainDestroy销毁两者严格包住打点区间两种打点范式默认 domain 使用mstxMarkA/mstxRangeStartA/mstxRangeEnd自定义 domain 使用mstxDomainMarkA/mstxDomainRangeStartA/mstxDomainRangeEnd需携带 domain 句柄分别记录瞬时事件与范围事件domain 级采集过滤通过msprof --msproftxon叠加--mstx-domain-include/--mstx-domain-exclude互斥、逗号分隔多值实现按 domain 精确采集。掌握这些能力后你可以在自己的算子或训练推理程序中以最小侵入方式埋入业务阶段标记再结合 domain 过滤与 Profiling 产物解读 中的解析导出流程将性能瓶颈定位到具体的业务阶段为性能调优提供精确的时间线依据。赞分享CANNAscend人工智能任务调度【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址https://gitcode.com/cann/runtime点击查看免费下载相关推荐CANN oam-tools 中 mstx API 使用示例为应用添加自定义耗时打点并借助 msprof 采集CANN oam tools 中 mstx API 使用示例为应用添加自定义耗时打点并借助 msprof 采集 导读 mstx API 是 CANN 提供给开运维性能剖析根因分析人工智能AscendFirecracker 中的 Seccomp默认过滤器的加载机制与自定义过滤器实战Firecracker 中的 Seccomp默认过滤器的加载机制与自定义过滤器实战 Seccompsecure computing mode是 Firec虚拟化云原生librealsense 与 PCL 集成实战基于 rs-pcl 示例实现 RealSense 深度点云采集与 PassThrough 过滤librealsense 与 PCL 集成实战基于 rs pcl 示例实现 RealSense 深度点云采集与 PassThrough 过滤 导读 本文以 l智能硬件音视频计算机视觉创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询