From efcdd3eadfadb2814a9e3b67cce84b5dc89c7108 Mon Sep 17 00:00:00 2001 From: Peter Mikus Date: Wed, 18 Dec 2019 16:28:28 +0000 Subject: [PATCH] TREX: Ability to configure from outside TrafficGenerator.py Signed-off-by: Peter Mikus Change-Id: Ia9832e5e65dbcf2d4f99c52fd0570d456262ab9a --- resources/libraries/python/Constants.py | 20 +++++++++++++------- resources/libraries/python/TrafficGenerator.py | 10 ++++++---- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/resources/libraries/python/Constants.py b/resources/libraries/python/Constants.py index eee9177a18..626dab8331 100644 --- a/resources/libraries/python/Constants.py +++ b/resources/libraries/python/Constants.py @@ -13,11 +13,8 @@ """Constants used in CSIT. -Here, "constant" means a value that keeps its value since initialization. -However, the value does not need to be hardcoded here, -some values are affected by environment variables. - -TODO: Review env and constant names, make them matching if possible. +"Constant" means a value that keeps its value since initialization. The value +does not need to be hard coded here, but can be read from environment variables. """ @@ -31,8 +28,8 @@ def get_str_from_env(env_var_names, default_value): empty string is returned. Several environment variable names are examined, as CSIT currently supports - a mix of naming convensions. - Here "several" means there are hardcoded prefixes to try, + a mix of naming conventions. + Here "several" means there are hard coded prefixes to try, and env_var_names itself can be single name, or a list or a tuple of names. :param env_var_names: Base names of environment variable to attempt to read. @@ -187,6 +184,15 @@ class Constants: # TRex install directory TREX_INSTALL_DIR = u"/opt/trex-core-2.61" + # TRex limit memory + TREX_LIMIT_MEMORY = get_int_from_env(u"TREX_LIMIT_MEMORY ", 8192) + + # TRex number of cores + TREX_CORE_COUNT = get_int_from_env(u"TREX_CORE_COUNT", 7) + + # TRex extra commandline arguments + TREX_EXTRA_CMDLINE = get_str_from_env(u"TREX_EXTRA_CMDLINE", u"") + # Sysctl kernel.core_pattern KERNEL_CORE_PATTERN = u"/tmp/%p-%u-%g-%s-%t-%h-%e.core" diff --git a/resources/libraries/python/TrafficGenerator.py b/resources/libraries/python/TrafficGenerator.py index 007079f254..a73e471f77 100644 --- a/resources/libraries/python/TrafficGenerator.py +++ b/resources/libraries/python/TrafficGenerator.py @@ -286,6 +286,7 @@ class TrafficGenerator(AbstractMeasurer): self._node, f"sh -c 'cat << EOF > /etc/trex_cfg.yaml\n" f"- version: 2\n" + f" limit_memory: {Constants.TREX_LIMIT_MEMORY}\n" f" interfaces: [\"{if1_pci}\",\"{if2_pci}\"]\n" f" port_info:\n" f" - dest_mac: [{dst_mac0}]\n" @@ -300,6 +301,7 @@ class TrafficGenerator(AbstractMeasurer): self._node, f"sh -c 'cat << EOF > /etc/trex_cfg.yaml\n" f"- version: 2\n" + f" limit_memory: {Constants.TREX_LIMIT_MEMORY}\n" f" interfaces: [\"{if1_pci}\",\"{if2_pci}\"]\n" f" port_info:\n" f" - ip: [{if1_addr}]\n" @@ -343,10 +345,10 @@ class TrafficGenerator(AbstractMeasurer): # Start TRex. cmd = f"sh -c \"cd {Constants.TREX_INSTALL_DIR}/scripts/ && " \ - f"nohup ./t-rex-64 " \ - f"--hdrh{u' --astf' if osi_layer == u'L7' else u''} " \ - f"--prefix $(hostname) -i -c 7 > /tmp/trex.log 2>&1 &\" > " \ - f"/dev/null" + f"nohup ./t-rex-64 -i -c {Constants.TREX_CORE_COUNT} --hdrh " \ + f"{u' --astf' if osi_layer == u'L7' else u''} " \ + f"--prefix $(hostname) {Constants.TREX_EXTRA_CMDLINE} " \ + f"> /tmp/trex.log 2>&1 &\" > /dev/null" try: exec_cmd_no_error(self._node, cmd, sudo=True) except RuntimeError: -- 2.16.6