def create_qps(self): """ Initializes self.qps with an XRC SEND/RECV QPs. :return: None """ qp_attr = QPAttr(port_num=self.ib_port) qp_attr.pkey_index = 0 for _ in range(self.qp_count): attr_ex = QPInitAttrEx(qp_type=e.IBV_QPT_XRC_RECV, comp_mask=e.IBV_QP_INIT_ATTR_XRCD, xrcd=self.xrcd) qp_attr.qp_access_flags = e.IBV_ACCESS_REMOTE_WRITE | \ e.IBV_ACCESS_REMOTE_READ recv_qp = QP(self.ctx, attr_ex, qp_attr) self.rqp_lst.append(recv_qp) qp_caps = QPCap(max_send_wr=self.num_msgs, max_recv_sge=0, max_recv_wr=0) attr_ex = QPInitAttrEx(qp_type=e.IBV_QPT_XRC_SEND, sq_sig_all=1, comp_mask=e.IBV_QP_INIT_ATTR_PD, pd=self.pd, scq=self.cq, cap=qp_caps) qp_attr.qp_access_flags = 0 send_qp =QP(self.ctx, attr_ex, qp_attr) self.sqp_lst.append(send_qp) self.qps_num.append((recv_qp.qp_num, send_qp.qp_num)) self.psns.append(random.getrandbits(24))
def get_qp_init_attr_ex(cq, pd, attr): qp_cap = u.random_qp_cap(attr) sig = random.randint(0, 1) mask = e.IBV_QP_INIT_ATTR_PD | e.IBV_QP_INIT_ATTR_SEND_OPS_FLAGS send_ops_flags = get_random_send_op_flags() qia = QPInitAttrEx(qp_type=e.IBV_QPT_DRIVER, cap=qp_cap, sq_sig_all=sig, comp_mask=mask, create_flags=0, max_tso_header=0, send_ops_flags=send_ops_flags) qia.send_cq = cq qia.recv_cq = cq qia.pd = pd return qia
def create_qps(self): qp_cap = QPCap(max_recv_wr=self.num_msgs, max_send_wr=self.num_msgs, max_recv_sge=1, max_send_sge=1) comp_mask = e.IBV_QP_INIT_ATTR_PD if self.send_ops_flags: comp_mask |= e.IBV_QP_INIT_ATTR_SEND_OPS_FLAGS qp_init_attr_ex = QPInitAttrEx(cap=qp_cap, qp_type=e.IBV_QPT_DRIVER, scq=self.cq, rcq=self.cq, pd=self.pd, send_ops_flags=self.send_ops_flags, comp_mask=comp_mask) efa_init_attr_ex = efa.EfaQPInitAttr() efa_init_attr_ex.driver_qp_type = efa_e.EFADV_QP_DRIVER_TYPE_SRD try: for _ in range(self.qp_count): qp = efa.SRDQPEx(self.ctx, qp_init_attr_ex, efa_init_attr_ex) self.qps.append(qp) self.qps_num.append(qp.qp_num) self.psns.append(random.getrandbits(24)) except PyverbsRDMAError as ex: if ex.error_code == errno.EOPNOTSUPP: raise unittest.SkipTest( 'Extended SRD QP is not supported on this device') raise ex
def create_qp_ex(agr_obj, qp_type, send_flags): if qp_type == e.IBV_QPT_XRC_SEND: cap = QPCap(max_send_wr=agr_obj.num_msgs, max_recv_wr=0, max_recv_sge=0, max_send_sge=1) else: cap = QPCap(max_send_wr=agr_obj.num_msgs, max_recv_wr=agr_obj.num_msgs, max_recv_sge=1, max_send_sge=1) qia = QPInitAttrEx(cap=cap, qp_type=qp_type, scq=agr_obj.cq, rcq=agr_obj.cq, pd=agr_obj.pd, send_ops_flags=send_flags, comp_mask=e.IBV_QP_INIT_ATTR_PD | e.IBV_QP_INIT_ATTR_SEND_OPS_FLAGS) qp_attr = QPAttr(port_num=agr_obj.ib_port) if qp_type == e.IBV_QPT_UD: qp_attr.qkey = agr_obj.UD_QKEY qp_attr.pkey_index = agr_obj.UD_PKEY_INDEX if qp_type == e.IBV_QPT_RC: qp_attr.qp_access_flags = e.IBV_ACCESS_REMOTE_WRITE | \ e.IBV_ACCESS_REMOTE_READ | \ e.IBV_ACCESS_REMOTE_ATOMIC try: # We don't have capability bits for this qp = QPEx(agr_obj.ctx, qia, qp_attr) except PyverbsRDMAError as ex: if ex.error_code == errno.EOPNOTSUPP: raise unittest.SkipTest('Extended QP is not supported on this device') raise ex return qp
def random_qp_init_attr_ex(attr_ex, attr, qpt=None): """ Create a random-valued QPInitAttrEX object with the given QP type. QP type affects QP capabilities, so allow users to set it and still get valid attributes. :param attr_ex: Extended device attributes for capability checks :param attr: Device attributes for capability checks :param qpt: Requested QP type :return: A valid initialized QPInitAttrEx object """ max_tso = 0 if qpt is None: qpt = random.choice([e.IBV_QPT_RC, e.IBV_QPT_UC, e.IBV_QPT_UD, e.IBV_QPT_RAW_PACKET]) qp_cap = random_qp_cap(attr) if qpt == e.IBV_QPT_RAW_PACKET and \ qp_cap.max_send_wr > MAX_RAW_PACKET_SEND_WR: qp_cap.max_send_wr = MAX_RAW_PACKET_SEND_WR sig = random.randint(0, 1) mask = random_qp_create_mask(qpt, attr_ex) if mask & e.IBV_QP_INIT_ATTR_CREATE_FLAGS: cflags = random_qp_create_flags(qpt, attr_ex) else: cflags = 0 if mask & e.IBV_QP_INIT_ATTR_MAX_TSO_HEADER: if qpt != e.IBV_QPT_RAW_PACKET: mask -= e.IBV_QP_INIT_ATTR_MAX_TSO_HEADER else: max_tso = \ random.randint(16, int(attr_ex.tso_caps.max_tso / 400)) qia = QPInitAttrEx(qp_type=qpt, cap=qp_cap, sq_sig_all=sig, comp_mask=mask, create_flags=cflags, max_tso_header=max_tso) return qia
def create_qp_init_attr(self, send_ops_flags=0): comp_mask = e.IBV_QP_INIT_ATTR_PD if send_ops_flags: comp_mask |= e.IBV_QP_INIT_ATTR_SEND_OPS_FLAGS return QPInitAttrEx(cap=self.create_qp_cap(), pd=self.pd, scq=self.cq, rcq=self.cq, srq=self.srq, qp_type=e.IBV_QPT_DRIVER, send_ops_flags=send_ops_flags, comp_mask=comp_mask, sq_sig_all=1)
def create_qp_init_attr(self): comp_mask = e.IBV_QP_INIT_ATTR_PD | e.IBV_QP_INIT_ATTR_SEND_OPS_FLAGS return QPInitAttrEx(cap=self.create_qp_cap(), pd=self.pd, scq=self.cq, rcq=self.cq, qp_type=e.IBV_QPT_RC, send_ops_flags=self.send_ops_flags, comp_mask=comp_mask)
def create_qp(self): qp_attr = QPAttr(port_num=self.ib_port) qp_attr.pkey_index = 0 for _ in range(self.qp_count): attr_ex = QPInitAttrEx(qp_type=e.IBV_QPT_XRC_RECV, comp_mask=e.IBV_QP_INIT_ATTR_XRCD, xrcd=self.xrcd) qp_attr.qp_access_flags = e.IBV_ACCESS_REMOTE_WRITE | \ e.IBV_ACCESS_REMOTE_READ recv_qp = QP(self.ctx, attr_ex, qp_attr) self.rqp_lst.append(recv_qp) send_qp = create_qp_ex(self, e.IBV_QPT_XRC_SEND, e.IBV_QP_EX_WITH_SEND) self.sqp_lst.append(send_qp) self.qps_num.append((recv_qp.qp_num, send_qp.qp_num)) self.psns.append(random.getrandbits(24))
def create_qp_init_attr(self): self.create_ind_table() mask = e.IBV_QP_INIT_ATTR_CREATE_FLAGS | e.IBV_QP_INIT_ATTR_PD | \ e.IBV_QP_INIT_ATTR_RX_HASH | e.IBV_QP_INIT_ATTR_IND_TABLE return QPInitAttrEx(qp_type=e.IBV_QPT_RAW_PACKET, comp_mask=mask, pd=self.pd, hash_conf=self.hash_conf, ind_table=self.ind_tbl)