scripts/nvmf_perf: fix clat percentile calculations
In case of latest fio versions "percentile" leaf for clat latency measurements does not get created in case no IO was run (e.g. write clat will not have "percentiles" created in case rw mode was set to randread). This caused KeyError exception when trying to access non- existent dict key. Change-Id: Ie0c28dc932481e5aab971505ba0f38b6798bff36 Signed-off-by: Karol Latecki <karol.latecki@intel.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/5466 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-by: John Kariuki <John.K.Kariuki@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
This commit is contained in:
parent
da625683a6
commit
1bc2a2d9e9
@ -86,6 +86,19 @@ class Target(Server):
|
|||||||
if k.startswith(key_prefix):
|
if k.startswith(key_prefix):
|
||||||
return k, k.split("_")[1]
|
return k, k.split("_")[1]
|
||||||
|
|
||||||
|
def get_clat_percentiles(clat_dict_leaf):
|
||||||
|
if "percentile" in clat_dict_leaf:
|
||||||
|
p99_lat = float(clat_dict_leaf["percentile"]["99.000000"])
|
||||||
|
p99_9_lat = float(clat_dict_leaf["percentile"]["99.900000"])
|
||||||
|
p99_99_lat = float(clat_dict_leaf["percentile"]["99.990000"])
|
||||||
|
p99_999_lat = float(clat_dict_leaf["percentile"]["99.999000"])
|
||||||
|
|
||||||
|
return [p99_lat, p99_9_lat, p99_99_lat, p99_999_lat]
|
||||||
|
else:
|
||||||
|
# Latest fio versions do not provide "percentile" results if no
|
||||||
|
# measurements were done, so just return zeroes
|
||||||
|
return [0, 0, 0, 0]
|
||||||
|
|
||||||
read_iops = float(data["jobs"][job_pos]["read"]["iops"])
|
read_iops = float(data["jobs"][job_pos]["read"]["iops"])
|
||||||
read_bw = float(data["jobs"][job_pos]["read"]["bw"])
|
read_bw = float(data["jobs"][job_pos]["read"]["bw"])
|
||||||
lat_key, lat_unit = get_lat_unit("lat", data["jobs"][job_pos]["read"])
|
lat_key, lat_unit = get_lat_unit("lat", data["jobs"][job_pos]["read"])
|
||||||
@ -93,10 +106,8 @@ class Target(Server):
|
|||||||
read_min_lat = float(data["jobs"][job_pos]["read"][lat_key]["min"])
|
read_min_lat = float(data["jobs"][job_pos]["read"][lat_key]["min"])
|
||||||
read_max_lat = float(data["jobs"][job_pos]["read"][lat_key]["max"])
|
read_max_lat = float(data["jobs"][job_pos]["read"][lat_key]["max"])
|
||||||
clat_key, clat_unit = get_lat_unit("clat", data["jobs"][job_pos]["read"])
|
clat_key, clat_unit = get_lat_unit("clat", data["jobs"][job_pos]["read"])
|
||||||
read_p99_lat = float(data["jobs"][job_pos]["read"][clat_key]["percentile"]["99.000000"])
|
read_p99_lat, read_p99_9_lat, read_p99_99_lat, read_p99_999_lat = get_clat_percentiles(
|
||||||
read_p99_9_lat = float(data["jobs"][job_pos]["read"][clat_key]["percentile"]["99.900000"])
|
data["jobs"][job_pos]["read"][clat_key])
|
||||||
read_p99_99_lat = float(data["jobs"][job_pos]["read"][clat_key]["percentile"]["99.990000"])
|
|
||||||
read_p99_999_lat = float(data["jobs"][job_pos]["read"][clat_key]["percentile"]["99.999000"])
|
|
||||||
|
|
||||||
if "ns" in lat_unit:
|
if "ns" in lat_unit:
|
||||||
read_avg_lat, read_min_lat, read_max_lat = [x / 1000 for x in [read_avg_lat, read_min_lat, read_max_lat]]
|
read_avg_lat, read_min_lat, read_max_lat = [x / 1000 for x in [read_avg_lat, read_min_lat, read_max_lat]]
|
||||||
@ -113,10 +124,8 @@ class Target(Server):
|
|||||||
write_min_lat = float(data["jobs"][job_pos]["write"][lat_key]["min"])
|
write_min_lat = float(data["jobs"][job_pos]["write"][lat_key]["min"])
|
||||||
write_max_lat = float(data["jobs"][job_pos]["write"][lat_key]["max"])
|
write_max_lat = float(data["jobs"][job_pos]["write"][lat_key]["max"])
|
||||||
clat_key, clat_unit = get_lat_unit("clat", data["jobs"][job_pos]["write"])
|
clat_key, clat_unit = get_lat_unit("clat", data["jobs"][job_pos]["write"])
|
||||||
write_p99_lat = float(data["jobs"][job_pos]["write"][clat_key]["percentile"]["99.000000"])
|
write_p99_lat, write_p99_9_lat, write_p99_99_lat, write_p99_999_lat = get_clat_percentiles(
|
||||||
write_p99_9_lat = float(data["jobs"][job_pos]["write"][clat_key]["percentile"]["99.900000"])
|
data["jobs"][job_pos]["write"][clat_key])
|
||||||
write_p99_99_lat = float(data["jobs"][job_pos]["write"][clat_key]["percentile"]["99.990000"])
|
|
||||||
write_p99_999_lat = float(data["jobs"][job_pos]["write"][clat_key]["percentile"]["99.999000"])
|
|
||||||
|
|
||||||
if "ns" in lat_unit:
|
if "ns" in lat_unit:
|
||||||
write_avg_lat, write_min_lat, write_max_lat = [x / 1000 for x in [write_avg_lat, write_min_lat, write_max_lat]]
|
write_avg_lat, write_min_lat, write_max_lat = [x / 1000 for x in [write_avg_lat, write_min_lat, write_max_lat]]
|
||||||
|
Loading…
Reference in New Issue
Block a user