NAME
ibv_fork_init - fork()
をサポートするために libibverbs を初期化する
SYNOPSIS
#include <infiniband/verbs.h> int ibv_fork_init(void);
DESCRIPTION
ibv_fork_init()
は、libibverbs を使っているプログラムが fork()
を呼び出されても正常に実行できるように libiverbs の内部データに設定を加える。
ibv_fork_init()
を呼び出してもフォークしたプロセスでフォーク前の InfiniBand uVerbs のプログラムが使えるようになるわけではない。
この関数は、fork()
を呼び出した後に子プロセスが終了するまで、または exec()
を呼び出してアドレス空間を切り替えるまで、親プロセスの全スレッドが待機するのであれば呼び出す必要はない。
RETURN VALUE
ibv_fork_init
は成功すると 0 を返す。
失敗した場合は、エラーの原因を示す値(errno と同じ)を返す。
NOTES
ibv_fork_init()
は madvise()
が MAD_DONTFORK フラグをサポートしている Linux カーネル(2.6.17 以上)上で動作する。
環境変数 RDMAV_FORK_SAFE または IBV_FORK_SAFE を設定した場合、ibv_fork_init()
を呼び出したのと同じ効果がある。
環境変数 RDMAV_HUGEPAGES_SAFE を設定すると、libibverbs はカーネルに memory region が使っているページサイズをチェックするように指示することができる。 この環境変数は、アプリケーションが huge page を直接使っている場合、あるいは libhugetlbfs のようなライブラリを介して間接的に使っている場合に指定する必要がある。
ibv_fork_init
を呼ぶと、以降の ibv_reg_mr() や ibv_dereg_mr() で余分なシステムコールの呼び出しや memory region の追跡用に追加のメモリ確保を行うようになりパフォーマンスが低下する。
正確なパフォーマンスへの影響はワークロードに依存するが、普通はそれほど影響はない。
環境変数 RDMA_HUGEPAGE_SAFE を設定すると、以降の ibv_reg_mr() や ibv_dereg_mr() で余分なオーバーヘッドが掛かるようになる。
SEE ALSO
InfiniBand Verbs API Reference、fork(2)
、wait(2)
、system(3)
、exec(3)
、ibv_get_device_list(3)
AUTHORS
原文 Dotan Barak <dotanba@gmail.com>
原文にない加筆がある。