You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OpenMPI运行作业时如何分析不同rank进程的内核资源占用情况?

MPI内核侧性能Profiling问题解答

1. 现有工具的统计范围确认

你之前使用的mpiP、Scalasca均基于MPI标准的PMPI插桩接口实现,默认只能采集用户态视角的性能数据:包括MPI函数调用耗时、通信带宽/延迟、进程间通信拓扑、用户态计算耗时占比等,无法直接统计内核态的系统调用耗时、内核内存分配、磁盘I/O、网络栈处理开销这类内核侧活动数据。

2. 内核侧资源占用Profiling实现方案(适配Ubuntu 18.04 + OpenMPI环境)

以下方案均支持按rank维度拆分统计内核活动数据:

  • 方案1:perf 系统工具(无额外依赖,适用大多数场景)
    Ubuntu 18.04默认自带perf工具,可结合OpenMPI内置的rank环境变量为每个MPI进程单独绑定采集逻辑,命令模板如下:

    mpirun -np <进程数> bash -c 'perf record -e cpu-clock:k -e sched:* -e block:* -e vm:* -e net:* -o perf_rank_$OMPI_COMM_WORLD_RANK.data -- your_mpi_application'
    

    其中$OMPI_COMM_WORLD_RANK是OpenMPI内置的环境变量,会自动赋值为当前进程的rank编号,无需额外配置即可生成分rank的采集文件。后续使用perf report -i perf_rank_xxx.data即可查看对应rank的内核态CPU耗时、内存缺页次数、块I/O读写量、网络栈处理开销等数据。

  • 方案2:strace 系统调用追踪(适合细粒度排查系统调用开销)
    如果需要统计每个系统调用的具体耗时、参数和返回值,可使用strace绑定每个MPI进程采集,命令模板如下:

    mpirun -np <进程数> strace -T -tt -o strace_rank_$OMPI_COMM_WORLD_RANK.log your_mpi_application
    

    输出的日志可直接统计每个rank的read/write、mmap、sendto/recvfrom等内核调用的资源占用,适合定位I/O、内存分配、网络通信的内核侧瓶颈。

  • 方案3:bpftrace 动态追踪(低开销,适合大压力测试场景)
    Ubuntu 18.04可通过apt install bpftrace直接安装,基于eBPF实现,性能开销远低于perf和strace,可自定义脚本采集指定MPI进程的内核态资源使用数据,支持直接按rank编号聚合输出统计结果,无需后续手动拆分不同进程的采集数据。

注意事项

  • 上述所有方案均支持单节点/跨节点MPI作业,跨节点场景下采集文件会生成在对应rank所在节点的本地目录,采集完成后汇总即可。
  • 可根据你的分析需求调整采集的事件类型,不需要全量采集所有内核事件,避免不必要的性能开销。

内容的提问来源于stack exchange,提问作者Elephant88

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:27:04