|
NAME | SYNOPSIS | DESCRIPTION | RETURN VALUE | NOTES | SEE ALSO | AUTHOR | COLOPHON |
|
|
|
IBV_FORK_INIT(3) Libibverbs Programmer’s Manual IBV_FORK_INIT(3)
ibv_fork_init - initialize libibverbs to support fork()
#include <infiniband/verbs.h>
int ibv_fork_init(void);
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.
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.
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.
exec(3), fork(2), ibv_get_device_list(3), system(3), wait(2)
Dotan Barak ⟨dotanba@gmail.com⟩
This page is part of the rdma-core (RDMA Core Userspace Libraries
and Daemons) project. Information about the project can be found
at ⟨https://github.com/linux-rdma/rdma-core⟩. If you have a bug
report for this manual page, send it to
linux-rdma@vger.kernel.org. This page was obtained from the
project's upstream Git repository
⟨https://github.com/linux-rdma/rdma-core.git⟩ on 2025-08-11. (At
that time, the date of the most recent commit that was found in
the repository was 2025-08-04.) If you discover any rendering
problems in this HTML version of the page, or you believe there is
a better or more up-to-date source for the page, or you have
corrections or improvements to the information in this COLOPHON
(which is not part of the original manual page), send a mail to
man-pages@man7.org
libibverbs 2006-10-31 IBV_FORK_INIT(3)
Pages that refer to this page: ibv_free_device_list(3), ibv_get_device_list(3), ibv_is_fork_initialized(3)