Example #1
0
    def test_no_updates_single_new_workload(self):
        workload_id = str(uuid.uuid4())

        cur_cpu = get_cpu()
        new_cpu = get_cpu()

        # Assign a workload to thread 0 on both CPUs
        cur_cpu.get_threads()[0].claim(workload_id)
        new_cpu.get_threads()[0].claim(workload_id)

        updates = get_updates(cur_cpu, new_cpu)
        self.assertEqual(0, len(updates))
Example #2
0
    def test_get_updates_single_moved_workload(self):
        workload_id = str(uuid.uuid4())

        cur_cpu = get_cpu()
        new_cpu = get_cpu()

        # Migrate from thread 0 to thread 1 (processor_id 8)
        cur_cpu.get_threads()[0].claim(workload_id)
        new_cpu.get_threads()[1].claim(workload_id)

        updates = get_updates(cur_cpu, new_cpu)
        self.assertEqual(1, len(updates))
        self.assertEqual(updates[workload_id], [8])
Example #3
0
    def test_get_updates_single_new_workload(self):
        workload_id = str(uuid.uuid4())

        # Empty CPU to start
        cur_cpu = get_cpu()

        # Assign a workload to thread 0 on the new CPU
        new_cpu = get_cpu()
        new_cpu.get_threads()[0].claim(workload_id)

        updates = get_updates(cur_cpu, new_cpu)
        self.assertEqual(1, len(updates))
        self.assertEqual(updates[workload_id], [0])
    def __add_workload(self, workload):
        log.info("Adding workload: {}".format(workload.get_id()))

        workload_id = workload.get_id()
        self.__workloads[workload_id] = workload

        allocator = self.__cpu_allocator
        if workload.get_type() == STATIC:
            current_cpu = copy.deepcopy(self.get_cpu())
            allocator = self.__call_allocator('assign_threads', workload)
            updates = get_updates(current_cpu, allocator.get_cpu())
            log.info("Found footprint updates: '{}'".format(updates))
            self.__update_static_cpusets(updates)

        if workload.get_type() == BURST:
            self.__cgroup_manager.set_cpuset(workload.get_id(), self.__get_empty_thread_ids())

        self.__cpu = allocator.get_cpu()
        self.__update_burst_cpusets()

        log.info("Added workload: {}".format(workload.get_id()))
        self.__added_count += 1
 def __apply_cpuset_updates(self, old_cpu, new_cpu):
     updates = get_updates(old_cpu, new_cpu)
     for workload_id, thread_ids in updates.items():
         log.info("updating workload: '{}' to '{}'".format(workload_id, thread_ids))
         self.__cgroup_manager.set_cpuset(workload_id, thread_ids)