def test_set(self, lib): "Tests set() method." def pqos_mba_set_mock(socket, num_cos, cos_arr, actual_arr): "Mock pqos_mba_set()." self.assertEqual(socket, 0) self.assertEqual(num_cos, 1) self.assertEqual(len(cos_arr), num_cos) self.assertEqual(len(actual_arr), num_cos) self.assertEqual(cos_arr[0].class_id, 1) self.assertEqual(cos_arr[0].mb_max, 40) self.assertEqual(cos_arr[0].ctrl, 0) actual_arr[0].class_id = cos_arr[0].class_id actual_arr[0].mb_max = 50 actual_arr[0].ctrl = cos_arr[0].ctrl return 0 lib.pqos_mba_set = MagicMock(side_effect=pqos_mba_set_mock) mba = PqosMba() cos = mba.COS(1, 40) actual = mba.set(0, [cos]) self.assertEqual(len(actual), 1) self.assertEqual(actual[0].class_id, 1) self.assertEqual(actual[0].mb_max, 50) self.assertEqual(actual[0].ctrl, 0) lib.pqos_mba_set.assert_called_once()
def init(self, iface, force_iface=False): """ Initializes libpqos Returns: 0 on success -1 otherwise """ if not force_iface and not iface in self.supported_iface(): log.error("RDT does not support '%s' interface!" % (iface)) return -1 # deinitialize lib first if self.shared_dict['current_iface']: self.fini() # umount restcrl to improve caps detection if platform.system() == 'FreeBSD': result = os.system( "/sbin/umount -a -t resctrl") # nosec - string literal else: result = os.system( "/bin/umount -a -t resctrl") # nosec - string literal if result: log.error("Failed to umount resctrl fs! status code: %d"\ % (os.WEXITSTATUS(result))) return -1 # attempt to initialize libpqos try: self.pqos.init(iface.upper()) self.cap = PqosCap() self.l3ca = PqosCatL3() self.mba = PqosMba() self.alloc = PqosAlloc() self.cpuinfo = PqosCpuInfo() except Exception as ex: log.error(str(ex)) return -1 # save current interface type in shared dict self.shared_dict['current_iface'] = iface # Reread MBA BW status from libpqos self.refresh_mba_bw_status() return 0
def test_get(self, lib): "Tests get() method." def pqos_mba_cos_num_mock(_p_cap, num_cos_ref): "Mock pqos_mba_get_cos_num()." ctypes_ref_set_int(num_cos_ref, 2) return 0 def pqos_mba_get_mock(socket, max_num_cos, num_cos_ref, cos_arr): "Mock pqos_mba_get()." self.assertEqual(socket, 1) self.assertEqual(max_num_cos, 2) self.assertEqual(len(cos_arr), max_num_cos) ctypes_ref_set_int(num_cos_ref, 2) cos_arr[0].class_id = 0 cos_arr[0].mb_max = 4000 cos_arr[0].ctrl = 1 cos_arr[1].class_id = 1 cos_arr[1].mb_max = 8000 cos_arr[1].ctrl = 1 return 0 lib.pqos_cap_get = MagicMock(return_value=0) lib.pqos_mba_get_cos_num = MagicMock(side_effect=pqos_mba_cos_num_mock) lib.pqos_mba_get = MagicMock(side_effect=pqos_mba_get_mock) mba = PqosMba() coses = mba.get(1) self.assertEqual(len(coses), 2) self.assertEqual(coses[0].class_id, 0) self.assertEqual(coses[0].mb_max, 4000) self.assertTrue(coses[0].ctrl) self.assertEqual(coses[1].class_id, 1) self.assertEqual(coses[1].mb_max, 8000) self.assertTrue(coses[1].ctrl) lib.pqos_mba_get.assert_called_once() lib.pqos_mba_get_cos_num.assert_called_once()
def set_allocation_class(sockets, class_id, mb_max): """ Sets up allocation classes of service on selected CPU sockets Parameters: sockets: array with socket IDs class_id: class of service ID mb_max: COS rate in percent """ mba = PqosMba() cos = mba.COS(class_id, mb_max) for socket in sockets: try: actual = mba.set(socket, [cos]) params = (socket, class_id, mb_max, actual[0].mb_max) print("SKT%u: MBA COS%u => %u%% requested, %u%% applied" % params) except: print("Setting up cache allocation class of service failed!")
def init(self): """ Initializes libpqos Returns: 0 on success -1 otherwise """ try: self.pqos.init('MSR') self.cap = PqosCap() self.l3ca = PqosCatL3() self.mba = PqosMba() self.alloc = PqosAlloc() self.cpuinfo = PqosCpuInfo() except Exception as ex: log.error(str(ex)) return -1 return 0
def print_allocation_config(sockets): """ Prints allocation configuration. Parameters: sockets: array with socket IDs """ mba = PqosMba() for socket in sockets: try: coses = mba.get(socket) print("MBA COS definitions for Socket %u:" % socket) for cos in coses: cos_params = (cos.class_id, cos.mb_max) print(" MBA COS%u => %u%% available" % cos_params) except: print("Error") raise
pqos = Pqos() pqos.init('OS') # Check if MBA is supported cap = PqosCap() mba_supported = False try: cap.get_type('mba') mba_supported = True except: pass print('Is MBA supported? %s' % ('Yes' if mba_supported else 'No')) if mba_supported: mba = PqosMba() # Get MBA configuration for socket 0 coses = mba.get(0) print('MBA configuration for socket 0:') for cos in coses: print('COS: %d' % cos.class_id) print('MB max: %d' % cos.mb_max) print('CTRL: %s' % cos.ctrl) print('') # Configure MBA, 50% of available bandwidth for COS 0 cos = mba.COS(0, 50) # Apply for socket 0 actual = mba.set(0, [cos])