Better global plots

This commit is contained in:
Pascal Engélibert 2026-09-04 16:41:32 +02:00
commit da9593860d
2 changed files with 104 additions and 30 deletions

View file

@ -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,23 +1404,35 @@ 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()