开发者
资源

内存泄漏分析

Step内的内存问题主要包括内存泄漏、踩踏、内存碎片,导致内存池空闲、内存过多等问题。msMemScope工具当前仅支持内存泄漏问题的定位。

前提条件

  • 请使用内存分析功能时,如果需要设置--events参数,请确保--events参数中包含alloc和free。
  • 在使用内存分析功能时,请勿设置--steps参数。

在线方式

在进行内存分析时,需配合使用mstx打点功能进行问题定位,mstx打点详情参考《MindStudio mstx API参考》

  1. 使用msMemScope工具运行用户程序,Application为用户程序。
    msmemscope ${Application}
  2. 执行完成后,会出现如下两种回显信息。
    1. 如果出现如图1的回显信息,表示存在内存泄漏问题。回显信息中分别展示了每张卡内存泄漏的汇总信息,包括泄漏发生的Step数、关联的kernel、地址以及泄漏大小等信息。
      图1 内存泄漏
    2. 如果出现如图2的回显信息,表示存在内存波动。回显信息中展示了单个Step内的内存波动(用最小和最大的内存池分配占用比值定义)以及最小的内存池分配占用,同时给出最小比值和最大比值作为参考,用户可根据该值判断是否存在内存泄漏风险。

      在第一个Step时,内存尚未稳定,所以只支持分析从第二个Step开始的内存波动,第一个Step内存波动可忽略。

      图2 内存波动

离线方式

msMemScope支持对指定范围内的内存事件进行离线泄漏分析。使用mstx标识好泄漏分析的范围后,可以使用该功能对落盘文件进行分析。

当前离线内存泄漏分析功能仅支持HAL内存泄漏分析。

  1. 对需要检测泄漏的范围进行mstx的mark打点。mstx打点详情参考《MindStudio mstx API参考》
    • 打点的mark信息将用于离线分析接口的输入。
    • 使用mark打点功能标记三个点,分别称为A、B、C。在A到B范围内申请的内存,需要在C点前全部释放,否则会被判定为内存泄漏。
  2. 执行以下命令,使用msMemScope工具运行用户程序,获取落盘csv文件,Application为用户程序。
    msmemscope ${Application}
  3. 执行以下命令,调用Python接口,对输出的csv文件进行离线泄漏分析。
    1
    2
    import msmemscope
    msmemscope.check_leaks(input_path="user/memscope.csv",mstx_info="test",start_index=0)
    

    其中参数信息如下:

    • input_path:csv文件所在路径,需使用绝对路径。
    • mstx_info:mark打点使用的mstx文本信息,用于标识泄漏分析的范围。
    • start_index:内存泄漏分析开始的打点位置编号,即从第几个符合条件的mstx打点位置开始分析。
    如果出现图3的回显信息,表示存在内存泄漏问题。
    图3 离线泄漏分析