File: test_srq.py

package info (click to toggle)
rdma-core 61.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 13,124 kB
  • sloc: ansic: 176,798; python: 15,496; sh: 2,742; perl: 1,465; makefile: 73
file content (62 lines) | stat: -rw-r--r-- 2,693 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import unittest

from tests.base import RCResources, RDMATestCase
from pyverbs.srq import SrqAttr
from pyverbs.libibverbs_enums import ibv_device_cap_flags, ibv_srq_attr_mask, ibv_event_type
import tests.utils as u


class SrqTestCase(RDMATestCase):
    def setUp(self):
        super().setUp()
        self.iters = 100
        self.create_players(RCResources, qp_count=2, with_srq=True)

    def test_rc_srq_traffic(self):
        """
        Test RC traffic with SRQ.
        """
        u.traffic(**self.traffic_args)

    def test_resize_srq(self):
        """
        Test modify_srq with IBV_SRQ_MAX_WR which allows to modify max_wr.
        Once modified, query the SRQ and verify that the new value is greater
        or equal than the requested max_wr.
        """
        device_attr = self.server.ctx.query_device()
        if not device_attr.device_cap_flags & ibv_device_cap_flags.IBV_DEVICE_SRQ_RESIZE:
            raise unittest.SkipTest('SRQ resize is not supported')
        srq_query_attr = self.server.srq.query()
        srq_query_max_wr = srq_query_attr.max_wr
        srq_max_wr = min(device_attr.max_srq_wr, srq_query_max_wr*2)
        srq_attr = SrqAttr(max_wr=srq_max_wr)
        self.server.srq.modify(srq_attr, ibv_srq_attr_mask.IBV_SRQ_MAX_WR)
        srq_attr_modified = self.server.srq.query()
        self.assertGreaterEqual(srq_attr_modified.max_wr, srq_attr.max_wr,
                                'Resize SRQ failed')

    def test_modify_srq_limit(self):
        """
        Test IBV_SRQ_LIMIT modification.
        Add 10 wr to the SRQ and set the limit to 7,
        Query and verify that the SRQ limit changed to the expected value.
        send 4 packets from the client to the server, only 6 wr remain in the
        server SRQ so IBV_EVENT_SRQ_LIMIT_REACHED should be generated.
        Listen for income event and if one received check if it's equal to
        IBV_EVENT_SRQ_LIMIT_REACHED else fail.
        """
        for _ in range(10):
            self.server.srq.post_recv(u.get_recv_wr(self.server))
        srq_modify_attr = SrqAttr(srq_limit=7)
        self.server.srq.modify(srq_modify_attr, ibv_srq_attr_mask.IBV_SRQ_LIMIT)
        server_query = self.server.srq.query()
        self.assertEqual(srq_modify_attr.srq_limit, server_query.srq_limit, 'Modify SRQ failed')
        for _ in range(4):
            c_send_wr, c_sg = u.get_send_elements(self.client, False)
            u.send(self.client, c_send_wr)
            u.poll_cq(self.client.cq)
            u.poll_cq(self.server.cq)
        event = self.server.ctx.get_async_event()
        event.ack()
        self.assertEqual(event.event_type, ibv_event_type.IBV_EVENT_SRQ_LIMIT_REACHED)