通过在mpirun命令行中加入如下参数来优化启动选项:
- --mca osc ^ucx:使用osc(单边通信模块)时不指定ucx。由于ucx的初始化在业务启动流程中耗时较长,大部分集合通信业务中使用pml,很少会用到osc,因此该配置项可以节省一次ucx初始化的时间。
- --mca pml ucx:指定pml模块只初始化ucx,减少其他模块初始化对启动时延的影响。
- --mca oob_tcp_if_include 网卡名称:为加快业务启动osu_init时的fence流程,建议使用TCP带宽较大、时延较好的网卡,因为fence需要节点间发送TCP数据,带外TCP通信网卡往往会成为业务初始化的性能瓶颈。默认使用环境上获取到的第一张网卡,如有性能更好的其他网卡,可以通过该启动选项,提高通信时延性能。
- -x UCX_TLS=sm,rc_v:传输层选择sm + rc_v的组合方式。
- sm表示节点内使用sm共享内存作为传输层,这加快了节点内进程的通信传输。
- 由于rc要初始化rc_v、ud_v、rc_mlx和ud_mlx,而rc_v只需初始化rc_v和ud_v,因此节点间选择rc_v,可以加快业务启动时延。
- -x UCX_NET_DEVICES=网卡名称:选择的网卡数量会影响ud_v的初始化时延。对于每个网卡设备的初始化,需获取该设备的全部gid_attr,该过程比较耗时,因此建议减少网卡数量的选择。
启动时延优化命令示例:
mpirun --mca osc ^ucx --mca pml ucx -np 32 -x UCX_TLS=sm,rc_v --hostfile file -x UCX_NET_DEVICES=mlx5_0:1 --mca oob_tcp_if_include enp125s0f0 -x PATH -x LD_LIBRARY_PATH osu_init