The single core forward performance test suite can run a variety of combinations of buffer sizes and number of descriptors. It is beneficial if any possible combination of these parameters could be tested against a specific delta tolerance; Rather than a globally defined tolerance for all testing. Along with this, adjusting traffic duration and test repetitions helps users define a more accurate test run if they wish to get a more refined average. Furthermore, the cores allotted to TREX can vary among systems and should be defined by the user.
Signed-off-by: Andrew Bailey <[email protected]> --- dts/configurations/test_run.example.yaml | 1 + dts/framework/config/test_run.py | 1 + .../testbed_model/traffic_generator/trex.py | 3 +- .../TestSuite_single_core_forward_perf.py | 52 ++++++++++++++----- 4 files changed, 43 insertions(+), 14 deletions(-) diff --git a/dts/configurations/test_run.example.yaml b/dts/configurations/test_run.example.yaml index 51f9ab8237..c6eb086211 100644 --- a/dts/configurations/test_run.example.yaml +++ b/dts/configurations/test_run.example.yaml @@ -52,6 +52,7 @@ func_traffic_generator: # type: TREX # remote_path: "/opt/trex/v3.03" # The remote path of the traffic generator application. # config: "/opt/trex_config/trex_config.yaml" # Additional configuration files. (Leave blank if not required) +# cores: 10 # The number of cores to run TRex with. perf: false # disable performance testing func: true # enable functional testing crypto: false # disable cryptographic testing diff --git a/dts/framework/config/test_run.py b/dts/framework/config/test_run.py index 81630df77d..1ffb6b2365 100644 --- a/dts/framework/config/test_run.py +++ b/dts/framework/config/test_run.py @@ -420,6 +420,7 @@ class TrexTrafficGeneratorConfig(TrafficGeneratorConfig): type: Literal[TrafficGeneratorType.TREX] remote_path: PurePath config: PurePath + cores: int #: A union type discriminating traffic generators by the `type` field. diff --git a/dts/framework/testbed_model/traffic_generator/trex.py b/dts/framework/testbed_model/traffic_generator/trex.py index d53791b0a6..2b52cfcbd1 100644 --- a/dts/framework/testbed_model/traffic_generator/trex.py +++ b/dts/framework/testbed_model/traffic_generator/trex.py @@ -82,7 +82,7 @@ class TrexTrafficGenerator(PerformanceTrafficGenerator): _streaming_mode: TrexStatelessTXModes = TrexStatelessTXModes.STLTXCont - _tg_cores: int = 10 + _tg_cores: int _trex_app: BlockingApp @@ -102,6 +102,7 @@ def __init__(self, tg_node: Node, config: TrexTrafficGeneratorConfig) -> None: super().__init__(tg_node=tg_node, config=config) self._tg_node_config = tg_node.config self._tg_config = config + self._tg_cores = config.cores self._os_session = create_session(self._tg_node.config, "TRex", self._logger) diff --git a/dts/tests/TestSuite_single_core_forward_perf.py b/dts/tests/TestSuite_single_core_forward_perf.py index 57aecdf7a4..a966d44ebd 100644 --- a/dts/tests/TestSuite_single_core_forward_perf.py +++ b/dts/tests/TestSuite_single_core_forward_perf.py @@ -32,14 +32,40 @@ class Config(BaseConfig): """Performance test metrics.""" test_parameters: list[dict[str, int | float]] = [ - {"frame_size": 64, "num_descriptors": 1024, "expected_mpps": 1.00}, - {"frame_size": 128, "num_descriptors": 1024, "expected_mpps": 1.00}, - {"frame_size": 256, "num_descriptors": 1024, "expected_mpps": 1.00}, - {"frame_size": 512, "num_descriptors": 1024, "expected_mpps": 1.00}, - {"frame_size": 1024, "num_descriptors": 1024, "expected_mpps": 1.00}, - {"frame_size": 1518, "num_descriptors": 1024, "expected_mpps": 1.00}, + {"frame_size": 64, "num_descriptors": 1024, "expected_mpps": 1.00, "delta_tolerance": 0.05}, + { + "frame_size": 128, + "num_descriptors": 1024, + "expected_mpps": 1.00, + "delta_tolerance": 0.05, + }, + { + "frame_size": 256, + "num_descriptors": 1024, + "expected_mpps": 1.00, + "delta_tolerance": 0.05, + }, + { + "frame_size": 512, + "num_descriptors": 1024, + "expected_mpps": 1.00, + "delta_tolerance": 0.05, + }, + { + "frame_size": 1024, + "num_descriptors": 1024, + "expected_mpps": 1.00, + "delta_tolerance": 0.05, + }, + { + "frame_size": 1518, + "num_descriptors": 1024, + "expected_mpps": 1.00, + "delta_tolerance": 0.05, + }, ] - delta_tolerance: float = 0.05 + traffic_duration: int = 5 + test_repetitions: int = 5 @requires_link_topology(LinkTopology.TWO_LINKS) @@ -51,7 +77,8 @@ class TestSingleCoreForwardPerf(TestSuite): def set_up_suite(self): """Set up the test suite.""" self.test_parameters = self.config.test_parameters - self.delta_tolerance = self.config.delta_tolerance + self.traffic_duration = self.config.traffic_duration + self.test_repetitions = self.config.test_repetitions def _transmit(self, testpmd: TestPmd, frame_size: int, repetitions: int = 1) -> float: """Create a testpmd session with every rule in the given list, verify jump behavior. @@ -76,8 +103,7 @@ def _transmit(self, testpmd: TestPmd, frame_size: int, repetitions: int = 1) -> rx_avg = 0.0 for _ in range(repetitions): - # Transmit for 5 seconds. - stats = assess_performance_by_packet(packet=packet, duration=5) + stats = assess_performance_by_packet(packet=packet, duration=self.traffic_duration) rx_avg += stats.rx_pps return rx_avg / (repetitions * 1_000_000) @@ -134,21 +160,21 @@ def single_core_forward_perf(self) -> None: **driver_specific_testpmd_args, ) as testpmd: params["measured_mpps"] = round( - self._transmit(testpmd, frame_size, repetitions=5), 3 + self._transmit(testpmd, frame_size, repetitions=self.test_repetitions), 3 ) params["performance_delta"] = round( (float(params["measured_mpps"]) - float(params["expected_mpps"])) / float(params["expected_mpps"]), 3, ) - params["pass"] = float(params["performance_delta"]) >= -self.delta_tolerance + params["pass"] = float(params["performance_delta"]) >= -params["delta_tolerance"] self._produce_stats_table(self.test_parameters) for params in self.test_parameters: verify( params["pass"] is True, - f"""Packets forwarded is less than {(1 - self.delta_tolerance) * 100}% + f"""Packets forwarded is less than {(1 - params["delta_tolerance"]) * 100}% of the expected baseline. Measured MPPS = {params["measured_mpps"]} Expected MPPS = {params["expected_mpps"]}""", -- 2.55.0

