Esempio n. 1
0
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
Esempio n. 2
0
 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
Esempio n. 3
0
    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))
Esempio n. 4
0
 def __init__(self, addr=None, passive=None, **kwargs):
     """
     :param addr: Local address to bind to.
     :param passive: Indicate if this CM is the passive CM.
     :param kwargs: Arguments:
         * *port* (str)
             Port number of the address
         * *with_ext_qp* (bool)
             If set, an external RC QP will be created and used by RDMACM
     """
     self.qp_init_attr = None
     self.passive = passive
     self.with_ext_qp = kwargs.get('with_ext_qp', False)
     self.port = kwargs.get('port') if kwargs.get('port') else '7471'
     self.port_space = ce.RDMA_PS_TCP
     self.qp_type = e.IBV_QPT_RC
     self.qp_init_attr = QPInitAttr(qp_type=self.qp_type, cap=QPCap())
     self.connected = False
     # When passive side (server) listens to incoming connection requests,
     # for each new request it creates a new cmid which is used to establish
     # the connection with the remote side
     self.child_id = None
     self.msg_size = 1024
     self.num_msgs = 10
     self.channel = None
     self.cq = None
     self.qp = None
     self.mr = None
     if self.passive:
         self.ai = AddrInfo(addr, None, self.port, self.port_space,
                            ce.RAI_PASSIVE)
     else:
         self.ai = AddrInfo(addr, addr, self.port, self.port_space)
Esempio n. 5
0
 def create_qp(self):
     qp_caps = QPCap(max_recv_wr=self.num_msgs)
     qp_init_attr = QPInitAttr(qp_type=e.IBV_QPT_UD, cap=qp_caps,
                               scq=self.cq, rcq=self.cq)
     qp_attr = QPAttr(port_num=self.ib_port)
     qp_attr.qkey = self.UD_QKEY
     qp_attr.pkey_index = self.UD_PKEY_INDEX
     self.qp = QP(self.pd, qp_init_attr, qp_attr)
Esempio n. 6
0
 def create_qp(self):
     """
     Initializes self.qp with an RC QP.
     :return: None
     """
     qp_caps = QPCap(max_recv_wr=self.num_msgs)
     qp_init_attr = QPInitAttr(qp_type=e.IBV_QPT_RC, scq=self.cq,
                               rcq=self.cq, cap=qp_caps)
     qp_attr = QPAttr(port_num=self.ib_port)
     self.qp = QP(self.pd, qp_init_attr, qp_attr)
Esempio n. 7
0
 def create_qp_cap(self):
     """
     Create QPCap such that work queue elements will wrap around the send
     work queue, this happens due to the iteration count being higher
     than the max_send_wr.
     :return:
     """
     return QPCap(max_send_wr=4,
                  max_recv_wr=4,
                  max_recv_sge=2,
                  max_send_sge=2)
 def create_qp(self):
     qia = QPInitAttr(e.IBV_QPT_RAW_PACKET,
                      rcq=self.cq,
                      scq=self.cq,
                      cap=QPCap())
     try:
         qp = QP(self.pd, qia)
     except PyverbsRDMAError as ex:
         if ex.error_code == errno.EOPNOTSUPP:
             raise unittest.SkipTest(
                 "Create Raw Packet QP is not supported")
         raise ex
     qp.to_init(QPAttr())
     return qp
Esempio n. 9
0
 def create_qp(self):
     qp_caps = QPCap(max_recv_wr=self.num_msgs)
     qp_init_attr = QPInitAttr(qp_type=e.IBV_QPT_RC,
                               scq=self.cq,
                               rcq=self.cq,
                               cap=qp_caps)
     qp_attr = QPAttr(port_num=self.ib_port)
     qp_access = e.IBV_ACCESS_LOCAL_WRITE | e.IBV_ACCESS_REMOTE_WRITE
     qp_attr.qp_access_flags = qp_access
     try:
         self.qp = QP(self.pd, qp_init_attr, qp_attr)
     except PyverbsRDMAError as ex:
         if ex.error_code == errno.EOPNOTSUPP:
             raise unittest.SkipTest('Create RC QP is not supported')
         raise ex
