def test_allocators_that_are_none(self): with self.assertRaises(ValueError): FallbackCpuAllocator(GreedyCpuAllocator(), None) with self.assertRaises(ValueError): FallbackCpuAllocator(None, GreedyCpuAllocator()) with self.assertRaises(ValueError): FallbackCpuAllocator(None, None)
def test_ip_fallback(self): w_a = get_test_workload("a", 3, STATIC) w_b = get_test_workload("b", 2, STATIC) w_c = get_test_workload("c", 1, STATIC) w_d = get_test_workload("d", 2, STATIC) cpu = get_cpu(package_count=2, cores_per_package=2, threads_per_core=2) allocator = FallbackCpuAllocator(CrashingAllocator(), IntegerProgramCpuAllocator()) request = get_no_usage_threads_request(cpu, [w_a]) cpu = allocator.assign_threads(request).get_cpu() request = get_no_usage_threads_request(cpu, [w_a, w_b]) cpu = allocator.assign_threads(request).get_cpu() request = get_no_usage_threads_request(cpu, [w_b, w_a]) cpu = allocator.free_threads(request).get_cpu() request = get_no_usage_threads_request(cpu, [w_b, w_c]) cpu = allocator.assign_threads(request).get_cpu() request = get_no_usage_threads_request(cpu, [w_c, w_b]) cpu = allocator.free_threads(request).get_cpu() request = get_no_usage_threads_request(cpu, [w_c, w_d]) cpu = allocator.assign_threads(request).get_cpu() self.assertEqual(3, len(cpu.get_claimed_threads())) self.assertEqual(6, allocator.get_fallback_allocator_calls_count())
def get_fallback_allocator(config_manager) -> FallbackCpuAllocator: primary_alloc_str = config_manager.get_str(CPU_ALLOCATOR) secondary_alloc_str = config_manager.get_str(FALLBACK_ALLOCATOR, DEFAULT_FALLBACK_ALLOCATOR) primary_allocator = get_allocator(primary_alloc_str, config_manager) secondary_allocator = get_allocator(secondary_alloc_str, config_manager) return FallbackCpuAllocator(primary_allocator, secondary_allocator)
def test_ip_fallback(self): w_a = get_test_workload("a", 3, STATIC) w_b = get_test_workload("b", 2, STATIC) w_c = get_test_workload("c", 1, STATIC) w_d = get_test_workload("d", 2, STATIC) cpu = get_cpu(package_count=2, cores_per_package=2, threads_per_core=2) allocator = FallbackCpuAllocator(CrashingAllocator(), IntegerProgramCpuAllocator()) workloads = {} workloads[w_a.get_id()] = w_a request = AllocateThreadsRequest(cpu, w_a.get_id(), workloads, {}, DEFAULT_TEST_REQUEST_METADATA) cpu = allocator.assign_threads(request).get_cpu() workloads[w_b.get_id()] = w_b request = AllocateThreadsRequest(cpu, w_b.get_id(), workloads, {}, DEFAULT_TEST_REQUEST_METADATA) cpu = allocator.assign_threads(request).get_cpu() request = AllocateThreadsRequest(cpu, "a", workloads, {}, DEFAULT_TEST_REQUEST_METADATA) cpu = allocator.free_threads(request).get_cpu() workloads.pop("a") workloads[w_c.get_id()] = w_c request = AllocateThreadsRequest(cpu, w_c.get_id(), workloads, {}, DEFAULT_TEST_REQUEST_METADATA) cpu = allocator.assign_threads(request).get_cpu() request = AllocateThreadsRequest(cpu, "b", workloads, {}, DEFAULT_TEST_REQUEST_METADATA) cpu = allocator.free_threads(request).get_cpu() workloads.pop("b") workloads[w_d.get_id()] = w_d request = AllocateThreadsRequest(cpu, w_d.get_id(), workloads, {}, DEFAULT_TEST_REQUEST_METADATA) cpu = allocator.assign_threads(request).get_cpu() self.assertEqual(3, len(cpu.get_claimed_threads())) self.assertEqual(6, allocator.get_fallback_allocator_calls_count())