Hi, I have been investigating the multi-packet/striding RQ feature that’s present in ConnectX-4+. The documentation on this feature is scant but I was curious if it was possible to setup a SRQ with multi-packet support that can be connected to the usual RC QPs, and if there’s an example code I could look at. I’ve seen several examples that use a raw packet QPs with multi-packet support, but that does not solve my problem. Thank you!
Hi,
Thanks for your question. It may require a support case in Nvidia portal, which will be handled according to the support entitlement.
Best Regards,
Anatoly
I am also researching this issue. According to https://docs.nvidia.com/networking/display/rdmacore50/multi-packet+rq, multi-packet RQ seems to be only applicable to WQ. In MLNX-OFED 4.x, the ibv_exp_wq
contains the srq
field. However, in the latest version, ibv_wq
does not have this field. Perhaps only by using MLNX-OFED 4.x can Multi-packet RQ be used together with SRQ. I wonder if DOCA-OFED has solved this problem. The relevant code is as follows:
// verbs_exp.h in mlnx-ofed-kernel-dkms 4.9-OFED.4.9.5.1.0.1
struct ibv_exp_wq {
struct ibv_context *context;
void *wq_context; /* Associated Context of the WQ */
uint32_t handle;
/* Protection domain WQ should be associated with */
struct ibv_pd *pd;
/* CQ to be associated with the WQ */
struct ibv_cq *cq;
/* SRQ handle if WQ is to be associated with an SRQ, otherwise NULL */
struct ibv_srq *srq;
uint32_t wq_num;
enum ibv_exp_wq_state state;
enum ibv_exp_wq_type wq_type;
uint32_t comp_mask;
};
struct ibv_exp_wq_init_attr {
// ...
struct ibv_exp_wq_mp_rq mp_rq;
// ...
}
// verbs.h in mlnx-ofed-kernel-dkms 24.07.OFED.24.07.0.6.1.1-1
struct ibv_wq {
struct ibv_context *context;
void *wq_context;
struct ibv_pd *pd;
struct ibv_cq *cq;
uint32_t wq_num;
uint32_t handle;
enum ibv_wq_state state;
enum ibv_wq_type wq_type;
int (*post_recv)(struct ibv_wq *current,
struct ibv_recv_wr *recv_wr,
struct ibv_recv_wr **bad_recv_wr);
pthread_mutex_t mutex;
pthread_cond_t cond;
uint32_t events_completed;
uint32_t comp_mask;
};