From 28688e6866cea5b16870864ced9a6d4751094e6f Mon Sep 17 00:00:00 2001 From: Deepak S Date: Wed, 30 Aug 2017 02:22:07 -0700 Subject: Enable multi-port perf in trex as TG set TRex -c option for threads per port based on hardware number of queues. We can't auto-detect number of queues and we can't use more than one thread per core on systems with single-queue interfaces, so move the option to the config file options: tg_0: queues_per_port: 2 also enable trex debug by removing >/dev/null redirection options: tg_0: trex_server_debug: true Change-Id: I46da187849282bf28f4ef5b333e1ae890e202768 Signed-off-by: Deepak S Signed-off-by: Ross Brattain --- .../network_services/vnf_generic/vnf/sample_vnf.py | 1 - .../network_services/vnf_generic/vnf/tg_trex.py | 24 ++++++++++++++++------ 2 files changed, 18 insertions(+), 7 deletions(-) (limited to 'yardstick') diff --git a/yardstick/network_services/vnf_generic/vnf/sample_vnf.py b/yardstick/network_services/vnf_generic/vnf/sample_vnf.py index 5cf234514..bbaae39e3 100644 --- a/yardstick/network_services/vnf_generic/vnf/sample_vnf.py +++ b/yardstick/network_services/vnf_generic/vnf/sample_vnf.py @@ -423,7 +423,6 @@ class ClientResourceHelper(ResourceHelper): self._queue = Queue() self._result = {} self._terminated = Value('i', 0) - self._vpci_ascending = None def _build_ports(self): self.networks = self.vnfd_helper.port_pairs.networks diff --git a/yardstick/network_services/vnf_generic/vnf/tg_trex.py b/yardstick/network_services/vnf_generic/vnf/tg_trex.py index 1fe790f08..fe435f63e 100644 --- a/yardstick/network_services/vnf_generic/vnf/tg_trex.py +++ b/yardstick/network_services/vnf_generic/vnf/tg_trex.py @@ -21,7 +21,7 @@ import os import yaml -from yardstick.common.utils import mac_address_to_hex_list +from yardstick.common.utils import mac_address_to_hex_list, try_int from yardstick.network_services.utils import get_nsb_option from yardstick.network_services.vnf_generic.vnf.sample_vnf import SampleVNFTrafficGen from yardstick.network_services.vnf_generic.vnf.sample_vnf import ClientResourceHelper @@ -76,7 +76,6 @@ class TrexResourceHelper(ClientResourceHelper): cfg_str = yaml.safe_dump(cfg_file, default_flow_style=False, explicit_start=True) self.ssh_helper.upload_config_file(os.path.basename(self.CONF_FILE), cfg_str) - self._vpci_ascending = sorted(vpci_list) def check_status(self): status, _, _ = self.ssh_helper.execute("sudo lsof -i:%s" % self.SYNC_PORT) @@ -109,15 +108,28 @@ class TrexResourceHelper(ClientResourceHelper): self.ssh_helper.execute("sudo pkill -9 rex > /dev/null 2>&1") + # We MUST default to 1 because TRex won't work on single-queue devices with + # more than one core per port + # We really should be trying to find the number of queues in the driver, + # but there doesn't seem to be a way to do this + # TRex Error: the number of cores should be 1 when the driver + # support only one tx queue and one rx queue. Please use -c 1 + threads_per_port = try_int(self.scenario_helper.options.get("queues_per_port"), 1) + trex_path = self.ssh_helper.join_bin_path("trex", "scripts") path = get_nsb_option("trex_path", trex_path) - # cmd = "sudo ./t-rex-64 -i --cfg %s > /dev/null 2>&1" % self.CONF_FILE - cmd = "./t-rex-64 -i --cfg '{}'".format(self.CONF_FILE) + cmd = "./t-rex-64 --no-scapy-server -i -c {} --cfg '{}'".format(threads_per_port, + self.CONF_FILE) - # if there are errors we want to see them + if self.scenario_helper.options.get("trex_server_debug"): + # if there are errors we want to see them + redir = "" + else: + redir = ">/dev/null" # we have to sudo cd because the path might be owned by root - trex_cmd = """sudo bash -c "cd '{}' ; {}" >/dev/null""".format(path, cmd) + trex_cmd = """sudo bash -c "cd '{}' ; {}" {}""".format(path, cmd, redir) + LOG.debug(trex_cmd) self.ssh_helper.execute(trex_cmd) def terminate(self): -- cgit 1.2.3-korg