Cleanup performance measurements

This commit is contained in:
Sparchatus 2022-06-01 10:05:14 +00:00
parent 8655229548
commit 0334dd73b7
30 changed files with 1436 additions and 37 deletions

View File

@ -15,8 +15,9 @@ MEASUREMENT_REGEX = r"^.* " + MEASUREMENT_TAG + r" ([a-zA-Z_:-]*) ([0-9]*)$"
# TODO change this for the actual measurement
# data_basedir = os.environ.get("BFBUILD_QEMU")
data_basedir = os.environ.get("BFBUILD")
data_file = os.path.join(data_basedir, "full_output.log")
# data_basedir = os.environ.get("BFBUILD")
data_basedir = "./plots"
# data_file = os.path.join(data_basedir, "full_output.log")
out_dir = os.path.join(os.path.dirname(sys.argv[0]), "plots")
def extract_measurement(line):
@ -58,30 +59,15 @@ def build_dataseries(measurements, start_tag, end_tag):
return datapoints
def main():
raw_log = read_data(data_file)
def get_measurements_from_file(file):
raw_log = read_data(os.path.join(data_basedir, file))
measurements = extract_measurements(raw_log)
measurements.sort(key=lambda m: m["timestamp"])
dataset = {}
# dataset["performance"] = build_dataseries(measurements, "aos_performance:start", "aos_performance:done")
# URPC
# dataset["client_to_server"] = build_dataseries(measurements, "aos_urpc_nop:start", "aos_urpc_server:start")
# dataset["server_schedule_task"] = build_dataseries(measurements, "aos_urpc_server:start", "aos_urpc_server:triggered_closure")
# dataset["server_completed_task"] = build_dataseries(measurements, "aos_urpc_server:triggered_closure", "aos_urpc_server:done")
# dataset["server_to_client"] = build_dataseries(measurements, "aos_urpc_server:done", "aos_urpc_nop:done")
# block driver
dataset["block_driver_read_device"] = build_dataseries(measurements, "block_driver_read_object:start", "block_driver_read_object:memcpy")
dataset["block_driver_read_memcpy"] = build_dataseries(measurements, "block_driver_read_object:memcpy", "block_driver_read_object:done")
dataset["block_driver_write_read"] = build_dataseries(measurements, "block_driver_write_object:start", "block_driver_write_object:read")
dataset["block_driver_write_memcpy"] = build_dataseries(measurements, "block_driver_write_object:read", "block_driver_write_object:memcpy")
dataset["block_driver_write_device"] = build_dataseries(measurements, "block_driver_write_object:memcpy", "block_driver_write_object:done")
return measurements
def create_bar_chart(dataset, title, out_file):
# calculate stats for each data series
metrics = {}
for key in dataset:
@ -90,22 +76,10 @@ def main():
d_median = median(dataset[key])
metrics[key] = (d_mean, d_std)
# create output directory
os.makedirs(out_dir, exist_ok=True)
# create plots for data series
for key in dataset:
d = dataset[key]
p.clf()
p.title(key)
p.xlabel("datapoint index")
p.ylabel("duration (cycles)")
p.plot(range(len(d)), d)
p.savefig(os.path.join(out_dir, f"{key}.jpg"))
# create the plot
p.clf()
fig, ax = p.subplots(figsize=(12,5))
p.title("Metrics")
fig, ax = p.subplots() #figsize=(12,5))
p.title(title)
p.ylabel("median duration (cycles)")
p.bar(
metrics.keys(),
@ -113,7 +87,49 @@ def main():
yerr=[x[1] for x in metrics.values()],
)
ax.set_ylim(0)
p.savefig(os.path.join(out_dir, "metrics.jpg"))
p.savefig(os.path.join(out_dir, out_file))
def main():
dataset = {}
# dataset["performance"] = build_dataseries(measurements, "aos_performance:start", "aos_performance:done")
# URPC
# title = "URPC Micro Benchmark"
# dataset["client_to_server"] = build_dataseries(measurements, "aos_urpc_nop:start", "aos_urpc_server:start")
# dataset["server_schedule_task"] = build_dataseries(measurements, "aos_urpc_server:start", "aos_urpc_server:triggered_closure")
# dataset["server_completed_task"] = build_dataseries(measurements, "aos_urpc_server:triggered_closure", "aos_urpc_server:done")
# dataset["server_to_client"] = build_dataseries(measurements, "aos_urpc_server:done", "aos_urpc_nop:done")
# BLOCK DRIVER
# measurements = get_measurements_from_file("block_driver/no_optimization.log")
# dataset = {}
# # we skip the first datapoint here because it is reliably very high compared to all others
# dataset["read_device"] = build_dataseries(measurements, "block_driver_read_object:start", "block_driver_read_object:memcpy")[1:]
# dataset["read_memcpy"] = build_dataseries(measurements, "block_driver_read_object:memcpy", "block_driver_read_object:done")
# dataset["write_read"] = build_dataseries(measurements, "block_driver_write_object:start", "block_driver_write_object:read")
# dataset["write_memcpy"] = build_dataseries(measurements, "block_driver_write_object:read", "block_driver_write_object:memcpy")
# dataset["write_device"] = build_dataseries(measurements, "block_driver_write_object:memcpy", "block_driver_write_object:done")
# create_bar_chart(dataset, "Block Driver Micro Benchmark", "block_driver/no_optimization.jpg")
# measurements = get_measurements_from_file("block_driver/no_sleep.log")
# dataset_compare = {}
# dataset_compare["read_unopt"] = dataset["read_device"]
# dataset_compare["write_unopt"] = dataset["write_device"]
# dataset_compare["read_nosleep"] = build_dataseries(measurements, "block_driver_read_object:start", "block_driver_read_object:memcpy")[1:]
# dataset_compare["write_nosleep"] = build_dataseries(measurements, "block_driver_write_object:memcpy", "block_driver_write_object:done")
# create_bar_chart(dataset_compare, "Block Driver Optimizations", "block_driver/optimizations.jpg")
# create plots for data series
# for key in dataset:
# d = dataset[key]
# p.clf()
# p.title(key)
# p.xlabel("datapoint index")
# p.ylabel("duration (cycles)")
# p.plot(range(len(d)), d)
# p.savefig(os.path.join(out_dir, f"{key}.jpg"))
if __name__ == "__main__":
main()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB