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
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)
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)