Mpi 查找允许的最大ibv_reg_mr

Mpi 查找允许的最大ibv_reg_mr,mpi,infiniband,rdma,Mpi,Infiniband,Rdma,我试图诊断我使用的软件中ibv_reg_mr()引发的内存分配错误,我怀疑这与某些Mellanox Infiniband卡的已知问题有关,这些卡可以注册的默认最大内存约为2GB(请参阅此处的常见问题解答18) 我希望能够毫不含糊地确认是否存在这种情况,以便我可以快速与系统管理员协商解决方案。由于不熟悉RDMA和Infiniband,有人可能会建议(a)一个简单的程序,可以注册任意数量的内存,这样我就可以在允许的最大值触发错误,或者(b)考虑到我没有根访问权限,建议一种确定Infiniband当前

我试图诊断我使用的软件中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
其中:

  • num_mtt
    是每个HCA内存转换表(mtt)段的最大数量
  • log_num_mtt
    num_mtt
    的二进制对数
  • fmr\u reserved\u mtts
    是为fmr保留的MTT段数
  • log\u mtts\u per\u seg
    是每段MTT条目数的二进制对数
  • PAGE_SIZE
    是系统页面大小,在大多数当前平台上通常为4kib
可以从
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