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) を作成する。
メンバ名 | 型 | 説明 |
---|---|---|
qp_context | void * | ユーザープログラムが自由に設定してよい領域。 |
send_cq | struct ibv_cq * | Send Queue(SQ) に関連付けられる CQ。必ず設定する必要がある。 |
recv_cq | struct ibv_cq * | Receive Queue(RQ) に関連付けられる CQ。必ず設定する必要がある。 |
srq | struct ibv_srq * | SRQ を利用する場合は SRQ へのポインタを設定する。SRQ を使わない場合は NULL を設定する。 |
cap | struct ibv_qp_cap | Table 2 を参照。 |
qp_type | enum ibv_qp_type | QP のサービスタイプを指定する。指定できるのは IBV_QPT_RC、IBV_QPT_UC、IBV_QPTR_UD の 3 つと、(サポートしていれば)IBV_QPT_RAW_PACKET である。 |
sq_sig_all | int | Send Work Request が送信に成功した場合必ず完了を生成する場合には 1 をそれ以外は 0 を設定する。 sq_sig_all を 0 にして、ibv_post_send の send_flags に IBV_SEND_SIGNALED を指定して個別の Send WR が完了を生成するように支持することができる。 |
メンバ名 | 型 | 説明 |
---|---|---|
max_send_wr | uint32_t | SQ の最大同時登録 Send WR 数を指定。この値は ibv_query_device() で取得できる max_qp_wr 以下の値である必要がある。 |
max_recv_wr | uint32_t | RQ の最大同時登録 Receive WR 数を指定。この値は ibv_query_device() で取得できる max_qp_wr 以下の値である必要がある。ただし SRQ を使う場合は無視される。 |
max_send_sge | uint32_t | SQ に登録する Send WR の最大 scatter/gather 組数を指定。この値は ibv_query_device() で取得できる max_sge 以下の値である必要がある。 |
max_recv_sge | uint32_t | RQ に登録する Receive WR の最大 scatter/gather 組数を指定。この値は ibv_query_device() で取得できる max_sge 以下の値である必要がある。ただし SRQ を使う場合は無視される。 |
max_inline_data | uint32_t | SQ に 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 Reference、ibv_alloc_pd(3)、ibv_modify_qp(3)、ibv_query_qp(3)
AUTHORS
原文 Dotan Barak <dotanba@gmail.com>
原文にない加筆がある。