示例#1
0
    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()
示例#2
0
    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)))
示例#3
0
    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)
示例#4
0
    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)
示例#5
0
    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)
示例#6
0
    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)
示例#7
0
    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)
示例#8
0
    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)
示例#9
0
    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)))
示例#10
0
    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()
示例#11
0
    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)
示例#12
0
    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)
示例#13
0
        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