通过终端工具对MPI应用进行性能分析
命令功能
使用命令通过终端工具对MPI应用进行性能分析。

使用前需已安装系统性能分析工具,默认工具目录为/usr/bin/devkit/mpi_adaptive。
子命令 |
介绍 |
---|---|
sclrun |
采集MPI应用常用的调用信息。 |
sclread |
读取采集到的性能数据并转换为可查看文件。 |
time_line |
分析采集后的函数信息,并将mpi_send和mpi_recv事件相关信息入库,统计事件的时序数据,对齐各个MPI进程的启动事件时间线。 |
query_timeline_data |
查询MPI进程的事件信息。 |
-h/--help |
获取帮助信息。 |
命令格式
1
|
./mpi_adaptive_tool [-h | --help] COMMAND [ARGS] |

- 工具仅支持Open MPI 4.0.3及以上版本。
- 工具仅支持在鲲鹏920平台上运行。
- 待采集的应用程序在编译时须添加“-g”参数,否则在使用工具采集调用栈信息时,可能无法获取变量和函数符号信息,结果报告中以“??”显示。
- 若需对多节点集群进行分析,请将工具目录“/usr/bin/devkit/mpi_adaptive”拷贝至集群的共享目录下,并根据实际情况修改共享目录下mpi_adaptive/config/cfg.ini文件中logPath变量。
- sclrun子命令格式:
1
mpi_adaptive_tool sclrun [ -h | --help ] [ --backtrace ] [ -backtrace_max_depth <depth> ] [ -samp_mode {1,2,3} ] [ -samp_ratio <ratio> ] [ -samp_random <seed> ] [ -l | --log-level {0,1,2,3} ] [ -o | --output <collect_result_directory> ] [ <exe> <args> ]
[<exe> <args>]为待采集的MPI应用及参数,使用命令时的必填项,输入在命令行最后位置。
- sclread子命令格式:
1
mpi_adaptive_tool sclread [ -h | --help ] [ -i | --input <sclrun_result_dir> ] [ -o | --output <readable_output_file> ] [ -l | --log-level {0,1,2,3} ] [ -f | --force ]
- time_line子命令格式:
1
mpi_adaptive_tool time_line [ -h | --help ] [ -i | --input <sclrun_result_dir> ] [ -o | --output <analyze_output_file> ] [ -l | --log-level {0,1,2,3} ] [ -f | --force ]
- query_timeline_data子命令格式:
1
mpi_adaptive_tool query_timeline_data [ -h | --help ] [ --path <timeline_db_dir> ] [ -p | --page <page_number> ] [ -s | --pagesize <page_size> ] [ -r | --rank <rank_number> ] [ -d | --detail ]
子命令参数说明
- 采集MPI应用常用的调用信息:sclrun
表2 sclrun子命令参数说明 命令
参数
说明
-h/--help
-
获取帮助信息。
-o/--output
-
必选参数,采集应用性能数据的输出目录。
-l/--log-level
0/1/2/3
设置日志级别,默认为1。日志配置文件在工具目录下config/cfg.ini。- 0:日志级别为DEBUG。
- 1:日志级别为INFO。
- 2:日志级别为WARNING。
- 3:日志级别为ERROR。
--backtrace
-
开启采集应用的调用栈信息。
-backtrace_max_depth
-
设置需采集的调用栈最大深度;默认为20层,使用参数“--backtrace”时可配置。
-samp_mode
1/2/3
设置采集性能数据时的采样模式,默认为1。
- 1:全采样。
- 2:固定比例采样,按照参数“-samp_ratio”指定的采样比率进行数据采集。
- 3:自适应采样,按照rank数自适应采样比例,进行数据采集。
-samp_ratio
-
采样比率,默认为0,取值范围0~100,参数“-samp_mode”选择“2”时可配置。
-samp_random
<seed>
开启随机采样,按照指定的随机种子(需为整数)进行随机采样(仅控制采样时rank值的随机性,不改变采样数量)。
- 读取采集到的性能数据并转换为可查看文件:sclread
表3 sclread子命令参数说明 命令
参数
说明
-h/--help
-
获取帮助信息。
-l/--log-level
0/1/2/3
设置日志级别,默认为1。日志配置文件在工具目录下config/cfg.ini。- 0:日志级别为DEBUG。
- 1:日志级别为INFO。
- 2:日志级别为WARNING。
- 3:日志级别为ERROR。
-i/--input
<sclrun_result_dir>
必选参数,已采集到的性能数据结果文件目录。
-o/--output
-
可视报告的输出目录。
-f/--force
-
若输出目录已存在,则强制覆盖其中sclread相关内容。
- 对齐各个MPI进程的启动事件时间线:time_line
表4 time_line子命令参数说明 命令
参数
说明
-h/--help
-
获取帮助信息。
-l/--log-level
0/1/2/3
设置日志级别,默认为1。日志配置文件在工具目录下config/cfg.ini。- 0:日志级别为DEBUG。
- 1:日志级别为INFO。
- 2:日志级别为WARNING。
- 3:日志级别为ERROR。
-i/--input
<sclrun_result_dir>
必选参数,已采集到的性能数据结果文件目录。
-o/--output
-
设置用于存储各个事件时间偏移量的结果文件保存目录,文件类型为sqlite数据库文件(默认值time_series.db) 。
-f/--force
-
若输出目录已存在,则强制覆盖其中time_line相关内容。
- 查看MPI进程的事件信息:query_timeline_data
表5 query_timeline_data子命令参数说明 命令
参数
说明
-h/--help
-
获取帮助信息。
--path
<timeline_db_dir>
指定查询的数据库文件路径。
-p/--page
-
查询数据的页数,默认为1。
-s/--pagesize
-
查询时每页显示数据数目,默认为10。
-r/--rank
-
筛选特定的rank,不指定时默认展示全部数据。
-d/--detail
-
显示详细调用栈信息,不开启默认只显示简要的调用栈信息。
使用示例
- 切换至工具目录。
1
cd /usr/bin/devkit/
安装DevKit系统性能分析工具后,默认工具目录为“/usr/bin/devkit/mpi_adaptive”。
- 将mpi_adaptive目录整体复制到共享目录。
若执行mpirun,需在共享目录中运行工具。
1 2
cp -r mpi_adaptive /home/share cd /home/share/mpi_adaptive
- 采集应用程序的性能数据。
1
/opt/bin/mpirun -x PATH -x LD_LIBRARY_PATH -mca btl ^openib --mca pml ucx -bind-to core -np 10 --map-by ppr:96:node ./mpi_adaptive_tool sclrun -o /home/share/tmp --backtrace -- /home/mpi_adaptive_tool/test_mpi
“/opt/bin/mpirun -x PATH -x LD_LIBRARY_PATH -mca btl ^openib --mca pml ucx -bind-to core -np 10 --map-by ppr:96:node”为MPI运行命令,“-o /home/share/tmp”表示将采集结果输出至“/home/share/tmp”目录下,需在共享目录下;“--backtrace”表示采集调用栈信息,“-- /home/mpi_adaptive_tool/test_mpi”指定需采集的应用程序,采集后生成的文件为二进制文件。
- 将性能数据转换为可查看文件。
1
./mpi_adaptive_tool sclread -i /home/share/tmp -o /home/tmp2 -f
“-i /home/share/tmp”表示sclrun采集的性能数据存放目录是“/home/share/tmp”,“-o /home/tmp2”表示将性能数据转换为可查看数据并存放至“/home/tmp2”目录下,“-f”表示强制覆盖指定目录下已有的sclread相关内容,生成的文本文件可直接查看。
返回信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Configured: Input: /home/share/tmp Output: /home/tmp2 === Event 19 === Event Name: MPI_Recv Start Time: 717638437792265 End Time: 717638437792333 Duration: 68 Record Size: 58 Data type: 4326592 Dest/Src: 0 Type Size: 4 Tag: 20 Count: 1 MPI Comm: 4325568
- 对齐MPI应用事件时间线。
1
./mpi_adaptive_tool time_line -i /home/share/tmp -o /home/time_line.db -f
“-o /home/time_line.db”指定生成的db文件名称及路径,未指定db文件名称将默认在当前目录生成time_series.db,该文件使用sqlite数据库查看;“-f”表示强制覆盖指定目录下已有的time_line相关内容。
返回信息:
1 2 3
Configured: Input: /tmp/ Output: /home/time_line.db
- 查看MPI应用的数据信息。
1
./mpi_adaptive_tool query_timeline_data --path /home/time_line.db -d
“--path /home/time_line.db”指定需查询的db文件,“-d”表示以详细信息形式展示调用栈信息。
图1 详细信息表6 query_timeline_data回显信息说明 参数
说明
id
MPI信息编号。
rank
对应的rank号。
event
事件类型。
start_time
MPI接口运行开始时的系统计数器值。
end_time
MPI接口运行结束时的系统计数器值。
use_time
MPI接口运行期间的系统计数器变化值,可通过公式( use_time / ( freq_mhz * 10^6 ) )换算成单位为秒的时长,freq_mhz为时钟分辨率,单位MHz,可通过命令“sudo dmesg | grep clock”获取。
datatype
数据类型。
typesize
对应类型数据的大小。
dest
与当前rank通信的rank(如果是MPI_Send,则表示接收信息的rank,如果是MPI_Recv,则表示发送信息的rank)。
tag
信息标识符。
count
发送或接收的MPI信息数。
comm
通信域。
backtrace
调用栈信息。