From 98a94315dae63bd19c7bc16ce50b3219386aa34c Mon Sep 17 00:00:00 2001 From: Tibor Frank Date: Wed, 13 Jan 2021 14:47:55 +0100 Subject: [PATCH] Report: Add data Change-Id: Ia6f46cd9dbf83e6376f635b3e250708bdfba80be Signed-off-by: Tibor Frank --- resources/tools/presentation/generator_plots.py | 165 +++++++++++++++++++++++- resources/tools/presentation/specification.yaml | 56 ++++---- 2 files changed, 192 insertions(+), 29 deletions(-) diff --git a/resources/tools/presentation/generator_plots.py b/resources/tools/presentation/generator_plots.py index 869d2ca21e..815f45884f 100644 --- a/resources/tools/presentation/generator_plots.py +++ b/resources/tools/presentation/generator_plots.py @@ -18,15 +18,16 @@ import re import logging -from collections import OrderedDict -from copy import deepcopy - import hdrh.histogram import hdrh.codec import pandas as pd import plotly.offline as ploff import plotly.graph_objs as plgo +from collections import OrderedDict +from copy import deepcopy +from math import log + from plotly.exceptions import PlotlyError from pal_utils import mean, stdev @@ -253,6 +254,164 @@ def plot_hdrh_lat_by_percentile(plot, input_data): continue +def plot_hdrh_lat_by_percentile_x_log(plot, input_data): + """Generate the plot(s) with algorithm: plot_hdrh_lat_by_percentile_x_log + specified in the specification file. + + :param plot: Plot to generate. + :param input_data: Data to process. + :type plot: pandas.Series + :type input_data: InputData + """ + + # Transform the data + logging.info( + f" Creating the data set for the {plot.get(u'type', u'')} " + f"{plot.get(u'title', u'')}." + ) + if plot.get(u"include", None): + data = input_data.filter_tests_by_name( + plot, + params=[u"name", u"latency", u"parent", u"tags", u"type"] + )[0][0] + elif plot.get(u"filter", None): + data = input_data.filter_data( + plot, + params=[u"name", u"latency", u"parent", u"tags", u"type"], + continue_on_error=True + )[0][0] + else: + job = list(plot[u"data"].keys())[0] + build = str(plot[u"data"][job][0]) + data = input_data.tests(job, build) + + if data is None or len(data) == 0: + logging.error(u"No data.") + return + + desc = { + u"LAT0": u"No-load.", + u"PDR10": u"Low-load, 10% PDR.", + u"PDR50": u"Mid-load, 50% PDR.", + u"PDR90": u"High-load, 90% PDR.", + u"PDR": u"Full-load, 100% PDR.", + u"NDR10": u"Low-load, 10% NDR.", + u"NDR50": u"Mid-load, 50% NDR.", + u"NDR90": u"High-load, 90% NDR.", + u"NDR": u"Full-load, 100% NDR." + } + + graphs = [ + u"LAT0", + u"PDR10", + u"PDR50", + u"PDR90" + ] + + file_links = plot.get(u"output-file-links", None) + target_links = plot.get(u"target-links", None) + + for test in data: + try: + if test[u"type"] not in (u"NDRPDR",): + logging.warning(f"Invalid test type: {test[u'type']}") + continue + name = re.sub(REGEX_NIC, u"", test[u"parent"]. + replace(u'-ndrpdr', u'').replace(u'2n1l-', u'')) + try: + nic = re.search(REGEX_NIC, test[u"parent"]).group(1) + except (IndexError, AttributeError, KeyError, ValueError): + nic = u"" + name_link = f"{nic}-{test[u'name']}".replace(u'-ndrpdr', u'') + + logging.info(f" Generating the graph: {name_link}") + + fig = plgo.Figure() + layout = deepcopy(plot[u"layout"]) + xaxis_max = 0 + + for color, graph in enumerate(graphs): + for idx, direction in enumerate((u"direction1", u"direction2")): + xaxis = list() + yaxis = list() + hovertext = list() + try: + decoded = hdrh.histogram.HdrHistogram.decode( + test[u"latency"][graph][direction][u"hdrh"] + ) + except hdrh.codec.HdrLengthException: + logging.warning( + f"No data for direction {(u'W-E', u'E-W')[idx % 2]}" + ) + continue + + for item in decoded.get_recorded_iterator(): + percentile = item.percentile_level_iterated_to + if percentile > 99.9999999: + continue + xaxis.append(100.0 / (100.0 - percentile)) + yaxis.append(item.value_iterated_to) + hovertext.append( + f"{desc[graph]}
" + f"Direction: {(u'W-E', u'E-W')[idx % 2]}
" + f"Percentile: {percentile:.5f}%
" + f"Latency: {item.value_iterated_to}uSec" + ) + fig.add_trace( + plgo.Scatter( + x=xaxis, + y=yaxis, + name=desc[graph], + mode=u"lines", + legendgroup=desc[graph], + showlegend=not(bool(idx)), + line=dict( + color=COLORS[color], + dash=u"dash" if idx % 2 else u"solid" + ), + hovertext=hovertext, + hoverinfo=u"text" + ) + ) + xaxis_max = max(xaxis) if xaxis_max < max( + xaxis) else xaxis_max + + layout[u"title"][u"text"] = f"Latency: {name}" + layout[u"xaxis"][u"range"] = [0, int(log(xaxis_max, 10)) + 1] + fig.update_layout(layout) + + # Create plot + file_name = f"{plot[u'output-file']}-{name_link}.html" + logging.info(f" Writing file {file_name}") + + try: + # Export Plot + ploff.plot(fig, show_link=False, auto_open=False, + filename=file_name) + # Add link to the file: + if file_links and target_links: + with open(file_links, u"a") as file_handler: + file_handler.write( + f"- `{name_link} " + f"<{target_links}/{file_name.split(u'/')[-1]}>`_\n" + ) + except FileNotFoundError as err: + logging.error( + f"Not possible to write the link to the file " + f"{file_links}\n{err}" + ) + except PlotlyError as err: + logging.error(f" Finished with error: {repr(err)}") + + except hdrh.codec.HdrLengthException as err: + logging.warning(repr(err)) + continue + + except (ValueError, KeyError) as err: + logging.warning(repr(err)) + continue + + def plot_nf_reconf_box_name(plot, input_data): """Generate the plot(s) with algorithm: plot_nf_reconf_box_name specified in the specification file. diff --git a/resources/tools/presentation/specification.yaml b/resources/tools/presentation/specification.yaml index cebc5c0258..0cbbfcd66f 100644 --- a/resources/tools/presentation/specification.yaml +++ b/resources/tools/presentation/specification.yaml @@ -709,6 +709,7 @@ vpp-performance-changes-3n-skx-ref-env-new: csit-vpp-perf-report-iterative-2101-3n-skx: - 14 # rls2009 NDRPDR iter env 6 + - 15 # rls2009 NDRPDR iter env 6 vpp-performance-changes-3n-skx-cmp: csit-vpp-perf-report-iterative-2101-3n-skx: - 5 # rls2101.rc1 NDRPDR iter env 6 @@ -755,6 +756,7 @@ csit-vpp-perf-report-iterative-2101-2n-skx: - 22 # rls2009 NDRPDR iter env 6 - 23 # rls2009 NDRPDR iter env 6 + - 24 # rls2009 NDRPDR iter env 6 vpp-performance-changes-2n-skx-cmp: csit-vpp-perf-report-iterative-2101-2n-skx: - 5 # rls2101.rc1 NDRPDR iter env 6 @@ -2297,7 +2299,7 @@ xanchor: "left" yanchor: "top" x: 0 - y: -0.2 + y: -0.5 bgcolor: "rgba(255, 255, 255, 0)" bordercolor: "rgba(255, 255, 255, 0)" xaxis: @@ -2314,12 +2316,12 @@ showline: True showticklabels: True tickcolor: "rgb(220, 220, 220)" -# tickvals: [1, 2, 1e1, 20, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8] -# ticktext: [0, 50, 90, 95, 99, 99.9, 99.99, 99.999, 99.9999, 99.99999, 99.999999] - tickvals: [1, 2, 1e1, 20, 1e2, 1e3] - ticktext: [0, 50, 90, 95, 99, 99.9] + tickvals: [1, 2, 1e1, 20, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9] + ticktext: [0, 50, 90, 95, 99, 99.9, 99.99, 99.999, 99.9999, 99.99999, 99.999999, 99.9999999] tickfont: size: 14 + rangeslider: + visible: True yaxis: title: "One-Way Latency per Direction [uSec]" titlefont: @@ -2507,6 +2509,7 @@ - 9 # rls2101.rc1 NDRPDR iter env 6 - 12 # rls2009 MRR iter env 6 - 14 # rls2009 NDRPDR iter env 6 + - 15 # rls2009 NDRPDR iter env 6 # csit-vpp-perf-report-coverage-2101-3n-skx: @@ -2581,6 +2584,7 @@ - 21 # rls2009 MRR iter env 6 - 22 # rls2009 NDRPDR iter env 6 - 23 # rls2009 NDRPDR iter env 6 + - 24 # rls2009 NDRPDR iter env 6 # csit-vpp-perf-report-coverage-2101-2n-skx: @@ -22557,27 +22561,27 @@ ################################################################################ -# - type: "plot" -# title: "Latency by percentile x-log: 2n-clx" -# algorithm: "plot_hdrh_lat_by_percentile" -# output-file: "{DIR[STATIC,VPP]}/hdrh-lat-percentile-x-log-2n-clx" -# output-file-links: "{DIR[LAT,VPP]}/2n_clx.rst" -# target-links: "../../_static/vpp" -# data: "plot-vpp-hdrh-lat-2n-clx" -# filter: "'2T1C' and 'NIC_Intel-XXV710'" -# layout: -# layout: "plot-hdrh-latency-percentile-x-log" - -# - type: "plot" -# title: "Latency by percentile x-log: 2n-skx" -# algorithm: "plot_hdrh_lat_by_percentile" -# output-file: "{DIR[STATIC,VPP]}/hdrh-lat-percentile-x-log-2n-skx" -# output-file-links: "{DIR[LAT,VPP]}/2n_skx.rst" -# target-links: "../../_static/vpp" -# data: "plot-vpp-hdrh-lat-2n-skx" -# filter: "'2T1C' and 'NIC_Intel-XXV710'" -# layout: -# layout: "plot-hdrh-latency-percentile-x-log" +- type: "plot" + title: "Latency by percentile x-log: 2n-clx" + algorithm: "plot_hdrh_lat_by_percentile_x_log" + output-file: "{DIR[STATIC,VPP]}/hdrh-lat-percentile-x-log-2n-clx" + output-file-links: "{DIR[LAT,VPP]}/2n_clx.rst" + target-links: "../../_static/vpp" + data: "plot-vpp-hdrh-lat-2n-clx" + filter: "'2T1C' and 'NIC_Intel-XXV710'" + layout: + layout: "plot-hdrh-latency-percentile-x-log" + +- type: "plot" + title: "Latency by percentile x-log: 2n-skx" + algorithm: "plot_hdrh_lat_by_percentile_x_log" + output-file: "{DIR[STATIC,VPP]}/hdrh-lat-percentile-x-log-2n-skx" + output-file-links: "{DIR[LAT,VPP]}/2n_skx.rst" + target-links: "../../_static/vpp" + data: "plot-vpp-hdrh-lat-2n-skx" + filter: "'2T1C' and 'NIC_Intel-XXV710'" + layout: + layout: "plot-hdrh-latency-percentile-x-log" - type: "plot" title: "Latency by percentile: 2n-skx" -- 2.16.6