예제 #1
0
 def predict(self, workload: Workload,
             cpu_usage_last_hour: np.array,
             pred_env: PredEnvironment) -> float:
     if workload.get_id() == 'static_a':
         return workload.get_thread_count() * 0.8
     elif workload.get_id() == 'static_b':
         return workload.get_thread_count() * 0.01
     elif workload.get_id() == 'burst_c':
         return workload.get_thread_count() * 0.9
예제 #2
0
    def predict(self, workload: Workload, cpu_usage_last_hour: np.array, pred_env: PredEnvironment) -> float:
        image = workload.get_image()
        tokens = image.split('@')
        valid_digest = False
        if cpu_usage_last_hour is None:
            cpu_usage_last_hour = np.full((60,), np.nan, dtype=np.float32)
        image_name = None
        if len(tokens) == 2 and tokens[-1].startswith("sha256:"):
            m = self._img_name_regex.search(tokens[0])
            if m is not None:
                valid_digest = True
                image_name = m.groups(0)[0]
                entry_point = workload.get_entrypoint()[:1000]
                if entry_point is None:
                    entry_point = ""
                filter_key = "%s@%s" % (tokens[-1], entry_point)
        if self.__use_whitelist and valid_digest and (filter_key not in self.__model.filter):
            # not in whitelist, predict without context features
            q = Query2(
                None, # image_name
                None, # user
                None, # app_name
                workload.get_thread_count(),
                None, # ram_requested
                None, # disk_requested
                None, # network_requested
                None, # job_type
                None, # region
                None, # env
                None, # hour of day
                build_ts_features(cpu_usage_last_hour)
            )
        else:
            q = Query2(
                image_name,
                workload.get_owner_email(),
                workload.get_app_name(),
                workload.get_thread_count(),
                workload.get_mem(),
                workload.get_disk(),
                workload.get_network(),
                workload.get_job_type().lower(),
                pred_env.region,
                pred_env.nflx_env,
                pred_env.hour_of_day,
                build_ts_features(cpu_usage_last_hour)
            )

        return min(self.__model.ml_model.predict_single(q), workload.get_thread_count())
예제 #3
0
    def test_construction(self):
        identifier = uuid.uuid4()
        thread_count = 2
        workload_type = STATIC

        w = Workload(identifier, thread_count, workload_type)
        self.assertEqual(identifier, w.get_id())
        self.assertEqual(thread_count, w.get_thread_count())
        self.assertEqual(workload_type, w.get_type())
예제 #4
0
    def test_free_cpu(self):
        for allocator_class in ALLOCATORS:
            cpu = get_cpu()
            allocator = allocator_class(cpu)
            self.assertEqual(DEFAULT_TOTAL_THREAD_COUNT, len(cpu.get_empty_threads()))

            w = Workload(uuid.uuid4(), 3, STATIC)
            allocator.assign_threads(w)
            self.assertEqual(
                DEFAULT_TOTAL_THREAD_COUNT - w.get_thread_count(),
                len(cpu.get_empty_threads()))

            allocator.free_threads(w.get_id())
            self.assertEqual(DEFAULT_TOTAL_THREAD_COUNT, len(cpu.get_empty_threads()))
예제 #5
0
 def predict(self, workload: Workload, cpu_usage_last_hour: np.array,
             pred_env: PredEnvironment) -> float:
     return workload.get_thread_count() * self.__constant_percent_busy / 100
예제 #6
0
def _occupies_entire_cpu(workload: Workload, cpu: Cpu):
    return len(cpu.get_threads()) == workload.get_thread_count()