EFADV_CREATE_QP_EX(3)

πŸŽ€ NAME πŸŽ€

okay so this is EFADV_CREATE_QP_EX(3), straight out of the EFA Direct Verbs Manual β€” and it's literally the page for efadv_create_qp_ex: Create EFA specific extended Queue Pair. iconic behavior only πŸ‘‘


✨ SYNOPSIS ✨

#include <infiniband/efadv.h>

struct ibv_qp *efadv_create_qp_ex(struct ibv_context *ibvctx,
                                  struct ibv_qp_init_attr_ex *attr_ex,
                                  struct efadv_qp_init_attr *efa_attr,
                                  uint32_t inlen);

πŸ’– DESCRIPTION πŸ’–

efadv_create_qp_ex() creates a device-specific extended Queue Pair. yes bestie, that's the whole vibe: you're making the fancy EFA QP πŸ’…

The argument attr_ex is an ibv_qp_init_attr_ex struct, as defined in <infiniband/verbs.h>. keep that include energy, no cap 🫢

Use ibv_qp_to_qp_ex() to get the ibv_qp_ex for accessing the send ops iterator interface, when QP create attr IBV_QP_INIT_ATTR_SEND_OPS_FLAGS is used. that's the little doorway to the send-ops iterator situation, iykyk ✨

Scalable Reliable Datagram (SRD) transport provides reliable out-of-order delivery, transparently utilizing multiple network paths to reduce network tail latency. Its interface is similar to UD β€” in particular it supports message size up to MTU, with error handling extended to support reliable communication. so yes, reliable out-of-order delivery with multiple paths doing the most to reduce tail latency 🌈

Compatibility is handled using the comp_mask and inlen fields. very "we planned ahead" of it all πŸŽ€

struct efadv_qp_init_attr {
    uint64_t comp_mask;
    uint32_t driver_qp_type;
    uint16_t flags;
    uint8_t sl;
    uint8_t reserved[1];
};
  • inlen β€” In: Size of struct efadv_qp_init_attr.
  • comp_mask β€” Compatibility mask.
  • driver_qp_type β€” The type of QP to be created:
    • EFADV_QP_DRIVER_TYPE_SRD: Create an SRD QP.
  • flags β€” A bitwise OR of the values described below.
    • EFADV_QP_FLAGS_UNSOLICITED_WRITE_RECV: Receive WRs will not be consumed for RDMA write with imm.
  • sl β€” Service Level - 0 value implies default level.

πŸ”₯ RETURN VALUE πŸ”₯

efadv_create_qp_ex() returns a pointer to the created QP, or NULL if the request fails. so if you get NULL, bestie, the request said "not today" πŸ˜­πŸ’€


πŸ¦‹ SEE ALSO πŸ¦‹

efadv(7), ibv_create_qp_ex(3)


🌸 AUTHORS 🌸

Shoutout to Gal Pressman <galpress@amazon.com> and Daniel Kranzdorf <dkkranzd@amazon.com> β€” they wrote this page, and we respect it 🫢


okay that's the whole page β€” source/version is efa, date 2019-08-06, and yes bestie, this is the EFADV_CREATE_QP_EX(3) page. byeee πŸ’…βœ¨

πŸ“¦ where this page comes from