X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Ftools%2Fdash%2Fapp%2Fpal%2Freport%2Fgraphs.py;h=0543193d99a6e23a35c1fc7053f2abe06f4ad389;hp=42ae07938eaefa26e5865838d4b6d63707c11a77;hb=06d3f7331f9f10d99baa334b1808dfdc9c6fc8be;hpb=a6c94c7c5898fb8570f6f9ca6fdc1909d43c5dc0 diff --git a/resources/tools/dash/app/pal/report/graphs.py b/resources/tools/dash/app/pal/report/graphs.py index 42ae07938e..0543193d99 100644 --- a/resources/tools/dash/app/pal/report/graphs.py +++ b/resources/tools/dash/app/pal/report/graphs.py @@ -24,6 +24,23 @@ import hdrh.histogram import hdrh.codec +_NORM_FREQUENCY = 2.0 # [GHz] +_FREQURENCY = { # [GHz] + "2n-aws": 1.000, + "2n-dnv": 2.000, + "2n-clx": 2.300, + "2n-icx": 2.600, + "2n-skx": 2.500, + "2n-tx2": 2.500, + "2n-zn2": 2.900, + "3n-alt": 3.000, + "3n-aws": 1.000, + "3n-dnv": 2.000, + "3n-icx": 2.600, + "3n-skx": 2.500, + "3n-tsh": 2.200 +} + _VALUE = { "mrr": "result_receive_rate_rate_values", "ndr": "result_ndr_lower_rate_value", @@ -51,16 +68,15 @@ _LAT_HDRH = ( # Do not change the order PERCENTILE_MAX = 99.999501 _GRAPH_LAT_HDRH_DESC = { - u"result_latency_forward_pdr_0_hdrh": u"No-load.", - u"result_latency_reverse_pdr_0_hdrh": u"No-load.", - u"result_latency_forward_pdr_10_hdrh": u"Low-load, 10% PDR.", - u"result_latency_reverse_pdr_10_hdrh": u"Low-load, 10% PDR.", - u"result_latency_forward_pdr_50_hdrh": u"Mid-load, 50% PDR.", - u"result_latency_reverse_pdr_50_hdrh": u"Mid-load, 50% PDR.", - u"result_latency_forward_pdr_90_hdrh": u"High-load, 90% PDR.", - u"result_latency_reverse_pdr_90_hdrh": u"High-load, 90% PDR." + "result_latency_forward_pdr_0_hdrh": "No-load.", + "result_latency_reverse_pdr_0_hdrh": "No-load.", + "result_latency_forward_pdr_10_hdrh": "Low-load, 10% PDR.", + "result_latency_reverse_pdr_10_hdrh": "Low-load, 10% PDR.", + "result_latency_forward_pdr_50_hdrh": "Mid-load, 50% PDR.", + "result_latency_reverse_pdr_50_hdrh": "Mid-load, 50% PDR.", + "result_latency_forward_pdr_90_hdrh": "High-load, 90% PDR.", + "result_latency_reverse_pdr_90_hdrh": "High-load, 90% PDR." } -REG_EX_VPP_VERSION = re.compile(r"^(\d{2}).(\d{2})-(rc0|rc1|rc2|release$)") def _get_color(idx: int) -> str: @@ -83,10 +99,15 @@ def get_short_version(version: str, dut_type: str="vpp") -> str: return version s_version = str() - groups = re.search(pattern=REG_EX_VPP_VERSION, string=version) + groups = re.search( + pattern=re.compile(r"^(\d{2}).(\d{2})-(rc0|rc1|rc2|release$)"), + string=version + ) if groups: try: - s_version = f"{groups.group(1)}.{groups.group(2)}_{groups.group(3)}" + s_version = \ + f"{groups.group(1)}.{groups.group(2)}.{groups.group(3)}".\ + replace("release", "rls") except IndexError: pass @@ -132,14 +153,16 @@ def select_iterative_data(data: pd.DataFrame, itm:dict) -> pd.DataFrame: f"^.*[.|-]{nic}.*{itm['framesize']}-{core}-{drv}{itm['test']}-{ttype}$" df = df[ (df.job.str.endswith(f"{topo}-{arch}")) & - (df.dut_version.str.contains(itm["dutver"].replace("_", "-"))) & + (df.dut_version.str.contains(itm["dutver"].replace(".r", "-r").\ + replace("rls", "release"))) & (df.test_id.str.contains(regex_test, regex=True)) ] return df -def graph_iterative(data: pd.DataFrame, sel:dict, layout: dict) -> tuple: +def graph_iterative(data: pd.DataFrame, sel:dict, layout: dict, + normalize: bool) -> tuple: """ """ @@ -151,15 +174,25 @@ def graph_iterative(data: pd.DataFrame, sel:dict, layout: dict) -> tuple: lat_traces = list() y_lat_max = 0 x_lat = list() + show_latency = False + show_tput = False for idx, itm in enumerate(sel): itm_data = select_iterative_data(data, itm) + if itm_data.empty: + continue + phy = itm["phy"].split("-") + topo_arch = f"{phy[0]}-{phy[1]}" if len(phy) == 4 else str() + norm_factor = (_NORM_FREQUENCY / _FREQURENCY[topo_arch]) \ + if normalize else 1.0 if itm["testtype"] == "mrr": - y_data = itm_data[_VALUE[itm["testtype"]]].to_list()[0] - if y_data.size > 0: + y_data_raw = itm_data[_VALUE[itm["testtype"]]].to_list()[0] + y_data = [y * norm_factor for y in y_data_raw] + if len(y_data) > 0: y_tput_max = \ max(y_data) if max(y_data) > y_tput_max else y_tput_max else: - y_data = itm_data[_VALUE[itm["testtype"]]].to_list() + y_data_raw = itm_data[_VALUE[itm["testtype"]]].to_list() + y_data = [y * norm_factor for y in y_data_raw] if y_data: y_tput_max = \ max(y_data) if max(y_data) > y_tput_max else y_tput_max @@ -169,7 +202,7 @@ def graph_iterative(data: pd.DataFrame, sel:dict, layout: dict) -> tuple: name=( f"{idx + 1}. " f"({nr_of_samples:02d} " - f"run{u's' if nr_of_samples > 1 else u''}) " + f"run{'s' if nr_of_samples > 1 else ''}) " f"{itm['id']}" ), hoverinfo=u"y+name", @@ -178,10 +211,11 @@ def graph_iterative(data: pd.DataFrame, sel:dict, layout: dict) -> tuple: marker=dict(color=_get_color(idx)) ) tput_traces.append(go.Box(**tput_kwargs)) + show_tput = True - show_latency = False if itm["testtype"] == "pdr": - y_lat = itm_data[_VALUE["pdr-lat"]].to_list() + y_lat_row = itm_data[_VALUE["pdr-lat"]].to_list() + y_lat = [y * norm_factor for y in y_lat_row] if y_lat: y_lat_max = max(y_lat) if max(y_lat) > y_lat_max else y_lat_max nr_of_samples = len(y_lat) @@ -193,7 +227,7 @@ def graph_iterative(data: pd.DataFrame, sel:dict, layout: dict) -> tuple: f"run{u's' if nr_of_samples > 1 else u''}) " f"{itm['id']}" ), - hoverinfo=u"y+name", + hoverinfo="all", boxpoints="all", jitter=0.3, marker=dict(color=_get_color(idx)) @@ -204,25 +238,27 @@ def graph_iterative(data: pd.DataFrame, sel:dict, layout: dict) -> tuple: else: lat_traces.append(go.Box()) - pl_tput = deepcopy(layout["plot-throughput"]) - pl_tput[u"xaxis"][u"tickvals"] = [i for i in range(len(sel))] - pl_tput[u"xaxis"][u"ticktext"] = [str(i + 1) for i in range(len(sel))] - if y_tput_max: - pl_tput[u"yaxis"][u"range"] = [0, (int(y_tput_max / 1e6) + 1) * 1e6] - fig_tput = go.Figure(data=tput_traces, layout=pl_tput) + if show_tput: + pl_tput = deepcopy(layout["plot-throughput"]) + pl_tput["xaxis"]["tickvals"] = [i for i in range(len(sel))] + pl_tput["xaxis"]["ticktext"] = [str(i + 1) for i in range(len(sel))] + if y_tput_max: + pl_tput["yaxis"]["range"] = [0, (int(y_tput_max / 1e6) + 1) * 1e6] + fig_tput = go.Figure(data=tput_traces, layout=pl_tput) if show_latency: pl_lat = deepcopy(layout["plot-latency"]) - pl_lat[u"xaxis"][u"tickvals"] = [i for i in range(len(x_lat))] - pl_lat[u"xaxis"][u"ticktext"] = x_lat + pl_lat["xaxis"]["tickvals"] = [i for i in range(len(x_lat))] + pl_lat["xaxis"]["ticktext"] = x_lat if y_lat_max: - pl_lat[u"yaxis"][u"range"] = [0, (int(y_lat_max / 10) + 1) * 10] + pl_lat["yaxis"]["range"] = [0, (int(y_lat_max / 10) + 1) * 10] fig_lat = go.Figure(data=lat_traces, layout=pl_lat) return fig_tput, fig_lat -def table_comparison(data: pd.DataFrame, sel:dict) -> pd.DataFrame: +def table_comparison(data: pd.DataFrame, sel:dict, + normalize: bool) -> pd.DataFrame: """ """ table = pd.DataFrame( @@ -295,7 +331,7 @@ def graph_hdrh_latency(data: dict, layout: dict) -> go.Figure: yaxis.append(item.value_iterated_to) hovertext.append( f"{_GRAPH_LAT_HDRH_DESC[lat_name]}
" - f"Direction: {(u'W-E', u'E-W')[idx % 2]}
" + f"Direction: {('W-E', 'E-W')[idx % 2]}
" f"Percentile: {prev_perc:.5f}-{percentile:.5f}%
" f"Latency: {item.value_iterated_to}uSec" ) @@ -304,7 +340,7 @@ def graph_hdrh_latency(data: dict, layout: dict) -> go.Figure: yaxis.append(item.value_iterated_to) hovertext.append( f"{_GRAPH_LAT_HDRH_DESC[lat_name]}
" - f"Direction: {(u'W-E', u'E-W')[idx % 2]}
" + f"Direction: {('W-E', 'E-W')[idx % 2]}
" f"Percentile: {prev_perc:.5f}-{percentile:.5f}%
" f"Latency: {item.value_iterated_to}uSec" ) @@ -316,16 +352,16 @@ def graph_hdrh_latency(data: dict, layout: dict) -> go.Figure: x=xaxis, y=yaxis, name=_GRAPH_LAT_HDRH_DESC[lat_name], - mode=u"lines", + mode="lines", legendgroup=_GRAPH_LAT_HDRH_DESC[lat_name], showlegend=bool(idx % 2), line=dict( color=_get_color(int(idx/2)), - dash=u"solid", + dash="solid", width=1 if idx % 2 else 2 ), hovertext=hovertext, - hoverinfo=u"text" + hoverinfo="text" ) ) if traces: