鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

内存一致性动态检查功能说明

内存一致性动态检查就是采用动态检查模式检查C/C++源码在鲲鹏平台运行时是否存在内存一致性问题,并提供内存一致性的检测结果与插入内存屏障的建议。

支持对单进程应用和共享内存模式的多进程应用进行内存一致性动态检查。当前,该工具支持针对采用以下机制的多进程应用进行检测与分析(暂不支持对使用execv函数族的多进程应用进行检测):

  • 共享内存类型
    • System V共享内存(基于shmget等系统调用)
    • POSIX共享内存(基于shm_open等接口)
  • 同步机制,可检测以下进程间同步方式。
    • POSIX信号量及相关操作
    • POSIX线程锁机制:包括互斥锁与读写锁
    • POSIX消息队列

命令功能

动态检查源码中内存一致性的情况。

命令格式

devkit advisor dr-check [-h | --help] {-f ELF_FILE | --elf-file ELF_FILE} [-i INPUT_PATH | --input INPUT_PATH] [-ec {true,false} | --enable-collect {true,false}] [--start-collect PID] [--stop-collect PID] [-s SAFE_FILE | --safe-file SAFE_FILE] [-p ELF_PARAMS | --elf-params ELF_PARAMS] [-o OUTPUT_PATH | --output OUTPUT_PATH] [-sf SHIELD_FILE | --shield-file SHIELD_FILE] [-cf CONFIG_FILE | --config-file CONFIG_FILE] [-d REPORT_FILE | --decode REPORT_FILE] [-sr {true,false} | --summary-report {true,false}] [-eb {true,false} | --enable-backtrace {true,false}] [-em {true,false} | --enable-multiprocess {true,false}] [-dm REPORT_FILE | --decode-mp-report REPORT_FILE] [-r {all,json,html,csv} | --report-type {all,json,html,csv}] [-l {0,1,2,3} | --log-level {0,1,2,3}] [--set-timeout TIMEOUT]

参数说明

表1 参数说明

参数

参数选项

参数说明

-h/--help

-

获取帮助信息。

-f/--elf-file

-

必选参数,ELF文件路径。待测ELF文件必须带有调试信息(编译时增加-g选项)。

ELF文件是指编译C/C++程序生成的二进制文件。

-i/--input

-

可选参数,ELF文件对应的源码文件夹路径。

-ec/--enable-collect

true/false

可选参数,启动应用时是否开启内存一致性动态检查功能,默认为true。

  • true:开启内存一致性动态检查功能。
  • false:关闭内存一致性动态检查功能。

--start-collect

-

可选参数,对指定的进程发送开启内存一致性动态检查功能信号,指定的进程号为有效的内存一致性动态检查进程。

说明:

-ec参数为false时,配置--start-collect参数生效。

--stop-collect

-

可选参数,对指定的进程发送关闭内存一致性动态检查功能信号,指定的进程号为有效的内存一致性动态检查进程。

说明:

-ec参数为true时,配置--stop-collect参数生效。

-s/--safe-file

-

可选参数,cfg配置文件。指定在内存动态一致性检测中不进行检查的安全函数,C++中函数名称需为重载后的函数名称。

-p/--elf-params

-

可选参数,指定执行ELF文件时所需的输入参数。

-o/--output

-

可选参数,扫描报告的存放路径,默认存放在当前执行路径下,报告名称为模块名称_时间戳。

-sf/--shield-file

-

可选参数,CFG配置文件。指定在内存动态一致性检测中不参与检查的文件名或动态库。

-cf/--config-file

-

可选参数,JSON配置文件。指定在动态内存一致性检测期间不检查内存动态一致性的自定义锁。

-d/--decode

-

可选参数,解析历史单进程报告文件。指定运行过程中保存的历史单进程报告文件,最多支持保存5份历史报告,指定该选项后将进行单独报告解析。

说明:
  • 历史报告文件生成后存放在DevKit命令行亲和分析工具(advisor)所在路径下。报告为:ELF文件名_PID_时间戳.memtracer_report(主进程文件无PID)。
  • -d参数指定的历史报告文件对应的ELF文件要与-f指定的ELF文件相匹配。

-sr/--summary-report

true/false

可选参数,是否生成精简报告,默认为false。

  • true:生成精简报告,仅生成JSON格式。
  • false:生成-r选项指定的全量报告。
说明:
  • 精简后的json报告中仅包含address、location、type、file、line、function、source_code、core_code和backtrace。
  • 若同时指定-sr-r参数,且-sr参数选项指定为true,-r参数失效。

-eb/--enable-backtrace

true/false

