工具概述
msSanitizer工具是基于昇腾AI处理器的一个异常检测工具,包含了内存检测、竞争检测和未初始化检测三个子功能。用户使用msOpST工具在真实的硬件环境中对算子的功能进行测试后,可根据实际测试情况选择是否使用msSanitizer工具进行异常检测。
- 内存检测:工具可以在用户开发算子的过程中,协助定位非法读写、多核踩踏、非对齐访问、内存泄漏以及非法释放等内存问题。同时工具也支持对CANN软件栈的内存检测,帮助用户定界软件栈内存异常发生的模块。
- 竞争检测:工具可以协助用户定位由于竞争风险可能导致的数据竞争问题,包含核内竞争和核间竞争问题。其中,核内竞争包含流水间竞争和流水内竞争。
- 未初始化检测:工具可以协助用户定位由于内存未初始化可能导致的脏数据读取问题。  msSanitizer工具不支持对多线程算子、二级指针类算子及使用了掩码的向量类计算指令进行检测。 
工具特性
msSanitizer通过不同子功能提供了不同类型的异常检测功能,目前已支持的功能如下:
| 使用场景 | 使用说明 | 使用示例 | 
|---|---|---|
| 算子内存检测 | ||
| 算子竞争检测 | ||
| 算子未初始化检测 | msSanitizer支持Ascend CL调用的Ascend C算子(包括Vector、Cube算子和Mix融合算子)未初始化的检测,可参考未初始化检测。 | |
| CANN软件栈的内存检测 | 支持CANN软件栈内存检测,详细可参考检测CANN软件栈的内存。 | 
命令汇总
可以通过运行以下命令来调用msSanitizer工具。
mssanitizer <options> -- <user_program> <user_options>
 
 - options为检测工具的命令行选项,详细的参数选项及其默认值,请参考表2和表3,user_program为用户算子程序,user_options为用户程序的命令行选项。
- 如要加载的可执行文件或用户自定义程序本身带有命令行参数时,在可执行文件或用户程序(application)之前使用“--”分隔检测工具和用户命令。mssanitizer -- application parameter1 parameter2 ... 
- 用户需保证可执行文件及用户自定义程序的安全性。
- 用户需自行保证可执行文件或用户程序(application)执行的安全性。- 建议限制对可执行文件或用户程序(application)的操作权限,避免提权风险。
- 不建议进行高危操作(删除文件、删除目录、修改密码及提权命令等),避免安全风险。
 
| 参数名称 | 参数描述 | 参数取值 | 是否必选 | 
|---|---|---|---|
| -v,--version | 查询msSanitizer工具版本。 | - | 否 | 
| -t,--tool | 指定异常检测的子工具。 | 
 | 否 | 
| --log-file | 指定检测报告输出到文件。 | {file_name},如配置为test_log。  说明:  
 | 否 | 
| --log-level | 指定检测报告输出等级。 | 
 | 否 | 
| --max-debuglog-size | 指定检测工具调试输出日志中单个文件大小的上限。 | 可设定范围为1~10240之间的整数,单位为mb。 默认值为1024。  说明:  --max-debuglog-size=100就表示单个调试日志的大小上限为100mb。 | 否 | 
| -h,--help | 输出帮助信息。 | - | 否 | 
| 参数名称 | 参数描述 | 参数取值 | 是否必选 | 
|---|---|---|---|
| --check-unused-memory | 使能分配内存未使用检测。 | 
 | 否 | 
| --leak-check | 使能内存泄漏检测。 | 
 | 否 | 
| --check-device-heap | 使能device侧内存检测。 | 
 | 否 | 
| --check-cann-heap | 使能CANN软件栈内存检测。 | 
 | 否 | 
 
 - --check-device-heap或--check-cann-heap使能后,将不会对kernel内进行检测。
- Device侧内存检测和CANN软件栈内存检测不能同时使能,若同时使能会提示“--check-cann-heap and --check-device-heap CANNOT both enabled”。
- 使用msSanitizer工具提供的API头文件重新编译的待检测程序只能用于AsecndCL系列接口的泄漏检测,无法用于Device接口的检测。
调用场景
支持如下调用算子的场景:
- Kernel直调场景。
- 通过AscendCL单算子调用:单算子API执行的场景。
- 第三方框架算子调用:PyTorch框架的场景。
结果件说明
| 结果件名称 | 说明 | 
|---|---|
| mssanitizer_{TIMESTAMP}_{PID}.log | msSanitizer工具运行过程中,在当前目录下生成的工具日志,TIMESTAMP为当前时间戳,PID为当前检测工具的PID。 | 
| kernel.{PID}.o | msSanitizer工具运行过程中,在当前路径下生成的算子缓存文件,PID为当前使用的检测工具的PID,该算子缓存文件用于解析异常调用栈。 
 |