Skip to content

Commit c62e657

Browse files
committed
crimson/tools: support absolute mode when WA is meaningless
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
1 parent 6671ba6 commit c62e657

File tree

1 file changed

+47
-18
lines changed

1 file changed

+47
-18
lines changed

tools/crimson/seastore_metrics_analyze.py

Lines changed: 47 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -702,7 +702,7 @@ def get_diff_l3(metric_name, dataset, metrics_start, metrics_end):
702702
# src -> extent-type -> effort-type -> blocks
703703
get_diff_l3("committed_disk_efforts_4KB", dataset, metrics_start, metrics_end)
704704

705-
def wash_dataset(dataset, writes_4KB, times_sec):
705+
def wash_dataset(dataset, writes_4KB, times_sec, absolute):
706706
def merge_lists(lists):
707707
assert(len(lists))
708708
length = 0
@@ -929,7 +929,10 @@ def filter_out_empty_l2_from_l3(l3_items):
929929
fresh_invalid_4KB = {}
930930
mutate_delta_4KB = {}
931931
for src, committed_disk_efforts in dataset["committed_disk_efforts_4KB"].items():
932-
data_name = "write_amplification_by_extent---" + src
932+
if absolute:
933+
data_name = "write_4KB_by_extent---" + src
934+
else:
935+
data_name = "write_amplification_by_extent---" + src
933936

934937
inplace_merge_l2_from_l3("LADDR", "LADDR_LEAF", "LADDR_INTERNAL", committed_disk_efforts)
935938
inplace_merge_l2_from_l3("OMAP", "OMAP_LEAF", "OMAP_INNER", committed_disk_efforts)
@@ -943,7 +946,7 @@ def filter_out_empty_l2_from_l3(l3_items):
943946
fresh_inline = []
944947
fresh_invalid = []
945948
mutate_delta = []
946-
total_committed_disk_efforts = {}
949+
output = {}
947950
for ext_name, items_by_effort in non_empty_committed_disk_efforts.items():
948951
assert(len(items_by_effort) == 4)
949952

@@ -955,23 +958,30 @@ def filter_out_empty_l2_from_l3(l3_items):
955958
total_disk_writes = merge_lists([items_by_effort["FRESH_INLINE"],
956959
items_by_effort["FRESH_OOL"],
957960
items_by_effort["MUTATE_DELTA"]])
958-
total_committed_disk_efforts[ext_name] = total_disk_writes
961+
output[ext_name] = total_disk_writes
959962

960963
commit_srcs.append(src)
961964
fresh_ool_4KB[src] = merge_lists(fresh_ool)
962965
fresh_inline_4KB[src] = merge_lists(fresh_inline)
963966
fresh_invalid_4KB[src] = merge_lists(fresh_invalid)
964967
mutate_delta_4KB[src] = merge_lists(mutate_delta)
965-
data = get_ratio_l2_by_l1(total_committed_disk_efforts, writes_4KB)
966-
washed_dataset[data_name] = data
968+
if absolute:
969+
output["writes_4KB"] = writes_4KB
970+
else:
971+
output = get_ratio_l2_by_l1(output, writes_4KB)
972+
washed_dataset[data_name] = output
967973

