def get(): """ Handles GET /caps/mba request. Returns: response, status code """ res = { 'mba_enabled': not caps.mba_bw_enabled(), 'mba_bw_enabled': caps.mba_bw_enabled() } return res, 200
def configure(self): """ Configure Pool, based on config content. """ config = common.CONFIG_STORE cores = config.get_pool_attr('cores', self.pool) self.cores_set(cores) if caps.cat_l3_supported(): cbm = config.get_pool_attr('cbm', self.pool) self.cbm_set(cbm) if caps.mba_supported(): if caps.mba_bw_enabled(): self.mba_bw_set(config.get_pool_attr('mba_bw', self.pool)) else: self.mba_set(config.get_pool_attr('mba', self.pool)) apps = config.get_pool_attr('apps', self.pool) if apps is not None: pids = [] for app in apps: app_pids = config.get_app_attr('pids', app) if app_pids: pids.extend(app_pids) self.pids_set(pids) return Pool.apply(self.pool)
def add_default_pool(data): """ Update config with "Default" pool """ # no Default pool configured default_pool = {} default_pool['id'] = 0 if caps.mba_supported(): if caps.mba_bw_enabled(): default_pool['mba_bw'] = 2**32 - 1 else: default_pool['mba'] = 100 if caps.cat_l3_supported(): default_pool['cbm'] = common.PQOS_API.get_max_l3_cat_cbm() default_pool['name'] = "Default" # Use all unallocated cores default_pool['cores'] = common.PQOS_API.get_cores() for pool in data['pools']: default_pool['cores'] = \ [core for core in default_pool['cores'] if core not in pool['cores']] data['pools'].append(default_pool)
def check_alloc_tech(pool_id, json_data): if 'cbm' in json_data: if not caps.cat_l3_supported(): raise BadRequest("System does not support CAT!") if pool_id > common.PQOS_API.get_max_cos_id([common.CAT_L3_CAP]): raise BadRequest("Pool {} does not support CAT".format(pool_id)) if 'mba' in json_data or 'mba_bw' in json_data: if not caps.mba_supported(): raise BadRequest("System does not support MBA!") if pool_id > common.PQOS_API.get_max_cos_id([common.MBA_CAP]): raise BadRequest("Pool {} does not support MBA".format(pool_id)) if 'mba_bw' in json_data and not caps.mba_bw_enabled(): raise BadRequest("MBA CTRL is not {}!"\ .format("enabled" if caps.mba_bw_supported() else "supported")) if 'mba' in json_data and caps.mba_bw_enabled(): raise BadRequest("MBA RATE is disabled! Disable MBA CTRL and try again.")
def get(): """ Handles HTTP /caps/mba_ctrl request. Retrieve MBA CTRL capability and current state details Returns: response, status code """ res = { 'supported': caps.mba_bw_supported(), 'enabled': caps.mba_bw_enabled() } return res, 200
def _validate_rdt(data): """ Validate RDT configuration (including MBA CTRL) configuration Parameters data: configuration (dict) """ if 'mba_ctrl' in data and data['mba_ctrl']['enabled']\ and (not 'rdt_iface' in data or data['rdt_iface']['interface'] != "os"): raise ValueError( "RDT Configuration. MBA CTRL requires RDT OS interface!") if not 'pools' in data: return mba_pool_ids = [] mba_bw_pool_ids = [] for pool in data['pools']: if 'cbm' in pool: result = re.search('1{1,32}0{1,32}1{1,32}', bin(pool['cbm'])) if result or pool['cbm'] == 0: raise ValueError("Pool {}, CBM {}/{} is not contiguous."\ .format(pool['id'], hex(pool['cbm']), bin(pool['cbm']))) if not caps.cat_supported(): raise ValueError("Pool {}, CBM {}/{}, CAT is not supported."\ .format(pool['id'], hex(pool['cbm']), bin(pool['cbm']))) if 'mba' in pool: mba_pool_ids.append(pool['id']) if 'mba_bw' in pool: mba_bw_pool_ids.append(pool['id']) if mba_bw_pool_ids and mba_pool_ids: raise ValueError("It is not allowed to mix MBA (Pools: {}) "\ "and MBA BW (Pools {}), configurations."\ .format(mba_pool_ids, mba_bw_pool_ids)) if (mba_pool_ids or mba_bw_pool_ids) and not caps.mba_supported(): raise ValueError("Pools {}, MBA is not supported."\ .format(mba_pool_ids + mba_bw_pool_ids)) if mba_bw_pool_ids and not caps.mba_bw_enabled(): raise ValueError("Pools {}, MBA BW is not enabled/supported."\ .format(mba_bw_pool_ids)) return