From e9dd7fb6ea00525779e16538d586d5cc893829aa Mon Sep 17 00:00:00 2001 From: Daisuke Matsuda Date: Thu, 22 Sep 2022 16:25:09 +0900 Subject: [PATCH] tests: Add RDMA Write and Read testcase for ODP Add test that uses RDMA Write/Read operations with ODP. This cannot be separated into two testcases because RDMA Write must precede for RDMA Read to succeed. Signed-off-by: Daisuke Matsuda --- tests/test_odp.py | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/tests/test_odp.py b/tests/test_odp.py index 8392c8cfa..337fef533 100644 --- a/tests/test_odp.py +++ b/tests/test_odp.py @@ -56,21 +56,26 @@ def create_mr(self): implicit=self.is_implicit) class OdpRdmaRC(RCResources): - def __init__(self, dev_name, ib_port, gid_index): + def __init__(self, dev_name, ib_port, gid_index, msg_size=512): """ Initialize an OdpRdmaRC Resource object. This is intended to be used with RDMA Write, RDMA Read, and Atomic operations. :param dev_name: Device name to be used :param ib_port: IB port of the device to use :param gid_index: Which GID index to use + :param msg_size: Message size for RDMA operations. Ignored for + Atomic operations (always '8' in that case). """ self.access = e.IBV_ACCESS_LOCAL_WRITE | e.IBV_ACCESS_ON_DEMAND | \ - e.IBV_ACCESS_REMOTE_ATOMIC + e.IBV_ACCESS_REMOTE_ATOMIC | e.IBV_ACCESS_REMOTE_READ | \ + e.IBV_ACCESS_REMOTE_WRITE super().__init__(dev_name=dev_name, ib_port=ib_port, gid_index=gid_index) + self.msg_size = msg_size self.new_mr_lkey = None - @u.requires_odp('rc', e.IBV_ODP_SUPPORT_ATOMIC) + @u.requires_odp('rc', e.IBV_ODP_SUPPORT_ATOMIC | + e.IBV_ODP_SUPPORT_READ | e.IBV_ODP_SUPPORT_WRITE) def create_mr(self): self.mr = MR(self.pd, self.msg_size, self.access) @@ -130,9 +135,9 @@ def sync_remote_attr(self): Sync the MR remote attributes between the server and the client. """ self.server.rkey = self.client.mr.rkey - self.server.raddr = self.client.mr.buf + self.server.remote_addr = self.server.raddr = self.client.mr.buf self.client.rkey = self.server.mr.rkey - self.client.raddr = self.server.mr.buf + self.client.remote_addr = self.client.raddr = self.server.mr.buf def tearDown(self): if self.user_addr: @@ -144,17 +149,22 @@ def test_odp_rc_traffic(self): u.traffic(**self.traffic_args) def test_odp_rc_atomic_cmp_and_swp(self): - self.create_players(OdpRdmaRC) + self.create_players(OdpRdmaRC, msg_size=8) u.atomic_traffic(**self.traffic_args, send_op=e.IBV_WR_ATOMIC_CMP_AND_SWP) u.atomic_traffic(**self.traffic_args, receiver_val=1, sender_val=1, send_op=e.IBV_WR_ATOMIC_CMP_AND_SWP) def test_odp_rc_atomic_fetch_and_add(self): - self.create_players(OdpRdmaRC) + self.create_players(OdpRdmaRC, msg_size=8) u.atomic_traffic(**self.traffic_args, send_op=e.IBV_WR_ATOMIC_FETCH_AND_ADD) + def test_odp_rc_rdma_write_and_read(self): + self.create_players(OdpRdmaRC) + u.rdma_traffic(**self.traffic_args, send_op=e.IBV_WR_RDMA_WRITE) + u.rdma_traffic(**self.traffic_args, send_op=e.IBV_WR_RDMA_READ) + def test_odp_implicit_rc_traffic(self): self.create_players(OdpRC, is_implicit=True) u.traffic(**self.traffic_args)