968974
# 9.x write_amplification_detail
969975
valid_data_4K = {}
970976
valid_metadata_4K = {}
971977
valid_ool_padding_4K = {}
972978
invalid_write_4K = {}
973979
for src in commit_srcs:
974-
data_name = "write_amplification_detail---" + src
980+
if absolute:
981+
data_name = "write_4KB_detail---" + src
982+
else:
983+
data_name = "write_amplification_detail---" + src
984+
975985
invalid_ool = dataset["invalidated_ool_record_4KB"][src]
976986
valid_ool_data = dataset["committed_ool_record_data_4KB"][src]
977987
assert(fresh_ool_4KB[src] == valid_ool_data)
@@ -982,7 +992,7 @@ def filter_out_empty_l2_from_l3(l3_items):
982992
inline_retired_data = fresh_invalid_4KB[src]
983993
inline_delta_data = mutate_delta_4KB[src]
984994
inline_metadata = dataset["committed_inline_record_metadata_4KB"][src]
985-
output_4KB = {
995+
output = {
986996
"INVALID_OOL": invalid_ool,
987997
"VALID_OOL_DATA": valid_ool_data,
988998
"VALID_OOL_METADATA": valid_ool_metadata,
@@ -992,8 +1002,11 @@ def filter_out_empty_l2_from_l3(l3_items):
9921002
"INLINE_DELTA_DATA": inline_delta_data,
9931003
"INLINE_METADATA": inline_metadata,
9941004
}
995-
output_ratio = get_ratio_l2_by_l1(output_4KB, writes_4KB)
996-
washed_dataset[data_name] = output_ratio
1005+
if absolute:
1006+
output["writes_4KB"] = writes_4KB
1007+
else:
1008+
output = get_ratio_l2_by_l1(output, writes_4KB)
1009+
washed_dataset[data_name] = output
9971010

9981011
valid_data = merge_lists([valid_ool_data,
9991012
inline_fresh_data,
@@ -1008,7 +1021,10 @@ def filter_out_empty_l2_from_l3(l3_items):
10081021
invalid_write_4K[src] = invalid_write
10091022

10101023
# 10. write_amplification_by_src
1011-
data_name = "write_amplification_by_src"
1024+
if absolute:
1025+
data_name = "write_4KB_by_src"
1026+
else:
1027+
data_name = "write_amplification_by_src"
10121028
data_10 = {}
10131029
mutate_trans_data_write = []
10141030
for src in commit_srcs:
@@ -1023,15 +1039,21 @@ def filter_out_empty_l2_from_l3(l3_items):
10231039
if src == "MUTATE":
10241040
mutate_trans_data_write = valid_data_4K[src]
10251041
if commit_srcs:
1026-
data_10_ratio = get_ratio_l2_by_l1(data_10, writes_4KB)
1027-
washed_dataset[data_name] = data_10_ratio
1042+
if absolute:
1043+
data_10["writes_4KB"] = writes_4KB
1044+
else:
1045+
data_10 = get_ratio_l2_by_l1(data_10, writes_4KB)
1046+
washed_dataset[data_name] = data_10
10281047

10291048
# 11. write_amplification_overall
10301049
segmented_read = dataset["segment_read_4KB"]
10311050
segmented_write = merge_lists([dataset["segment_write_4KB"],
10321051
dataset["segment_write_meta_4KB"]])
10331052
if commit_srcs:
1034-
data_name = "write_amplification_overall"
1053+
if absolute:
1054+
data_name = "write_4KB_overall"
1055+
else:
1056+
data_name = "write_amplification_overall"
10351057

10361058
account1 = merge_lists(dataset["invalidated_ool_record_4KB"].values())
10371059
account2 = merge_lists(dataset["committed_ool_record_padding_4KB"].values())
@@ -1078,8 +1100,11 @@ def filter_out_empty_l2_from_l3(l3_items):
10781100
"AW_ELSE": aw_else,
10791101
"MUTATE_TRANS_DATA_WRITE": mutate_trans_data_write,
10801102
}
1081-
data_11_ratio = get_ratio_l2_by_l1(data_11, writes_4KB)
1082-
washed_dataset[data_name] = data_11_ratio
1103+
if absolute:
1104+
data_11["writes_4KB"] = writes_4KB
1105+
else:
1106+
data_11 = get_ratio_l2_by_l1(data_11, writes_4KB)
1107+
washed_dataset[data_name] = data_11
10831108

10841109
# 12. record_fullness
10851110
data_name = "record_fullness"
@@ -1309,6 +1334,9 @@ def relplot_data(directory, bench_type, name, data, indexes, ylim):
13091334
parser.add_argument(
13101335
"-d", "--directory", type=str,
13111336
help="result directory to evaluate", default="results")
1337+
parser.add_argument(
1338+
"--absolute", action='store_true',
1339+
help="no write amplification")
13121340
args = parser.parse_args()
13131341

13141342
print("loading dir %s ..." % (args.directory))
@@ -1360,8 +1388,9 @@ def relplot_data(directory, bench_type, name, data, indexes, ylim):
13601388
print("parse results done")
13611389
print()
13621390

1363-
print("wash results ...")
1364-
dataset, indexes = wash_dataset(raw_dataset, writes_4KB, times)
1391+
print("wash results (absolute=%s) ..." % (args.absolute))
1392+
dataset, indexes = wash_dataset(
1393+
raw_dataset, writes_4KB, times, args.absolute)
13651394
print("wash results done")
13661395
print()
13671396

0 commit comments

Comments
 (0)