我是一个新手,在内核模块中使用 rdma (ib_verbs) 试验一个项目。我从 krping 获得了示例代码并对其进行了修改。该系统在 64 位 Linux Centos 上运行,带有自定义 3.10 Linux 内核,需要禁用透明大页。我想要一个大的(4GB 以上)RDMA 读/写空间,它不必是连续的,因为我很可能一次从远程方最多写/读 1MB(随机访问)。
问题:
- 我应该只做一千次 4MB kmalloc 并注册 DMA 区域吗?使用kmalloc而不是vmalloc分配大块内存的设计明智吗?我听说不应该这样做,大内存只能通过vmalloc检索。但是来自 vmalloc 的地址不适合 DMA。
- 如果不是,那么拥有一个可以从远程方随机访问的 4GB 缓冲区的另一种好方法是什么?
- 用户空间 rdma 如何管理这种缓冲区?我记得我只 malloc 4GB 的内存并调用 ibv_reg_mr 并且它可以使用了。