diff --git a/scripts/perf/nvmf/run_nvmf.py b/scripts/perf/nvmf/run_nvmf.py index ff117eae0..c75f20195 100755 --- a/scripts/perf/nvmf/run_nvmf.py +++ b/scripts/perf/nvmf/run_nvmf.py @@ -714,7 +714,7 @@ class Initiator(Server): def set_local_nic_info_helper(self): return json.loads(self.exec_cmd(["lshw", "-json"])) - def __del__(self): + def stop(self): self.ssh_connection.close() def exec_cmd(self, cmd, stderr_redirect=False, change_dir=None): @@ -954,7 +954,7 @@ class KernelTarget(Target): if "nvmet_bin" in target_config: self.nvmet_bin = target_config["nvmet_bin"] - def __del__(self): + def stop(self): nvmet_command(self.nvmet_bin, "clear") def kernel_tgt_gen_subsystem_conf(self, nvme_list, address_list): @@ -1220,7 +1220,7 @@ class SPDKTarget(Target): self.spdk_tgt_configure() - def __del__(self): + def stop(self): if self.bpf_proc: self.log_print("Stopping BPF Trace script") self.bpf_proc.terminate() @@ -1252,9 +1252,6 @@ class KernelInitiator(Initiator): if "io_uring" in self.ioengine: self.extra_params = "--nr-poll-queues=8" - def __del__(self): - self.ssh_connection.close() - def get_connected_nvme_list(self): json_obj = json.loads(self.exec_cmd(["sudo", "nvme", "list", "-o", "json"])) nvme_list = [os.path.basename(x["DevicePath"]) for x in json_obj["Devices"] @@ -1466,77 +1463,87 @@ if __name__ == "__main__": except FileExistsError: pass - target_obj.tgt_start() - - for i in initiators: - i.discover_subsystems(i.target_nic_ips, target_obj.subsys_no) - if i.enable_adq: - i.adq_configure_tc() - - # Poor mans threading - # Run FIO tests - for block_size, io_depth, rw in fio_workloads: - threads = [] - configs = [] - for i in initiators: - if i.mode == "kernel": - i.kernel_init_connect() - - cfg = i.gen_fio_config(rw, fio_rw_mix_read, block_size, io_depth, target_obj.subsys_no, - fio_num_jobs, fio_ramp_time, fio_run_time, fio_rate_iops) - configs.append(cfg) - - for i, cfg in zip(initiators, configs): - t = threading.Thread(target=i.run_fio, args=(cfg, fio_run_num)) - threads.append(t) - if target_obj.enable_sar: - sar_file_name = "_".join([str(block_size), str(rw), str(io_depth), "sar"]) - sar_file_name = ".".join([sar_file_name, "txt"]) - t = threading.Thread(target=target_obj.measure_sar, args=(args.results, sar_file_name)) - threads.append(t) - - if target_obj.enable_pcm: - pcm_fnames = ["%s_%s_%s_%s.csv" % (block_size, rw, io_depth, x) for x in ["pcm_cpu", "pcm_memory", "pcm_power"]] - - pcm_cpu_t = threading.Thread(target=target_obj.measure_pcm, args=(args.results, pcm_fnames[0],)) - pcm_mem_t = threading.Thread(target=target_obj.measure_pcm_memory, args=(args.results, pcm_fnames[1],)) - pcm_pow_t = threading.Thread(target=target_obj.measure_pcm_power, args=(args.results, pcm_fnames[2],)) - - threads.append(pcm_cpu_t) - threads.append(pcm_mem_t) - threads.append(pcm_pow_t) - - if target_obj.enable_bandwidth: - bandwidth_file_name = "_".join(["bandwidth", str(block_size), str(rw), str(io_depth)]) - bandwidth_file_name = ".".join([bandwidth_file_name, "csv"]) - t = threading.Thread(target=target_obj.measure_network_bandwidth, args=(args.results, bandwidth_file_name,)) - threads.append(t) - - if target_obj.enable_dpdk_memory: - t = threading.Thread(target=target_obj.measure_dpdk_memory, args=(args.results)) - threads.append(t) - - if target_obj.enable_adq: - ethtool_thread = threading.Thread(target=target_obj.ethtool_after_fio_ramp, args=(fio_ramp_time,)) - threads.append(ethtool_thread) - - for t in threads: - t.start() - for t in threads: - t.join() + # TODO: This try block is definietly too large. Need to break this up into separate + # logical blocks to reduce size. + try: + target_obj.tgt_start() for i in initiators: - if i.mode == "kernel": - i.kernel_init_disconnect() - i.copy_result_files(args.results) + i.discover_subsystems(i.target_nic_ips, target_obj.subsys_no) + if i.enable_adq: + i.adq_configure_tc() - target_obj.restore_governor() - target_obj.restore_tuned() - target_obj.restore_services() - target_obj.restore_sysctl() - for i in initiators: - i.restore_governor() - i.restore_tuned() - i.restore_services() - i.restore_sysctl() - target_obj.parse_results(args.results, args.csv_filename) + # Poor mans threading + # Run FIO tests + for block_size, io_depth, rw in fio_workloads: + threads = [] + configs = [] + for i in initiators: + if i.mode == "kernel": + i.kernel_init_connect() + + cfg = i.gen_fio_config(rw, fio_rw_mix_read, block_size, io_depth, target_obj.subsys_no, + fio_num_jobs, fio_ramp_time, fio_run_time, fio_rate_iops) + configs.append(cfg) + + for i, cfg in zip(initiators, configs): + t = threading.Thread(target=i.run_fio, args=(cfg, fio_run_num)) + threads.append(t) + if target_obj.enable_sar: + sar_file_name = "_".join([str(block_size), str(rw), str(io_depth), "sar"]) + sar_file_name = ".".join([sar_file_name, "txt"]) + t = threading.Thread(target=target_obj.measure_sar, args=(args.results, sar_file_name)) + threads.append(t) + + if target_obj.enable_pcm: + pcm_fnames = ["%s_%s_%s_%s.csv" % (block_size, rw, io_depth, x) for x in ["pcm_cpu", "pcm_memory", "pcm_power"]] + + pcm_cpu_t = threading.Thread(target=target_obj.measure_pcm, args=(args.results, pcm_fnames[0],)) + pcm_mem_t = threading.Thread(target=target_obj.measure_pcm_memory, args=(args.results, pcm_fnames[1],)) + pcm_pow_t = threading.Thread(target=target_obj.measure_pcm_power, args=(args.results, pcm_fnames[2],)) + + threads.append(pcm_cpu_t) + threads.append(pcm_mem_t) + threads.append(pcm_pow_t) + + if target_obj.enable_bandwidth: + bandwidth_file_name = "_".join(["bandwidth", str(block_size), str(rw), str(io_depth)]) + bandwidth_file_name = ".".join([bandwidth_file_name, "csv"]) + t = threading.Thread(target=target_obj.measure_network_bandwidth, args=(args.results, bandwidth_file_name,)) + threads.append(t) + + if target_obj.enable_dpdk_memory: + t = threading.Thread(target=target_obj.measure_dpdk_memory, args=(args.results)) + threads.append(t) + + if target_obj.enable_adq: + ethtool_thread = threading.Thread(target=target_obj.ethtool_after_fio_ramp, args=(fio_ramp_time,)) + threads.append(ethtool_thread) + + for t in threads: + t.start() + for t in threads: + t.join() + + for i in initiators: + if i.mode == "kernel": + i.kernel_init_disconnect() + i.copy_result_files(args.results) + + target_obj.restore_governor() + target_obj.restore_tuned() + target_obj.restore_services() + target_obj.restore_sysctl() + for i in initiators: + i.restore_governor() + i.restore_tuned() + i.restore_services() + i.restore_sysctl() + target_obj.parse_results(args.results, args.csv_filename) + finally: + for i in initiators: + try: + i.stop() + except Exception as err: + pass + target_obj.stop()