| import unittest | |
| from pyverbs.pyverbs_error import PyverbsRDMAError | |
| from tests.mlx5_base import Mlx5PyverbsAPITestCase | |
| from pyverbs.qp import QP, QPInitAttr, QPCap | |
| from pyverbs.srq import SRQ, SrqInitAttr | |
| from pyverbs.pd import PD | |
| from pyverbs.cq import CQ | |
| import tests.utils as u | |
| def huge_pages_supported(): | |
| try: | |
| u.huge_pages_supported() | |
| except unittest.SkipTest: | |
| return False | |
| return True | |
| class ResourcesOnHugePageTest(Mlx5PyverbsAPITestCase): | |
| def create_cq(self): | |
| return CQ(self.ctx, 100, None, None, 0) | |
| def create_qp(self): | |
| with PD(self.ctx) as pd: | |
| with self.create_cq() as cq: | |
| attr = QPInitAttr(scq=cq, rcq=cq, cap=QPCap(max_recv_wr=100, | |
| max_send_wr=100)) | |
| QP(pd, attr) | |
| def create_srq(self): | |
| with PD(self.ctx) as pd: | |
| SRQ(pd, SrqInitAttr()) | |
| def set_env_alloc_type(self, alloc_type): | |
| self.set_env_variable('MLX_CQ_ALLOC_TYPE', alloc_type) | |
| self.set_env_variable('MLX_QP_ALLOC_TYPE', alloc_type) | |
| self.set_env_variable('MLX_SRQ_ALLOC_TYPE', alloc_type) | |
| def create_objects(self): | |
| self.create_cq() | |
| self.create_qp() | |
| self.create_srq() | |
| def test_prefer_obj_on_huge(self): | |
| """ | |
| Test PREFER_HUGE allocation type for srq cq and qp. | |
| """ | |
| self.set_env_alloc_type('PREFER_HUGE') | |
| self.create_objects() | |
| def test_obj_on_huge(self): | |
| """ | |
| Test HUGE allocation type for srq cq and qp. | |
| If there are huge pages in the system expect to success, | |
| else expect to fail. | |
| """ | |
| self.set_env_alloc_type('HUGE') | |
| if huge_pages_supported() and u.is_root(): | |
| self.create_objects() | |
| else: | |
| with self.assertRaises(PyverbsRDMAError): | |
| self.create_objects() |