| --- |
| date: 2006-10-31 |
| footer: libibverbs |
| header: "Libibverbs Programmer's Manual" |
| layout: page |
| license: 'Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md' |
| section: 3 |
| title: IBV_FORK_INIT |
| --- |
| |
| # NAME |
| |
| ibv_fork_init - initialize libibverbs to support fork() |
| |
| # SYNOPSIS |
| |
| ```c |
| #include <infiniband/verbs.h> |
| |
| int ibv_fork_init(void); |
| ``` |
| |
| # DESCRIPTION |
| |
| **ibv_fork_init()** initializes libibverbs's data structures to handle |
| **fork()** function calls correctly and avoid data corruption, whether |
| **fork()** is called explicitly or implicitly (such as in **system()**). |
| |
| It is not necessary to use this function if all parent process threads are |
| always blocked until all child processes end or change address spaces via an |
| **exec()** operation. |
| |
| # RETURN VALUE |
| |
| **ibv_fork_init()** returns 0 on success, or the value of errno on failure |
| (which indicates the failure reason). An error value of EINVAL indicates that |
| there had been RDMA memory registration already and it is therefore not |
| safe anymore to fork. |
| |
| # NOTES |
| |
| **ibv_fork_init()** works on Linux kernels supporting the **MADV_DONTFORK** |
| flag for **madvise()** (2.6.17 and higher). |
| |
| Setting the environment variable **RDMAV_FORK_SAFE** or **IBV_FORK_SAFE** has |
| the same effect as calling **ibv_fork_init()**. |
| |
| Setting the environment variable **RDMAV_HUGEPAGES_SAFE** tells the library to |
| check the underlying page size used by the kernel for memory regions. This is |
| required if an application uses huge pages either directly or indirectly via a |
| library such as libhugetlbfs. |
| |
| Calling **ibv_fork_init()** will reduce performance due to an extra system |
| call for every memory registration, and the additional memory allocated to |
| track memory regions. The precise performance impact depends on the workload |
| and usually will not be significant. |
| |
| Setting **RDMAV_HUGEPAGES_SAFE** adds further overhead to all memory |
| registrations. |
| |
| # SEE ALSO |
| |
| **exec**(3), |
| **fork**(2), |
| **ibv_get_device_list**(3), |
| **system**(3), |
| **wait**(2) |
| |
| # AUTHOR |
| |
| Dotan Barak <dotanba@gmail.com> |