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()