使用ibverbs api注意事项
int ibv_fork_init(void)
Input Parameters:
None
Output Parameters:
None
Return Value:
0 on success, -1 on error. If the call fails, errno will be set to indicate the reason for the failure.
- ibv_fork_init初始化libibverbs的数据结构以安全地处理fork()函数,并避免数据损坏,不管fork()是否被明确地或隐式地调用,如在system()调用。
- 如果所有父进程线程总是被阻塞,直到所有子进程通过exec()操作结束或更改地址空间,则不需要调用ibv_fork_init。
- 该功能适用于支持madvise()(2.6.17及更高版本)的MADV_DONTFORK标志的Linux内核。
- 将环境变量RDMAV_FORK_SAFE或IBV_FORK_SAFE设置为任何值与调用ibv_fork_init()具有相同的效果。
- 将环境变量RDMAV_HUGEPAGES_SAFE设置为任何值将告知库检查内核对内存区域使用的底层页大小。如果应用程序通过库(例如libhugetlbfs)直接或间接使用庞大的页面,这是必需的。
- 调用ibv_fork_init()将会降低性能,因为每个内存注册需要额外的系统调用,并且分配给追踪内存区域的额外内存。精确的性能影响取决于工作负载,通常不会很大。
- 设置RDMAV_HUGEPAGES_SAFE为所有内存启用增加了额外的开销。