コード例 #1
0
 def _get_container_from_taskid(self, cid):
     if cid in self.container_map:
         container = self.container_map[cid]
     else:
         container = Container(cid)
         self.container_map[cid] = container
     return container
コード例 #2
0
    def _process_measurements(
        self,
        tasks_measurements: TasksMeasurements,
        tasks_labels: TasksLabels,
        metric_list: List[WCAMetric],
        timestamp: float,
        assigned_cpus: float,
        cpu_model: str
    ):
        sysutil = 0
        lcutil = 0
        beutil = 0
        for cid, measurements in tasks_measurements.items():
            app = self._cid_to_app(cid, tasks_labels)
            if cid in self.container_map:
                container = self.container_map[cid]
            else:
                container = Container(cid)
                self.container_map[cid] = container
                if self.enable_control:
                    if cid in self.bes:
                        self.cpuc.set_share(cid, 0.0)
                        self.cpuc.budgeting([cid], [])
                        self.l3c.budgeting([cid], [])
                        if self.mbc_enabled:
                            self.mbc.budgeting([cid], [])
                    else:
                        self.cpuc.set_share(cid, 1.0)
                        if self.exclusive_cat:
                            self.l3c.budgeting([], [cid])

            container.update_measurement(timestamp, measurements, self.agg)
            if cid not in self.bes:
                lcutil += container.util
            else:
                beutil += container.util
            sysutil += container.util
            if self.agg:
                metrics = container.get_metrics()
                log.debug('cid=%r container metrics=%r', cid, metrics)
                if metrics and app:
                    vcpus = self.workload_meta[app]['cpus']
                    wca_metrics = container.get_wca_metrics(app, vcpus)
                    metric_list.extend(wca_metrics)
                    # always try to init header column considering log rotate
                    self._init_data_file(self.metric_file, self.mcols)
                    self._record_metrics(timestamp, cid, app,
                                         correct_key_characters(cpu_model),
                                         vcpus, metrics)

        metric_list.extend(self._get_headroom_metrics(assigned_cpus, lcutil, sysutil))
        if self.enable_control and self.bes:
            exceed, hold = self.cpuc.detect_margin_exceed(lcutil, beutil)
            self.controllers[ContendedResource.CPUS].update(self.bes, [], exceed, hold)
コード例 #3
0
    def _process_measurements(self, tasks_measurements: TasksMeasurements,
                              tasks_labels: TasksLabels,
                              metric_list: List[WCAMetric], timestamp: float,
                              assigned_cpus: float):

        sysutil = 0
        lcutil = 0
        beutil = 0
        for cid, measurements in tasks_measurements.items():
            app = self._cid_to_app(cid, tasks_labels)
            if cid in self.container_map:
                container = self.container_map[cid]
            else:
                container = Container(cid)
                self.container_map[cid] = container
                if self.mode_config == ResourceAllocator.DETECT_MODE:
                    if cid in self.bes:
                        self.cpuc.set_share(cid, 0.0)
                        self.cpuc.budgeting([cid], [])
                        self.l3c.budgeting([cid], [])
                        if self.mbc_enabled:
                            self.mbc.budgeting([cid], [])
                    else:
                        self.cpuc.set_share(cid, 1.0)
                        if self.exclusive_cat:
                            self.l3c.budgeting([], [cid])

            container.update_measurement(timestamp, measurements, self.agg)
            if cid not in self.bes:
                lcutil += container.util
            else:
                beutil += container.util
            sysutil += container.util
            if self.agg:
                metrics = container.get_metrics()
                log.debug('cid=%r container metrics=%r', cid, metrics)
                if metrics:
                    wca_metrics = container.get_wca_metrics(app)
                    metric_list.extend(wca_metrics)
                    if self.mode_config == ResourceAllocator.COLLECT_MODE:
                        app = self._cid_to_app(cid, tasks_labels)
                        if app:
                            self._record_metrics(timestamp, cid, app, metrics)

        if self.mode_config == ResourceAllocator.COLLECT_MODE:
            self._record_utils(timestamp, lcutil)
        elif self.mode_config == ResourceAllocator.DETECT_MODE:
            metric_list.extend(
                self._get_headroom_metrics(assigned_cpus, lcutil, sysutil))
            if self.bes:
                exceed, hold = self.cpuc.detect_margin_exceed(lcutil, beutil)
                self.controllers[ContendedResource.CPUS].update(
                    self.bes, [], exceed, hold)