diff options
author | Yaroslav Brustinov <ybrustin@cisco.com> | 2016-05-03 04:28:08 +0300 |
---|---|---|
committer | Yaroslav Brustinov <ybrustin@cisco.com> | 2016-05-03 04:28:08 +0300 |
commit | 7007bf04481b76b51e30d42148df710bccc9aa35 (patch) | |
tree | 3147ab3243ce6e1f3dd33be1b8f9da7786125c54 /scripts/automation | |
parent | c227a2fff3e815c38cff89630e22c3b8485c32de (diff) |
bp_sim: correct description of supported stateful layers
main_dpdk: send bw_per_core with json, return back precision of low values
jsonrpcserver: disable logging
regression: use bw_per_core from cpp calculation
correct test name for GA
Diffstat (limited to 'scripts/automation')
12 files changed, 105 insertions, 114 deletions
diff --git a/scripts/automation/regression/setups/kiwi02/benchmark.yaml b/scripts/automation/regression/setups/kiwi02/benchmark.yaml index f6ad8e9a..343d4120 100644 --- a/scripts/automation/regression/setups/kiwi02/benchmark.yaml +++ b/scripts/automation/regression/setups/kiwi02/benchmark.yaml @@ -24,39 +24,39 @@ nat_dict: &nat_dict test_jumbo: multiplier : 55 cores : 1 - bw_per_core : 647305 + bw_per_core : 647.305 test_routing_imix: multiplier : 32 cores : 2 - bw_per_core : 39131 + bw_per_core : 39.131 test_routing_imix_64: multiplier : 2500 cores : 4 - bw_per_core : 7427 + bw_per_core : 7.427 test_static_routing_imix: stat_route_dict : *stat_route_dict multiplier : 32 cores : 2 - bw_per_core : 39039 + bw_per_core : 39.039 test_static_routing_imix_asymmetric: stat_route_dict : *stat_route_dict multiplier : 16 cores : 1 - bw_per_core : 38796 + bw_per_core : 38.796 test_ipv6_simple: multiplier : 32 cores : 4 - bw_per_core : 19283 + bw_per_core : 19.283 test_nat_simple_mode1: &test_nat_simple @@ -65,7 +65,7 @@ test_nat_simple_mode1: &test_nat_simple multiplier : 10000 cores : 1 allow_timeout_dev : True - bw_per_core : 45304 + bw_per_core : 45.304 test_nat_simple_mode2: *test_nat_simple @@ -77,7 +77,7 @@ test_nat_learning: test_nbar_simple: multiplier : 20 cores : 2 - bw_per_core : 18243 + bw_per_core : 18.243 nbar_classification: http : 30.41 rtp_audio : 21.22 @@ -100,11 +100,11 @@ test_rx_check_http: &rx_http cores : 2 rx_sample_rate : 32 error_tolerance : 0.01 - bw_per_core : 38071 + bw_per_core : 38.071 test_rx_check_http_ipv6: << : *rx_http - bw_per_core : 46733 + bw_per_core : 46.733 test_rx_check_sfr: &rx_sfr @@ -112,11 +112,11 @@ test_rx_check_sfr: &rx_sfr cores : 4 rx_sample_rate : 32 error_tolerance : 0.01 - bw_per_core : 16915 + bw_per_core : 16.915 test_rx_check_sfr_ipv6: << : *rx_sfr - bw_per_core : 20323 + bw_per_core : 20.323 diff --git a/scripts/automation/regression/setups/trex-dan/benchmark.yaml b/scripts/automation/regression/setups/trex-dan/benchmark.yaml index d2af373c..c8b046d4 100644 --- a/scripts/automation/regression/setups/trex-dan/benchmark.yaml +++ b/scripts/automation/regression/setups/trex-dan/benchmark.yaml @@ -24,39 +24,39 @@ nat_dict: &nat_dict test_jumbo: multiplier : 2.8 cores : 1 - bw_per_core : 67030 + bw_per_core : 67.030 test_routing_imix: multiplier : 1 cores : 1 - bw_per_core : 3979 + bw_per_core : 3.979 test_routing_imix_64: multiplier : 150 cores : 4 - bw_per_core : 681 + bw_per_core : .681 test_static_routing_imix: stat_route_dict : *stat_route_dict multiplier : 0.7 cores : 1 - bw_per_core : 3837 + bw_per_core : 3.837 test_static_routing_imix_asymmetric: stat_route_dict : *stat_route_dict multiplier : 0.8 cores : 1 - bw_per_core : 3939 + bw_per_core : 3.939 test_ipv6_simple: multiplier : 1.5 cores : 2 - bw_per_core : 4719 + bw_per_core : 4.719 test_nat_simple_mode1: &test_nat_simple @@ -65,20 +65,20 @@ test_nat_simple_mode1: &test_nat_simple multiplier : 550 cores : 1 allow_timeout_dev : True - bw_per_core : 7465 + bw_per_core : 7.465 test_nat_simple_mode2: *test_nat_simple test_nat_learning: << : *test_nat_simple - bw_per_core : 7377 + bw_per_core : 7.377 nat_opened : 40000 test_nbar_simple: multiplier : 1.5 cores : 2 - bw_per_core : 4465 + bw_per_core : 4.465 nbar_classification: http : 30.3 rtp_audio : 21.06 @@ -100,28 +100,28 @@ test_rx_check_http: &rx_http multiplier : 2200 cores : 1 rx_sample_rate : 16 - bw_per_core : 8142 + bw_per_core : 8.142 test_rx_check_http_ipv6: << : *rx_http - bw_per_core : 8591 + bw_per_core : 8.591 test_rx_check_http_negative: << : *rx_http stat_route_dict : *stat_route_dict nat_dict : *nat_dict - bw_per_core : 8037 + bw_per_core : 8.037 test_rx_check_sfr: &rx_sfr multiplier : 1.7 cores : 2 rx_sample_rate : 16 - bw_per_core : 4473 + bw_per_core : 4.473 test_rx_check_sfr_ipv6: << : *rx_sfr - bw_per_core : 4773 + bw_per_core : 4.773 diff --git a/scripts/automation/regression/setups/trex04/benchmark.yaml b/scripts/automation/regression/setups/trex04/benchmark.yaml index e3a477f5..d2b1c4f2 100644 --- a/scripts/automation/regression/setups/trex04/benchmark.yaml +++ b/scripts/automation/regression/setups/trex04/benchmark.yaml @@ -7,39 +7,27 @@ test_jumbo: multiplier : 2.8 cores : 1 - bw_per_core : 106652 + bw_per_core : 106.652 test_routing_imix: multiplier : 0.5 cores : 1 - bw_per_core : 11577 + bw_per_core : 11.577 test_routing_imix_64: multiplier : 28 cores : 1 - bw_per_core : 2030 + bw_per_core : 2.030 test_static_routing_imix_asymmetric: multiplier : 0.8 cores : 1 - bw_per_core : 13742 + bw_per_core : 13.742 -test_CPU_benchmark: - profiles: - - name : stl/udp_1pkt_simple.py - kwargs : {packet_len: 64} - cpu_util : 1 - bw_per_core : 1 - - - name : stl/udp_1pkt_simple.py - kwargs : {packet_len: 128} - cpu_util : 1 - bw_per_core : 1 - ### stateless ### diff --git a/scripts/automation/regression/setups/trex08/benchmark.yaml b/scripts/automation/regression/setups/trex08/benchmark.yaml index 97db6598..c5c2fde7 100644 --- a/scripts/automation/regression/setups/trex08/benchmark.yaml +++ b/scripts/automation/regression/setups/trex08/benchmark.yaml @@ -7,45 +7,45 @@ test_jumbo: multiplier : 150 cores : 2 - bw_per_core : 962464 + bw_per_core : 962.464 test_routing_imix: multiplier : 80 cores : 4 - bw_per_core : 55130 + bw_per_core : 55.130 test_routing_imix_64: multiplier : 8000 cores : 7 - bw_per_core : 11699 + bw_per_core : 11.699 test_static_routing_imix_asymmetric: multiplier : 70 cores : 3 - bw_per_core : 50561 + bw_per_core : 50.561 test_ipv6_simple: multiplier : 80 cores : 7 - bw_per_core : 25948 + bw_per_core : 25.948 test_rx_check_http: multiplier : 99000 cores : 3 rx_sample_rate : 128 - bw_per_core : 49464 + bw_per_core : 49.464 test_rx_check_sfr: multiplier : 80 cores : 7 rx_sample_rate : 128 - bw_per_core : 20871 + bw_per_core : 20.871 diff --git a/scripts/automation/regression/setups/trex09/benchmark.yaml b/scripts/automation/regression/setups/trex09/benchmark.yaml index 8522f1bf..1f8fe47a 100644 --- a/scripts/automation/regression/setups/trex09/benchmark.yaml +++ b/scripts/automation/regression/setups/trex09/benchmark.yaml @@ -7,45 +7,45 @@ test_jumbo: multiplier : 110 cores : 1 - bw_per_core : 767198 + bw_per_core : 767.198 test_routing_imix: multiplier : 64 cores : 2 - bw_per_core : 35889 + bw_per_core : 35.889 test_routing_imix_64: multiplier : 5000 cores : 2 - bw_per_core : 10672 + bw_per_core : 10.672 test_static_routing_imix_asymmetric: multiplier : 32 cores : 1 - bw_per_core : 52738 + bw_per_core : 52.738 test_ipv6_simple: multiplier : 64 cores : 4 - bw_per_core : 22808 + bw_per_core : 22.808 test_rx_check_http: multiplier : 90000 cores : 2 rx_sample_rate : 32 - bw_per_core : 46075 + bw_per_core : 46.075 test_rx_check_sfr: multiplier : 50 cores : 3 rx_sample_rate : 32 - bw_per_core : 20469 + bw_per_core : 20.469 diff --git a/scripts/automation/regression/setups/trex12/benchmark.yaml b/scripts/automation/regression/setups/trex12/benchmark.yaml index 084b57de..0ebc2bcb 100644 --- a/scripts/automation/regression/setups/trex12/benchmark.yaml +++ b/scripts/automation/regression/setups/trex12/benchmark.yaml @@ -7,53 +7,53 @@ test_jumbo: multiplier : 14 cores : 1 - bw_per_core : 689664 + bw_per_core : 689.664 test_routing_imix: multiplier : 8 cores : 1 - bw_per_core : 45422 + bw_per_core : 45.422 test_routing_imix_64: multiplier : 2200 cores : 1 - bw_per_core : 11655 + bw_per_core : 11.655 test_static_routing_imix_asymmetric: multiplier : 4 cores : 1 - bw_per_core : 45294 + bw_per_core : 45.294 test_ipv6_simple: multiplier : 8 cores : 1 - bw_per_core : 29332 + bw_per_core : 29.332 test_rx_check_http: &rx_http multiplier : 11000 cores : 1 rx_sample_rate : 16 - bw_per_core : 47813 + bw_per_core : 47.813 test_rx_check_http_ipv6: << : *rx_http - bw_per_core : 55607 + bw_per_core : 55.607 test_rx_check_sfr: &rx_sfr multiplier : 8 cores : 1 rx_sample_rate : 16 - bw_per_core : 24203 + bw_per_core : 24.203 test_rx_check_sfr_ipv6: << : *rx_sfr - bw_per_core : 28867 + bw_per_core : 28.867 ### stateless ### diff --git a/scripts/automation/regression/setups/trex14/benchmark.yaml b/scripts/automation/regression/setups/trex14/benchmark.yaml index a63abc61..afa27a82 100644 --- a/scripts/automation/regression/setups/trex14/benchmark.yaml +++ b/scripts/automation/regression/setups/trex14/benchmark.yaml @@ -24,26 +24,26 @@ nat_dict: &nat_dict test_jumbo: multiplier : 17 cores : 1 - bw_per_core : 543232 + bw_per_core : 543.232 test_routing_imix: multiplier : 10 cores : 1 - bw_per_core : 34128 + bw_per_core : 34.128 test_routing_imix_64: multiplier : 430 cores : 1 - bw_per_core : 5893 + bw_per_core : 5.893 test_static_routing_imix: &test_static_routing_imix stat_route_dict : *stat_route_dict multiplier : 8 cores : 1 - bw_per_core : 34339 + bw_per_core : 34.339 test_static_routing_imix_asymmetric: *test_static_routing_imix @@ -51,7 +51,7 @@ test_static_routing_imix_asymmetric: *test_static_routing_imix test_ipv6_simple: multiplier : 9 cores : 2 - bw_per_core : 19064 + bw_per_core : 19.064 test_nat_simple_mode1: &test_nat_simple @@ -61,7 +61,7 @@ test_nat_simple_mode1: &test_nat_simple cores : 1 nat_opened : 40000 allow_timeout_dev : True - bw_per_core : 44445 + bw_per_core : 44.445 test_nat_simple_mode2: *test_nat_simple @@ -73,7 +73,7 @@ test_nat_learning: test_nbar_simple: multiplier : 7.5 cores : 2 - bw_per_core : 17174 + bw_per_core : 17.174 nbar_classification: http : 32.58 rtp-audio : 21.21 @@ -95,11 +95,11 @@ test_rx_check_http: &rx_http multiplier : 15000 cores : 1 rx_sample_rate : 16 - bw_per_core : 39560 + bw_per_core : 39.560 test_rx_check_http_ipv6: << : *rx_http - bw_per_core : 49237 + bw_per_core : 49.237 test_rx_check_http_negative: << : *rx_http @@ -111,11 +111,11 @@ test_rx_check_sfr: &rx_sfr multiplier : 10 cores : 3 rx_sample_rate : 16 - bw_per_core : 16082 + bw_per_core : 16.082 test_rx_check_sfr_ipv6: << : *rx_sfr - bw_per_core : 19198 + bw_per_core : 19.198 diff --git a/scripts/automation/regression/setups/trex17/benchmark.yaml b/scripts/automation/regression/setups/trex17/benchmark.yaml index 219a01ed..d9191a42 100644 --- a/scripts/automation/regression/setups/trex17/benchmark.yaml +++ b/scripts/automation/regression/setups/trex17/benchmark.yaml @@ -7,25 +7,25 @@ test_jumbo: multiplier : 2.8 cores : 1 - bw_per_core : 66489 + bw_per_core : 66.489 test_routing_imix: multiplier : 0.5 cores : 1 - bw_per_core : 5530 + bw_per_core : 5.530 test_routing_imix_64: multiplier : 28 cores : 1 - bw_per_core : 859 + bw_per_core : 0.859 test_static_routing_imix_asymmetric: multiplier : 0.8 cores : 1 - bw_per_core : 9635 + bw_per_core : 9.635 diff --git a/scripts/automation/regression/setups/trex25/benchmark.yaml b/scripts/automation/regression/setups/trex25/benchmark.yaml index 8ef7e0c7..f87759f9 100644 --- a/scripts/automation/regression/setups/trex25/benchmark.yaml +++ b/scripts/automation/regression/setups/trex25/benchmark.yaml @@ -24,26 +24,26 @@ nat_dict: &nat_dict test_jumbo: multiplier : 6 cores : 1 - bw_per_core : 443970 + bw_per_core : 443.970 test_routing_imix: multiplier : 4 cores : 1 - bw_per_core : 26509 + bw_per_core : 26.509 test_routing_imix_64: multiplier : 600 cores : 1 - bw_per_core : 6391 + bw_per_core : 6.391 test_static_routing_imix: stat_route_dict : *stat_route_dict multiplier : 2.8 cores : 1 - bw_per_core : 24510 + bw_per_core : 24.510 @@ -51,13 +51,13 @@ test_static_routing_imix_asymmetric: stat_route_dict : *stat_route_dict multiplier : 3.2 cores : 1 - bw_per_core : 28229 + bw_per_core : 28.229 test_ipv6_simple: multiplier : 6 cores : 1 - bw_per_core : 19185 + bw_per_core : 19.185 test_nat_simple_mode1: &test_nat_simple @@ -66,7 +66,7 @@ test_nat_simple_mode1: &test_nat_simple multiplier : 2200 cores : 1 allow_timeout_dev : True - bw_per_core : 32171 + bw_per_core : 32.171 test_nat_simple_mode2: *test_nat_simple @@ -78,7 +78,7 @@ test_nat_learning: test_nbar_simple: multiplier : 6 cores : 1 - bw_per_core : 16645 + bw_per_core : 16.645 nbar_classification: http : 24.55 rtp : 19.15 @@ -101,11 +101,11 @@ test_rx_check_http: &rx_http multiplier : 8800 cores : 1 rx_sample_rate : 16 - bw_per_core : 31389 + bw_per_core : 31.389 test_rx_check_http_ipv6: << : *rx_http - bw_per_core : 37114 + bw_per_core : 37.114 test_rx_check_http_negative: << : *rx_http @@ -117,11 +117,11 @@ test_rx_check_sfr: &rx_sfr multiplier : 6.8 cores : 1 rx_sample_rate : 16 - bw_per_core : 16063 + bw_per_core : 16.063 test_rx_check_sfr_ipv6: << : *rx_sfr - bw_per_core : 19663 + bw_per_core : 19.663 ### stateless ### diff --git a/scripts/automation/regression/stateful_tests/trex_general_test.py b/scripts/automation/regression/stateful_tests/trex_general_test.py index d7d83096..42720f70 100755 --- a/scripts/automation/regression/stateful_tests/trex_general_test.py +++ b/scripts/automation/regression/stateful_tests/trex_general_test.py @@ -150,13 +150,9 @@ class CTRexGeneral_Test(unittest.TestCase): if cpu_util < minimal_cpu: self.fail("CPU is too low (%s%%), can't verify performance in such low CPU%%." % cpu_util ) - cores = self.get_benchmark_param('cores') - ports_count = trex_res.get_ports_count() - trex_tx_bps = sum(trex_res.get_value_list("trex-global.data.m_tx_bps")[-4:-1]) / 3.0 - # x2 because each thread uses 2 ports and another x2 because each core can use 2 threads - test_norm_cpu = 2 * 2 * (100.0 / cpu_util) * trex_tx_bps / (ports_count * cores * 1e6) + test_norm_cpu = sum(trex_res.get_value_list("trex-global.data.m_bw_per_core")[-4:-1]) / 3.0 - print("TRex CPU utilization: %g%%, norm_cpu is : %g Mb/core" % (round(cpu_util, 2), round(test_norm_cpu))) + print("TRex CPU utilization: %g%%, norm_cpu is : %g Gb/core" % (round(cpu_util, 2), round(test_norm_cpu))) expected_norm_cpu = self.get_benchmark_param('bw_per_core') if not expected_norm_cpu: @@ -164,13 +160,14 @@ class CTRexGeneral_Test(unittest.TestCase): calc_error_precent = abs(100.0 * test_norm_cpu / expected_norm_cpu - 100) print('Err percent: %s' % calc_error_precent) - if calc_error_precent > err: + if calc_error_precent > err and cpu_util > 10: self.fail('Excepted bw_per_core ratio: %s, got: %g' % (expected_norm_cpu, round(test_norm_cpu))) # report benchmarks if self.GAManager: - self.GAManager.gaAddAction(Event = 'stateful_test', action = self.get_name(), label = 'bw_per_core', value = int(test_norm_cpu)) - self.GAManager.gaAddAction(Event = 'stateful_test', action = self.get_name(), label = 'bw_per_core_exp', value = int(expected_norm_cpu)) + setup_test = '%s.%s' % (CTRexScenario.setup_name, self.get_name()) + self.GAManager.gaAddAction(Event = 'stateful_test', action = setup_test, label = 'bw_per_core', value = int(test_norm_cpu)) + self.GAManager.gaAddAction(Event = 'stateful_test', action = setup_test, label = 'bw_per_core_exp', value = int(expected_norm_cpu)) self.GAManager.emptyAndReportQ() def check_results_gt (self, res, name, val): diff --git a/scripts/automation/regression/stateless_tests/stl_benchmark_test.py b/scripts/automation/regression/stateless_tests/stl_benchmark_test.py index 51c77b57..ef4c435f 100755 --- a/scripts/automation/regression/stateless_tests/stl_benchmark_test.py +++ b/scripts/automation/regression/stateless_tests/stl_benchmark_test.py @@ -11,12 +11,11 @@ class STLBenchmark_Test(CStlGeneral_Test): def test_CPU_benchmark(self): timeout = 60 # max time to wait for stabilization stabilize = 5 # ensure stabilization over this period - cores = self.configuration.trex['trex_cores'] - ports = self.stl_trex.get_port_count() print('') for profile_bench in self.get_benchmark_param('profiles'): - cpu_utils = deque([0] * stabilize, maxlen = stabilize) + cpu_utils = deque([0] * stabilize, maxlen = stabilize) + bws_per_core = deque([0] * stabilize, maxlen = stabilize) kwargs = profile_bench.get('kwargs', {}) print('Testing profile %s, kwargs: %s' % (profile_bench['name'], kwargs)) profile = STLProfile.load(os.path.join(CTRexScenario.scripts_path, profile_bench['name']), **kwargs) @@ -24,18 +23,22 @@ class STLBenchmark_Test(CStlGeneral_Test): self.stl_trex.reset() self.stl_trex.clear_stats() sleep(1) - self.stl_trex.add_streams(profile, ports = [0, 1]) - self.stl_trex.start(ports = [0, 1], mult = '10%') + self.stl_trex.add_streams(profile) + self.stl_trex.start(mult = '10%') start_time = time() for i in range(timeout + 1): stats = self.stl_trex.get_stats() cpu_utils.append(stats['global']['cpu_util']) + bws_per_core.append(stats['global']['bw_per_core']) if i > stabilize and min(cpu_utils) > max(cpu_utils) * 0.95: break sleep(0.5) - if i == timeout: + agv_cpu_util = sum(cpu_utils) / stabilize + agv_bw_per_core = sum(bws_per_core) / stabilize + + if i == timeout and agv_cpu_util > 10: raise Exception('Timeout on waiting for stabilization, last CPU util values: %s' % list(cpu_utils)) if stats[0]['opackets'] < 1000 or stats[1]['opackets'] < 1000: raise Exception('Too few opackets, port0: %s, port1: %s' % (stats[0]['opackets'], stats[1]['opackets'])) @@ -43,17 +46,19 @@ class STLBenchmark_Test(CStlGeneral_Test): raise Exception('Too much queue_full: %s' % stats['global']['queue_full']) if not cpu_utils[-1]: raise Exception('CPU util is zero, last values: %s' % list(cpu_utils)) - agv_cpu_util = sum(cpu_utils) / stabilize - bw_per_core = 2 * 2 * (100 / agv_cpu_util) * stats['global']['tx_bps'] / (ports * cores * 1e9) - print('Done (%ss), CPU util: %4g, bw_per_core: %6sGb/core' % (int(time() - start_time), agv_cpu_util, round(bw_per_core, 2))) + print('Done (%ss), CPU util: %4g, bw_per_core: %6sGb/core' % (int(time() - start_time), agv_cpu_util, round(agv_bw_per_core, 2))) # TODO: add check of benchmark based on results from regression # report benchmarks if self.GAManager: - profile_repr = '%s %s' % (os.path.basename(profile_bench['name']), repr(kwargs).replace("'", '')) - self.GAManager.gaAddAction(Event = 'stateless_test', action = profile_repr, label = 'bw_per_core', value = int(bw_per_core)) + profile_repr = '%s.%s %s' % (CTRexScenario.setup_name, + os.path.basename(profile_bench['name']), + repr(kwargs).replace("'", '')) + self.GAManager.gaAddAction(Event = 'stateless_test', action = profile_repr, + label = 'bw_per_core', value = int(agv_bw_per_core)) # TODO: report expected once acquired - #self.GAManager.gaAddAction(Event = 'stateless_test', action = profile_repr, label = 'bw_per_core_exp', value = int(expected_norm_cpu)) + #self.GAManager.gaAddAction(Event = 'stateless_test', action = profile_repr, + # label = 'bw_per_core_exp', value = int(expected_norm_cpu)) self.GAManager.emptyAndReportQ() def tearDown(self): diff --git a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_stats.py b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_stats.py index 12c2c578..c7513144 100644 --- a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_stats.py +++ b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_stats.py @@ -212,7 +212,7 @@ class CTRexInfoGenerator(object): if ratio <= 0.1875: return u'\u2581' # 1/8 if ratio <= 0.3125: - return u'\u2582' # 2/4 + return u'\u2582' # 2/8 if ratio <= 0.4375: return u'\u2583' # 3/8 if ratio <= 0.5625: @@ -594,6 +594,7 @@ class CGlobalStats(CTRexStats): # absolute stats['cpu_util'] = self.get("m_cpu_util") stats['rx_cpu_util'] = self.get("m_rx_cpu_util") + stats['bw_per_core'] = self.get("m_bw_per_core") stats['tx_bps'] = self.get("m_tx_bps") stats['tx_pps'] = self.get("m_tx_pps") |