我正在 lustre 上运行 HPC 基准测试(IOR - http://sourceforge.net/projects/ior-sio/)。我编译了 IOR 的源代码并使用 openmpi 1.5.3 运行它。
问题是当进程数 ( -np
) 小于 6 时它会挂起,这是奇数。删除我所做的所有其他事情,我运行的实际命令归结为:
/usr/lib64/openmpi/bin/mpirun --machinefile mpi_hosts --bynode -np 16 /path/to/IOR -F -u -t 1m -b 16g -i 1 -o /my/file/system/out_file
将进程附加到 GDB 表明该进程在 MPI_recv 处挂起:
#0 0x00007f3ac49e95fe in mlx4_poll_cq () from /usr/lib64/libmlx4-m-rdmav2.so
#1 0x00007f3ac6ce0918 in ?? () from /usr/lib64/openmpi/lib/openmpi/mca_btl_openib.so
#2 0x000000385a6f0d5a in opal_progress () from /usr/lib64/openmpi/lib/libmpi.so.1
#3 0x00007f3ac7511e05 in ?? () from /usr/lib64/openmpi/lib/openmpi/mca_pml_ob1.so
#4 0x000000385a666cac in PMPI_Recv () from /usr/lib64/openmpi/lib/libmpi.so.1
#5 0x0000000000404bd7 in CountTasksPerNode (numTasks=16, comm=0x628a80) at IOR.c:526
#6 0x0000000000407d53 in SetupTests (argc=11, argv=0x7fffe61fa2a8) at IOR.c:1402
#7 0x0000000000402e96 in main (argc=11, argv=0x7fffe61fa2a8) at IOR.c:134
此问题仅在-np
2/3/4/5 时发生。它适用于 1/6/7/8/16 等。
如果我使用简单的命令(例如date
或),我将无法重现此问题ls
。所以我不确定这是否是我的环境或我编译的 IOR 二进制文件的问题(不太可能,因为旧的/稳定的 IOR 二进制文件也会发生同样的情况)。
当使用 openmpi1.4.3 而不是 openmpi1.5.3 时,也会观察到精确的行为。
我也尝试过使用不同数量的主机(--machinefile
参数),并且对于上述-np
值观察到相同的行为。它挂起的源代码行是这样的:
MPI_Recv(hostname, MAX_STR, MPI_CHAR, MPI_ANY_SOURCE, MPI_ANY_TAG, comm, &status);
基本上我正在寻找关于为什么在2/3/4/5MPI_recv()
时可能会挂起的线索。-np
如果需要其他信息,请告诉我。谢谢。