【问题标题】:RDMA transfer without mapping memory没有映射内存的 RDMA 传输
【发布时间】:2016-06-05 09:59:41
【问题描述】:

我有应通过 IB 网络交换文件的补充流程。然后这些文件将被其他进程使用。

工作流程如下:

  1. 在 /dev/shm 中创建文件
  2. 适当调整文件大小
  3. 正在处理的虚拟机中映射文件
  4. 向 ibv_reg_mr 注册映射区域
  5. 为数据传输启动 RDMA 操作

原来我的方案的瓶颈是ib_reg_mr(我单独测量了注册3Gb内存需要1.78秒)。似乎它触发了内存区域到进程地址空间的映射。不幸的是,不需要这个操作,因为接收进程不使用这块内存。该内存应该稍后被其他进程映射和使用。

所以我认为避免更改接收进程的页表是明智之举,但我根本无法找到它是否可能。

您能否建议我,是否有一种方法可以在内存区域上启动数据传输而不将其映射到进程的地址空间?

【问题讨论】:

    标签: infiniband rdma


    【解决方案1】:

    据我所知,如果不将内存区域映射到进程页表,就无法注册内存区域。在注册期间,页面被固定,以便在设备访问页面时映射不会更改,这需要将它们映射到进程。通过按需分页,您可以延迟将页面映射到进程中,直到 HCA 实际使用它们,但最终它们会被映射。

    【讨论】:

      【解决方案2】:

      请改用 FRWR(快速内存注册工作请求)。 它是一个通过 ibv_post_send 动词进行内存注册的 API - 更快的方式:

      http://lists.openfabrics.org/pipermail/general/2008-May/050235.html

      http://lxr.free-electrons.com/source/include/rdma/ib_verbs.h?v=3.2#L734

      【讨论】:

      • 我在 Linux Kernel Networking 书中找到了对 ibv_send_wr 数据数据结构的描述,但不幸的是,这个结构在机器上的 /usr/include/infiniband/verbs.h 中有另一个定义,这与我有关。我认为这意味着这台机器上的内核不支持此功能。而且我无法升级内核。不过还是谢谢你,我以后可能会用到这个界面。
      • @mcsim 你不需要更新内核。不知道你用的是哪个发行版和内核,但如果不是太旧,你可以安装 OFED 包。
      猜你喜欢
      • 1970-01-01
      • 2016-01-08
      • 2017-06-08
      • 2012-01-28
      • 2012-08-19
      • 2018-06-25
      • 2015-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多