IBV_CREATE_QP(3), IBV_DESTROY_QP(3)

作成日:2014.05.10
修正日:2014.07.22

NAME

ibv_create_qp, ibv_destroy_qp - Queue Pair(QP) を作成・破壊する。

SYNOPSIS

#include <infiniband/verbs.h>

struct ibv_qp *ibv_create_qp(struct ibv_pd *pd,
                             struct ibv_qp_init_attr *qp_init_attr);

int ibv_destroy_qp(struct ibv_qp *qp);

DESCRIPTION

ibv_create_qp() は protection domain pd 内に属性情報 qp_init_attr に基づく queue pair(QP) を作成する。

Table 1: struct ibv_qp_init_attr 構造体
メンバ名説明
qp_contextvoid *ユーザープログラムが自由に設定してよい領域。
send_cqstruct ibv_cq *Send Queue(SQ) に関連付けられる CQ。必ず設定する必要がある。
recv_cqstruct ibv_cq *Receive Queue(RQ) に関連付けられる CQ。必ず設定する必要がある。
srqstruct ibv_srq *SRQ を利用する場合は SRQ へのポインタを設定する。SRQ を使わない場合は NULL を設定する。
capstruct ibv_qp_capTable 2 を参照。
qp_typeenum ibv_qp_typeQP のサービスタイプを指定する。指定できるのは IBV_QPT_RCIBV_QPT_UCIBV_QPTR_UD の 3 つと、(サポートしていれば)IBV_QPT_RAW_PACKET である。
sq_sig_allintSend Work Request が送信に成功した場合必ず完了を生成する場合には 1 をそれ以外は 0 を設定する。
sq_sig_all を 0 にして、ibv_post_sendsend_flagsIBV_SEND_SIGNALED を指定して個別の Send WR が完了を生成するように支持することができる。
Table 2: struct ibv_qp_cap 構造体
メンバ名説明
max_send_wruint32_tSQ の最大同時登録 Send WR 数を指定。この値は ibv_query_device() で取得できる max_qp_wr 以下の値である必要がある。
max_recv_wruint32_tRQ の最大同時登録 Receive WR 数を指定。この値は ibv_query_device() で取得できる max_qp_wr 以下の値である必要がある。ただし SRQ を使う場合は無視される。
max_send_sgeuint32_tSQ に登録する Send WR の最大 scatter/gather 組数を指定。この値は ibv_query_device() で取得できる max_sge 以下の値である必要がある。
max_recv_sgeuint32_tRQ に登録する Receive WR の最大 scatter/gather 組数を指定。この値は ibv_query_device() で取得できる max_sge 以下の値である必要がある。ただし SRQ を使う場合は無視される。
max_inline_datauint32_tSQ に Send WR を登録する時にデータをインラインで送る場合、転送可能な最大バイト長を指定する。インラインで送らない場合は 0 を指定する。

ibv_destroy_qp() は QP qp を破壊する。

RETURN VALUE

ibv_create_qp() は成功した場合、作成した QP へのポインタを返す。 失敗した場合は NULL を返す。

ibv_destroy_qp() は成功した場合、0 を返す。 失敗した場合は、エラーの原因を示す値(errno と同じ)を返す。

NOTES

ibv_create_qp() は IBV_QPT_RC と IBV_QPT_UD 以外で SRQ を作ろうとすると失敗する。

ibv_create_qp() で、SRQ を使う QP を作る場合、SRQ の protection domain と pd で指定する protection domain は一致させる必要がある。

ibv_create_qp() は、qp_init_attr->cap に指定した値が HCA の上限を越えた場合、ibv_create_qp() が失敗する HCA と、HCA 上限に合わせてキャッピングした値で QP を作成し qp_init_attr->cap の値を実際のパラメータに合わせて更新する HCA の二種類がある。 Mellanox ConnectX-3 は前者である。

ibv_destroy_qp() は、マルチキャストグループに接続したままの QP を破壊しようとすると失敗する。 また ibv_get_async_event() で取り出した非同期イベントが QP に関連付けられている場合、その QP を ibv_destroy_qp すると、その非同期イベントが ibv_ack_async_event() で承認されるまで待機させられる。 この待機には時間の指定がなく、またシグナルを受信した場合にも復帰しない。

SEE ALSO

InfiniBand Verbs API Referenceibv_alloc_pd(3)ibv_modify_qp(3)ibv_query_qp(3)

AUTHORS

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

コメント

コメントを書き込む

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