From 9ebfb3f2a649cafe0318b6f5dccb5290aa37d339 Mon Sep 17 00:00:00 2001 From: Peter Cai <peter.cai@uwaterloo.ca> Date: Thu, 2 Mar 2023 15:22:52 -0500 Subject: [PATCH] add instructions per request figures --- analyze/memcached_conn_scan.py | 43 ++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/analyze/memcached_conn_scan.py b/analyze/memcached_conn_scan.py index c6ab604..fbd046f 100644 --- a/analyze/memcached_conn_scan.py +++ b/analyze/memcached_conn_scan.py @@ -15,26 +15,24 @@ def parse_perf_stat(s): lines = s.split('\n') llc_misses_u = int(list(filter(None, lines[5].split(' ')))[0].replace(',', '')) llc_misses_k = int(list(filter(None, lines[6].split(' ')))[0].replace(',', '')) - return llc_misses_u + llc_misses_k + instructions_u = int(list(filter(None, lines[16].split(' ')))[0].replace(',', '')) + instructions_k = int(list(filter(None, lines[17].split(' ')))[0].replace(',', '')) + return (llc_misses_u + llc_misses_k, instructions_u + instructions_k) def extract_conn_qps_exp(exp): - ret = ([10, 20, 40, 80, 160, 240, 320], [], [], [], []) + ret = ([10, 20, 40, 80, 160, 240, 320], [], [], [], [], [], []) for f in ret[0]: (qps_avg, qps_stddev) = util.extract_exp_avg_stddev(exp, 'c%d' % (f,), parse_memcached_output) ret[1].append(qps_avg) ret[2].append(qps_stddev) - - #with open(os.path.join('../data/', exp, 'c%d.txt' % (f,)), 'r') as fi: - # qps = parse_memcached_output(fi.read()) - # ret[1].append(qps) - - #with open(os.path.join('../data/', exp, 'stat_c%d.txt' % (f,)), 'r') as fi: - # misses = parse_perf_stat(fi.read()) / (qps * 30) - # ret[2].append(misses) - (misses_avg, misses_stddev) = util.extract_exp_avg_stddev(exp, 'stat_c%d' % (f,), parse_perf_stat) + + ((misses_avg, instructions_avg), (misses_stddev, instructions_stddev)) = \ + util.extract_exp_avg_stddev(exp, 'stat_c%d' % (f,), parse_perf_stat) ret[3].append(misses_avg / (qps_avg * 30)) ret[4].append(misses_stddev / (qps_avg * 30)) + ret[5].append(instructions_avg / (qps_avg * 30)) + ret[6].append(instructions_stddev / (qps_avg * 30)) return ret @@ -71,7 +69,7 @@ def show_plot(threads, include_caladan = False): # but we half the QPS name = 'caladan' data[name] = extract_conn_qps_exp('memcached_conn_scan.5.4.0-136-generic.caladan.t2') - data[name] = (data[name][0], [qps / 2 for qps in data[name][1]], [qps / 2 for qps in data[name][2]], data[name][3], data[name][4]) + data[name] = (data[name][0], [qps / 2 for qps in data[name][1]], [qps / 2 for qps in data[name][2]], data[name][3], data[name][4], data[name][5], data[name][6]) for k in data: plt.errorbar(data[k][0], data[k][1], yerr = data[k][2], capsize = 4, label = k, marker = markers[k], color = colors[k]) @@ -112,6 +110,27 @@ def show_plot(threads, include_caladan = False): else: plt.savefig('../data/figs/memcached_conn_scan.llc_misses.t%d.png' % (threads,), dpi = 192) + if not include_caladan or threads == 1: + return + + plt.cla() + plt.title('Memcached Instructions per Request, c160, %d threads' % (threads,)) + + plt.bar(range(len(data)), [data[k][5][4] for k in data], yerr = [data[k][6][4] for k in data], capsize=4) + plt.xticks(range(len(data)), data.keys()) + + plt.ylabel('Instructions per Request') + + plt.legend() + if os.getenv('SAVE_FIGURE') != 'true': + plt.rcParams.update({'font.size': 16}) + plt.show() + else: + if include_caladan: + plt.savefig('../data/figs/memcached_conn_scan.ipr.t%d.caladan.png' % (threads,), dpi = 192) + else: + plt.savefig('../data/figs/memcached_conn_scan.ipr.t%d.png' % (threads,), dpi = 192) + show_plot(1) show_plot(1, True) show_plot(8) -- GitLab