---
title: 内存一致性动态检查功能说明
description: "内存一致性动态检查 就是采用动态检查模式检查C/C++源码在鲲鹏平台运行时是否存在内存一致性问题，并提供内存一致性的检测结果与插入内存屏障的建议。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevps/development/affinityanalyzer/KunpengDevKitCli_0094.html
sourcePath: /source/zh/kunpengdevps/development/affinityanalyzer/KunpengDevKitCli_0094.html
indexId: 191a329a2439186e4093784e40c1c616d418baa19a46e2c99a1c95e7f73eee4779
---
# 内存一致性动态检查功能说明

内存一致性动态检查 就是采用动态检查模式检查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}] [-eh {true,false} | --enable-history-filter {true,false}] [-dm REPORT_FILE | --decode-mp-report REPORT_FILE] [-ff {destructor,constructor,all}* | --special-function-filter {destructor,constructor,all}*] [-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++中函数名称需为经过名称修饰后的符号名（可通过nm命令查看）。 |
| \-p/\-\-elf\-params | \- | 可选参数，指定执行ELF文件时所需的输入参数。 |
| \-o/\-\-output | \- | 可选参数，扫描报告的存放路径，默认存放在当前执行路径下，报告名称为模块名称\_时间戳。 |
| \-sf/\-\-shield\-file | \- | 可选参数，CFG配置文件。指定在内存一致性动态检查中不参与检查的文件名或动态库。 |
| \-cf/\-\-config\-file | \- | 可选参数，JSON配置文件。指定在内存一致性动态检查期间不检查的自定义锁。 |
| \-d/\-\-decode | \- | 可选参数，解析历史单进程报告文件。指定运行过程中保存的历史单进程报告文件，单个二进制文件最多支持保存100份历史报告，指定该选项后将进行单独报告解析。 说明： 历史报告文件生成后存放在“advisor/dr\_check\_reports/{elf\_name}\_{md5sum(elf\_path)}/时间戳”文件夹下。报告为：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）。 须知： 不支持使用同一账户同时扫描多个多进程应用。 |
| \-eh/\-\-enable\-history\-filter | true/false | 可选参数，是否开启内存一致性检查的历史结果过滤功能，默认为false。 true：开启历史结果过滤功能，则本次扫描将会与最近一次历史报告对比，展示过滤后的报告，但历史报告仍会保存全量races的报告。 false：关闭历史结果过滤功能，则本次扫描将会展示全量races的报告。 |
| \-dm/\-\-decode\-mp\-report | \- | 可选参数，解析历史多进程报告文件。指定运行过程中保存的历史多进程报告文件，单个二进制文件最多支持保存100份历史报告，指定该选项后将进行单独报告解析，仅支持解析纯文本格式的多进程报告。 说明： 历史报告文件生成后存放在“advisor/dr\_check\_reports/{elf\_name}\_{md5sum(elf\_path)}/时间戳”文件夹下。报告为：mp\_时间戳.memtracer\_mp\_report和ELF文件名\_PID.memtracer\_report（主进程文件无PID）。 “\-dm”参数可解析历史报告文件对应的多进程文件（即.memtracer\_mp\_report文件），且指定的历史报告文件要与“\-f”指定的ELF文件相匹配。 “\-d”参数可解析历史报告文件对应的多线程文件（即.memtracer\_report文件），且指定的历史报告文件要与“\-f”指定的ELF文件相匹配。 |
| \-ff/\-\-special\-function\-filter | destructor/constructor/all | 可选参数，指定需要过滤的特殊成员函数类型，默认为空。支持同时指定多个选项，选项间以英文逗号分隔。 destructor：表示析构函数，则本次扫描将会过滤涉及析构函数的data race。 constructor：表示构造函数，则本次扫描将会过滤涉及构造函数的data race。 all：表示包含所有选项，等同于destructor,constructor。 |
| \-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文件，且开启多进程检测为例，请根据实际情况进行修改。

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

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

```
Executing dynamic memory consistency check task, please wait...
The pid of the memtracer process is 2993352
Scanned time: 2025/11/14 02:39:44
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_20251114023944_fd8d.json
/home/DevKit_Software/dr-check_shm_basic_20251114023944_fd8d.html
/home/DevKit_Software/dr-check_shm_basic_20251114023944_fd8d.csv
For the detailed information on
multi-process races
, please check:
/home/DevKit_Software/dr-check-mp_20251114023944_58a4.html
```

指定选项不同，结果会有差异：

- 若指定“-em”，则会同时生成多线程报告（multi-thread races）和多进程报告（multi-process races）。
- 若不指定“-em”，则仅生成多线程报告（multi-thread races）。


#### 输出报告说明


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

| 参数 | 说明 |
| --- | --- |
| 配置信息 | 显示软件源码文件及可执行文件存放路径。 |
| 需要修改的源码文件 | 显示存在内存一致性动态问题，并需要进行修改的源码文件路径等相关信息。 |