Esempio n. 10
0
def random_qp_cap(attr):
    """
    Initializes a QPCap object with valid values based on the device's
    attributes.
    It doesn't check the max WR limits since they're reported for smaller WR
    sizes.
    :return: A QPCap object
    """
    # We use significantly smaller values than those in device attributes.
    # The attributes reported by the device don't take into account possible
    # larger WQEs that include e.g. memory window.
    send_wr = random.randint(1, int(attr.max_qp_wr / 8))
    recv_wr = random.randint(1, int(attr.max_qp_wr / 8))
    send_sge = random.randint(1, int(attr.max_sge / 2))
    recv_sge = random.randint(1, int(attr.max_sge / 2))
    return QPCap(send_wr, recv_wr, send_sge, recv_sge)
Esempio n. 11
0
 def __init__(self, addr=None, passive=None, **kwargs):
     """
     :param addr: Local address to bind to.
     :param passive: Indicate if this CM is the passive CM.
     :param kwargs: Arguments:
         * *port* (str)
             Port number of the address
         * *with_ext_qp* (bool)
             If set, an external RC QP will be created and used by RDMACM
         * *port_space* (str)
             If set, indicates the CMIDs port space
     """
     self.qp_init_attr = None
     self.passive = passive
     self.with_ext_qp = kwargs.get('with_ext_qp', False)
     self.port = kwargs.get('port') if kwargs.get('port') else '7471'
     self.port_space = kwargs.get('port_space', ce.RDMA_PS_TCP)
     self.remote_operation = kwargs.get('remote_op')
     self.qp_type = qp_type_per_ps[self.port_space]
     self.qp_init_attr = QPInitAttr(qp_type=self.qp_type, cap=QPCap())
     self.connected = False
     # When passive side (server) listens to incoming connection requests,
     # for each new request it creates a new cmid which is used to establish
     # the connection with the remote side
     self.msg_size = 1024
     self.num_msgs = 10
     self.channel = None
     self.cq = None
     self.qps = {}
     self.mr = None
     self.remote_qpn = None
     self.ud_params = None
     self.child_ids = {}
     self.cmids = {}
     if self.passive:
         self.ai = AddrInfo(src=addr,
                            src_service=self.port,
                            port_space=self.port_space,
                            flags=ce.RAI_PASSIVE)
     else:
         self.ai = AddrInfo(src=addr,
                            dst=addr,
                            dst_service=self.port,
                            port_space=self.port_space)
Esempio n. 12
0
 def create_qp_init_attr(self):
     self.qp_init_attr = QPInitAttr(cap=QPCap(max_recv_wr=1))
Esempio n. 13
0
 def create_qp_init_attr(rcq=None, scq=None):
     return QPInitAttr(qp_type=e.IBV_QPT_RC,
                       rcq=rcq,
                       scq=scq,
                       cap=QPCap(max_recv_wr=1))
Esempio n. 14
0
 def create_qp(self):
     qia = QPInitAttr(e.IBV_QPT_RAW_PACKET, rcq=self.cq, scq=self.cq,
                      cap=QPCap())
     qp = QP(self.pd, qia)
     qp.to_init(QPAttr())
     return qp
Esempio n. 15
0
 def create_qp_cap(self):
     return QPCap(max_send_wr=0, max_send_sge=0, max_recv_wr=0, max_recv_sge=0) if self.with_srq \
         else QPCap(max_send_wr=4, max_send_sge=1, max_recv_wr=self.num_msgs, max_recv_sge=4)
 def create_qp_cap(self):
     return QPCap(self.num_msgs, 0, 1, 0)
Esempio n. 17
0
 def create_qp_init_attr():
     return QPInitAttr(qp_type=e.IBV_QPT_RC, cap=QPCap(max_recv_wr=1))
Esempio n. 18
0
 def create_qp_cap(self):
     return QPCap(max_recv_wr=self.num_msgs)
Esempio n. 19
0
 def create_qp_cap(self):
     return QPCap(100, 0, 1, 0)
Esempio n. 20
0
 def create_qp_init_attr(self, rcq=None, scq=None):
     return QPInitAttr(qp_type=self.qp_type, rcq=rcq, scq=scq,
                       cap=QPCap(max_recv_wr=1))
Esempio n. 21
0
 def create_qp_cap(self):
     return QPCap(max_send_wr=self.num_msgs,
                  max_recv_wr=self.num_msgs,
                  max_inline_data=self.max_inline_data)