diff --git a/.gitignore b/.gitignore index 736ffad..cdc0cb4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -netreplay +netreplay* powercap __pycache__ rpxy_* diff --git a/exp.py b/exp.py index c7aab73..b75935a 100644 --- a/exp.py +++ b/exp.py @@ -35,16 +35,16 @@ CONFIGS = { "local": { "experiments": [ "impl-cipher-ver", - "impl-cert-ver", - "impl-kex-ver", + #"impl-cert-ver", + #"impl-kex-ver", ], "setups": [ - "none-local", + #"none-local", "client-local", - "server-local", + #"server-local", ], "records": [ - { "filename": "youtube", "repeat": 1 }, + { "filename": "wikipedia", "repeat": 50 }, ], "repodir": "/home/tuxmain/reps/tlsbench", "expdir": "/dev/shm/exp", @@ -53,7 +53,7 @@ CONFIGS = { "p2_addr": "127.0.0.1", "p2_repodir": "/home/tuxmain/reps/tlsbench", "wattmeter": False, - "perf": True, + "perf": False, "rapl": False, "perf_dir": "/home/tuxmain/.cache/exp", "p3_suffix": ".localhost", @@ -64,17 +64,17 @@ CONFIGS = { "pi3": { "experiments": [ "impl-cipher-ver", - "impl-cert-ver", - "impl-kex-ver", - "zrtt" + #"impl-cert-ver", + #"impl-kex-ver", + #"zrtt" ], "setups": [ - "none", + #"none", "client", - "server", + #"server", ], "records": [ - { "filename": "wikipedia", "repeat": 400 }, + { "filename": "wikipedia", "repeat": 10 }, ], "repodir": "/home/tuxmain/reps/tlsbench", "expdir": "/dev/shm/exp", @@ -333,11 +333,11 @@ CERT_SIGN_ALGS = [ ] IMPLS = [ "aws_lc", # Amazon's Rust crypto widely used in Rust stuff - "boring", # Google's fork of OpenSSL used in Chrome and Android - "graviola", # New crypto in Rust - "openssl", # widely used - "ring", # used in most Rust stuff - "symcrypt", # Microsoft's crypto + #"boring", # Google's fork of OpenSSL used in Chrome and Android + #"graviola", # New crypto in Rust + #"openssl", # widely used + #"ring", # used in most Rust stuff + #"symcrypt", # Microsoft's crypto #"wolfcrypt" # used in embedded (won't build with rpxy for now) ] # Symmetric ciphers @@ -369,12 +369,12 @@ EXPERIMENTS = { "impl-cipher-ver": { "impls": IMPLS, "ciphers": [ - "AES_128_GCM_SHA256", - "AES_256_GCM_SHA384", - "CHACHA20_POLY1305_SHA256", + #"AES_128_GCM_SHA256", + #"AES_256_GCM_SHA384", + #"CHACHA20_POLY1305_SHA256", "ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,ECDHE_RSA_WITH_AES_128_GCM_SHA256", - "ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,ECDHE_RSA_WITH_AES_256_GCM_SHA384", - "ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", + #"ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,ECDHE_RSA_WITH_AES_256_GCM_SHA384", + #"ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", ], "kexes": ["X25519"], "cert": ["prime256v1"], @@ -384,7 +384,7 @@ EXPERIMENTS = { "impl-cert-ver": { "impls": IMPLS, "ciphers": [ - "AES_128_GCM_SHA256", + #"AES_128_GCM_SHA256", "ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,ECDHE_RSA_WITH_AES_128_GCM_SHA256", ], "kexes": ["X25519"], @@ -690,10 +690,10 @@ def make_rpxy_config(outdir, domains, cryptodir, config_name, p3_suffix, p3_port f.close() def make_everything(expdir, domains, make_ca, config_only, p3_suffix, p3_port_plain, p3_port_tls): + if expdir[-1] != "/": + expdir += "/" if not config_only: os.makedirs(expdir, exist_ok=True) - if expdir[-1] != "/": - expdir += "/" for alg in CERT_SIGN_ALGS: algdir = expdir+"certs/"+alg os.makedirs(algdir, exist_ok=True) diff --git a/plots.py b/plots.py index 732d8cf..05f39a7 100644 --- a/plots.py +++ b/plots.py @@ -77,6 +77,9 @@ def gnuplot_histogram(**kwargs): kwargs["machine"] = ", " + kwargs["machine"] else: kwargs["machine"] = "" + titleline = "" + if kwargs["maketitle"]: + titleline = 'set title font "CMU Sans Serif,12" "{object_title} by {criterion_title} ({record}, {side}{machine}) ({unit})"'.format(**kwargs) cluster = "" for i in range(kwargs["nb_impls"]-1): cluster += """, "" using {}:xticlabels(1) title col""".format(i+4) @@ -88,7 +91,7 @@ set boxwidth 0.9 absolute set style fill solid 1.0 border lt -1 set style histogram clustered gap 1 title textcolor lt -1 set style data histograms -set title font "CMU Sans Serif,12" "{object_title} by {criterion_title} ({record}, {side}{machine}) ({unit})" +{titleline} #set xtics border in scale 0,0 nomirror rotate by -45 autojustify set xtics border in scale 0,0 nomirror autojustify #set key fixed right top vertical Right noreverse noenhanced autotitle nobox @@ -103,7 +106,7 @@ plot \ set term cairolatex pdf set output "{plots_dir}/{object}_by_{criterion}_{side}_{record}.tex" replot -""".format(plots_dir=PLOTS_DIR, cluster=cluster, **kwargs)) +""".format(plots_dir=PLOTS_DIR, cluster=cluster, titleline=titleline, **kwargs)) f.close() os.system("gnuplot {plots_dir}/{object}_by_{criterion}_{side}_{record}.gnuplot".format(plots_dir=PLOTS_DIR, **kwargs)) @@ -112,6 +115,8 @@ def gnuplot_stacked_histogram(**kwargs): kwargs["machine"] = ", " + kwargs["machine"] else: kwargs["machine"] = "" + if kwargs["maketitle"]: + titleline = 'set title font "CMU Sans Serif,12" "{object_title} by {criterion_title} ({record}, {side}{machine}) ({unit})"'.format(**kwargs) cluster = "" #for i in range(kwargs["nb_impls"]-1): # cluster += """, "" using {}:xticlabels(1) title col""".format(i+4) @@ -123,7 +128,7 @@ set boxwidth 0.9 absolute set style fill solid 1.0 border lt -1 set style histogram rowstacked set style data histograms -set title font "CMU Sans Serif,12" "{object_title} by {criterion_title} ({record}, {side}{machine}) ({unit})" +{titleline} set xtics border in scale 0,0 nomirror noenhanced rotate by 30 right set lmargin 9 set rmargin 1 @@ -140,11 +145,11 @@ set term pict2e font ",10" set output "{plots_dir}/{object}_by_{criterion}_{side}_{record}.tex" set key font ",10" spacing 0.8 replot -""".format(plots_dir=PLOTS_DIR, cluster=cluster, **kwargs).replace("aws_lc", "aws-lc")) +""".format(plots_dir=PLOTS_DIR, cluster=cluster, titleline=titleline, **kwargs).replace("aws_lc", "aws-lc")) f.close() os.system("gnuplot {plots_dir}/{object}_by_{criterion}_{side}_{record}.gnuplot".format(plots_dir=PLOTS_DIR, **kwargs)) -def make_log_plot(logs, exp, criterion, side, obj, record, machine=None, version=None): +def make_log_plot(logs, exp, criterion, side, obj, record, machine=None, version=None, maketitle=True): f = open(f"/dev/shm/plots/{obj}_by_{criterion}_{side}_{record}.dat", "w") ciphers = {} impls = [] @@ -208,10 +213,11 @@ def make_log_plot(logs, exp, criterion, side, obj, record, machine=None, version unit=UNIT[obj], nb_impls=len(impls), record=record, - machine=machine + machine=machine, + maketitle=maketitle ) -def make_profile_plot(logs, exp, criterion, side, record, no_flamegraph=False, machine=None): +def make_profile_plot(logs, exp, criterion, side, record, no_flamegraph=False, machine=None, maketitle=False): f = open(f"/dev/shm/plots/profile_by_{criterion}_{side}_{record}.dat", "w") runs = [] functions = [] @@ -264,7 +270,8 @@ def make_profile_plot(logs, exp, criterion, side, record, no_flamegraph=False, m unit=UNIT["profile"], record=record, nb_functions=len(functions)+1, - machine=machine + machine=machine, + maketitle=maketitle ) # Are CPU and energy proportional @@ -384,27 +391,27 @@ if __name__ == "__main__": os.makedirs("/dev/shm/plots", exist_ok=True) no_flamegraph = "-f" in sys.argv - machine = getargv("-m", None) + maketitle = "-t" not in sys.argv if cmd == "log": - cmp_versions(logs, ["impl-cipher-ver", "impl-cert-ver", "impl-kex-ver"], ["side", "cipher", "cert", "kex", "record"], ["cpu", "energy"]) for side in ["client", "server"]: for record in records: - make_log_plot(logs, "impl-cipher-ver", "cipher", side, "cpu", record, machine=machine, version="1.3") - make_log_plot(logs, "impl-cipher-ver", "cipher", side, "energy", record, machine=machine, version="1.3") - make_log_plot(logs, "impl-cert-ver", "cert", side, "cpu", record, machine=machine, version="1.3") - make_log_plot(logs, "impl-cert-ver", "cert", side, "energy", record, machine=machine, version="1.3") - make_log_plot(logs, "impl-kex-ver", "kex", side, "cpu", record, machine=machine, version="1.3") - make_log_plot(logs, "impl-kex-ver", "kex", side, "energy", record, machine=machine, version="1.3") - make_log_plot(logs, "zrtt", "ed", side, "cpu", record, machine=machine, version="1.3") - make_log_plot(logs, "zrtt", "ed", side, "energy", record, machine=machine, version="1.3") + make_log_plot(logs, "impl-cipher-ver", "cipher", side, "cpu", record, machine=machine, version="1.3", maketitle=maketitle) + make_log_plot(logs, "impl-cipher-ver", "cipher", side, "energy", record, machine=machine, version="1.3", maketitle=maketitle) + make_log_plot(logs, "impl-cert-ver", "cert", side, "cpu", record, machine=machine, version="1.3", maketitle=maketitle) + make_log_plot(logs, "impl-cert-ver", "cert", side, "energy", record, machine=machine, version="1.3", maketitle=maketitle) + make_log_plot(logs, "impl-kex-ver", "kex", side, "cpu", record, machine=machine, version="1.3", maketitle=maketitle) + make_log_plot(logs, "impl-kex-ver", "kex", side, "energy", record, machine=machine, version="1.3", maketitle=maketitle) + make_log_plot(logs, "zrtt", "ed", side, "cpu", record, machine=machine, version="1.3", maketitle=maketitle) + make_log_plot(logs, "zrtt", "ed", side, "energy", record, machine=machine, version="1.3", maketitle=maketitle) + 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-local", "server-local"]: for record in records: - make_profile_plot(logs, "impl-cipher-ver", "cipher", side, record, no_flamegraph=no_flamegraph, machine=machine) - make_profile_plot(logs, "impl-cert-ver", "cert", side, record, no_flamegraph=no_flamegraph, machine=machine) - make_profile_plot(logs, "impl-kex-ver", "kex", side, record, no_flamegraph=no_flamegraph, machine=machine) + make_profile_plot(logs, "impl-cipher-ver", "cipher", side, record, no_flamegraph=no_flamegraph, machine=machine, maketitle=maketitle) + make_profile_plot(logs, "impl-cert-ver", "cert", side, record, no_flamegraph=no_flamegraph, machine=machine, maketitle=maketitle) + make_profile_plot(logs, "impl-kex-ver", "kex", side, record, no_flamegraph=no_flamegraph, machine=machine, maketitle=maketitle) elif cmd == "correl": from scipy import stats import matplotlib.pyplot as plt