可选参数,是否开启调用栈记录,默认为false。

  • true:开启调用栈记录。
  • false:关闭调用栈记录。

-em/--enable-multiprocess

true/false

可选参数,是否开启对共享内存模式的多进程应用的检测,默认为false。

  • true:开启对共享内存模式的多进程应用的检测,并生成多进程间内存一致性报告(HTML)和单进程内线程间内存一致性报告(JSON/HTML/CSV)。
  • false:关闭对共享内存模式的多进程应用的检测,仅生成单进程内线程间内存一致性报告(JSON/HTML/CSV)。

-dm/--decode-mp-report

-

可选参数,解析历史多进程报告文件。指定运行过程中保存的历史多进程报告文件,最多支持保存5个用例的历史报告,指定该选项后将进行单独报告解析,仅支持解析纯文本格式的多进程报告。

说明:
历史报告文件生成后存放在DevKit命令行亲和分析工具(advisor)所在路径的mp_report_时间戳文件夹下。报告为:mp_时间戳.memtracer_mp_report和ELF文件名_PID.memtracer_report(主进程文件无PID)。
  • -dm参数可解析历史报告文件对应的多进程文件(即.memtracer_mp_report文件),且指定的历史报告文件要与-f指定的ELF文件相匹配。
  • -d参数可解析历史报告文件对应的多线程文件(即.memtracer_report文件),且指定的历史报告文件要与-f指定的ELF文件相匹配。

-r/--report-type

all/json/html/csv

可选参数,扫描报告的格式,默认为all。
  • all:生成JSON、HTML、CSV三种格式报告。
  • json:生成JSON格式报告。
  • html:生成HTML格式报告。
  • csv:生成CSV格式报告。

-l/--log-level

0/1/2/3

可选参数,设置日志级别,默认为1。
  • 0:日志级别为DEBUG。
  • 1:日志级别为INFO。
  • 2:日志级别为WARNING。
  • 3:日志级别为ERROR。

--set-timeout

-

可选参数,任务超时时间,单位为分钟,若执行时间超过超时时间则退出执行。默认无超时时间,任务将持续执行直到结束。

使用示例

此处以扫描“/home/advisor/shm_basic”路径下ELF文件,且开启多进程检测为例,请根据实际情况进行修改。

1
devkit advisor dr-check -f /home/advisor/shm_basic -em true

返回信息如下,并输出报告。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Executing dynamic memory consistency check task, please wait...
The pid of the memtracer process is 596257
Scanned time: 2025/09/09 02:35:52

Configuration:
    ELF filepath: /home/advisor/shm_basic
    Scan source code path: None
    Generate report path: /home/DevKit_Software
    Generate report type: all
    Task Timeout Interval: The timeout period is not set.
    Log level: info

Summary:
There are 2 recommended code lines to modify.

For the detailed information on multi-thread races, please check:
    /home/DevKit_Software/dr-check_shm_basic_596265_20250909023552_e131.json
    /home/DevKit_Software/dr-check_shm_basic_596265_20250909023552_e131.html
    /home/DevKit_Software/dr-check_shm_basic_596265_20250909023552_e131.csv
    /home/DevKit_Software/dr-check_shm_basic_596266_20250909023552_1a00.json
    /home/DevKit_Software/dr-check_shm_basic_596266_20250909023552_1a00.html
    /home/DevKit_Software/dr-check_shm_basic_596266_20250909023552_1a00.csv
    /home/DevKit_Software/dr-check_shm_basic_20250909023552_e161.json
    /home/DevKit_Software/dr-check_shm_basic_20250909023552_e161.html
    /home/DevKit_Software/dr-check_shm_basic_20250909023552_e161.csv

For the detailed information on multi-process races, please check:
    /home/DevKit_Software/dr-check_mp_20250909023552_7821.html

指定选项不同,结果会有差异:

  • 若指定-em,则会同时生成多线程报告(multi-thread races)和多进程报告(multi-process races)。
  • 若不指定-em,则仅生成多线程报告(multi-thread races)。

输出报告说明

表2 内存一致性动态检查输出报告参数说明

参数

说明

配置信息

显示软件源码文件及可执行文件存放路径。

需要修改的源码文件

显示存在内存一致性动态问题,并需要进行修改的源码文件路径等相关信息。

在对多进程应用进行内存一致性动态检查时,最终结果报告会过滤系统库(如.so文件)等内容,可能导致部分数据竞争(race)漏报。如需进一步确认,用户可前往DevKit命令行亲和分析工具(advisor)所在路径的“mp_report_时间戳”文件夹下,查看对应的memtracer_mp_report原始报告进行参考,请参见多进程报告解析