Reproduce setting
This commit is contained in:
parent
0f52f2813d
commit
cf463794fb
2 changed files with 265 additions and 205 deletions
91
plots.py
91
plots.py
|
|
@ -283,7 +283,7 @@ def make_log_plot(logs, exp, criterion, side, obj, record, machine=None, version
|
|||
maketitle=maketitle
|
||||
)
|
||||
|
||||
def make_log_plot_points(logs_by_target, exp, criterion, side, obj, record):
|
||||
def make_log_plot_points(logs_by_target, exp, criterion, side, obj, record, version=None):
|
||||
f = open(f"/dev/shm/plots/{obj}_by_{criterion}_{side}_{record}.dat", "w")
|
||||
ciphers = {target: {} for target in logs_by_target}
|
||||
impls = []
|
||||
|
|
@ -305,9 +305,9 @@ def make_log_plot_points(logs_by_target, exp, criterion, side, obj, record):
|
|||
n = float(log.get("n", "1000"))
|
||||
plain[target] = (float(log[COL[obj]]) * conv_factor - idle_val[target] * float(log["time"])) / n
|
||||
|
||||
for target in plain:
|
||||
if plain[target] == None:
|
||||
return
|
||||
#for target in plain:
|
||||
# if plain[target] == None:
|
||||
# return
|
||||
|
||||
for target in logs_by_target:
|
||||
logs = logs_by_target[target]
|
||||
|
|
@ -334,17 +334,28 @@ def make_log_plot_points(logs_by_target, exp, criterion, side, obj, record):
|
|||
for impl in impls:
|
||||
if impl not in ciphers[target][cipher]:
|
||||
ciphers[target][cipher][impl] = 0
|
||||
cipher_parts = cipher.split("/")
|
||||
f.write("{} {}({}) {} {}\n".format(
|
||||
target,
|
||||
ALG_LABEL[cipher_parts[0]],
|
||||
cipher_parts[1],
|
||||
plain[target],
|
||||
" ".join([
|
||||
str(ciphers[target][cipher][impl])
|
||||
for impl in impls
|
||||
]),
|
||||
))
|
||||
if version == None:
|
||||
cipher_parts = cipher.split("/")
|
||||
f.write("{} {}({}) {} {}\n".format(
|
||||
target,
|
||||
ALG_LABEL[cipher_parts[0]],
|
||||
cipher_parts[1],
|
||||
plain[target],
|
||||
" ".join([
|
||||
str(ciphers[target][cipher][impl] if ciphers[target][cipher][impl] > 0 else "-")
|
||||
for impl in impls
|
||||
]),
|
||||
))
|
||||
else:
|
||||
f.write("{} {} {} {}\n".format(
|
||||
target,
|
||||
ALG_LABEL[cipher],
|
||||
plain[target],
|
||||
" ".join([
|
||||
str(ciphers[target][cipher][impl] if ciphers[target][cipher][impl] > 0 else "-")
|
||||
for impl in impls
|
||||
]),
|
||||
))
|
||||
f.close()
|
||||
|
||||
def make_profile_plot(logs, exp, criterion, side, record, no_flamegraph=False, machine=None, version=None, maketitle=False):
|
||||
|
|
@ -822,6 +833,42 @@ def make_tx_summary(client_logs, server_logs):
|
|||
])
|
||||
print(tabulate(latex, separator=" & ", endline="\\\\ \\cline{2-8}", ruler=False))
|
||||
|
||||
def compute_box_plot(a):
|
||||
a.sort()
|
||||
median = a[len(a)//2] if len(a)%2 == 1 else (a[len(a)//2-1]+a[len(a)//2])/2
|
||||
h1 = a[:len(a)//2]
|
||||
h2 = a[(len(a)+1)//2:]
|
||||
q1 = h1[len(h1)//2] if len(h1)%2 == 1 else (h1[len(h1)//2-1]+h1[len(h1)//2])/2
|
||||
q3 = h2[len(h2)//2] if len(h2)%2 == 1 else (h2[len(h2)//2-1]+h2[len(h2)//2])/2
|
||||
return [a[0], q1, median, q3, a[-1]]
|
||||
|
||||
def make_stability_plot(logs_by_target):
|
||||
f = open(f"/dev/shm/plots/stability.dat", "w")
|
||||
idle_val = {target: None for target in logs_by_target}
|
||||
|
||||
for target in logs_by_target:
|
||||
logs = logs_by_target[target]
|
||||
for log in logs:
|
||||
if log["exp"] == "idle":
|
||||
idle_val[target] = {
|
||||
"energy": float(log[COL["energy"]]) / float(log["time"]) * 3600.0,
|
||||
"io": float(log["bytes_in"])+float(log["bytes_out"]) / float(log["time"]),
|
||||
}
|
||||
|
||||
for target in logs_by_target:
|
||||
logs = logs_by_target[target]
|
||||
for log in logs:
|
||||
if log["exp"] == "idle":
|
||||
continue
|
||||
n = float(log.get("n", "1000"))
|
||||
f.write("{}-{} {} {}\n".format(
|
||||
target,
|
||||
log["side"],
|
||||
(float(log[COL["energy"]]) * 3600.0 - idle_val[target]["energy"] * float(log["time"])) / n,
|
||||
(float(log["bytes_in"])+float(log["bytes_out"]) - idle_val[target]["io"] * float(log["time"])) / n / 1024**2
|
||||
))
|
||||
f.close()
|
||||
|
||||
def getargv(arg:str, default="", n:int=1, args:list=sys.argv):
|
||||
if arg in args and len(args) > args.index(arg)+n:
|
||||
return args[args.index(arg)+n]
|
||||
|
|
@ -889,9 +936,9 @@ if __name__ == "__main__":
|
|||
records.pop(record)
|
||||
for side in ["client", "server"]:
|
||||
for record in records:
|
||||
make_log_plot_points(logs_by_target, "impl-cipher-ver", "cipher", side, "energy", record)
|
||||
make_log_plot_points(logs_by_target, "impl-cert-ver", "cert", side, "energy", record)
|
||||
make_log_plot_points(logs_by_target, "impl-kex-ver", "kex", side, "energy", record)
|
||||
make_log_plot_points(logs_by_target, "impl-cipher-ver", "cipher", side, "energy", record, version="1.3")
|
||||
make_log_plot_points(logs_by_target, "impl-cert-ver", "cert", side, "energy", record, version="1.3")
|
||||
make_log_plot_points(logs_by_target, "impl-kex-ver", "kex", side, "energy", record, version="1.3")
|
||||
cmp_versions(logs, ["impl-cipher-ver", "impl-cert-ver", "impl-kex-ver"], ["side", "cipher", "cert", "kex", "record"], ["cpu", "energy"])
|
||||
elif cmd == "prof":
|
||||
for side in ["client", "server"]:
|
||||
|
|
@ -926,3 +973,11 @@ if __name__ == "__main__":
|
|||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
make_linear_regression(logs, "alg")
|
||||
elif cmd == "stab":
|
||||
# Args: stab <file1> <target1> [<file2> <target2>] [...]
|
||||
logs_by_target = {sys.argv[3]: logs}
|
||||
for i in range(4, len(sys.argv), 2):
|
||||
logs_i, records_i = parse_logs(sys.argv[i])
|
||||
target_i = sys.argv[i+1]
|
||||
logs_by_target[target_i] = logs_i
|
||||
make_stability_plot(logs_by_target)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue