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: