def test_get_cores(self, lib): "Tests get_cores() method." cores_mock = [ctypes.c_uint(core) for core in [8, 7, 3]] cores_arr = ctypes_build_array(cores_mock) def pqos_cpu_get_cores_m(_p_cpu, socket, count_ref): "Mock pqos_cpu_get_cores()." self.assertEqual(socket, 0) ctypes_ref_set_int(count_ref, len(cores_arr)) return ctypes.cast(cores_arr, ctypes.POINTER(ctypes.c_uint)) lib.pqos_cap_get = MagicMock(return_value=0) lib.pqos_cpu_get_cores = MagicMock(side_effect=pqos_cpu_get_cores_m) cpu = PqosCpuInfo() with patch('pqos.cpuinfo.free_memory'): cores = cpu.get_cores(0) self.assertEqual(len(cores), 3) self.assertEqual(cores[0], 8) self.assertEqual(cores[1], 7) self.assertEqual(cores[2], 3) lib.pqos_cpu_get_cores.assert_called_once()
def build(self): "Builds CPU information and returns a pointer to that object." l2_cache_info = self.build_l2_cache_info() l3_cache_info = self.build_l3_cache_info() core_infos = self.build_core_infos() num_cores = len(core_infos) core_infos_size = num_cores * ctypes.sizeof(CPqosCoreInfo) cpuinfo_mem_size = ctypes.sizeof(CPqosCpuInfo) + core_infos_size self.buf = (ctypes.c_char * cpuinfo_mem_size)() cpuinfo = CPqosCpuInfo(mem_size=cpuinfo_mem_size, l2=l2_cache_info, l3=l3_cache_info, num_cores=num_cores) cpu_size = ctypes.sizeof(cpuinfo) cpuinfo_array = ctypes_build_array(core_infos) ctypes.memmove(self.buf, ctypes.addressof(cpuinfo), cpu_size) ctypes.memmove(ctypes.byref(self.buf, cpu_size), ctypes.addressof(cpuinfo_array), ctypes.sizeof(cpuinfo_array)) return ctypes.cast(ctypes.pointer(self.buf), ctypes.POINTER(type(cpuinfo)))
def test_get_sockets(self, lib): "Tests get_sockets() method." sockets_mock = [ctypes.c_uint(socket) for socket in [0, 1, 2, 3]] sockets_arr = ctypes_build_array(sockets_mock) def pqos_cpu_get_sockets_m(_p_cpu, count_ref): "Mock pqos_cpu_get_sockets()." ctypes_ref_set_int(count_ref, len(sockets_arr)) return ctypes.cast(sockets_arr, ctypes.POINTER(ctypes.c_uint)) lib.pqos_cap_get = MagicMock(return_value=0) lib.pqos_cpu_get_sockets = MagicMock(side_effect=pqos_cpu_get_sockets_m) cpu = PqosCpuInfo() with patch('pqos.cpuinfo.free_memory'): sockets = cpu.get_sockets() self.assertEqual(len(sockets), 4) self.assertEqual(sockets[0], 0) self.assertEqual(sockets[1], 1) self.assertEqual(sockets[2], 2) self.assertEqual(sockets[3], 3)
def test_get_l2ids(self, lib): "Tests get_l2ids() method." l2ids_mock = [ctypes.c_uint(l2id) for l2id in [7, 2, 3, 5]] l2ids_arr = ctypes_build_array(l2ids_mock) def pqos_cpu_get_l2ids_m(_p_cpu, count_ref): "Mock pqos_cpu_get_l2ids()." ctypes_ref_set_int(count_ref, len(l2ids_arr)) return ctypes.cast(l2ids_arr, ctypes.POINTER(ctypes.c_uint)) lib.pqos_cap_get = MagicMock(return_value=0) lib.pqos_cpu_get_l2ids = MagicMock(side_effect=pqos_cpu_get_l2ids_m) cpu = PqosCpuInfo() with patch('pqos.cpuinfo.free_memory'): l2ids = cpu.get_l2ids() self.assertEqual(len(l2ids), 4) self.assertEqual(l2ids[0], 7) self.assertEqual(l2ids[1], 2) self.assertEqual(l2ids[2], 3) self.assertEqual(l2ids[3], 5)
def test_get_pids(self, lib): "Tests get_pids() method." pids_uint = [ctypes.c_uint(pid) for pid in [1000, 1500, 3000, 5600]] pid_array = ctypes_build_array(pids_uint) def pqos_pid_get_pid_assoc_m(class_id, count_ref): "Mock pqos_pid_get_pid_assoc()." self.assertEqual(class_id, 7) ctypes_ref_set_uint(count_ref, len(pid_array)) return ctypes.cast(pid_array, ctypes.POINTER(ctypes.c_uint)) func_mock = MagicMock(side_effect=pqos_pid_get_pid_assoc_m) lib.pqos_pid_get_pid_assoc = func_mock alloc = PqosAlloc() with patch('pqos.allocation.free_memory'): pids = alloc.get_pids(7) lib.pqos_pid_get_pid_assoc.assert_called_once() self.assertEqual(len(pids), 4) self.assertEqual(pids[0], 1000) self.assertEqual(pids[1], 1500) self.assertEqual(pids[2], 3000) self.assertEqual(pids[3], 5600)
def test_get_pids(self, lib): "Tests get_pids() method." pids_uint = [ctypes.c_uint(pid) for pid in [1000, 1500, 3000, 5600]] pid_array = ctypes_build_array(pids_uint) def pqos_pid_get_pid_assoc_m(class_id, count_ref): "Mock pqos_pid_get_pid_assoc()." self.assertEqual(class_id, 7) ctypes_ref_set_uint(count_ref, len(pid_array)) return ctypes.cast(pid_array, ctypes.POINTER(ctypes.c_uint)) func_mock = MagicMock(side_effect=pqos_pid_get_pid_assoc_m) lib.pqos_pid_get_pid_assoc = func_mock alloc = PqosAlloc() with patch('pqos.allocation.free_memory'): pids = alloc.get_pids(7) lib.pqos_pid_get_pid_assoc.assert_called_once() self.assertEqual(len(pids), 4) self.assertEqual(pids[0], 1000) self.assertEqual(pids[1], 1500) self.assertEqual(pids[2], 3000) self.assertEqual(pids[3], 5600)
def build_capability_array(self): "Build capabilites array (ctypes array of CPqosCapability objects)." capabilities = [] if self.mon: mon_u = CPqosCapabilityUnion(mon=ctypes.pointer(self.mon)) mon_cap = CPqosCapability(type=CPqosCapability.PQOS_CAP_TYPE_MON, u=mon_u) capabilities.append(mon_cap) if self.l3ca: l3ca_u = CPqosCapabilityUnion(l3ca=ctypes.pointer(self.l3ca)) l3ca_cap = CPqosCapability(type=CPqosCapability.PQOS_CAP_TYPE_L3CA, u=l3ca_u) capabilities.append(l3ca_cap) if self.l2ca: l2ca_u = CPqosCapabilityUnion(l2ca=ctypes.pointer(self.l2ca)) l2ca_cap = CPqosCapability(type=CPqosCapability.PQOS_CAP_TYPE_L2CA, u=l2ca_u) capabilities.append(l2ca_cap) if self.mba: mba_u = CPqosCapabilityUnion(mba=ctypes.pointer(self.mba)) mba_cap = CPqosCapability(type=CPqosCapability.PQOS_CAP_TYPE_MBA, u=mba_u) capabilities.append(mba_cap) return ctypes_build_array(capabilities)
def build_capability_array(self): "Build capabilites array (ctypes array of CPqosCapability objects)." capabilities = [] if self.mon: mon_u = CPqosCapabilityUnion(mon=ctypes.pointer(self.mon)) mon_cap = CPqosCapability(type=CPqosCapability.PQOS_CAP_TYPE_MON, u=mon_u) capabilities.append(mon_cap) if self.l3ca: l3ca_u = CPqosCapabilityUnion(l3ca=ctypes.pointer(self.l3ca)) l3ca_cap = CPqosCapability(type=CPqosCapability.PQOS_CAP_TYPE_L3CA, u=l3ca_u) capabilities.append(l3ca_cap) if self.l2ca: l2ca_u = CPqosCapabilityUnion(l2ca=ctypes.pointer(self.l2ca)) l2ca_cap = CPqosCapability(type=CPqosCapability.PQOS_CAP_TYPE_L2CA, u=l2ca_u) capabilities.append(l2ca_cap) if self.mba: mba_u = CPqosCapabilityUnion(mba=ctypes.pointer(self.mba)) mba_cap = CPqosCapability(type=CPqosCapability.PQOS_CAP_TYPE_MBA, u=mba_u) capabilities.append(mba_cap) return ctypes_build_array(capabilities)
def build(self): "Builds CPU information and returns a pointer to that object." l2_cache_info = self.build_l2_cache_info() l3_cache_info = self.build_l3_cache_info() core_infos = self.build_core_infos() num_cores = len(core_infos) core_infos_size = num_cores * ctypes.sizeof(CPqosCoreInfo) cpuinfo_mem_size = ctypes.sizeof(CPqosCpuInfo) + core_infos_size self.buf = (ctypes.c_char * cpuinfo_mem_size)() cpuinfo = CPqosCpuInfo(mem_size=cpuinfo_mem_size, l2=l2_cache_info, l3=l3_cache_info, num_cores=num_cores) cpu_size = ctypes.sizeof(cpuinfo) cpuinfo_array = ctypes_build_array(core_infos) ctypes.memmove(self.buf, ctypes.addressof(cpuinfo), cpu_size) ctypes.memmove(ctypes.byref(self.buf, cpu_size), ctypes.addressof(cpuinfo_array), ctypes.sizeof(cpuinfo_array)) return ctypes.cast(ctypes.pointer(self.buf), ctypes.POINTER(type(cpuinfo)))
def test_get_cores(self, lib): "Tests get_cores() method." cores_mock = [ctypes.c_uint(core) for core in [8, 7, 3]] cores_arr = ctypes_build_array(cores_mock) def pqos_cpu_get_cores_m(_p_cpu, socket, count_ref): "Mock pqos_cpu_get_cores()." self.assertEqual(socket, 0) ctypes_ref_set_int(count_ref, len(cores_arr)) return ctypes.cast(cores_arr, ctypes.POINTER(ctypes.c_uint)) lib.pqos_cap_get = MagicMock(return_value=0) lib.pqos_cpu_get_cores = MagicMock(side_effect=pqos_cpu_get_cores_m) cpu = PqosCpuInfo() with patch('pqos.cpuinfo.free_memory'): cores = cpu.get_cores(0) self.assertEqual(len(cores), 3) self.assertEqual(cores[0], 8) self.assertEqual(cores[1], 7) self.assertEqual(cores[2], 3) lib.pqos_cpu_get_cores.assert_called_once()
def test_get_l2ids(self, lib): "Tests get_l2ids() method." l2ids_mock = [ctypes.c_uint(l2id) for l2id in [7, 2, 3, 5]] l2ids_arr = ctypes_build_array(l2ids_mock) def pqos_cpu_get_l2ids_m(_p_cpu, count_ref): "Mock pqos_cpu_get_l2ids()." ctypes_ref_set_int(count_ref, len(l2ids_arr)) return ctypes.cast(l2ids_arr, ctypes.POINTER(ctypes.c_uint)) lib.pqos_cap_get = MagicMock(return_value=0) lib.pqos_cpu_get_l2ids = MagicMock(side_effect=pqos_cpu_get_l2ids_m) cpu = PqosCpuInfo() with patch('pqos.cpuinfo.free_memory'): l2ids = cpu.get_l2ids() self.assertEqual(len(l2ids), 4) self.assertEqual(l2ids[0], 7) self.assertEqual(l2ids[1], 2) self.assertEqual(l2ids[2], 3) self.assertEqual(l2ids[3], 5)
def test_get_sockets(self, lib): "Tests get_sockets() method." sockets_mock = [ctypes.c_uint(socket) for socket in [0, 1, 2, 3]] sockets_arr = ctypes_build_array(sockets_mock) def pqos_cpu_get_sockets_m(_p_cpu, count_ref): "Mock pqos_cpu_get_sockets()." ctypes_ref_set_int(count_ref, len(sockets_arr)) return ctypes.cast(sockets_arr, ctypes.POINTER(ctypes.c_uint)) lib.pqos_cap_get = MagicMock(return_value=0) lib.pqos_cpu_get_sockets = MagicMock(side_effect=pqos_cpu_get_sockets_m) cpu = PqosCpuInfo() with patch('pqos.cpuinfo.free_memory'): sockets = cpu.get_sockets() self.assertEqual(len(sockets), 4) self.assertEqual(sockets[0], 0) self.assertEqual(sockets[1], 1) self.assertEqual(sockets[2], 2) self.assertEqual(sockets[3], 3)
def pqos_l3ca_get_mock(socket, cos_num, num_ca_ref, l3cas): "Mock pqos_l3ca_get()." self.assertEqual(socket, 1) self.assertEqual(cos_num, 2) cos_c = CPqosL3Ca(class_id=0, u=CPqosL3CaMask(ways_mask=0x01fe)) cos2_c = CPqosL3Ca(class_id=1, u=CPqosL3CaMask(ways_mask=0x003f)) cos_arr_c = ctypes_build_array([cos_c, cos2_c]) ctypes.memmove(l3cas, cos_arr_c, ctypes.sizeof(cos_arr_c)) ctypes_ref_set_int(num_ca_ref, len(cos_arr_c)) return 0