scripts/nvmf_perf: enable PCM measurements by default
Enable PCM cpu, power and memory measurements as default and make them run during fio workload. Change-Id: I4d42cf9df8385bfaa3b5e8fac59283ef8be0e98b Signed-off-by: Karol Latecki <karol.latecki@intel.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15341 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com> Reviewed-by: Michal Berger <michal.berger@intel.com>
This commit is contained in:
parent
b9403ae58b
commit
3d9b062852
@ -29,6 +29,7 @@ To run the scripts in your environment please follow steps below.
|
|||||||
option in Target and Initiator configuration sections.
|
option in Target and Initiator configuration sections.
|
||||||
- `sysstat` package must be installed for SAR CPU utilization measurements.
|
- `sysstat` package must be installed for SAR CPU utilization measurements.
|
||||||
- `bwm-ng` package must be installed for NIC bandwidth utilization measurements.
|
- `bwm-ng` package must be installed for NIC bandwidth utilization measurements.
|
||||||
|
- `pcm` package must be installed for pcm, pcm-power and pcm-memory measurements.
|
||||||
|
|
||||||
### Optional
|
### Optional
|
||||||
|
|
||||||
@ -86,7 +87,7 @@ Optional:
|
|||||||
"null_block_devices": 8,
|
"null_block_devices": 8,
|
||||||
"nvmet_bin": "/path/to/nvmetcli",
|
"nvmet_bin": "/path/to/nvmetcli",
|
||||||
"sar_settings": true,
|
"sar_settings": true,
|
||||||
"pcm_settings": [/tmp/pcm, 30, 1, 60],
|
"pcm_settings": false,
|
||||||
"enable_bandwidth": [true, 60],
|
"enable_bandwidth": [true, 60],
|
||||||
"enable_dpdk_memory": [true, 30]
|
"enable_dpdk_memory": [true, 30]
|
||||||
"num_shared_buffers": 4096,
|
"num_shared_buffers": 4096,
|
||||||
@ -117,15 +118,9 @@ Optional, common:
|
|||||||
Enable SAR CPU utilization measurement on Target side. SAR thread will
|
Enable SAR CPU utilization measurement on Target side. SAR thread will
|
||||||
wait until fio finishes it's "ramp_time" and then start measurement for
|
wait until fio finishes it's "ramp_time" and then start measurement for
|
||||||
fio "run_time" duration. Default: enabled.
|
fio "run_time" duration. Default: enabled.
|
||||||
- pcm_settings - [path, int(x), int(y), int(z)];
|
- pcm_settings - bool
|
||||||
Enable [PCM](https://github.com/opcm/pcm.git) measurements on Target side.
|
Enable [PCM](https://github.com/opcm/pcm.git) measurements on Target side.
|
||||||
Measurements include CPU, memory and power consumption. "path" points to a
|
Measurements include CPU, memory and power consumption. Default: enabled.
|
||||||
directory where pcm executables are present.
|
|
||||||
"x" - time to wait before starting measurements (suggested it equals to fio
|
|
||||||
ramp_time).
|
|
||||||
"y" - time interval between measurements.
|
|
||||||
"z" - number of measurement samples.
|
|
||||||
Default: disabled.
|
|
||||||
- enable_bandwidth - bool. Measure bandwidth utilization on network
|
- enable_bandwidth - bool. Measure bandwidth utilization on network
|
||||||
interfaces. Default: enabled.
|
interfaces. Default: enabled.
|
||||||
- tuned_profile - tunedadm profile to apply on the system before starting
|
- tuned_profile - tunedadm profile to apply on the system before starting
|
||||||
|
@ -385,11 +385,7 @@ class Target(Server):
|
|||||||
self.pm_interval = 0
|
self.pm_interval = 0
|
||||||
self.pm_count = 1
|
self.pm_count = 1
|
||||||
self.enable_sar = True
|
self.enable_sar = True
|
||||||
self.enable_pcm = False
|
self.enable_pcm = True
|
||||||
self.pcm_dir = ""
|
|
||||||
self.pcm_delay = 0
|
|
||||||
self.pcm_interval = 0
|
|
||||||
self.pcm_count = 0
|
|
||||||
self.enable_bw = True
|
self.enable_bw = True
|
||||||
self.enable_dpdk_memory = False
|
self.enable_dpdk_memory = False
|
||||||
self.dpdk_wait_time = 0
|
self.dpdk_wait_time = 0
|
||||||
@ -414,9 +410,8 @@ class Target(Server):
|
|||||||
self.pm_count = self.pm_count if self.pm_count > 0 else 1
|
self.pm_count = self.pm_count if self.pm_count > 0 else 1
|
||||||
if "enable_sar" in target_config:
|
if "enable_sar" in target_config:
|
||||||
self.enable_sar = target_config["sar_settings"]
|
self.enable_sar = target_config["sar_settings"]
|
||||||
if "pcm_settings" in target_config:
|
if "enable_pcm" in target_config:
|
||||||
self.enable_pcm = True
|
self.enable_pcm = target_config["enable_pcm"]
|
||||||
self.pcm_dir, self.pcm_delay, self.pcm_interval, self.pcm_count = target_config["pcm_settings"]
|
|
||||||
if "enable_bandwidth" in target_config:
|
if "enable_bandwidth" in target_config:
|
||||||
self.enable_bw = target_config["enable_bandwidth"]
|
self.enable_bw = target_config["enable_bandwidth"]
|
||||||
if "enable_dpdk_memory" in target_config:
|
if "enable_dpdk_memory" in target_config:
|
||||||
@ -531,16 +526,16 @@ class Target(Server):
|
|||||||
self.exec_cmd(["sudo", "ethtool", "--set-priv-flags", nic,
|
self.exec_cmd(["sudo", "ethtool", "--set-priv-flags", nic,
|
||||||
"channel-pkt-inspect-optimize", "off"]) # Disable channel packet inspection optimization
|
"channel-pkt-inspect-optimize", "off"]) # Disable channel packet inspection optimization
|
||||||
|
|
||||||
def measure_pcm_memory(self, results_dir, pcm_file_name):
|
def measure_pcm_memory(self, results_dir, pcm_file_name, ramp_time, run_time):
|
||||||
time.sleep(self.pcm_delay)
|
time.sleep(ramp_time)
|
||||||
cmd = ["%s/build/bin/pcm-memory" % self.pcm_dir, "%s" % self.pcm_interval, "-csv=%s/%s" % (results_dir, pcm_file_name)]
|
cmd = ["pcm-memory", "1", "-csv=%s/%s" % (results_dir, pcm_file_name)]
|
||||||
pcm_memory = subprocess.Popen(cmd)
|
pcm_memory = subprocess.Popen(cmd)
|
||||||
time.sleep(self.pcm_count)
|
time.sleep(run_time)
|
||||||
pcm_memory.terminate()
|
pcm_memory.terminate()
|
||||||
|
|
||||||
def measure_pcm(self, results_dir, pcm_file_name):
|
def measure_pcm(self, results_dir, pcm_file_name, ramp_time, run_time):
|
||||||
time.sleep(self.pcm_delay)
|
time.sleep(ramp_time)
|
||||||
cmd = ["%s/build/bin/pcm" % self.pcm_dir, "%s" % self.pcm_interval, "-i=%s" % self.pcm_count,
|
cmd = ["pcm", "1", "-i=%s" % run_time,
|
||||||
"-csv=%s/%s" % (results_dir, pcm_file_name)]
|
"-csv=%s/%s" % (results_dir, pcm_file_name)]
|
||||||
subprocess.run(cmd)
|
subprocess.run(cmd)
|
||||||
df = pd.read_csv(os.path.join(results_dir, pcm_file_name), header=[0, 1])
|
df = pd.read_csv(os.path.join(results_dir, pcm_file_name), header=[0, 1])
|
||||||
@ -549,11 +544,13 @@ class Target(Server):
|
|||||||
skt_pcm_file_name = "_".join(["skt", pcm_file_name])
|
skt_pcm_file_name = "_".join(["skt", pcm_file_name])
|
||||||
skt.to_csv(os.path.join(results_dir, skt_pcm_file_name), index=False)
|
skt.to_csv(os.path.join(results_dir, skt_pcm_file_name), index=False)
|
||||||
|
|
||||||
def measure_pcm_power(self, results_dir, pcm_power_file_name):
|
def measure_pcm_power(self, results_dir, pcm_power_file_name, ramp_time, run_time):
|
||||||
time.sleep(self.pcm_delay)
|
time.sleep(ramp_time)
|
||||||
out = self.exec_cmd(["%s/build/bin/pcm-power" % self.pcm_dir, "%s" % self.pcm_interval, "-i=%s" % self.pcm_count])
|
out = self.exec_cmd(["pcm-power", "1", "-i=%s" % run_time])
|
||||||
with open(os.path.join(results_dir, pcm_power_file_name), "w") as fh:
|
with open(os.path.join(results_dir, pcm_power_file_name), "w") as fh:
|
||||||
fh.write(out)
|
fh.write(out)
|
||||||
|
# TODO: Above command results in a .csv file containing measurements for all gathered samples.
|
||||||
|
# Improve this so that additional file containing measurements average is generated too.
|
||||||
|
|
||||||
def measure_network_bandwidth(self, results_dir, bandwidth_file_name, ramp_time, run_time):
|
def measure_network_bandwidth(self, results_dir, bandwidth_file_name, ramp_time, run_time):
|
||||||
self.log.info("Waiting %d seconds for ramp-up to finish before measuring bandwidth stats" % ramp_time)
|
self.log.info("Waiting %d seconds for ramp-up to finish before measuring bandwidth stats" % ramp_time)
|
||||||
@ -1569,9 +1566,12 @@ if __name__ == "__main__":
|
|||||||
if target_obj.enable_pcm:
|
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_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_cpu_t = threading.Thread(target=target_obj.measure_pcm,
|
||||||
pcm_mem_t = threading.Thread(target=target_obj.measure_pcm_memory, args=(args.results, pcm_fnames[1],))
|
args=(args.results, pcm_fnames[0], fio_ramp_time, fio_run_time))
|
||||||
pcm_pow_t = threading.Thread(target=target_obj.measure_pcm_power, args=(args.results, pcm_fnames[2],))
|
pcm_mem_t = threading.Thread(target=target_obj.measure_pcm_memory,
|
||||||
|
args=(args.results, pcm_fnames[1], fio_ramp_time, fio_run_time))
|
||||||
|
pcm_pow_t = threading.Thread(target=target_obj.measure_pcm_power,
|
||||||
|
args=(args.results, pcm_fnames[2], fio_ramp_time, fio_run_time))
|
||||||
|
|
||||||
threads.append(pcm_cpu_t)
|
threads.append(pcm_cpu_t)
|
||||||
threads.append(pcm_mem_t)
|
threads.append(pcm_mem_t)
|
||||||
|
Loading…
Reference in New Issue
Block a user