IBV_FORK_INIT(3)

作成日:2014.05.10
修正日:2014.07.22

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 Referencefork(2)wait(2)system(3)exec(3)ibv_get_device_list(3)

AUTHORS

原文 Dotan Barak <dotanba@gmail.com>
原文にない加筆がある。

コメント

コメントを書き込む

TOP    掲示板    戻る
Written by NAKAMURA Minoru, Email: nminoru atmark nminoru dot jp, Twitter:@nminoru_jp