RDMA Aware Networks Programming User Manual
Table of Contents
Revision History
Glossary
1 RDMA Architecture Overview
1.1 InfiniBand
1.2 Virtual Protocol Interconnect® (VPI)
1.3 RDMA over Converged Ethernet (RoCE)
1.4 Comparison of RDMA Technologies
1.5 Key Components
1.6 Support for Existing Applications and ULPs
1.7 References
2 RDMA-Aware Programming Overview
2.1 Available Communication Operations
2.1.1 Send/Send With Immediate
2.1.2 Receive
2.1.3 RDMA Read
2.1.4 RDMA Write / RDMA Write With Immediate
2.1.5 Atomic Fetch and Add / Atomic Compare and Swap
2.2 Transport Modes
2.2.1 Reliable Connection (RC)
2.2.2 Unreliable Connection (UC)
2.2.3 Unreliable Datagram (UD)
2.3 Key Concepts
2.3.1 Send Request (SR)
2.3.2 Receive Request (RR)
2.3.3 Completion Queue
2.3.4 Memory Registration
2.3.5 Memory Window
2.3.6 Address Vector
2.3.7 Global Routing Header (GRH)
2.3.8 Protection Domain
2.3.9 Asynchronous Events
2.3.10 Scatter Gather
2.3.11 Polling
2.4 Typical Application
3 VPI Verbs API
3.1 Initialization
3.1.1 ibv_fork_init
3.2 Device Operations
3.2.1 ibv_get_device_list
3.2.2 ibv_free_device_list
3.2.3 ibv_get_device_name
3.2.4 ibv_get_device_guid
3.2.5 ibv_open_device
3.2.6 ibv_close_device
3.2.7 ibv_node_type_str
3.2.8 ibv_port_state_str
3.3 Verb Context Operations
3.3.1 ibv_query_device
3.3.2 ibv_query_port
3.3.3 ibv_query_gid
3.3.4 ibv_query_pkey
3.3.5 ibv_alloc_pd
3.3.6 ibv_dealloc_pd
3.3.7 ibv_create_cq
3.3.8 ibv_resize_cq
3.3.9 ibv_destroy_cq
3.3.10 ibv_create_comp_channel
3.3.11 ibv_destroy_comp_channel
3.4 Protection Domain Operations
3.4.1 ibv_reg_mr
3.4.2 ibv_dereg_mr
3.4.3 ibv_create_qp
3.4.4 ibv_destroy_qp
3.4.5 ibv_create_srq
3.4.6 ibv_modify_srq
3.4.7 ibv_destroy_srq
3.4.8 ibv_open_xrc_domain
3.4.9 ibv_create_xrc_srq
3.4.10 ibv_close_xrc_domain
3.4.11 ibv_create_xrc_rcv_qp
3.4.12 ibv_modify_xrc_rcv_qp
3.4.13 ibv_reg_xrc_rcv_qp
3.4.14 ibv_unreg_xrc_rcv_qp
3.4.15 ibv_create_ah
3.4.16 ibv_destroy_ah
3.5 Queue Pair Bringup (ibv_modify_qp)
3.5.1 ibv_modify_qp
3.5.2 RESET to INIT
3.5.3 INIT to RTR
3.5.4 RTR to RTS
3.6 Active Queue Pair Operations
3.6.1 ibv_query_qp
3.6.2 ibv_query_srq
3.6.3 ibv_query_xrc_rcv_qp
3.6.4 ibv_post_recv
3.6.5 ibv_post_send
3.6.6 ibv_post_srq_recv
3.6.7 ibv_req_notify_cq
3.6.8 ibv_get_cq_event
3.6.9 ibv_ack_cq_events
3.6.10 ibv_poll_cq
3.6.11 ibv_init_ah_from_wc
3.6.12 ibv_create_ah_from_wc
3.6.13 ibv_attach_mcast
3.6.14 ibv_detach_mcast
3.7 Event Handling Operations
3.7.1 ibv_get_async_event
3.7.2 ib_ack_async_event
3.7.3 ibv_event_type_str
3.8 Experimental APIs
3.8.1 ibv_exp_query_device
3.8.2 ibv_exp_create_qp
3.8.3 ibv_exp_post_send
4 RDMA_CM API
4.1 Event Channel Operations
4.1.1 rdma_create_event_channel
4.1.2 rdma_destroy_event_channel
4.2 Connection Manager (CM) ID Operations
4.2.1 rdma_create_id
4.2.2 rdma_destroy_id
4.2.3 rdma_migrate_id
4.2.4 rdma_set_option
4.2.5 rdma_create_ep
4.2.6 rdma_destroy_ep
4.2.7 rdma_resolve_addr
4.2.8 rdma_bind_addr
4.2.9 rdma_resolve_route
4.2.10 rdma_listen
4.2.11 rdma_connect
4.2.12 rdma_get_request
4.2.13 rdma_accept
4.2.14 rdma_reject
4.2.15 rdma_notify
4.2.16 rdma_disconnect
4.2.17 rdma_get_src_port
4.2.18 rdma_get_dst_port
4.2.19 rdma_get_local_addr
4.2.20 rdma_get_peer_addr
4.2.21 rdma_get_devices
4.2.22 rdma_free_devices
4.2.23 rdma_getaddrinfo
4.2.24 rdma_freeaddrinfo
4.2.25 rdma_create_qp
4.2.26 rdma_destroy_qp
4.2.27 rdma_join_multicast
4.2.28 rdma_leave_multicast
4.3 Event Handling Operations
4.3.1 rdma_get_cm_event
4.3.2 rdma_ack_cm_event
4.3.3 rdma_event_str
5 RDMA Verbs API
5.1 Protection Domain Operations
5.1.1 rdma_reg_msgs
5.1.2 rdma_reg_read
5.1.3 rdma_reg_write
5.1.4 rdma_dereg_mr
5.1.5 rdma_create_srq
5.1.6 rdma_destroy_srq
5.2 Active Queue Pair Operations
5.2.1 rdma_post_recvv
5.2.2 rdma_post_sendv
5.2.3 rdma_post_readv
5.2.4 rdma_post_writev
5.2.5 rdma_post_recv
5.2.6 rdma_post_send
5.2.7 rdma_post_read
5.2.8 rdma_post_write
5.2.9 rdma_post_ud_send
5.2.10 rdma_get_send_comp
5.2.11 rdma_get_recv_comp
6 Events
6.1 IBV Events
6.1.1 IBV_EVENT_CQ_ERR
6.1.2 IBV_EVENT_QP_FATAL
6.1.3 IBV_EVENT_QP_REQ_ERR
6.1.4 IBV_EVENT_QP_ACCESS_ERR
6.1.5 IBV_EVENT_COMM_EST
6.1.6 IBV_EVENT_SQ_DRAINED
6.1.7 IBV_EVENT_PATH_MIG
6.1.8 IBV_EVENT_PATH_MIG_ERR
6.1.9 IBV_EVENT_DEVICE_FATAL
6.1.10 IBV_EVENT_PORT_ACTIVE
6.1.11 IBV_EVENT_PORT_ERR
6.1.12 IBV_EVENT_LID_CHANGE
6.1.13 IBV_EVENT_PKEY_CHANGE
6.1.14 IBV_EVENT_SM_CHANGE
6.1.15 IBV_EVENT_SRQ_ERR
6.1.16 IBV_EVENT_SRQ_LIMIT_REACHED
6.1.17 IBV_EVENT_QP_LAST_WQE_REACHED
6.1.18 IBV_EVENT_CLIENT_REREGISTER
6.1.19 IBV_EVENT_GID_CHANGE
6.2 IBV WC Events
6.2.1 IBV_WC_SUCCESS
6.2.2 IBV_WC_LOC_LEN_ERR
6.2.3 IBV_WC_LOC_QP_OP_ERR
6.2.4 IBV_WC_LOC_EEC_OP_ERR
6.2.5 IBV_WC_LOC_PROT_ERR
6.2.6 IBV_WC_WR_FLUSH_ERR
6.2.7 IBV_WC_MW_BIND_ERR
6.2.8 IBV_WC_BAD_RESP_ERR
6.2.9 IBV_WC_LOC_ACCESS_ERR
6.2.10 IBV_WC_REM_INV_REQ_ERR
6.2.11 IBV_WC_REM_ACCESS_ERR
6.2.12 IBV_WC_REM_OP_ERR
6.2.13 IBV_WC_RETRY_EXC_ERR
6.2.14 IBV_WC_RNR_RETRY_EXC_ERR
6.2.15 IBV_WC_LOC_RDD_VIOL_ERR
6.2.16 IBV_WC_REM_INV_RD_REQ_ERR
6.2.17 IBV_WC_REM_ABORT_ERR
6.2.18 IBV_WC_INV_EECN_ERR
6.2.19 IBV_WC_INV_EEC_STATE_ERR
6.2.20 IBV_WC_FATAL_ERR
6.2.21 IBV_WC_RESP_TIMEOUT_ERR
6.2.22 IBV_WC_GENERAL_ERR
6.3 RDMA_CM Events
6.3.1 RDMA_CM_EVENT_ADDR_RESOLVED
6.3.2 RDMA_CM_EVENT_ADDR_ERROR
6.3.3 RDMA_CM_EVENT_ROUTE_RESOLVED
6.3.4 RDMA_CM_EVENT_ROUTE_ERROR
6.3.5 RDMA_CM_EVENT_CONNECT_REQUEST
6.3.6 RDMA_CM_EVENT_CONNECT_RESPONSE
6.3.7 RDMA_CM_EVENT_CONNECT_ERROR
6.3.8 RDMA_CM_EVENT_UNREACHABLE
6.3.9 RDMA_CM_EVENT_REJECTED
6.3.10 RDMA_CM_EVENT_ESTABLISHED
6.3.11 RDMA_CM_EVENT_DISCONNECTED
6.3.12 RDMA_CM_EVENT_DEVICE_REMOVAL
6.3.13 RDMA_CM_EVENT_MULTICAST_JOIN
6.3.14 RDMA_CM_EVENT_MULTICAST_ERROR
6.3.15 RDMA_CM_EVENT_ADDR_CHANGE
6.3.16 RDMA_CM_EVENT_TIMEWAIT_EXIT
7 Programming Examples Using IBV Verbs
7.1 Synopsis for RDMA_RC Example Using IBV Verbs
7.1.1 Main
7.1.2 print_config
7.1.3 resources_init
7.1.4 resources_create
7.1.5 sock_connect
7.1.6 connect_qp
7.1.7 modify_qp_to_init
7.1.8 post_receive
7.1.9 sock_sync_data
7.1.10 modify_qp_to_rtr
7.1.11 modify_qp_to_rts
7.1.12 post_send
7.1.13 poll_completion
7.1.14 resources_destroy
7.2 Code for Send, Receive, RDMA Read, RDMA Write
7.3 Synopsis for Multicast Example Using RDMA_CM and IBV Verbs
7.3.1 Main
7.3.2 Run
7.4 Code for Multicast Using RDMA_CM and IBV Verbs
8 Programming Examples Using RDMA Verbs
8.1 Automatic Path Migration (APM)
8.2 Multicast Code Example Using RDMA CM
8.3 Shared Received Queue (SRQ)
Appendix A: Experimental APIs
A.1 Dynamically Connected Transport
Appendix B: Verbs API for Extended Atomics Support
B.1 Supported Hardware
B.2 Verbs Interface Changes
Appendix C: User-Mode Memory Registration (UMR)
C.1 Interfaces
Appendix D: Cross-Channel Communications Support
D.1 Usage Model
D.2 Resource Initialization
D.3 Posting Request List