From 9510e2ca6dbca1ab16b9db8054e9968facf4b699 Mon Sep 17 00:00:00 2001 From: Tibor Frank Date: Thu, 24 Jan 2019 12:28:43 +0100 Subject: CSIT-1397: Create Heatmap graphs - colorscales Change-Id: I86e72432ffa850e76aed6d061461519c5f095a1f Signed-off-by: Tibor Frank --- resources/tools/presentation/conf.py | 5 +- resources/tools/presentation/generator_plots.py | 291 ++++++++++-------------- resources/tools/presentation/run_report.sh | 2 +- resources/tools/presentation/specification.yaml | 155 +++++++++++-- 4 files changed, 268 insertions(+), 185 deletions(-) (limited to 'resources') diff --git a/resources/tools/presentation/conf.py b/resources/tools/presentation/conf.py index 2ef414f669..58d4443d10 100644 --- a/resources/tools/presentation/conf.py +++ b/resources/tools/presentation/conf.py @@ -45,7 +45,8 @@ source_suffix = ['.rst', '.md'] master_doc = 'index' # General information about the project. -project = u'FD.io CSIT-1901.04' +report_week = '06' +project = u'FD.io CSIT-1901.{week}'.format(week=report_week) copyright = u'2019, FD.io' author = u'FD.io CSIT' @@ -105,7 +106,7 @@ rst_epilog = """ .. _CSIT Testbed Setup: https://git.fd.io/csit/tree/resources/tools/testbed-setup/README.md?h={release} .. _K8s configuration files: https://github.com/FDio/csit/tree/{release}/resources/templates/kubernetes """.format(release='rls1901', - report_week='04', + report_week=report_week, prev_release='rls1810', srelease='1901', csitrelease='1901', diff --git a/resources/tools/presentation/generator_plots.py b/resources/tools/presentation/generator_plots.py index 7cdcb62e1f..747c3a2877 100644 --- a/resources/tools/presentation/generator_plots.py +++ b/resources/tools/presentation/generator_plots.py @@ -35,6 +35,8 @@ COLORS = ["SkyBlue", "Olive", "Purple", "Coral", "Indigo", "Pink", "LightGreen", "LightSeaGreen", "LightSkyBlue", "Maroon", "MediumSeaGreen", "SeaGreen", "LightSlateGrey"] +REGEX_NIC = re.compile(r'\d*ge\dp\d\D*\d*-') + def generate_plots(spec, data): """Generate all plots specified in the specification file. @@ -145,21 +147,14 @@ def plot_performance_box(plot, input_data): df.head() y_max = list() for i, col in enumerate(df.columns): + tst_name = re.sub(REGEX_NIC, "", + col.lower().replace('-ndrpdr', ''). + replace('2n1l-', '')) name = "{nr}. ({samples:02d} run{plural}) {name}".\ format(nr=(i + 1), samples=nr_of_samples[i], plural='s' if nr_of_samples[i] > 1 else '', - name=col.lower().replace('-ndrpdr', '')) - if len(name) > 50: - name_lst = name.split('-') - name = "" - split_name = True - for segment in name_lst: - if (len(name) + len(segment) + 1) > 50 and split_name: - name += "
" - split_name = False - name += segment + '-' - name = name[:-1] + name=tst_name) logging.debug(name) traces.append(plgo.Box(x=[str(i + 1) + '.'] * len(df[col]), @@ -178,7 +173,7 @@ def plot_performance_box(plot, input_data): # Create plot layout = deepcopy(plot["layout"]) if layout.get("title", None): - layout["title"] = "Packet Throughput: {0}". \ + layout["title"] = "Throughput: {0}". \ format(layout["title"]) if y_max: layout["yaxis"]["range"] = [0, max(y_max)] @@ -383,13 +378,14 @@ def plot_soak_boxes(plot, input_data): for test_name, test_data in y_sorted.items(): idx += 1 name = "{nr}. {name}".\ - format(nr=idx, name=test_name.lower().replace('-soak', '')) - if len(name) > 50: + format(nr=idx, name=test_name.lower().replace('-soak', ''). + replace('2n1l-', '')) + if len(name) > 55: name_lst = name.split('-') name = "" split_name = True for segment in name_lst: - if (len(name) + len(segment) + 1) > 50 and split_name: + if (len(name) + len(segment) + 1) > 55 and split_name: name += "
" split_name = False name += segment + '-' @@ -405,10 +401,8 @@ def plot_soak_boxes(plot, input_data): if y_base: y_base /= 1000000 - hovertext = ("{name}
" - "Upper bound: {upper:.2f}Mpps
" - "Lower bound: {lower:.2f}Mpps".format(name=name, - upper=y_val, + hovertext = ("Upper bound: {upper:.2f}
" + "Lower bound: {lower:.2f}".format(upper=y_val, lower=y_base)) traces.append(plgo.Bar(x=[str(idx) + '.', ], # +0.05 to see the value in case lower == upper @@ -421,7 +415,7 @@ def plot_soak_boxes(plot, input_data): # Create plot layout = deepcopy(plot["layout"]) if layout.get("title", None): - layout["title"] = "Soak Tests: {0}". \ + layout["title"] = "Throughput: {0}". \ format(layout["title"]) if y_max: layout["yaxis"]["range"] = [0, y_max + 1] @@ -541,17 +535,8 @@ def plot_latency_error_bars(plot, input_data): y_maxs = list() nr_of_samples = list() for key, val in y_sorted.items(): - name = "-".join(key.split("-")[1:-1]) - if len(name) > 50: - name_lst = name.split('-') - name = "" - split_name = True - for segment in name_lst: - if (len(name) + len(segment) + 1) > 50 and split_name: - name += "
" - split_name = False - name += segment + '-' - name = name[:-1] + name = re.sub(REGEX_NIC, "", key.replace('-ndrpdr', ''). + replace('2n1l-', '')) x_vals.append(name) # dir 1 y_vals.append(mean(val[1]) if val[1] else None) y_mins.append(mean(val[0]) if val[0] else None) @@ -641,7 +626,7 @@ def plot_latency_error_bars(plot, input_data): format(plot["output-file"], plot["output-file-type"])) layout = deepcopy(plot["layout"]) if layout.get("title", None): - layout["title"] = "Packet Latency: {0}".\ + layout["title"] = "Latency: {0}".\ format(layout["title"]) layout["annotations"] = annotations plpl = plgo.Figure(data=traces, layout=layout) @@ -730,18 +715,8 @@ def plot_throughput_speedup_analysis(plot, input_data): for test_name, test_vals in y_vals.items(): try: if test_vals["1"][1]: - name = "-".join(test_name.split('-')[1:-1]) - if len(name) > 50: - name_lst = name.split('-') - name = "" - split_name = True - for segment in name_lst: - if (len(name) + len(segment) + 1) > 50 and split_name: - name += "
" - split_name = False - name += segment + '-' - name = name[:-1] - + name = re.sub(REGEX_NIC, "", test_name.replace('-ndrpdr', ''). + replace('2n1l-', '')) vals[name] = dict() y_val_1 = test_vals["1"][0] / 1000000.0 y_val_2 = test_vals["2"][0] / 1000000.0 if test_vals["2"][0] \ @@ -761,12 +736,14 @@ def plot_throughput_speedup_analysis(plot, input_data): test_vals["4"][1]] try: - val_max = max(max(vals[name]["val"], vals[name]["ideal"])) + # val_max = max(max(vals[name]["val"], vals[name]["ideal"])) + val_max = max(vals[name]["val"]) except ValueError as err: logging.error(err) continue if val_max: - y_max.append(int((val_max / 10) + 1) * 10) + # y_max.append(int((val_max / 10) + 1) * 10) + y_max.append(val_max) if y_val_2: vals[name]["rel"][1] = round(y_val_2 / y_val_1, 2) @@ -818,7 +795,9 @@ def plot_throughput_speedup_analysis(plot, input_data): for tag in order: for test, tags in y_tags_l.items(): if tag.lower() in tags: - name = "-".join(test.split('-')[1:-1]) + name = re.sub(REGEX_NIC, "", + test.replace('-ndrpdr', ''). + replace('2n1l-', '')) try: y_sorted[name] = vals.pop(name) y_tags_l.pop(test) @@ -840,35 +819,36 @@ def plot_throughput_speedup_analysis(plot, input_data): logging.error(err) return nic_limit /= 1000000.0 - if nic_limit < threshold: - traces.append(plgo.Scatter( - x=x_vals, - y=[nic_limit, ] * len(x_vals), - name="NIC: {0:.2f}Mpps".format(nic_limit), - showlegend=False, - mode="lines", - line=dict( - dash="dot", - color=COLORS[-1], - width=1), - hoverinfo="none" - )) - annotations.append(dict( - x=1, - y=nic_limit, - xref="x", - yref="y", - xanchor="left", - yanchor="bottom", - text="NIC: {0:.2f}Mpps".format(nic_limit), - font=dict( - size=14, - color=COLORS[-1], - ), - align="left", - showarrow=False - )) - y_max.append(int((nic_limit / 10) + 1) * 10) + # if nic_limit < threshold: + traces.append(plgo.Scatter( + x=x_vals, + y=[nic_limit, ] * len(x_vals), + name="NIC: {0:.2f}Mpps".format(nic_limit), + showlegend=False, + mode="lines", + line=dict( + dash="dot", + color=COLORS[-1], + width=1), + hoverinfo="none" + )) + annotations.append(dict( + x=1, + y=nic_limit, + xref="x", + yref="y", + xanchor="left", + yanchor="bottom", + text="NIC: {0:.2f}Mpps".format(nic_limit), + font=dict( + size=14, + color=COLORS[-1], + ), + align="left", + showarrow=False + )) + # y_max.append(int((nic_limit / 10) + 1) * 10) + y_max.append(nic_limit) lnk_limit /= 1000000.0 if lnk_limit < threshold: @@ -899,10 +879,12 @@ def plot_throughput_speedup_analysis(plot, input_data): align="left", showarrow=False )) - y_max.append(int((lnk_limit / 10) + 1) * 10) + # y_max.append(int((lnk_limit / 10) + 1) * 10) + y_max.append(lnk_limit) pci_limit /= 1000000.0 - if pci_limit < threshold: + if (pci_limit < threshold and + (pci_limit < lnk_limit * 0.95 or lnk_limit > lnk_limit * 1.05)): traces.append(plgo.Scatter( x=x_vals, y=[pci_limit, ] * len(x_vals), @@ -930,7 +912,8 @@ def plot_throughput_speedup_analysis(plot, input_data): align="left", showarrow=False )) - y_max.append(int((pci_limit / 10) + 1) * 10) + # y_max.append(int((pci_limit / 10) + 1) * 10) + y_max.append(pci_limit) # Perfect and measured: cidx = 0 @@ -990,6 +973,8 @@ def plot_throughput_speedup_analysis(plot, input_data): if layout.get("title", None): layout["title"] = "Speedup Multi-core: {0}". \ format(layout["title"]) + # layout["yaxis"]["range"] = [0, int((max(y_max) / 10) + 1) * 10] + layout["yaxis"]["range"] = [0, int(max(y_max) * 1.1)] layout["annotations"].extend(annotations) plpl = plgo.Figure(data=traces, layout=layout) @@ -1097,6 +1082,9 @@ def plot_service_density_heatmap(plot, input_data): """ REGEX_CN = re.compile(r'^(\d*)R(\d*)C$') + REGEX_TEST_NAME = re.compile(r'^.*-(\d+vhost|\d+memif)-' + r'(\d+chain|\d+pipe)-' + r'(\d+vm|\d+dcr|\d+drc).*$') txt_chains = list() txt_nodes = list() @@ -1106,7 +1094,7 @@ def plot_service_density_heatmap(plot, input_data): logging.info(" Creating the data set for the {0} '{1}'.". format(plot.get("type", ""), plot.get("title", ""))) data = input_data.filter_data(plot, continue_on_error=True) - if data is None: + if data is None or data.empty: logging.error("No data.") return @@ -1121,10 +1109,18 @@ def plot_service_density_heatmap(plot, input_data): break else: continue + groups = re.search(REGEX_TEST_NAME, test["name"]) + if groups and len(groups.groups()) == 3: + hover_name = "{vhost}-{chain}-{vm}".format( + vhost=str(groups.group(1)), + chain=str(groups.group(2)), + vm=str(groups.group(3))) + else: + hover_name = "" if vals.get(c, None) is None: vals[c] = dict() if vals[c].get(n, None) is None: - vals[c][n] = dict(name=test["name"], + vals[c][n] = dict(name=hover_name, vals=list(), nr=None, mean=None, @@ -1141,6 +1137,10 @@ def plot_service_density_heatmap(plot, input_data): if result: vals[c][n]["vals"].append(result) + if not vals: + logging.error("No data.") + return + for key_c in vals.keys(): txt_chains.append(key_c) for key_n in vals[key_c].keys(): @@ -1148,9 +1148,9 @@ def plot_service_density_heatmap(plot, input_data): if vals[key_c][key_n]["vals"]: vals[key_c][key_n]["nr"] = len(vals[key_c][key_n]["vals"]) vals[key_c][key_n]["mean"] = \ - round(mean(vals[key_c][key_n]["vals"]) / 1000000, 2) + round(mean(vals[key_c][key_n]["vals"]) / 1000000, 1) vals[key_c][key_n]["stdev"] = \ - round(stdev(vals[key_c][key_n]["vals"]) / 1000000, 2) + round(stdev(vals[key_c][key_n]["vals"]) / 1000000, 1) txt_nodes = list(set(txt_nodes)) txt_chains = sorted(txt_chains, key=lambda chain: int(chain)) @@ -1168,13 +1168,23 @@ def plot_service_density_heatmap(plot, input_data): val = None data[c - 1].append(val) + # Colorscales: + my_green = [[0.0, 'rgb(235, 249, 242)'], + [1.0, 'rgb(45, 134, 89)']] + + my_blue = [[0.0, 'rgb(236, 242, 248)'], + [1.0, 'rgb(57, 115, 172)']] + + my_grey = [[0.0, 'rgb(230, 230, 230)'], + [1.0, 'rgb(102, 102, 102)']] + hovertext = list() annotations = list() - text = ("{name}
" - "No. of Samples: {nr}
" - "Throughput: {val}
" - "Stdev: {stdev}") + text = ("Test: {name}
" + "Runs: {nr}
" + "Thput: {val}
" + "StDev: {stdev}") for c in range(len(txt_chains)): hover_line = list() @@ -1206,22 +1216,30 @@ def plot_service_density_heatmap(plot, input_data): y=chains, z=data, colorbar=dict( - title="Packet Throughput [Mpps]", + title=plot.get("z-axis", ""), titleside="right", titlefont=dict( - size=14 + size=16 ), + tickfont=dict( + size=16, + ), + tickformat=".1f", + yanchor="bottom", + y=-0.02, + len=0.925, ), showscale=True, - colorscale="Reds", + colorscale=my_green, text=hovertext, hoverinfo="text") ] for idx, item in enumerate(txt_nodes): + # X-axis, numbers: annotations.append(dict( x=idx+1, - y=0, + y=0.05, xref="x", yref="y", xanchor="center", @@ -1234,8 +1252,9 @@ def plot_service_density_heatmap(plot, input_data): showarrow=False )) for idx, item in enumerate(txt_chains): + # Y-axis, numbers: annotations.append(dict( - x=0.3, + x=0.35, y=idx+1, xref="x", yref="y", @@ -1248,30 +1267,30 @@ def plot_service_density_heatmap(plot, input_data): align="center", showarrow=False )) - # X-axis: + # X-axis, title: annotations.append(dict( x=0.55, - y=1.05, + y=-0.15, xref="paper", - yref="paper", + yref="y", xanchor="center", - yanchor="middle", - text="No. of Network Functions per Service Instance", + yanchor="bottom", + text=plot.get("x-axis", ""), font=dict( size=16, ), align="center", showarrow=False )) - # Y-axis: + # Y-axis, title: annotations.append(dict( - x=-0.04, + x=-0.1, y=0.5, - xref="paper", + xref="x", yref="paper", xanchor="center", yanchor="middle", - text="No. of Service Instances", + text=plot.get("y-axis", ""), font=dict( size=16, ), @@ -1288,80 +1307,20 @@ def plot_service_density_heatmap(plot, input_data): direction='up', buttons=list([ dict( - args=[{"colorscale": "Reds", "reversescale": False}], - label="Red", + args=[{"colorscale": [my_green, ], "reversescale": False}], + label="Green", method="update" ), dict( - args=[{"colorscale": "Blues", "reversescale": True}], + args=[{"colorscale": [my_blue, ], "reversescale": False}], label="Blue", method="update" ), dict( - args=[{"colorscale": "Greys", "reversescale": True}], + args=[{"colorscale": [my_grey, ], "reversescale": False}], label="Grey", method="update" - ), - dict( - args=[{"colorscale": "Greens", "reversescale": True}], - label="Green", - method="update" - ), - dict( - args=[{"colorscale": "RdBu", "reversescale": False}], - label="RedBlue", - method="update" - ), - dict( - args=[{"colorscale": "Picnic", "reversescale": False}], - label="Picnic", - method="update" - ), - dict( - args=[{"colorscale": "Rainbow", "reversescale": False}], - label="Rainbow", - method="update" - ), - dict( - args=[{"colorscale": "Portland", "reversescale": False}], - label="Portland", - method="update" - ), - dict( - args=[{"colorscale": "Jet", "reversescale": False}], - label="Jet", - method="update" - ), - dict( - args=[{"colorscale": "Hot", "reversescale": True}], - label="Hot", - method="update" - ), - dict( - args=[{"colorscale": "Blackbody", "reversescale": True}], - label="Blackbody", - method="update" - ), - dict( - args=[{"colorscale": "Earth", "reversescale": True}], - label="Earth", - method="update" - ), - dict( - args=[{"colorscale": "Electric", "reversescale": True}], - label="Electric", - method="update" - ), - dict( - args=[{"colorscale": "Viridis", "reversescale": True}], - label="Viridis", - method="update" - ), - dict( - args=[{"colorscale": "Cividis", "reversescale": True}], - label="Cividis", - method="update" - ), + ) ]) ) ]) diff --git a/resources/tools/presentation/run_report.sh b/resources/tools/presentation/run_report.sh index 26e4b9cf11..54eee64951 100755 --- a/resources/tools/presentation/run_report.sh +++ b/resources/tools/presentation/run_report.sh @@ -38,7 +38,7 @@ export PYTHONPATH=`pwd` python pal.py \ --specification specification.yaml \ --release ${RELEASE} \ - --week "04" \ + --week "06" \ --logging INFO \ --force diff --git a/resources/tools/presentation/specification.yaml b/resources/tools/presentation/specification.yaml index bd1ebcb5a5..9f9881060b 100644 --- a/resources/tools/presentation/specification.yaml +++ b/resources/tools/presentation/specification.yaml @@ -490,11 +490,13 @@ plot-vpp-soak-2n-skx: csit-vpp-perf-verify-master-2n-skx: - - 207 # SOAK sel + - 248 # SOAK sel + - 251 # SOAK sel plot-vpp-vsc-2n-skx: csit-vpp-perf-verify-master-2n-skx: - 237 + - 243 plot-vpp-csc-2n-skx: csit-vpp-perf-verify-master-2n-skx: @@ -502,6 +504,10 @@ - 231 - 233 + plot-vpp-csp-2n-skx: + csit-vpp-perf-verify-master-2n-skx: + - 247 + plot-vpp-throughput-latency-3n-skx: csit-vpp-perf-verify-1810-3n-skx: - 24 # NDRPDR full @@ -1040,7 +1046,7 @@ size: 16 zeroline: True rangemode: "tozero" - # range: [0,100] + range: [0,100] legend: orientation: "h" font: @@ -1321,11 +1327,14 @@ - 24 # NDRPDR sel - 27 # NDRPDR sel csit-vpp-perf-verify-master-2n-skx: - - 207 # SOAK sel + - 248 # SOAK sel + - 251 # SOAK sel - 237 # VSC - 226 # CSC - 231 # CSC - 233 # CSC + - 243 # VSC + - 247 # CSP csit-vpp-perf-check-1804: - 5 # mrr - full - 6 # mrr - sel @@ -5298,10 +5307,10 @@ ### P L O T S ### ################################################################################ -# Soak test - example +# Soak test - 30min Soak Test (PLRsearch), boxes - type: "plot" - title: "VPP Throughput Soak: Example" + title: "VPP Throughput: 30min Soak Test (PLRsearch) boxes" algorithm: "plot_soak_boxes" output-file-type: ".html" output-file: "{DIR[STATIC,VPP]}/example-soak-boxes" @@ -5317,14 +5326,15 @@ - "L2BDMACLRN" - "IP4FWD" - "IP6FWD" + - "VHOST" layout: - title: "example-30min-boxes" + title: "30min Soak Test (PLRsearch)" layout: "plot-soak-throughput" -# Soak test - example +# Soak test - example, not used - type: "plot" - title: "VPP Throughput Soak: Example" + title: "VPP Throughput: 30min Soak Test (PLRsearch) bars" algorithm: "plot_soak_bars" output-file-type: ".html" output-file: "{DIR[STATIC,VPP]}/example-soak-bars" @@ -5340,23 +5350,78 @@ - "L2BDMACLRN" - "IP4FWD" - "IP6FWD" + - "VHOST" layout: - title: "example-30min-bars" + title: "30min Soak Test (PLRsearch)" layout: "plot-soak-throughput" -# Heatmap - example +################################################################################ +# Plots - NF Density + +- + type: "plot" + title: "Packet Throughput: 64B-1c-eth-l2bd-{a}vhost-{b}chain-{c}vm-l3fwdip4-mrr" + algorithm: "plot_service_density_heatmap" + output-file-type: ".html" + output-file: "{DIR[STATIC,VPP]}/l2bd-2n-skx-x710-64b-2t1c-base-vsc-mrr" + data: "plot-vpp-vsc-2n-skx" + filter: "'NIC_Intel-X710' and + 'NF_DENSITY' and + 'VM' and + 'CHAIN' and + '64B' and + '2T1C' and + 'MRR'" + parameters: + - "result" + - "name" + - "tags" + include-tests: "MRR" # "PDR" | "NDR" | "MRR" + x-axis: "X = VNFs per Service Chain" + y-axis: "Y = Number of Service Chains" + z-axis: "64B Packet Throughput (mean MRR) [Mpps]" + layout: + title: "Throughput: eth-l2bd-{2*X*Y}vhost-{Y}chain-{X*Y}vm-l3fwdip4-mrr" + layout: "plot-service-density" + - type: "plot" - title: "Service Density: l2sw-2n-skx-x710-64b-2t1c-base-vsc-mrr" + title: "Packet Throughput: 64B-2c-eth-l2bd-{a}vhost-{b}chain-{c}vm-l3fwdip4-mrr" algorithm: "plot_service_density_heatmap" output-file-type: ".html" - output-file: "{DIR[STATIC,VPP]}/l2sw-2n-skx-x710-64b-2t1c-base-vsc-mrr" + output-file: "{DIR[STATIC,VPP]}/l2bd-2n-skx-x710-64b-4t2c-base-vsc-mrr" data: "plot-vpp-vsc-2n-skx" filter: "'NIC_Intel-X710' and 'NF_DENSITY' and 'VM' and 'CHAIN' and '64B' and + '4T2C' and + 'MRR'" + parameters: + - "result" + - "name" + - "tags" + include-tests: "MRR" # "PDR" | "NDR" | "MRR" + x-axis: "X = VNFs per Service Chain" + y-axis: "Y = Number of Service Chains" + z-axis: "64B Packet Throughput (mean MRR) [Mpps]" + layout: + title: "Throughput: eth-l2bd-{2*X*Y}vhost-{Y}chain-{X*Y}vm-l3fwdip4-mrr" + layout: "plot-service-density" + +- + type: "plot" + title: "Packet Throughput: 64B-1c-eth-l2bd-{a}memif-{b}chain-{c}drc-vppip4-mrr" + algorithm: "plot_service_density_heatmap" + output-file-type: ".html" + output-file: "{DIR[STATIC,VPP]}/l2bd-2n-skx-x710-64b-2t1c-base-csc-mrr" + data: "plot-vpp-csc-2n-skx" + filter: "'NIC_Intel-X710' and + 'NF_DENSITY' and + 'DOCKER' and + 'CHAIN' and + '64B' and '2T1C' and 'MRR'" parameters: @@ -5364,22 +5429,51 @@ - "name" - "tags" include-tests: "MRR" # "PDR" | "NDR" | "MRR" + x-axis: "X = CNFs per Service Chain" + y-axis: "Y = Number of Service Chains" + z-axis: "64B Packet Throughput (mean MRR) [Mpps]" layout: - title: "Network Service Density Matrix: Packet Throughput View" + title: "Throughput: eth-l2bd-{2*X*Y}memif-{Y}chain-{X*Y}drc-vppip4-mrr" layout: "plot-service-density" - type: "plot" - title: "Service Density: l2sw-2n-skx-x710-64b-2t1c-base-csc-mrr" + title: "Packet Throughput: 64B-2c-eth-l2bd-{a}memif-{b}chain-{c}drc-vppip4-mrr" algorithm: "plot_service_density_heatmap" output-file-type: ".html" - output-file: "{DIR[STATIC,VPP]}/l2sw-2n-skx-x710-64b-2t1c-base-csc-mrr" + output-file: "{DIR[STATIC,VPP]}/l2bd-2n-skx-x710-64b-4t2c-base-csc-mrr" data: "plot-vpp-csc-2n-skx" filter: "'NIC_Intel-X710' and 'NF_DENSITY' and 'DOCKER' and 'CHAIN' and '64B' and + '4T2C' and + 'MRR'" + parameters: + - "result" + - "name" + - "tags" + include-tests: "MRR" # "PDR" | "NDR" | "MRR" + x-axis: "X = CNFs per Service Chain" + y-axis: "Y = Number of Service Chains" + z-axis: "64B Packet Throughput (mean MRR) [Mpps]" + layout: + title: "Throughput: eth-l2bd-{2*X*Y}memif-{Y}chain-{X*Y}drc-vppip4-mrr" + layout: "plot-service-density" + +- + type: "plot" + title: "Packet Throughput: 64B-1c-eth-l2bd-{a}memif-{b}pipe-{c}drc-vppip4-mrr" + algorithm: "plot_service_density_heatmap" + output-file-type: ".html" + output-file: "{DIR[STATIC,VPP]}/l2bd-2n-skx-x710-64b-2t1c-base-csp-mrr" + data: "plot-vpp-csp-2n-skx" + filter: "'NIC_Intel-X710' and + 'NF_DENSITY' and + 'DOCKER' and + 'PIPELINE' and + '64B' and '2T1C' and 'MRR'" parameters: @@ -5387,8 +5481,37 @@ - "name" - "tags" include-tests: "MRR" # "PDR" | "NDR" | "MRR" + x-axis: "X = CNFs per Service Pipeline" + y-axis: "Y = Number of Service Pipelines" + z-axis: "64B Packet Throughput (mean MRR) [Mpps]" + layout: + title: "Throughput: eth-l2bd-{2*Y}memif-{Y}pipe-{X*Y}drc-vppip4-mrr" + layout: "plot-service-density" + +- + type: "plot" + title: "Packet Throughput: 64B-2c-eth-l2bd-{a}memif-{b}pipe-{c}drc-vppip4-mrr" + algorithm: "plot_service_density_heatmap" + output-file-type: ".html" + output-file: "{DIR[STATIC,VPP]}/l2bd-2n-skx-x710-64b-4t2c-base-csp-mrr" + data: "plot-vpp-csp-2n-skx" + filter: "'NIC_Intel-X710' and + 'NF_DENSITY' and + 'DOCKER' and + 'PIPELINE' and + '64B' and + '4T2C' and + 'MRR'" + parameters: + - "result" + - "name" + - "tags" + include-tests: "MRR" # "PDR" | "NDR" | "MRR" + x-axis: "X = CNFs per Service Pipeline" + y-axis: "Y = Number of Service Pipelines" + z-axis: "64B Packet Throughput (mean MRR) [Mpps]" layout: - title: "Network Service Density Matrix: Packet Throughput View" + title: "Throughput: eth-l2bd-{2*Y}memif-{Y}pipe-{X*Y}drc-vppip4-mrr" layout: "plot-service-density" ################################################################################ -- cgit 1.2.3-korg