aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/hs_apps
AgeCommit message (Expand)AuthorFilesLines
2023-07-27hsa: add total bytes parameter to vcl_test_clientFilip Tehlar1-1/+17
2023-07-13hsa: fix echo client initFlorin Coras1-1/+2
2023-05-20hsa: add an option to configure ns in http cliFilip Tehlar1-1/+16
2023-05-19hsa: make http cli client thread safeFilip Tehlar1-6/+29
2023-05-16hsa: detach app on unsuccessful listenFilip Tehlar1-0/+12
2022-12-23hsa: fix echo client workers initializationBenoƮt Ganne1-5/+4
2022-12-02session: move connects to first workerFlorin Coras1-6/+2
2022-11-30hsa: session rpc for echo client cli notificationsFlorin Coras1-7/+12
2022-11-10http: support client connectFilip Tehlar3-0/+531
2022-11-05hsa: echo client crash when it fails to connect to remoteSteven Luong1-1/+1
2022-11-03misc: fix failing TestNs/TestHttpTps test in hstfMaros Ondrejicka1-1/+6
2022-09-29api: deprecate vl_msg_api_set_handlersDamjan Marion1-5/+12
2022-09-26api: replace print functions wth formatDamjan Marion1-7/+5
2022-06-29hsa: reduce number of preallocated vcl test server sessionsFlorin Coras2-1/+2
2022-06-10hsa: allow first segments larger than 4g for proxyFlorin Coras2-14/+5
2022-06-03hsa: dealloc proxy fifos on right threadFlorin Coras2-1/+46
2022-06-03hsa: refactor proxy session lookup and cleanupFlorin Coras2-103/+52
2022-04-21hsa: vcl test client epoll worker loopFlorin Coras3-15/+301
2022-04-16hsa: vcl test client allow non-blocking connectsFlorin Coras3-45/+66
2022-04-15hsa: support configurable vcl client wrk loopFlorin Coras1-69/+128
2022-04-12hsa: fix coverity warningFlorin Coras1-0/+1
2022-04-12hsa: vcl test client option to close only clientFlorin Coras2-2/+12
2022-04-04vppinfra: make _vec_len() read-onlyDamjan Marion2-3/+3
2022-03-29hsa: refactor echo clientsFlorin Coras2-318/+319
2022-03-25hsa: echo client connects as rpcFlorin Coras2-31/+36
2022-03-23vppinfra: change vlib_register_node so it takes format string for node nameDamjan Marion1-5/+1
2022-03-21hsa: add support for SAPI in vpp_echoFilip Tehlar5-48/+491
2022-03-14hsa: fix error messageFilip Tehlar1-3/+3
2022-03-01hsa: add tps support for random closesFlorin Coras1-23/+94
2022-02-24hsa: add support for vrfs in tpsFlorin Coras1-44/+98
2022-02-24hsa: fix tps data offset on connection reuseFlorin Coras1-0/+1
2022-02-24session: fix session layer socket readFilip Tehlar1-1/+5
2022-02-23http hsa: use octet-stream content type for tpsFlorin Coras1-1/+1
2022-02-23http: improvement reset and close handlingFlorin Coras1-4/+17
2022-02-23http hsa: support multiple listeners for http tpsFlorin Coras1-25/+154
2022-02-18hsa: fix coverity warningsFilip Tehlar1-0/+4
2022-02-17vcl: add support for reconnectFilip Tehlar1-5/+6
2022-02-13hsa: add http throughput test server appFlorin Coras3-1/+568
2022-01-26hsa: cleanup and rename http test serverFlorin Coras2-206/+156
2022-01-26http: generalize buffer implementationFlorin Coras1-1/+2
2022-01-25http hsa: avoid extra space in requestFlorin Coras1-10/+1
2022-01-20hsa: refactor test http server to use http protoFlorin Coras1-434/+156
2022-01-12hsa: echo clients connect improvementsFlorin Coras2-19/+34
2022-01-12hsa: cleanup echo client appFlorin Coras2-228/+268
2022-01-12hsa: allow large segments for echo appsFlorin Coras2-36/+13
2022-01-11hsa: allow use of default port for vcl test appsFlorin Coras2-23/+28
2021-12-14api: verify message size on receiptKlement Sekera1-1/+6
2021-10-04hsa: do not drop the barrier when creating echo serverFilip Tehlar1-14/+1
2021-10-03hsa: proxy app worker thread deadlockSivaprasad Tummala1-5/+10
2021-09-28api: API trace improvementsFilip Tehlar1-4/+5
) return # Prepare the data for the plot y_vals = dict() for job in data: for build in job: for test in build: if y_vals.get(test["parent"], None) is None: y_vals[test["parent"]] = list() try: y_vals[test["parent"]].append(test["throughput"]["value"]) except (KeyError, TypeError): y_vals[test["parent"]].append(None) # Add None to the lists with missing data max_len = 0 for val in y_vals.values(): if len(val) > max_len: max_len = len(val) for key, val in y_vals.items(): if len(val) < max_len: val.extend([None for _ in range(max_len - len(val))]) # Add plot traces traces = list() df = pd.DataFrame(y_vals) df.head() for i, col in enumerate(df.columns): name = "{0}. {1}".format(i + 1, col.lower().replace('-ndrpdrdisc', '')) traces.append(plgo.Box(x=[str(i + 1) + '.'] * len(df[col]), y=df[col], name=name, **plot["traces"])) try: # Create plot plpl = plgo.Figure(data=traces, layout=plot["layout"]) # Export Plot logging.info(" Writing file '{0}{1}'.". format(plot["output-file"], plot["output-file-type"])) ploff.plot(plpl, show_link=False, auto_open=False, filename='{0}{1}'.format(plot["output-file"], plot["output-file-type"])) except PlotlyError as err: logging.error(" Finished with error: {}". format(str(err).replace("\n", " "))) return logging.info(" Done.") def plot_latency_box(plot, input_data): """Generate the plot(s) with algorithm: plot_latency_box specified in the specification file. :param plot: Plot to generate. :param input_data: Data to process. :type plot: pandas.Series :type input_data: InputData """ logging.info(" Generating the plot {0} ...". format(plot.get("title", ""))) # Transform the data data = input_data.filter_data(plot) if data is None: logging.error("No data.") return # Prepare the data for the plot y_tmp_vals = dict() for job in data: for build in job: for test in build: if y_tmp_vals.get(test["parent"], None) is None: y_tmp_vals[test["parent"]] = [ list(), # direction1, min list(), # direction1, avg list(), # direction1, max list(), # direction2, min list(), # direction2, avg list() # direction2, max ] try: y_tmp_vals[test["parent"]][0].append( test["latency"]["direction1"]["50"]["min"]) y_tmp_vals[test["parent"]][1].append( test["latency"]["direction1"]["50"]["avg"]) y_tmp_vals[test["parent"]][2].append( test["latency"]["direction1"]["50"]["max"]) y_tmp_vals[test["parent"]][3].append( test["latency"]["direction2"]["50"]["min"]) y_tmp_vals[test["parent"]][4].append( test["latency"]["direction2"]["50"]["avg"]) y_tmp_vals[test["parent"]][5].append( test["latency"]["direction2"]["50"]["max"]) except (KeyError, TypeError): pass y_vals = dict() for key, values in y_tmp_vals.items(): y_vals[key] = list() for val in values: if val: average = mean(val) else: average = None y_vals[key].append(average) y_vals[key].append(average) # Twice for plot.ly # Add plot traces traces = list() try: df = pd.DataFrame(y_vals) df.head() except ValueError as err: logging.error(" Finished with error: {}". format(str(err).replace("\n", " "))) return for i, col in enumerate(df.columns): name = "{0}. {1}".format(i + 1, col.lower().replace('-ndrpdrdisc', '')) traces.append(plgo.Box(x=['TGint1-to-SUT1-to-SUT2-to-TGint2', 'TGint1-to-SUT1-to-SUT2-to-TGint2', 'TGint1-to-SUT1-to-SUT2-to-TGint2', 'TGint1-to-SUT1-to-SUT2-to-TGint2', 'TGint1-to-SUT1-to-SUT2-to-TGint2', 'TGint1-to-SUT1-to-SUT2-to-TGint2', 'TGint2-to-SUT2-to-SUT1-to-TGint1', 'TGint2-to-SUT2-to-SUT1-to-TGint1', 'TGint2-to-SUT2-to-SUT1-to-TGint1', 'TGint2-to-SUT2-to-SUT1-to-TGint1', 'TGint2-to-SUT2-to-SUT1-to-TGint1', 'TGint2-to-SUT2-to-SUT1-to-TGint1'], y=df[col], name=name, **plot["traces"])) try: # Create plot logging.info(" Writing file '{0}{1}'.". format(plot["output-file"], plot["output-file-type"])) plpl = plgo.Figure(data=traces, layout=plot["layout"]) # Export Plot ploff.plot(plpl, show_link=False, auto_open=False, filename='{0}{1}'.format(plot["output-file"], plot["output-file-type"])) except PlotlyError as err: logging.error(" Finished with error: {}". format(str(err).replace("\n", " "))) return logging.info(" Done.") def plot_throughput_speedup_analysis(plot, input_data): """Generate the plot(s) with algorithm: plot_throughput_speedup_analysis specified in the specification file. :param plot: Plot to generate. :param input_data: Data to process. :type plot: pandas.Series :type input_data: InputData """ logging.info(" Generating the plot {0} ...". format(plot.get("title", ""))) # Transform the data data = input_data.filter_data(plot) if data is None: logging.error("No data.") return throughput = dict() for job in data: for build in job: for test in build: if throughput.get(test["parent"], None) is None: throughput[test["parent"]] = {"1": list(), "2": list(), "4": list()} try: if "1T1C" in test["tags"]: throughput[test["parent"]]["1"].\ append(test["throughput"]["value"]) elif "2T2C" in test["tags"]: throughput[test["parent"]]["2"]. \ append(test["throughput"]["value"]) elif "4T4C" in test["tags"]: throughput[test["parent"]]["4"]. \ append(test["throughput"]["value"]) except (KeyError, TypeError): pass if not throughput: logging.warning("No data for the plot '{}'". format(plot.get("title", ""))) return for test_name, test_vals in throughput.items(): for key, test_val in test_vals.items(): if test_val: throughput[test_name][key] = sum(test_val) / len(test_val) names = ['1 core', '2 cores', '4 cores'] x_vals = list() y_vals_1 = list() y_vals_2 = list() y_vals_4 = list() for test_name, test_vals in throughput.items(): if test_vals["1"]: x_vals.append("-".join(test_name.split('-')[1:-1])) y_vals_1.append(1) if test_vals["2"]: y_vals_2.append( round(float(test_vals["2"]) / float(test_vals["1"]), 2)) else: y_vals_2.append(None) if test_vals["4"]: y_vals_4.append( round(float(test_vals["4"]) / float(test_vals["1"]), 2)) else: y_vals_4.append(None) y_vals = [y_vals_1, y_vals_2, y_vals_4] y_vals_zipped = zip(names, y_vals) traces = list() for val in y_vals_zipped: traces.append(plgo.Bar(x=x_vals, y=val[1], name=val[0])) try: # Create plot logging.info(" Writing file '{0}{1}'.". format(plot["output-file"], plot["output-file-type"])) plpl = plgo.Figure(data=traces, layout=plot["layout"]) # Export Plot ploff.plot(plpl, show_link=False, auto_open=False, filename='{0}{1}'.format(plot["output-file"], plot["output-file-type"])) except PlotlyError as err: logging.error(" Finished with error: {}". format(str(err).replace("\n", " "))) return logging.info(" Done.")