Beispiel #1
0
 def test_imported_rc_ex_rdma_write(self):
     setup_params = {
         'dev_name': self.dev_name,
         'ib_port': self.ib_port,
         'gid_index': self.gid_index
     }
     self.server_res = QpExRCRDMAWrite(**setup_params)
     cmd_fd_dup = os.dup(self.server_res.ctx.cmd_fd)
     import_cls = get_import_res_class(QpExRCRDMAWrite)
     server_import = import_cls(
         cmd_fd_dup,
         self.server_res.pd.handle,
         self.server_res.mr.handle,
         # The imported MR's address is NULL, so using the address of the
         # "main" MR object to be able to validate the message
         self.server_res.mr.buf,
         **setup_params)
     self.imported_res.append(server_import)
     client = QpExRCRDMAWrite(**setup_params)
     client.pre_run(server_import.psn, server_import.qpn)
     server_import.pre_run(client.psn, client.qpn)
     client.rkey = server_import.mr.rkey
     server_import.rkey = client.mr.rkey
     client.raddr = server_import.mr.buf
     server_import.raddr = client.mr.buf
     u.rdma_traffic(client,
                    server_import,
                    self.iters,
                    self.gid_index,
                    self.ib_port,
                    send_op=e.IBV_QP_EX_WITH_RDMA_WRITE)
Beispiel #2
0
 def test_dc_rdma_write(self):
     self.create_players(Mlx5DcResources,
                         qp_count=2,
                         send_ops_flags=e.IBV_QP_EX_WITH_RDMA_WRITE)
     u.rdma_traffic(**self.traffic_args,
                    new_send=True,
                    send_op=e.IBV_QP_EX_WITH_RDMA_WRITE)
Beispiel #3
0
 def test_mw_type2_invalidate_dealloc(self):
     self.test_mw_type2()
     # Dealloc the MW by closing the pyverbs objects.
     self.server.mw.close()
     self.client.mw.close()
     with self.assertRaisesRegex(PyverbsRDMAError, 'Remote access error'):
         u.rdma_traffic(self.client, self.server, self.iters, self.gid_index,
                        self.ib_port, send_op=e.IBV_WR_RDMA_WRITE)
Beispiel #4
0
 def test_qp_ex_rc_rdma_write(self):
     client, server = self.create_players('rc_write')
     client.rkey = server.mr.rkey
     server.rkey = client.mr.rkey
     client.raddr = server.mr.buf
     server.raddr = client.mr.buf
     u.rdma_traffic(client, server, self.iters, self.gid_index, self.ib_port,
                    is_cq_ex=False, send_op=e.IBV_QP_EX_WITH_RDMA_WRITE)
Beispiel #5
0
 def test_mw_type2(self):
     self.create_players(MWRC, mw_type=e.IBV_MW_TYPE_2)
     self.bind_mw_type_2()
     u.rdma_traffic(self.client,
                    self.server,
                    self.iters,
                    self.gid_index,
                    self.ib_port,
                    send_op=e.IBV_WR_RDMA_WRITE)
Beispiel #6
0
 def test_qp_ex_rc_rdma_read(self):
     client, server = self.create_players('rc_read')
     client.rkey = server.mr.rkey
     server.rkey = client.mr.rkey
     client.raddr = server.mr.buf
     server.raddr = client.mr.buf
     server.mr.write('s' * server.msg_size, server.msg_size)
     u.rdma_traffic(client, server, self.iters, self.gid_index, self.ib_port,
                    is_cq_ex=False, send_op=e.IBV_QP_EX_WITH_RDMA_READ)
Beispiel #7
0
 def test_mw_type2_invalidate_remote(self):
     self.test_mw_type2()
     self.invalidate_mw_type2_remote()
     with self.assertRaisesRegex(PyverbsRDMAError, 'Remote access error'):
         u.rdma_traffic(self.client,
                        self.server,
                        self.iters,
                        self.gid_index,
                        self.ib_port,
                        send_op=e.IBV_WR_RDMA_WRITE)
Beispiel #8
0
 def test_qp_ex_rc_atomic_fetch_add(self):
     client, server = self.create_players('rc_fetch_add')
     client.msg_size = 8  # Atomic work on 64b operators
     server.msg_size = 8
     client.rkey = server.mr.rkey
     server.rkey = client.mr.rkey
     client.raddr = server.mr.buf
     server.raddr = client.mr.buf
     server.mr.write('s' * 8, 8)
     u.rdma_traffic(client, server, self.iters, self.gid_index, self.ib_port,
                    is_cq_ex=False, send_op=e.IBV_QP_EX_WITH_ATOMIC_FETCH_AND_ADD)
