From ddb4d24b1dd3ebaef4aa4662f666e96b010aedb4 Mon Sep 17 00:00:00 2001 From: Karol Latecki Date: Tue, 2 Feb 2021 12:13:43 +0100 Subject: [PATCH] scripts/nvmf_perf: get detailed info about NICs in servers Get detailed info about NICs installed in servers. This is using lshw utility to make things easier and not implement the whole logic for parsing /sys objects and pci.ids listing in system. Change-Id: I97871fdc9feaae1c2485574a7b488b88ac3afc4f Signed-off-by: Karol Latecki Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6259 Tested-by: SPDK CI Jenkins Community-CI: Mellanox Build Bot Reviewed-by: Jim Harris Reviewed-by: Tomasz Zawadzki Reviewed-by: Michal Berger Reviewed-by: Maciej Wawryk --- scripts/perf/nvmf/run_nvmf.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/scripts/perf/nvmf/run_nvmf.py b/scripts/perf/nvmf/run_nvmf.py index 97c68f8bc..ac5999be9 100755 --- a/scripts/perf/nvmf/run_nvmf.py +++ b/scripts/perf/nvmf/run_nvmf.py @@ -28,6 +28,7 @@ class Server: self.transport = general_config["transport"].lower() self.nic_ips = server_config["nic_ips"] self.mode = server_config["mode"] + self.local_nic_info = [] self._nics_json_obj = {} if not re.match("^[A-Za-z0-9]*$", name): @@ -49,6 +50,24 @@ class Server: if ip in addr["local"]: return nic["ifname"] + def set_local_nic_info_helper(self): + pass + + def set_local_nic_info(self, pci_info): + def extract_network_elements(json_obj): + nic_list = [] + if isinstance(json_obj, list): + for x in json_obj: + nic_list.extend(extract_network_elements(x)) + elif isinstance(json_obj, dict): + if "children" in json_obj: + nic_list.extend(extract_network_elements(json_obj["children"])) + if "class" in json_obj.keys() and "network" in json_obj["class"]: + nic_list.append(json_obj) + return nic_list + + self.local_nic_info = extract_network_elements(pci_info) + class Target(Server): def __init__(self, name, general_config, target_config): @@ -91,8 +110,12 @@ class Target(Server): self.script_dir = os.path.dirname(os.path.abspath(sys.argv[0])) self.spdk_dir = os.path.abspath(os.path.join(self.script_dir, "../../../")) + self.set_local_nic_info(self.set_local_nic_info_helper()) self.sys_config() + def set_local_nic_info_helper(self): + return json.loads(check_output(["lshw", "-json"])) + def zip_spdk_sources(self, spdk_dir, dest_file): self.log_print("Zipping SPDK source directory") fh = zipfile.ZipFile(dest_file, "w", zipfile.ZIP_DEFLATED) @@ -373,9 +396,13 @@ class Initiator(Server): self.remote_call("sudo rm -rf %s/nvmf_perf" % self.spdk_dir) self.remote_call("mkdir -p %s" % self.spdk_dir) self._nics_json_obj = json.loads(self.remote_call("ip -j address show")[0]) + self.set_local_nic_info(self.set_local_nic_info_helper()) self.set_cpu_frequency() self.sys_config() + def set_local_nic_info_helper(self): + return json.loads(self.remote_call("lshw -json")[0]) + def __del__(self): self.ssh_connection.close()