u"#1A1110",
u"#DA2647",
u"#214FC6",
- u"#45A27D",
- u"#391285",
- u"#C95A49",
+ u"#01786F",
+ u"#BD8260",
u"#FFD12A",
+ u"#A6E7FF",
u"#738276",
- u"#BD8260",
+ u"#C95A49",
u"#FC5A8D",
u"#CEC8EF",
- u"#A6E7FF",
+ u"#391285",
u"#6F2DA8",
u"#FF878D",
- u"#01786F",
+ u"#45A27D",
u"#FFD0B9",
u"#FD5240",
u"#DB91EF",
f"Percentile: 0.0%<br>"
f"Latency: 0.0uSec"
]
- decoded = hdrh.histogram.HdrHistogram.decode(
- test[u"latency"][graph][direction][u"hdrh"]
- )
+ 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.9:
showlegend=bool(idx),
line=dict(
color=COLORS[color],
- dash=u"solid" if idx % 2 else u"dash"
+ dash=u"dash" if idx % 2 else u"solid"
),
hovertext=hovertext,
hoverinfo=u"text"
# Create plot
layout = deepcopy(plot[u"layout"])
layout[u"title"] = f"<b>Time Lost:</b> {layout[u'title']}"
- layout[u"yaxis"][u"title"] = u"<b>Implied Time Lost [s]</b>"
+ layout[u"yaxis"][u"title"] = u"<b>Effective Blocked Time [s]</b>"
layout[u"legend"][u"font"][u"size"] = 14
layout[u"yaxis"].pop(u"range")
plpl = plgo.Figure(data=traces, layout=layout)
f"{plot.get(u'title', u'')}."
)
data = input_data.filter_tests_by_name(
- plot, params=[u"throughput", u"result", u"parent", u"tags", u"type"])
+ plot,
+ params=[u"throughput", u"gbps", u"result", u"parent", u"tags", u"type"])
if data is None:
logging.error(u"No data.")
return
# Prepare the data for the plot
+ plot_title = plot.get(u"title", u"").lower()
+
+ if u"-gbps" in plot_title:
+ value = u"gbps"
+ multiplier = 1e6
+ else:
+ value = u"throughput"
+ multiplier = 1.0
y_vals = OrderedDict()
test_type = u""
for job in data:
if y_vals.get(test[u"parent"], None) is None:
y_vals[test[u"parent"]] = list()
try:
- if (test[u"type"] in (u"NDRPDR", ) and
- u"-pdr" in plot.get(u"title", u"").lower()):
- y_vals[test[u"parent"]].\
- append(test[u"throughput"][u"PDR"][u"LOWER"])
- test_type = u"NDRPDR"
- elif (test[u"type"] in (u"NDRPDR", ) and
- u"-ndr" in plot.get(u"title", u"").lower()):
- y_vals[test[u"parent"]]. \
- append(test[u"throughput"][u"NDR"][u"LOWER"])
- test_type = u"NDRPDR"
+ if test[u"type"] in (u"NDRPDR", u"CPS"):
+ test_type = test[u"type"]
+
+ if u"-pdr" in plot_title:
+ ttype = u"PDR"
+ elif u"-ndr" in plot_title:
+ ttype = u"NDR"
+ else:
+ raise RuntimeError(
+ u"Wrong title. No information about test type. "
+ u"Add '-ndr' or '-pdr' to the test title."
+ )
+
+ y_vals[test[u"parent"]].append(
+ test[value][ttype][u"LOWER"] * multiplier
+ )
+
elif test[u"type"] in (u"SOAK", ):
y_vals[test[u"parent"]].\
append(test[u"throughput"][u"LOWER"])
test_type = u"SOAK"
+
elif test[u"type"] in (u"HOSTSTACK", ):
if u"LDPRELOAD" in test[u"tags"]:
y_vals[test[u"parent"]].append(
2)
)
test_type = u"HOSTSTACK"
+
else:
continue
+
except (KeyError, TypeError):
y_vals[test[u"parent"]].append(None)
if layout.get(u"title", None):
if test_type in (u"HOSTSTACK", ):
layout[u"title"] = f"<b>Bandwidth:</b> {layout[u'title']}"
+ elif test_type in (u"CPS", ):
+ layout[u"title"] = f"<b>CPS:</b> {layout[u'title']}"
else:
layout[u"title"] = f"<b>Throughput:</b> {layout[u'title']}"
if y_max:
f" Creating data set for the {plot.get(u'type', u'')} {plot_title}."
)
data = input_data.filter_tests_by_name(
- plot, params=[u"throughput", u"parent", u"tags", u"type"])
+ plot,
+ params=[u"throughput", u"gbps", u"parent", u"tags", u"type"]
+ )
if data is None:
logging.error(u"No data.")
return
+ plot_title = plot_title.lower()
+
+ if u"-gbps" in plot_title:
+ value = u"gbps"
+ h_unit = u"Gbps"
+ multiplier = 1e6
+ else:
+ value = u"throughput"
+ h_unit = u"Mpps"
+ multiplier = 1.0
+
y_vals = OrderedDict()
for job in data:
for build in job:
u"4": list()
}
try:
- if test[u"type"] not in (u"NDRPDR",):
+ if test[u"type"] not in (u"NDRPDR", u"CPS"):
continue
- if u"-pdr" in plot_title.lower():
+ if u"-pdr" in plot_title:
ttype = u"PDR"
- elif u"-ndr" in plot_title.lower():
+ elif u"-ndr" in plot_title:
ttype = u"NDR"
else:
continue
if u"1C" in test[u"tags"]:
y_vals[test[u"parent"]][u"1"]. \
- append(test[u"throughput"][ttype][u"LOWER"])
+ append(test[value][ttype][u"LOWER"] * multiplier)
elif u"2C" in test[u"tags"]:
y_vals[test[u"parent"]][u"2"]. \
- append(test[u"throughput"][ttype][u"LOWER"])
+ append(test[value][ttype][u"LOWER"] * multiplier)
elif u"4C" in test[u"tags"]:
y_vals[test[u"parent"]][u"4"]. \
- append(test[u"throughput"][ttype][u"LOWER"])
+ append(test[value][ttype][u"LOWER"] * multiplier)
except (KeyError, TypeError):
pass
y_max = list()
nic_limit = 0
lnk_limit = 0
- pci_limit = plot[u"limits"][u"pci"][u"pci-g3-x8"]
+ pci_limit = 0
for test_name, test_vals in y_vals.items():
try:
if test_vals[u"1"][1]:
if limit > lnk_limit:
lnk_limit = limit
+ if u"cx556a" in test_name:
+ limit = plot[u"limits"][u"pci"][u"pci-g3-x8"]
+ else:
+ limit = plot[u"limits"][u"pci"][u"pci-g3-x16"]
+ if limit > pci_limit:
+ pci_limit = limit
+
traces = list()
annotations = list()
x_vals = [1, 2, 4]
# Limits:
- try:
- threshold = 1.1 * max(y_max) # 10%
- except ValueError as err:
- logging.error(err)
- return
- nic_limit /= 1e6
- traces.append(plgo.Scatter(
- x=x_vals,
- y=[nic_limit, ] * len(x_vals),
- name=f"NIC: {nic_limit:.2f}Mpps",
- showlegend=False,
- mode=u"lines",
- line=dict(
- dash=u"dot",
- color=COLORS[-1],
- width=1),
- hoverinfo=u"none"
- ))
- annotations.append(dict(
- x=1,
- y=nic_limit,
- xref=u"x",
- yref=u"y",
- xanchor=u"left",
- yanchor=u"bottom",
- text=f"NIC: {nic_limit:.2f}Mpps",
- font=dict(
- size=14,
- color=COLORS[-1],
- ),
- align=u"left",
- showarrow=False
- ))
- y_max.append(nic_limit)
-
- lnk_limit /= 1e6
- if lnk_limit < threshold:
- traces.append(plgo.Scatter(
- x=x_vals,
- y=[lnk_limit, ] * len(x_vals),
- name=f"Link: {lnk_limit:.2f}Mpps",
- showlegend=False,
- mode=u"lines",
- line=dict(
- dash=u"dot",
- color=COLORS[-2],
- width=1),
- hoverinfo=u"none"
- ))
- annotations.append(dict(
- x=1,
- y=lnk_limit,
- xref=u"x",
- yref=u"y",
- xanchor=u"left",
- yanchor=u"bottom",
- text=f"Link: {lnk_limit:.2f}Mpps",
- font=dict(
- size=14,
- color=COLORS[-2],
- ),
- align=u"left",
- showarrow=False
- ))
- y_max.append(lnk_limit)
-
- pci_limit /= 1e6
- 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),
- name=f"PCIe: {pci_limit:.2f}Mpps",
- showlegend=False,
- mode=u"lines",
- line=dict(
- dash=u"dot",
- color=COLORS[-3],
- width=1),
- hoverinfo=u"none"
- ))
- annotations.append(dict(
- x=1,
- y=pci_limit,
- xref=u"x",
- yref=u"y",
- xanchor=u"left",
- yanchor=u"bottom",
- text=f"PCIe: {pci_limit:.2f}Mpps",
- font=dict(
- size=14,
- color=COLORS[-3],
- ),
- align=u"left",
- showarrow=False
- ))
- y_max.append(pci_limit)
+ if u"-gbps" not in plot_title and u"-cps-" not in plot_title:
+ nic_limit /= 1e6
+ lnk_limit /= 1e6
+ pci_limit /= 1e6
+ min_limit = min((nic_limit, lnk_limit, pci_limit))
+ if nic_limit == min_limit:
+ traces.append(plgo.Scatter(
+ x=x_vals,
+ y=[nic_limit, ] * len(x_vals),
+ name=f"NIC: {nic_limit:.2f}Mpps",
+ showlegend=False,
+ mode=u"lines",
+ line=dict(
+ dash=u"dot",
+ color=COLORS[-1],
+ width=1),
+ hoverinfo=u"none"
+ ))
+ annotations.append(dict(
+ x=1,
+ y=nic_limit,
+ xref=u"x",
+ yref=u"y",
+ xanchor=u"left",
+ yanchor=u"bottom",
+ text=f"NIC: {nic_limit:.2f}Mpps",
+ font=dict(
+ size=14,
+ color=COLORS[-1],
+ ),
+ align=u"left",
+ showarrow=False
+ ))
+ y_max.append(nic_limit)
+ elif lnk_limit == min_limit:
+ traces.append(plgo.Scatter(
+ x=x_vals,
+ y=[lnk_limit, ] * len(x_vals),
+ name=f"Link: {lnk_limit:.2f}Mpps",
+ showlegend=False,
+ mode=u"lines",
+ line=dict(
+ dash=u"dot",
+ color=COLORS[-1],
+ width=1),
+ hoverinfo=u"none"
+ ))
+ annotations.append(dict(
+ x=1,
+ y=lnk_limit,
+ xref=u"x",
+ yref=u"y",
+ xanchor=u"left",
+ yanchor=u"bottom",
+ text=f"Link: {lnk_limit:.2f}Mpps",
+ font=dict(
+ size=14,
+ color=COLORS[-1],
+ ),
+ align=u"left",
+ showarrow=False
+ ))
+ y_max.append(lnk_limit)
+ elif pci_limit == min_limit:
+ traces.append(plgo.Scatter(
+ x=x_vals,
+ y=[pci_limit, ] * len(x_vals),
+ name=f"PCIe: {pci_limit:.2f}Mpps",
+ showlegend=False,
+ mode=u"lines",
+ line=dict(
+ dash=u"dot",
+ color=COLORS[-1],
+ width=1),
+ hoverinfo=u"none"
+ ))
+ annotations.append(dict(
+ x=1,
+ y=pci_limit,
+ xref=u"x",
+ yref=u"y",
+ xanchor=u"left",
+ yanchor=u"bottom",
+ text=f"PCIe: {pci_limit:.2f}Mpps",
+ font=dict(
+ size=14,
+ color=COLORS[-1],
+ ),
+ align=u"left",
+ showarrow=False
+ ))
+ y_max.append(pci_limit)
# Perfect and measured:
cidx = 0
if isinstance(val[u"val"][idx], float):
htext += (
f"No. of Runs: {val[u'count'][idx]}<br>"
- f"Mean: {val[u'val'][idx]:.2f}Mpps<br>"
+ f"Mean: {val[u'val'][idx]:.2f}{h_unit}<br>"
)
if isinstance(val[u"diff"][idx], float):
htext += f"Diff: {round(val[u'diff'][idx]):.0f}%<br>"