msSanitizer工具是基于昇腾AI处理器的一个异常检测工具,包含了单算子开发场景下的内存检测、竞争检测和未初始化检测三个子功能。用户使用msOpST工具在真实的硬件环境中对算子的功能进行测试后,可根据实际测试情况选择是否使用msSanitizer工具进行异常检测。
msSanitizer工具不支持对多线程算子及使用了掩码的向量类计算指令进行检测。
msSanitizer通过不同子功能提供了不同类型的异常检测功能,目前已支持的功能如下:
使用场景 |
使用说明 |
使用示例 |
|---|---|---|
算子内存检测 |
||
算子竞争检测 |
||
算子未初始化检测 |
msSanitizer支持Ascend CL调用的Ascend C算子(包括Vector、Cube算子和Mix融合算子)未初始化的检测,可参考未初始化检测。 |
|
CANN软件栈的内存检测 |
支持CANN软件栈内存检测,详细可参考检测CANN软件栈的内存。 |
可以通过运行以下命令来调用msSanitizer工具。
mssanitizer <options> -- <user_program> <user_options>
mssanitizer -- application parameter1 parameter2 ...
参数名称 |
参数描述 |
参数取值 |
是否必选 |
|---|---|---|---|
-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。 |
否 |
--block-id |
是否启用单block检测功能。 |
可设定范围为0~200之间的整数。 启用前
启用后
|
否 |
--cache-size |
表示单block的GM内存大小。 |
单block可设定范围为1~8192之间的整数,单位为MB。 单block默认值为100MB,表示单block可申请100MB的内存大小。 说明:
|
否 |
--kernel-name |
指定要检测的算子名称。 |
支持使用算子名中的部分字符串来进行模糊匹配。如果不指定,则系统默认会对整个程序执行期间所调度的所有算子进行检测。 例如,需要同时检测名为"abcd"和"bcd"的算子时,可以通过配置--kernel-name="bc"来实现这一需求,系统会自动识别并检测所有包含"bc"字符串的算子。 |
否 |
-h,--help |
输出帮助信息。 |
- |
否 |
参数名称 |
参数描述 |
参数取值 |
是否必选 |
|---|---|---|---|
--check-unused-memory |
使能分配内存未使用检测。 |
|
否 |
--leak-check |
使能内存泄漏检测。 |
|
否 |
--check-device-heap |
使能Device侧内存检测。 |
|
否 |
--check-cann-heap |
使能CANN软件栈内存检测。 |
|
否 |
异常检测工具提供内存检测(memcheck)、竞争检测(racecheck)和未初始化检测(initcheck)三种检测功能,多种检测功能可以组合开启,组合启用检测功能需满足以下原则:
mssanitizer -t memcheck -t racecheck ./application
mssanitizer -t racecheck --leak-check=yes ./application
mssanitizer -t racecheck -t memcheck --leak-check=yes ./application
mssanitizer ./application
以上命令等价于:
mssanitizer -t memcheck ./application
支持如下调用算子的场景:
auto ret = aclInit("./acl.json"); // acl.json文件内容为{"dump":{"dump_scene":"lite_exception"}}
结果件名称 |
说明 |
|---|---|
mssanitizer_{TIMESTAMP}_{PID}.log |
msSanitizer工具运行过程中,在mindstudio_sanitizer_log目录下生成的工具日志,TIMESTAMP为当前时间戳,PID为当前检测工具的PID。 |
kernel.{PID}.o |
msSanitizer工具运行过程中,会在当前路径下生成的算子缓存文件。其中,PID为当前使用的检测工具的PID,该算子缓存文件用于解析异常调用栈。
|
tmp_{PID}_{TIMESTAMP} |
msSanitizer工具运行过程中,会在当前路径下生成的临时文件夹。其中,PID为当前使用的检测工具的PID,TIMESTAMP为当前时间戳,该文件夹用于生成算子Kernel二进制。
|