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

通过终端工具对MPI应用进行性能分析

命令功能

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

使用前需已安装系统性能分析工具,默认工具目录为/usr/bin/devkit/mpi_adaptive。

表1 子命令功能介绍

子命令

介绍

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. 切换至工具目录。
    1
    cd /usr/bin/devkit/
    

    安装DevKit系统性能分析工具后,默认工具目录为“/usr/bin/devkit/mpi_adaptive”

  2. 将mpi_adaptive目录整体复制到共享目录。

    若执行mpirun,需在共享目录中运行工具。

    1
    2
    cp -r mpi_adaptive /home/share
    cd /home/share/mpi_adaptive 
    
  3. 采集应用程序的性能数据。
    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”指定需采集的应用程序,采集后生成的文件为二进制文件。

  4. 将性能数据转换为可查看文件。
    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
    
  5. 对齐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
    
  6. 查看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

    调用栈信息。