Beispiel #9
0
 def test_dmabuf_rdma_traffic(self):
     """
     Test rdma write using dma-buf MR
     """
     client, server = self.create_players(DmaBufRC, gpu=self.gpu,
                                          gtt=self.gtt)
     server.rkey = client.mr.rkey
     server.remote_addr = client.mr.offset
     client.rkey = server.mr.rkey
     client.remote_addr = server.mr.offset
     u.rdma_traffic(client, server, self.iters, self.gid_index, self.ib_port,
                    send_op=e.IBV_WR_RDMA_WRITE)
Beispiel #10
0
 def test_mr_rereg_access_bad_flow(self):
     """
     Test that cover rereg MR's access with this flow:
     Run remote traffic on MR with compatible access, then rereg the MR
     without remote access and verify that traffic fails with the relevant
     error.
     """
     remote_access = e.IBV_ACCESS_LOCAL_WRITE | e.IBV_ACCESS_REMOTE_WRITE
     self.create_players(MRRes, mr_access=remote_access)
     u.rdma_traffic(**self.traffic_args, send_op=e.IBV_WR_RDMA_WRITE)
     access = e.IBV_ACCESS_LOCAL_WRITE
     self.server.rereg_mr(flags=e.IBV_REREG_MR_CHANGE_ACCESS, access=access)
     with self.assertRaisesRegex(PyverbsRDMAError, 'Remote access error'):
         u.rdma_traffic(**self.traffic_args, send_op=e.IBV_WR_RDMA_WRITE)
 def test_qp_ex_srd_rdma_read(self):
     send_op = e.IBV_QP_EX_WITH_RDMA_READ
     self.create_players(send_op)
     self.client.rkey = self.server.mr.rkey
     self.server.rkey = self.client.mr.rkey
     self.client.raddr = self.server.mr.buf
     self.server.raddr = self.client.mr.buf
     self.server.mr.write('s' * self.server.msg_size, self.server.msg_size)
     u.rdma_traffic(self.client,
                    self.server,
                    self.iters,
                    self.gid_index,
                    self.ib_port,
                    new_send=True,
                    send_op=send_op)
 def test_dc_rdma_write_stream(self):
     """
     Check good flow of DCS.
     Calculate stream_id for DCS test by setting same stream id
     twice for WR and after increase it. Setting goes by loop
     and after stream_id is more than number of concurrent
     streams + 1 then stream_id returns to 1.
     :raises SkipTest: In case DCI is not supported with HW
     """
     self.create_players(Mlx5DcStreamsRes,
                         qp_count=2,
                         send_ops_flags=e.IBV_QP_EX_WITH_RDMA_WRITE)
     u.rdma_traffic(**self.traffic_args,
                    new_send=True,
                    send_op=e.IBV_QP_EX_WITH_RDMA_WRITE)
Beispiel #13
0
 def test_qp_ex_rc_atomic_cmp_swp(self):
     client, server = self.create_players('rc_cmp_swp')
     client.msg_size = 8  # Atomic work on 64b operators
     server.msg_size = 8
     client.rkey = server.mr.rkey
     server.rkey = client.mr.rkey
     client.raddr = server.mr.buf
     server.raddr = client.mr.buf
     server.mr.write('s' * 8, 8)
     u.rdma_traffic(client,
                    server,
                    self.iters,
                    self.gid_index,
                    self.ib_port,
                    new_send=True,
                    send_op=e.IBV_QP_EX_WITH_ATOMIC_CMP_AND_SWP)
Beispiel #14
0
 def test_dm_remote_traffic(self):
     self.create_players(DeviceMemoryRes, remote_access=True)
     u.rdma_traffic(**self.traffic_args, send_op=e.IBV_WR_RDMA_WRITE)
Beispiel #15
0
 def test_mr_rereg_access(self):
     self.create_players(MRRes)
     access = e.IBV_ACCESS_LOCAL_WRITE | e.IBV_ACCESS_REMOTE_WRITE
     self.server.rereg_mr(flags=e.IBV_REREG_MR_CHANGE_ACCESS, access=access)
     self.client.rereg_mr(flags=e.IBV_REREG_MR_CHANGE_ACCESS, access=access)
     u.rdma_traffic(**self.traffic_args, send_op=e.IBV_WR_RDMA_WRITE)