IBV_QUERY_DEVICE(3)

作成日:2014.05.10
修正日:2014.07.22

NAME

ibv_query_device - RDMA デバイスの属性情報を取得する

SYNOPSIS

#include <infiniband/verbs.h>

int ibv_query_device(struct ibv_context *context,
                     struct ibv_device_attr *device_attr);

DESCRIPTION

ibv_query_device()context で指定される RDMA デバイスの属性情報を device_attr が指す領域にコピーする。

contextibv_open_device() でオープンした RDMA デバイスを指定する。

Table 1: struct ibv_device_attr 構造体
メンバ変数解説典型的な値
fw_verchar [64] HCA のファームウェアバージョン  
node_guiduint64_t ノード GUID は HCA に割り当てられた GUID。 Subnet Manager が DrSMP でサブネットを探索する際に、ポート GUID とノード GUID は別々に取得できる。マルチポート HCA の場合、ポート GUID はポート毎に別々だが、ノード GUID は同一のものが割り当てられる。Subnet Manager から見ると、あるポートが同一の HCA に属しているかどうかを判定可能になる。  
sys_image_guiduint64_t    
max_mr_sizeuint64_t ibv_reg_mr() で登録できる最大のメモリ長。これが 0xffffffffffffffff に設定されている場合、最大メモリ長に制限はないことになる。 0xffffffffffffffff
page_size_capuint64_t Supported memory shift sizes 0xfffffe00
vendor_iduint32_t Vendor ID, per IEEE  
vendor_part_id uint32_t Vendor supplied part ID  
hw_veruint32_t Hardware version  
max_qpint 同時に存在できる最大の QP 数。ただしパラメータによってはこれ以下の数の QP しか生成できないことがある。 131,008
max_qp_wrint QP に設定できる最大 WR 数。ibv_create_qp() 呼び出し時に qp_init_attr->cap の中の max_send_wrmax_recv_wr はこの値を越えて設定することができない。その他、IBV_QP_CAP を指定した ibv_modify_qp() にもリミッターを掛ける。 16,351
device_cap_flagsint HCA デバイスのケーパビリティ。 Table 2 を参照。
max_sgeint QP に設定できる最大 Scatter/Gather 組数。ibv_create_qp() 呼び出し時に qp_init_attr->cap の中の max_send_sgemax_recv_sge はこの値を越えて設定することができない。その他、IBV_QP_CAP を指定した ibv_modify_qp() にもリミッターを掛ける。 32
max_sge_rdint   0
max_cqint 同時に存在できる最大の CQ 数。ただしパラメータによってはこれ以下の数の CQ しか生成できないことがある。 65,408
max_cqeint CQ に設定できる最大 CQE 数。ibv_create_cq() 呼び出し時に引数 cqe はこの値を越えて設定することができない。その他、ibv_resize_cq() にもリミッターを掛ける。 4,194,303
max_mrint 同時に存在できる最大の Memory Region(MR) 数。ただしパラメータによってはこれ以下の数の MR しか生成できないことがある。 524,272
max_pdint 同時に存在できる最大の Protection Domain(PD) 数。 32,764
max_qp_rd_atomint QP に設定できる RDMA READ と Atomic 操作の最大同時発行数。 ibv_modify_qp() 呼び出し時に引数 attr->max_dest_rd_atomic はこの値を越えて設定することができない。 16
max_ee_rd_atomint   0
max_res_rd_atomint HCA 全体での RDMA READ と Atomic 操作の最大値。最大同時発行数なのか最大同時受信数なのか不明。 20,961,280
max_qp_init_rd_atomint QP に設定できる RDMA READ と Atomic 操作の最大同時受信数。ibv_modify_qp() 呼び出し時に引数 attr->max_rd_atomic はこの値を越えて設定することができない。 128
max_ee_init_rd_atomint   0
atomic_capenum iv_atomic_cap Atomic 操作がどの範囲で Atomicity を保証するかを表示。
ATOMIC_NONE(0)保証しない
ATOMIC_HCA(1)HCA 内では保証
ATOMIC_GLOB(2)ホストマシン内で保証(HCA が複数刺さっていれば、その間でも保証)
ATOMIC_HCA(1)
max_eeint   0
max_rddint   0
max_mwint   0
max_raw_ipv6_qpint   0
max_raw_ethy_qpint   0
max_mcast_grpint 作成可能なマルチキャストグループの最大数 8,192
max_mcast_qp_attachint 1 つのマルチキャストグループに参加させることができる QP の最大数。 この制限は ibv_attach_mcast() を実行する際に問題になる。 248
max_total_mcast_qp_attachint HCA 全体で QP のマルチキャスト参加を許す最大数。 この制限も ibv_attach_mcast() を実行する際に問題になる。 2,031,616
max_ahint 同時に存在できる最大の Address Handle 数。 ただし Mellanox ConnectX-3 はこの値が 0 だが、ibv_create_ah() で AH は作成可能。 0
max_fmrint   0
max_map_per_fmrint   0
max_srqint 同時に存在できる最大の SRQ 数。 65,472
max_srq_wrint SRQ に設定できる最大 WR 数。ibv_create_srq() 呼び出し時に srq_init_attr->cap の中の max_wr はこの値を越えて設定することができない。その他、ibv_modify_srq() にもリミッターを掛ける。 16,383
max_srq_sgeint SRQ に設定できる最大 Scatter/Gather 組数。ibv_create_srq() 呼び出し時に srq_init_attr->cap の中の max_sge はこの値を越えて設定することができない。その他、ibv_modify_srq() にもリミッターを掛ける。 31
max_pkeysuint16_t Partition Key Table のエントリ数となる。 ただし Partition Key Table はポート毎にあるものなので、ibv_query_pkey() を使う場合の最大インデックス数は ibv_query_port() で取得できる pkey_tbl_len を参照すべき。 128
local_ca_ack_delayuint8_t RC QP に設定する Local ACK Timeout の時間間隔の最小分解能。 ibv_modify_qp()attr->timeout で指定した値に対応する時間が local_ca_ack_delay の最小分解能時間よりを下回っている場合、Local ACK Timeout 時間は最小分解能時間となる。 詳細は 「InfiniBandの再送制御を理解する」 2.1 Local ACK Timeoutを参照のこと。 15
phys_port_cntuint8_t HCA の物理ポートの数 1 or 2
Table 2: IB デバイスのケーパビリティ
ビットマクロ名解説典型的な値
0IBV_DEVICE_RESIZE_MAX_WR 既存の QP の WR パラメータを変更に対応。 IBV_QP_CAP を指定し ibv_modify_qp() を呼ぶことができる。  
1IBV_DEVICE_BAD_PKEY_CNTR 入力パケットの P_Key の不一致をカウントする。 このカウンター値は ibv_query_port() を実行し、bad_pkey_cnt として取り出すことができる。 Supported
2IBV_DEVICE_BAD_QKEY_CNTR 入力 UD パケットの Q_Key の不一致をカウントする。 このカウンター値は ibv_query_port() を実行し、qkey_viol_cnt として取り出すことができる。 Supported
3IBV_DEVICE_RAW_MULTI RAW パケットでマルチキャストに対応する。  
4IBV_DEVICE_AUTO_PATH_MIG Autopath Migration に対応する。 Supported
5IBV_DEVICE_CHANGE_PHY_PORT QP が SQD に遷移した時に primary port number の変更に対応。 IBV_QP_PORT を指定し ibv_modify_qp() を呼ぶことができる。 Supported
6IBV_DEVICE_UD_AV_PORT_ENFORCE   Supported
7IBV_DEVICE_CURR_QP_STATE_MOD ibv_modify_qp()IBV_QP_CUR_STATE を指定し、遷移元の QP ステートを指定できる。 「InfiniBand の QP ステートの遷移を理解する」 3. QP ステートの遷移も参照のこと。  
8IBV_DEVICE_SHUTDOWN_PORT Shutdown Port indicator。  
9IBV_DEVICE_INIT_TYPE InitType オプション。これは SM が動作する前のポートの自動初期化に関する機能。  
10IBV_DEVICE_PORT_ACTIVE_EVENT ポートに関する非同期イベントを生成する。 詳細は「エラーハンドリングのモデルを理解する」 3.5 ポートのリンク状態に関係するものを参考のこと。 Supported
11IBV_DEVICE_SYS_IMAGE_GUID System Image GUID support indicator Supported
12IBV_DEVICE_RC_RNR_NAK_GEN RC サービスで受信側の Receive Queue/Shared Receive Queue に Receive WR が空になっている場合に RNR-NAK を応答する。 Supported
13IBV_DEVICE_SRQ_RESIZE 既存の SRQ の最大 Receive WR 数を変更に対応。 IBV_SRQ_MAX_WR を指定し ibv_modify_srq() を呼ぶことができる。 「InfiniBand の QP ステートの遷移を理解する」 3. QP ステートの遷移も参照のこと。  
14IBV_DEVICE_N_NOTIFY_CQ CQ に指定数の completion が溜まるまで、completion channel が notification を起こすのを抑止する機能に対応。  
16(LOCAL_DMA_LKEY) DMA 転送を行う場合の専用 L_Key を提供する機能。 これはカーネルの内部だけ有効な機能。  
17(MEM_WINDOW) Memory Window 機能。  
18(UD_IP_CSUM) IPoIB checksum 機能。 Supported
19(UD_TSO) IPoIB で HCA の TSO オフロード機能を利用する。 Supported
20IBV_DEVICE_XRC Extended Reliable Connection(XRC) サービスのサポート。 Supported
21(MEM_MGT_EXTENSIONS) iSER で有効な Fast Memory Registration mode(FRWR) をサポート。 Supported
22(BLOCK_MULTICAST_LOOPBACK) マルチキャストメッセージを送信した QP 自身がメッセージを受信しないようにブロックする機能。 Supported
23(MEM_WINDOWS_TYPE_2A) Type 2A Memory Window 機能  
24(MEM_WINDOWS_TYPE_2B) Type 2B Memory Window 機能  
29IBV_DEVICE_MANAGED_FLOW_STEERING    

RETURN VALUE

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

NOTES

TBD

SEE ALSO

InfiniBand Verbs API Referenceibv_open_device(3)ibv_query_port(3)ibv_query_pkey(3)

AUTHORS

コメント

コメントを書き込む

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