我是一个在内核模块中使用rdma(ib_verbs)试验项目的新手。我从krping获得了示例代码并修改了它。该系统在64位Linux Centos上运行,具有自定义3.10 Linux内核,需要禁用透明大页面。 我想要一个大的(4GB以上)RDMA可读/写空间,它不一定是连续的,因为我最有可能一次从远程方(随机访问)写入/读取最多1MB。
问题:
答案 0 :(得分:0)
只要您不使用覆盖整个物理内存的内存(不建议使用支持写入的MR),您应该使用IB_WR_REG_MR
工作请求注册您的内存记忆区域。为此,您将使用接受散点列表和页面大小的ib_map_mr_sg
函数。所以基本上,你可以注册一个用你选择的固定大小的块构建的MR。
这里有一个权衡:使用小的分配大小将允许内核在分散的系统上更容易找到空闲内存,但另一方面它可能会降低性能,因为它会增加NIC上的负载。 IOTLB。
用户空间通过调用get_user_pages
并使用系统的页面大小(通常为4kb)来处理大型MR注册。虽然某些驱动程序在内部尝试检测更大的页面大小时有优化,但如果用户空间内存恰好以这种方式对齐。