Better global plots
This commit is contained in:
parent
6272ed193b
commit
da9593860d
2 changed files with 104 additions and 30 deletions
47
exp.py
47
exp.py
|
|
@ -137,7 +137,13 @@ CONFIGS = {
|
|||
#{ "filename": "wp2", "repeat": 10000, "time": 300, "reproduce": 100 },
|
||||
#{ "filename": "guardian", "realistic": True, "repeat": 10000, "time": 60, "reproduce": 1 },
|
||||
#{ "filename": "wikipedia", "realistic": True, "repeat": 10000, "time": 120, "reproduce": 10 },
|
||||
{ "filename": "zimbra", "realistic": True, "repeat": 10000, "time": 60, "reproduce": 10 },
|
||||
#{ "filename": "zimbra", "realistic": True, "repeat": 10000, "time": 60, "reproduce": 10 },
|
||||
#{ "filename": "reddit", "realistic": True, "repeat": 10000, "time": 120, "reproduce": 10 },
|
||||
#{ "filename": "amazon", "realistic": True, "repeat": 10000, "time": 120, "reproduce": 10 },
|
||||
{ "filename": "instagram", "realistic": True, "repeat": 10000, "time": 120, "reproduce": 10 },
|
||||
{ "filename": "yt", "realistic": True, "repeat": 10000, "time": 120, "reproduce": 10 },
|
||||
{ "filename": "yt-ublock", "realistic": True, "repeat": 10000, "time": 120, "reproduce": 10 },
|
||||
{ "filename": "guardian-ublock", "realistic": True, "repeat": 10000, "time": 120, "reproduce": 10 },
|
||||
],
|
||||
"repo_dir": "/home/tuxmain/reps/tlsbench",
|
||||
"exp_dir": "/dev/shm/exp",
|
||||
|
|
@ -169,19 +175,22 @@ CONFIGS = {
|
|||
#"debug",
|
||||
],
|
||||
"sides": [
|
||||
#"client",
|
||||
"client",
|
||||
"server",
|
||||
],
|
||||
"tls": [
|
||||
#False,
|
||||
False,
|
||||
True,
|
||||
],
|
||||
"records": [
|
||||
#{ "filename": "wp2", "repeat": 10000, "time": 600, "reproduce": 1 },
|
||||
{ "filename": "yt2-ads", "repeat": 10000, "time": 600, "reproduce": 1 },
|
||||
{ "filename": "yt2-ublock", "repeat": 10000, "time": 600, "reproduce": 1 },
|
||||
#{ "filename": "yt2-ads", "repeat": 10000, "time": 600, "reproduce": 1 },
|
||||
#{ "filename": "yt2-ublock", "repeat": 10000, "time": 600, "reproduce": 1 },
|
||||
#{ "filename": "test", "repeat": 1, "time": 10 },
|
||||
#{ "filename": "wp2", "repeat": 10000, "time": 300, "reproduce": 100 },
|
||||
#{ "filename": "wikipedia", "realistic": True, "repeat": 10000, "time": 60, "reproduce": 10 },
|
||||
#{ "filename": "yt", "realistic": True, "repeat": 10000, "time": 120, "reproduce": 10 },
|
||||
{ "filename": "amazon", "realistic": True, "repeat": 10000, "time": 120, "reproduce": 10 },
|
||||
],
|
||||
"repo_dir": "/home/tuxmain/reps/tlsbench",
|
||||
"exp_dir": "/dev/shm/exp",
|
||||
|
|
@ -216,14 +225,19 @@ CONFIGS = {
|
|||
"server",
|
||||
],
|
||||
"tls": [
|
||||
#False,
|
||||
False,
|
||||
True,
|
||||
],
|
||||
"records": [
|
||||
{ "filename": "wp2", "repeat": 10000, "time": 300, "reproduce": 2 },
|
||||
{ "filename": "yt2-ads", "repeat": 10000, "time": 300, "reproduce": 2 },
|
||||
{ "filename": "yt2-ublock", "repeat": 10000, "time": 300, "reproduce": 2 },
|
||||
#{ "filename": "wp2", "repeat": 10000, "time": 300, "reproduce": 100 },
|
||||
#{ "filename": "wp2", "repeat": 10000, "time": 300, "reproduce": 2 },
|
||||
#{ "filename": "yt2-ads", "repeat": 10000, "time": 300, "reproduce": 2 },
|
||||
#{ "filename": "yt2-ublock", "repeat": 10000, "time": 300, "reproduce": 2 },
|
||||
{ "filename": "yt-ublock", "realistic": True, "repeat": 10000, "time": 60, "reproduce": 10 },
|
||||
{ "filename": "guardian", "realistic": True, "repeat": 10000, "time": 60, "reproduce": 10 },
|
||||
{ "filename": "guardian-ublock", "realistic": True, "repeat": 10000, "time": 60, "reproduce": 10 },
|
||||
{ "filename": "amazon", "realistic": True, "repeat": 10000, "time": 60, "reproduce": 10 },
|
||||
{ "filename": "wikipedia", "realistic": True, "repeat": 10000, "time": 60, "reproduce": 10 },
|
||||
{ "filename": "reddit", "realistic": True, "repeat": 10000, "time": 60, "reproduce": 10 },
|
||||
],
|
||||
"repo_dir": "/home/tuxmain/reps/tlsbench",
|
||||
"exp_dir": "/dev/shm/exp",
|
||||
|
|
@ -354,7 +368,7 @@ CERT_SIGN_ALGS = [
|
|||
IMPLS = [
|
||||
"aws-lc", # Amazon's crypto widely used in Rust stuff
|
||||
"boring", # Google's fork of OpenSSL used in Chrome and Android
|
||||
#"graviola", # New crypto in Rust
|
||||
"graviola", # New crypto in Rust
|
||||
"openssl", # widely used
|
||||
#"openssl-static",
|
||||
"ring", # used in most Rust stuff
|
||||
|
|
@ -482,7 +496,10 @@ EXPERIMENTS = {
|
|||
#"rsa4096",
|
||||
"realistic",
|
||||
],
|
||||
"earlydata": ["0", "1"],
|
||||
"earlydata": [
|
||||
"0",
|
||||
"1"
|
||||
],
|
||||
},
|
||||
}
|
||||
|
||||
|
|
@ -684,7 +701,7 @@ def run_netreplay_client(
|
|||
if skip_verif:
|
||||
cmd.append("-s")
|
||||
if concurrency != None:
|
||||
cmd += ["--concurrency", concurrency]
|
||||
cmd += ["--concurrency", str(concurrency)]
|
||||
cmdline = " ".join(cmd)
|
||||
#print(cmdline)
|
||||
return ssh_run_bg(ssh, cmdline, env)
|
||||
|
|
@ -918,7 +935,7 @@ def run_exp(config, only_record=None, idle=False, shutdown=False, debug=False):
|
|||
debug=debug,
|
||||
notify_addr=config["notify_addr"],
|
||||
ld_preload=config["ld_preload"] if "ld_preload" in config else None,
|
||||
concurrency=config.get("concurrency"),
|
||||
concurrency=record.get("concurrency", config.get("concurrency")),
|
||||
)
|
||||
else:
|
||||
netreplay = run_netreplay_server(
|
||||
|
|
@ -957,7 +974,7 @@ def run_exp(config, only_record=None, idle=False, shutdown=False, debug=False):
|
|||
notify_addr=config["notify_addr"],
|
||||
ld_preload=config["ld_preload"] if "ld_preload" in config else None,
|
||||
skip_verif=not config["measure_both"],
|
||||
concurrency=config.get("concurrency"),
|
||||
concurrency=record.get("concurrency", config.get("concurrency")),
|
||||
)
|
||||
|
||||
prof_filename = "-"
|
||||
|
|
|
|||
87
plots.py
87
plots.py
|
|
@ -68,22 +68,53 @@ CRITERION_TITLE = {
|
|||
}
|
||||
PRETTY_TABLE = {
|
||||
"pi3": "Pi",
|
||||
"paradoxe": "X",
|
||||
"core2": "C2",
|
||||
|
||||
"wp2": "WP",
|
||||
"yt2-ads": "YT",
|
||||
"yt2-ublock": "YT+µ",
|
||||
"paradoxe": "X",
|
||||
"core2": "C2",
|
||||
|
||||
"wikipedia": "Wikipedia",
|
||||
"yt": "YouTube",
|
||||
"yt-ublock": "YouTube+µ",
|
||||
"guardian": "Guardian",
|
||||
"guardian-ublock": "Guardian+µ",
|
||||
"reddit": "Reddit",
|
||||
"zimbra": "Zimbra",
|
||||
"amazon": "Amazon",
|
||||
"instagram": "Instagram",
|
||||
}
|
||||
PRETTY_TABLE_GNUPLOT = {
|
||||
"pi3": "Pi",
|
||||
"wp2": "WP",
|
||||
"yt2-ads": "YT",
|
||||
"yt2-ublock": "YT+µ",
|
||||
"paradoxe": "X",
|
||||
"core2": "C2",
|
||||
"i5": "i5",
|
||||
|
||||
"wp2": "WP",
|
||||
"yt2-ads": "YT",
|
||||
"yt2-ublock": "YT+µ",
|
||||
|
||||
"wikipedia": "Wikipedia",
|
||||
"yt": "YouTube",
|
||||
"yt-ublock": "YouTube+µ",
|
||||
"guardian": "Guardian",
|
||||
"guardian-ublock": "Guardian+µ",
|
||||
"reddit": "Reddit",
|
||||
"zimbra": "Zimbra",
|
||||
"amazon": "Amazon",
|
||||
"instagram": "Instagram",
|
||||
|
||||
"pq-ec": "PQ/EC",
|
||||
"ec0rtt-ec": "0-RTT/EC",
|
||||
"pq0rtt-pq": "0-RTT/PQ",
|
||||
"pq0rtt-ec": "PQ+0-RTT/EC",
|
||||
"13-12": "1.3/1.2",
|
||||
"12-plain": "1.2/none",
|
||||
}
|
||||
|
||||
FIX_POWER_TARGETS = ["paradoxe-40", "paradoxe-61", "paradoxe-62", "paradoxe-64"]
|
||||
|
||||
# "cluster-number" to "cluster"
|
||||
def cluster_name(target):
|
||||
return target[:target.find("-")] if "-" in target else target
|
||||
|
|
@ -864,10 +895,14 @@ def analyze_average_logs(logs, target=None):
|
|||
idle_val = {}
|
||||
|
||||
for log in logs:
|
||||
fix_power_factor = 1
|
||||
if log["target"] in FIX_POWER_TARGETS:
|
||||
fix_power_factor = 2
|
||||
|
||||
if log["exp"] == "idle":
|
||||
idle_val[log["target"]] = {
|
||||
"cpu": float(log["cpu"]) / float(log["time"]),
|
||||
"energy": float(log["Wh"]) / float(log["time"]) * 3600,
|
||||
"energy": float(log["Wh"]) / float(log["time"]) * 3600 * fix_power_factor,
|
||||
"in": float(log["bytes_in"]) / float(log["time"]),
|
||||
"out": float(log["bytes_out"]) / float(log["time"]),
|
||||
}
|
||||
|
|
@ -878,8 +913,9 @@ def analyze_average_logs(logs, target=None):
|
|||
plain_results[plain_result_key(log)].append({
|
||||
"target": log["target"],
|
||||
"cpu": (float(log["cpu"]) - idle_val[log["target"]]["cpu"] * float(log["time"])) / n,
|
||||
"total_energy": float(log["Wh"]) * 3600 / n,
|
||||
"energy": (float(log["Wh"]) * 3600 - idle_val[log["target"]]["energy"] * float(log["time"])) / n,
|
||||
"total_energy": float(log["Wh"]) * 3600 / n * fix_power_factor,
|
||||
"total_power": float(log["Wh"]) * 3600 / float(log["time"]) * fix_power_factor,
|
||||
"energy": (float(log["Wh"]) * 3600 * fix_power_factor - idle_val[log["target"]]["energy"] * float(log["time"])) / n,
|
||||
"in": (float(log["bytes_in"]) - idle_val[log["target"]]["in"] * float(log["time"])) / n,
|
||||
"out": (float(log["bytes_out"]) - idle_val[log["target"]]["out"] * float(log["time"])) / n,
|
||||
"cpu": float(log["cpu"]) / n,
|
||||
|
|
@ -900,8 +936,9 @@ def analyze_average_logs(logs, target=None):
|
|||
"ed": log["ed"],
|
||||
"idle": idle_val[log["target"]]["energy"],
|
||||
"cpu": float(log["cpu"]) / n,
|
||||
"total_energy": float(log["Wh"]) * 3600 / n,
|
||||
"energy": (float(log["Wh"]) * 3600 - idle_val[log["target"]]["energy"] * float(log["time"])) / n,
|
||||
"total_energy": float(log["Wh"]) * 3600 / n * fix_power_factor,
|
||||
"total_power": float(log["Wh"]) * 3600 / float(log["time"]) * fix_power_factor,
|
||||
"energy": (float(log["Wh"]) * 3600 * fix_power_factor - idle_val[log["target"]]["energy"] * float(log["time"])) / n,
|
||||
"in": (float(log["bytes_in"]) - idle_val[log["target"]]["in"] * float(log["time"])) / n,
|
||||
"out": (float(log["bytes_out"]) - idle_val[log["target"]]["out"] * float(log["time"])) / n,
|
||||
})
|
||||
|
|
@ -1173,6 +1210,10 @@ def make_summary_plot(logs):
|
|||
"plain_cpu": plain_cpu,
|
||||
"tls_cpu": tls_cpu,
|
||||
"tls_only_cpu": tls_only_cpu,
|
||||
"plain_total_energy": log["plain"]["total_energy"],
|
||||
"tls_total_energy": log["tls"]["total_energy"],
|
||||
"plain_total_power": log["plain"]["total_power"],
|
||||
"tls_total_power": log["tls"]["total_power"],
|
||||
})
|
||||
lines.append([
|
||||
log["exp"],
|
||||
|
|
@ -1300,6 +1341,10 @@ def make_summary_plot(logs):
|
|||
f.close()
|
||||
|
||||
cmps = {
|
||||
"13-12": {
|
||||
"new": {"cipher": "AES_256_GCM_SHA384", "kex": "X25519", "ed": "0"},
|
||||
"old": {"cipher": "ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,ECDHE_RSA_WITH_AES_256_GCM_SHA384", "kex": "X25519", "ed": "0"},
|
||||
},
|
||||
"pq-ec": {
|
||||
"new": {"cipher": "AES_256_GCM_SHA384", "kex": "X25519MLKEM768", "ed": "0"},
|
||||
"old": {"cipher": "AES_256_GCM_SHA384", "kex": "X25519", "ed": "0"},
|
||||
|
|
@ -1316,12 +1361,12 @@ def make_summary_plot(logs):
|
|||
"new": {"cipher": "AES_256_GCM_SHA384", "kex": "X25519MLKEM768", "ed": "1"},
|
||||
"old": {"cipher": "AES_256_GCM_SHA384", "kex": "X25519", "ed": "0"},
|
||||
},
|
||||
"13-12": {
|
||||
"new": {"cipher": "AES_256_GCM_SHA384", "kex": "X25519", "ed": "0"},
|
||||
"old": {"cipher": "ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,ECDHE_RSA_WITH_AES_256_GCM_SHA384", "kex": "X25519", "ed": "0"},
|
||||
},
|
||||
}
|
||||
|
||||
f_all_cmp_client = open("/dev/shm/plots/cmp-client.dat", "w")
|
||||
f_all_cmp_server = open("/dev/shm/plots/cmp-server.dat", "w")
|
||||
f_all_cmp_io = open("/dev/shm/plots/cmp-io.dat", "w")
|
||||
|
||||
for cmp_name in cmps:
|
||||
cmp = cmps[cmp_name]
|
||||
samples_energy_client = []
|
||||
|
|
@ -1359,24 +1404,36 @@ def make_summary_plot(logs):
|
|||
f = open(f"/dev/shm/plots/{cmp_name}-client.dat", "w")
|
||||
for sample in samples_energy_client:
|
||||
f.write(f"{sample}\n")
|
||||
f_all_cmp_client.write("{} {}\n".format(PRETTY_TABLE_GNUPLOT[cmp_name], sample))
|
||||
f.close()
|
||||
f = open(f"/dev/shm/plots/{cmp_name}-server.dat", "w")
|
||||
for sample in samples_energy_server:
|
||||
f.write(f"{sample}\n")
|
||||
f_all_cmp_server.write("{} {}\n".format(PRETTY_TABLE_GNUPLOT[cmp_name], sample))
|
||||
f.close()
|
||||
f = open(f"/dev/shm/plots/{cmp_name}-io.dat", "w")
|
||||
for sample in samples_io:
|
||||
f.write(f"{sample}\n")
|
||||
f_all_cmp_io.write("{} {}\n".format(PRETTY_TABLE_GNUPLOT[cmp_name], sample))
|
||||
f.close()
|
||||
|
||||
f_energy = open("/dev/shm/plots/energy-global.dat", "w")
|
||||
f_io = open("/dev/shm/plots/io-global.dat", "w")
|
||||
for log in results:
|
||||
f_energy.write("{}-{} {}\n".format(PRETTY_TABLE_GNUPLOT.get(cluster_name(log["target"]), log["target"]), log["side"], log["tls_rel_energy"] * 100.0))
|
||||
f_energy.write("{}-{} {} {}\n".format(PRETTY_TABLE_GNUPLOT.get(cluster_name(log["target"]), log["target"]), log["side"], log["tls_rel_energy"] * 100.0, log["tls_total_power"], log["plain_total_power"]))
|
||||
f_io.write("{}-{} {}\n".format(PRETTY_TABLE_GNUPLOT.get(cluster_name(log["target"]), log["target"]), log["side"], log["tls_rel_io"] * 100.0))
|
||||
#if log["side"] == "client":
|
||||
# f_all_cmp_client.write("{} {}\n".format(PRETTY_TABLE_GNUPLOT["12-plain"], log["tls_rel_energy"] * 100.0))
|
||||
#if log["side"] == "server":
|
||||
# f_all_cmp_server.write("{} {}\n".format(PRETTY_TABLE_GNUPLOT["12-plain"], log["tls_rel_energy"] * 100.0))
|
||||
f_all_cmp_io.write("{} {}\n".format(PRETTY_TABLE_GNUPLOT["12-plain"], log["tls_rel_io"] * 100.0))
|
||||
f_energy.close()
|
||||
f_io.close()
|
||||
|
||||
f_all_cmp_client.close()
|
||||
f_all_cmp_server.close()
|
||||
f_all_cmp_io.close()
|
||||
|
||||
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
|
||||
|
|
|
|||
Loading…
Reference in a new issue