NAME
ibv_create_srq, ibv_destroy_srq - Shared Receive Queue (SRQ) を作成・破壊する。
SYNOPSIS
#include <infiniband/verbs.h> struct ibv_srq *ibv_create_srq(struct ibv_pd *pd, struct ibv_srq_init_attr *srq_init_attr); int ibv_destroy_srq(struct ibv_srq *srq);
DESCRIPTION
ibv_create_srq()
は protection domain pd 内に属性情報 srq_init_attr に基づく shared receive queue (SRQ) を作成する。
メンバ名 | 型 | 説明 |
---|---|---|
srq_context | void * | ユーザープログラムが自由に設定してよい領域。 |
attr | struct ibv_srq_attr | Table 2 を参照。 |
メンバ名 | 型 | 説明 |
---|---|---|
max_wr | uint32_t | SRQ の最大同時登録 Receive WR 数を指定。この値は ibv_query_device() で取得できる max_srq_wr 以下の値である必要がある。ただし SRQ を使う場合は無視される。 |
max_sge | uint32_t | SRQ に登録する Receive WR の最大 scatter/gather 組数を指定。この値は ibv_query_device() で取得できる max_srq_sge 以下の値である必要がある。 |
srq_limit | uint32_t | SRQ のリミットを規定。 |
ibv_destroy_srq()
は SRQ srq を破壊する。
RETURN VALUE
ibv_create_qp()
は成功した場合、作成した SRQ へのポインタを返す。
失敗した場合は NULL を返す。
ibv_destroy_qp()
は成功した場合、0 を返す。
失敗した場合は、エラーの原因を示す値(errno と同じ)を返す。
NOTES
ibv_create_srq()
は、srq_init_attr->cap に指定した値が HCA の上限を越えた場合、ibv_create_srq()
が失敗する HCA と、HCA 上限に合わせてキャッピングした値で SRQ を作成し srq_init_attr->cap の値を実際のパラメータに合わせて更新する HCA の二種類がある。
Mellanox ConnectX-3 は前者である。
ibv_destroy_srq()
は srq に関連付けられたオブジェクトを解放せずに呼び出すと失敗することがある。
また ibv_get_async_event() で取り出した非同期イベントが SRQ に関連付けられている場合、その SRQ を ibv_destroy_srq
すると、その非同期イベントが ibv_ack_async_event() で承認されるまで待機させられる。
この待機には時間の指定がなく、またシグナルを受信した場合にも復帰しない。
SEE ALSO
InfiniBand Verbs API Reference、ibv_alloc_pd(3)、ibv_modify_srq(3)、ibv_query_srq(3)
AUTHORS
原文 Dotan Barak <dotanba@gmail.com>