1

我正在尝试诊断 ibv_reg_mr() 在我使用的软件中引发的内存分配错误,我怀疑它与某些 Mellanox Infiniband 卡的已知问题有关,其中可以注册的默认最大内存约为 2GB(请参阅FAQ #18 在这里http://www.open-mpi.org/faq/?category=openfabrics)。

我希望能够明确确认是否是这种情况,以便我可以快速与我的系统管理员协商解决方案。由于不熟悉 RDMA 和 Infiniband,有人可能会建议(a)一个可以注册任意数量内存的简单程序,以便我可以在最大允许值处触发错误,或者(b)建议一种方法,我考虑到我没有 root 访问权限,可以确定当前配置 Infiniband 的方式吗?

感谢大家!

杰森

4

1 回答 1

3

您可以从中读取 Mellanox InfiniBand HCA 驱动程序的参数,sysfs并且不需要 root 访问权限。模块的参数<modname>/sys/module/<modname>/parameters/. 每个参数在此处作为文本伪文件公开,只需读取文件的内容即可读取其值。您甚至可以使用标准的 Unix 命令行工具来做到这一点。

对于mlx4_core模块,可注册内存的最大数量使用以下公式确定:

max_reg = (1 << log_num_mtt) * (1 << log_mtts_per_seg) * PAGE_SIZE

对于ib_mthca模块,公式为:

max_reg = (num_mtt - fmr_reserved_mtts) * (1 << log_mtts_per_seg) * PAGE_SIZE

在哪里:

  • num_mtt是每个 HCA 的最大内存转换表 (MTT) 段数;
  • log_num_mtt是 的二进制对数num_mtt
  • fmr_reserved_mtts是 MTT 段的数量,为 FMR 保留;
  • log_mtts_per_seg是每段 MTT 条目数的二进制对数。
  • PAGE_SIZE是系统页面大小,在大多数当前平台上通常为 4 KiB。

这些参数中的每一个(除了PAGE_SIZE)都可以从其对应的模块目录中读取sysfs

两个模块都可能被加载。在这种情况下,只需执行 Open MPI 所做的操作:查找mlx4_core第一个和ib_mthca第二个。

于 2013-05-16T13:25:30.737 回答