Mpi 查找允许的最大ibv_reg_mr
我试图诊断我使用的软件中ibv_reg_mr()引发的内存分配错误,我怀疑这与某些Mellanox Infiniband卡的已知问题有关,这些卡可以注册的默认最大内存约为2GB(请参阅此处的常见问题解答18) 我希望能够毫不含糊地确认是否存在这种情况,以便我可以快速与系统管理员协商解决方案。由于不熟悉RDMA和Infiniband,有人可能会建议(a)一个简单的程序,可以注册任意数量的内存,这样我就可以在允许的最大值触发错误,或者(b)考虑到我没有根访问权限,建议一种确定Infiniband当前配置方式的方法 谢谢大家Mpi 查找允许的最大ibv_reg_mr,mpi,infiniband,rdma,Mpi,Infiniband,Rdma,我试图诊断我使用的软件中ibv_reg_mr()引发的内存分配错误,我怀疑这与某些Mellanox Infiniband卡的已知问题有关,这些卡可以注册的默认最大内存约为2GB(请参阅此处的常见问题解答18) 我希望能够毫不含糊地确认是否存在这种情况,以便我可以快速与系统管理员协商解决方案。由于不熟悉RDMA和Infiniband,有人可能会建议(a)一个简单的程序,可以注册任意数量的内存,这样我就可以在允许的最大值触发错误,或者(b)考虑到我没有根访问权限,建议一种确定Infiniband当前
Jason您可以从
sysfs
读取Mellanox InfiniBand HCA驱动程序的参数,而不需要root访问权限。模块
的参数可在/sys/module//parameters/
中找到。每个参数都以文本伪文件的形式公开,只需读取文件的内容即可读取其值。您甚至可以使用标准的Unix命令行工具来实现这一点
对于mlx4_核心
模块,可注册内存的最大数量使用以下公式确定:
max_reg = (1 << log_num_mtt) * (1 << log_mtts_per_seg) * PAGE_SIZE
其中:
是每个HCA内存转换表(mtt)段的最大数量李>num_mtt
是log_num_mtt
的二进制对数李>num_mtt
是为fmr保留的MTT段数李>fmr\u reserved\u mtts
是每段MTT条目数的二进制对数log\u mtts\u per\u seg
是系统页面大小,在大多数当前平台上通常为4kibPAGE_SIZE
sysfs
中相应的模块目录中读取这些参数(页面大小除外)
可能两个模块都已加载。在这种情况下,只需执行Open MPI所做的操作:首先查找mlx4_core
,然后再查找ib_mthca
。Hristo,答案很好。谢谢下面简单介绍一下:如果log_num_mtt设置为0(在我的例子中是这样),这是否表明该设置实际上为零?这是否意味着这是默认设置?OFED 1.5.3的手册中说,默认情况下该值为20。这意味着只有一个MTT(1的log2为0)。您是否检查了两个模块的设置?此外,还可以在/etc/modprobe.d/
或其他文件中配置模块参数。
max_reg = (num_mtt - fmr_reserved_mtts) * (1 << log_mtts_per_seg) * PAGE_SIZE