def test_one_rxq(self): # retrieve pmd object. pmd = self.pmd_map[self.core_id] # one dummy port is required for this test. port_name = 'virtport' # create port class of name 'virtport'. dataif.make_dataif_port(port_name) # add port object into pmd. fx_port = pmd.add_port(port_name) fx_port.numa_id = pmd.numa_id # add a dummy rxq into port. fx_rxq = fx_port.add_rxq(0) # add some cpu consumption for this rxq. for i in range(0, config.ncd_samples_max): fx_rxq.cpu_cyc[i] = (1000 + (100 * i)) dataif.update_pmd_load(self.pmd_map) variance_value = dataif.pmd_load_variance(self.pmd_map) self.assertEqual(variance_value, 0) # del port object from pmd. pmd.del_port(port_name)
def test_one_rxq_rnuma(self): # set different numa for pmds pmd1 = self.pmd_map[self.core1_id] pmd2 = self.pmd_map[self.core2_id] pmd1.numa_id = 0 pmd2.numa_id = 1 fx_2pmd_for_1rxq_each(self) dataif.update_pmd_load(self.pmd_map) variance_value = dataif.pmd_load_variance(self.pmd_map) self.assertEqual(int(variance_value), 17) pmd1.del_port('virtport1') pmd2.del_port('virtport2')
def test_one_rxq_lnuma(self): # set different numa for pmds pmd1 = self.pmd_map[self.core1_id] pmd2 = self.pmd_map[self.core2_id] pmd1.numa_id = 0 pmd2.numa_id = 0 fx_2pmd_for_1rxq_each(self) dataif.update_pmd_load(self.pmd_map) variance_value = dataif.pmd_load_variance(self.pmd_map) self.assertEqual(int(variance_value), 17) # del port object from pmd. # TODO: create fx_ post deletion routine for clean up pmd1.del_port('virtport1') pmd2.del_port('virtport2')
def test_two_rxq_lnuma(self, mock_open): mock_open.side_effect = [ mock.mock_open(read_data=_FX_CPU_INFO).return_value ] # set different numa for pmds pmd1 = self.pmd_map[self.core1_id] pmd2 = self.pmd_map[self.core2_id] pmd1.numa_id = 0 pmd2.numa_id = 0 fx_1pmd_for_2rxq(self) dataif.update_pmd_load(self.pmd_map) variance_value = dataif.pmd_load_variance(self.pmd_map) self.assertEqual(int(variance_value), 17) # del port object from pmd. # TODO: create fx_ post deletion routine for clean up pmd1.del_port('virtport1') pmd1.del_port('virtport2')
def collect_data(n_samples, s_sampling): """ Collect various stats and rxqs mapping of every pmd in the vswitch. Parameters ---------- n_samples : int number of samples s_sampling: int sampling interval """ ctx = dataif.Context rctx = RebalContext # collect samples of pmd and rxq stats. idx_max = n_samples idx_gen = (o for o in range(0, idx_max)) while True: try: next(idx_gen) except StopIteration: break try: dataif.get_port_stats() dataif.get_interface_stats() dataif.get_pmd_stats(ctx.pmd_map) dataif.get_pmd_rxqs(ctx.pmd_map) except (error.OsCommandExc, error.ObjCreateExc, error.ObjConsistencyExc, error.ObjParseExc, error.ObjModelExc) as e: # report error event now = datetime.now() now_ts = now.strftime("%Y-%m-%d %H:%M:%S") if isinstance(e, error.OsCommandExc): nlog.warn("unable to collect data: %s" % e) ctx.events.append(("switch", "error", now_ts)) raise error.NcdShutdownExc elif isinstance(e, error.ObjCreateExc): nlog.warn("unable to create object: %s" % e) ctx.events.append(("ncd", "error", now_ts)) raise error.NcdShutdownExc elif isinstance(e, error.ObjConsistencyExc): nlog.warn("inconsistency in collected data: %s" % e) ctx.events.append(("ncd", "error", now_ts)) raise error.NcdShutdownExc elif isinstance(e, error.ObjModelExc): nlog.warn("switch states changed: %s" % e) ctx.events.append(("ncd", "retry_model", now_ts)) # reset collected data ctx.pmd_map.clear() ctx.port_to_cls.clear() ctx.port_to_id.clear() # restart iterations idx_gen.close() idx_max = config.ncd_samples_max idx_gen = (o for o in range(0, idx_max)) continue elif isinstance(e, error.ObjParseExc): nlog.warn("unable to parse info: %s" % e) ctx.events.append(("ncd", "retry_parse", now_ts)) # reset collected data ctx.pmd_map.clear() ctx.port_to_cls.clear() ctx.port_to_id.clear() # restart iterations idx_gen.close() idx_max = config.ncd_samples_max idx_gen = (o for o in range(0, idx_max)) time.sleep(s_sampling) continue else: nlog.error("unhandled exception: %s" % e) ctx.events.append(("ncd", "exception", now_ts)) raise error.NcdShutdownExc time.sleep(s_sampling) now = datetime.now() ctx.last_ts = now.strftime("%Y-%m-%d %H:%M:%S") dataif.update_pmd_load(ctx.pmd_map) rctx.rebal_tick += n_samples return ctx