Report: Add gso tests 71/31371/22
authorTibor Frank <tifrank@cisco.com>
Fri, 19 Feb 2021 13:07:29 +0000 (14:07 +0100)
committerTibor Frank <tifrank@cisco.com>
Mon, 22 Feb 2021 11:51:38 +0000 (12:51 +0100)
Change-Id: Ic21d43a104bdafe93600d8f5fd60d403d13285aa
Signed-off-by: Tibor Frank <tifrank@cisco.com>
docs/report/index.html.template
docs/report/vpp_performance_tests/gso_testing/2n-clx.rst [new file with mode: 0644]
docs/report/vpp_performance_tests/gso_testing/2n-skx.rst [new file with mode: 0644]
docs/report/vpp_performance_tests/gso_testing/2n-zn2.rst [new file with mode: 0644]
docs/report/vpp_performance_tests/gso_testing/index.rst [new file with mode: 0644]
docs/report/vpp_performance_tests/index.rst
resources/tools/presentation/generator_plots.py
resources/tools/presentation/input_data_parser.py
resources/tools/presentation/specification.yaml

index 5fe14bb..2c8d3ba 100644 (file)
@@ -24,6 +24,7 @@ CSIT-2101
     vpp_performance_tests/reconf_tests/index
     vpp_performance_tests/nf_service_density/index
     vpp_performance_tests/hoststack_testing/index
+    vpp_performance_tests/gso_testing/index
     vpp_performance_tests/comparisons/index
     vpp_performance_tests/throughput_trending
     vpp_performance_tests/test_environment
diff --git a/docs/report/vpp_performance_tests/gso_testing/2n-clx.rst b/docs/report/vpp_performance_tests/gso_testing/2n-clx.rst
new file mode 100644 (file)
index 0000000..3058265
--- /dev/null
@@ -0,0 +1,95 @@
+
+.. raw:: latex
+
+    \clearpage
+
+.. raw:: html
+
+    <script type="text/javascript">
+
+        function getDocHeight(doc) {
+            doc = doc || document;
+            var body = doc.body, html = doc.documentElement;
+            var height = Math.max( body.scrollHeight, body.offsetHeight,
+                html.clientHeight, html.scrollHeight, html.offsetHeight );
+            return height;
+        }
+
+        function setIframeHeight(id) {
+            var ifrm = document.getElementById(id);
+            var doc = ifrm.contentDocument? ifrm.contentDocument:
+                ifrm.contentWindow.document;
+            ifrm.style.visibility = 'hidden';
+            ifrm.style.height = "10px"; // reset to minimal height ...
+            // IE opt. for bing/msn needs a bit added or scrollbar appears
+            ifrm.style.height = getDocHeight( doc ) + 4 + "px";
+            ifrm.style.visibility = 'visible';
+        }
+
+    </script>
+
+2n-clx
+~~~~~~
+
+.. todo::
+    Add introduction
+
+.. raw:: latex
+
+    \clearpage
+
+1t1c
+----
+
+.. raw:: html
+
+    <iframe id="ifrm01" onload="setIframeHeight(this.id)" width="700" frameborder="0" scrolling="no" src="../../_static/vpp/2n-clx-128kb-1t1c-ip4routing-iperf3.html"></iframe>
+
+.. raw:: latex
+
+    \begin{figure}[H]
+        \centering
+            \graphicspath{{../_build/_static/vpp/}}
+            \includegraphics[clip, trim=0cm 0cm 5cm 0cm, width=0.70\textwidth]{2n-clx-128kb-1t1c-ip4routing-iperf3}
+            \label{fig:2n-clx-128kb-1t1c-ip4routing-iperf3}
+    \end{figure}
+
+.. raw:: latex
+
+    \clearpage
+
+2t2c
+----
+
+.. raw:: html
+
+    <iframe id="ifrm02" onload="setIframeHeight(this.id)" width="700" frameborder="0" scrolling="no" src="../../_static/vpp/2n-clx-128kb-2t2c-ip4routing-iperf3.html"></iframe>
+
+.. raw:: latex
+
+    \begin{figure}[H]
+        \centering
+            \graphicspath{{../_build/_static/vpp/}}
+            \includegraphics[clip, trim=0cm 0cm 5cm 0cm, width=0.70\textwidth]{2n-clx-128kb-2t2c-ip4routing-iperf3}
+            \label{fig:2n-clx-128kb-2t2c-ip4routing-iperf3}
+    \end{figure}
+
+.. raw:: latex
+
+    \clearpage
+
+4t4c
+----
+
+.. raw:: html
+
+    <iframe id="ifrm03" onload="setIframeHeight(this.id)" width="700" frameborder="0" scrolling="no" src="../../_static/vpp/2n-clx-128kb-4t4c-ip4routing-iperf3.html"></iframe>
+
+.. raw:: latex
+
+    \begin{figure}[H]
+        \centering
+            \graphicspath{{../_build/_static/vpp/}}
+            \includegraphics[clip, trim=0cm 0cm 5cm 0cm, width=0.70\textwidth]{2n-clx-128kb-4t4c-ip4routing-iperf3}
+            \label{fig:2n-clx-128kb-4t4c-ip4routing-iperf3}
+    \end{figure}
diff --git a/docs/report/vpp_performance_tests/gso_testing/2n-skx.rst b/docs/report/vpp_performance_tests/gso_testing/2n-skx.rst
new file mode 100644 (file)
index 0000000..4a24ea7
--- /dev/null
@@ -0,0 +1,95 @@
+
+.. raw:: latex
+
+    \clearpage
+
+.. raw:: html
+
+    <script type="text/javascript">
+
+        function getDocHeight(doc) {
+            doc = doc || document;
+            var body = doc.body, html = doc.documentElement;
+            var height = Math.max( body.scrollHeight, body.offsetHeight,
+                html.clientHeight, html.scrollHeight, html.offsetHeight );
+            return height;
+        }
+
+        function setIframeHeight(id) {
+            var ifrm = document.getElementById(id);
+            var doc = ifrm.contentDocument? ifrm.contentDocument:
+                ifrm.contentWindow.document;
+            ifrm.style.visibility = 'hidden';
+            ifrm.style.height = "10px"; // reset to minimal height ...
+            // IE opt. for bing/msn needs a bit added or scrollbar appears
+            ifrm.style.height = getDocHeight( doc ) + 4 + "px";
+            ifrm.style.visibility = 'visible';
+        }
+
+    </script>
+
+2n-skx
+~~~~~~
+
+.. todo::
+    Add introduction
+
+.. raw:: latex
+
+    \clearpage
+
+1t1c
+----
+
+.. raw:: html
+
+    <iframe id="ifrm01" onload="setIframeHeight(this.id)" width="700" frameborder="0" scrolling="no" src="../../_static/vpp/2n-skx-128kb-1t1c-ip4routing-iperf3.html"></iframe>
+
+.. raw:: latex
+
+    \begin{figure}[H]
+        \centering
+            \graphicspath{{../_build/_static/vpp/}}
+            \includegraphics[clip, trim=0cm 0cm 5cm 0cm, width=0.70\textwidth]{2n-skx-128kb-1t1c-ip4routing-iperf3}
+            \label{fig:2n-skx-128kb-1t1c-ip4routing-iperf3}
+    \end{figure}
+
+.. raw:: latex
+
+    \clearpage
+
+2t2c
+----
+
+.. raw:: html
+
+    <iframe id="ifrm02" onload="setIframeHeight(this.id)" width="700" frameborder="0" scrolling="no" src="../../_static/vpp/2n-skx-128kb-2t2c-ip4routing-iperf3.html"></iframe>
+
+.. raw:: latex
+
+    \begin{figure}[H]
+        \centering
+            \graphicspath{{../_build/_static/vpp/}}
+            \includegraphics[clip, trim=0cm 0cm 5cm 0cm, width=0.70\textwidth]{2n-skx-128kb-2t2c-ip4routing-iperf3}
+            \label{fig:2n-skx-128kb-2t2c-ip4routing-iperf3}
+    \end{figure}
+
+.. raw:: latex
+
+    \clearpage
+
+4t4c
+----
+
+.. raw:: html
+
+    <iframe id="ifrm03" onload="setIframeHeight(this.id)" width="700" frameborder="0" scrolling="no" src="../../_static/vpp/2n-skx-128kb-4t4c-ip4routing-iperf3.html"></iframe>
+
+.. raw:: latex
+
+    \begin{figure}[H]
+        \centering
+            \graphicspath{{../_build/_static/vpp/}}
+            \includegraphics[clip, trim=0cm 0cm 5cm 0cm, width=0.70\textwidth]{2n-skx-128kb-4t4c-ip4routing-iperf3}
+            \label{fig:2n-skx-128kb-4t4c-ip4routing-iperf3}
+    \end{figure}
diff --git a/docs/report/vpp_performance_tests/gso_testing/2n-zn2.rst b/docs/report/vpp_performance_tests/gso_testing/2n-zn2.rst
new file mode 100644 (file)
index 0000000..9107f03
--- /dev/null
@@ -0,0 +1,95 @@
+
+.. raw:: latex
+
+    \clearpage
+
+.. raw:: html
+
+    <script type="text/javascript">
+
+        function getDocHeight(doc) {
+            doc = doc || document;
+            var body = doc.body, html = doc.documentElement;
+            var height = Math.max( body.scrollHeight, body.offsetHeight,
+                html.clientHeight, html.scrollHeight, html.offsetHeight );
+            return height;
+        }
+
+        function setIframeHeight(id) {
+            var ifrm = document.getElementById(id);
+            var doc = ifrm.contentDocument? ifrm.contentDocument:
+                ifrm.contentWindow.document;
+            ifrm.style.visibility = 'hidden';
+            ifrm.style.height = "10px"; // reset to minimal height ...
+            // IE opt. for bing/msn needs a bit added or scrollbar appears
+            ifrm.style.height = getDocHeight( doc ) + 4 + "px";
+            ifrm.style.visibility = 'visible';
+        }
+
+    </script>
+
+2n-zn2
+~~~~~~
+
+.. todo::
+    Add introduction
+
+.. raw:: latex
+
+    \clearpage
+
+1t1c
+----
+
+.. raw:: html
+
+    <iframe id="ifrm01" onload="setIframeHeight(this.id)" width="700" frameborder="0" scrolling="no" src="../../_static/vpp/2n-zn2-128kb-1t1c-ip4routing-iperf3.html"></iframe>
+
+.. raw:: latex
+
+    \begin{figure}[H]
+        \centering
+            \graphicspath{{../_build/_static/vpp/}}
+            \includegraphics[clip, trim=0cm 0cm 5cm 0cm, width=0.70\textwidth]{2n-zn2-128kb-1t1c-ip4routing-iperf3}
+            \label{fig:2n-zn2-128kb-1t1c-ip4routing-iperf3}
+    \end{figure}
+
+.. raw:: latex
+
+    \clearpage
+
+2t2c
+----
+
+.. raw:: html
+
+    <iframe id="ifrm02" onload="setIframeHeight(this.id)" width="700" frameborder="0" scrolling="no" src="../../_static/vpp/2n-zn2-128kb-2t2c-ip4routing-iperf3.html"></iframe>
+
+.. raw:: latex
+
+    \begin{figure}[H]
+        \centering
+            \graphicspath{{../_build/_static/vpp/}}
+            \includegraphics[clip, trim=0cm 0cm 5cm 0cm, width=0.70\textwidth]{2n-zn2-128kb-2t2c-ip4routing-iperf3}
+            \label{fig:2n-zn2-128kb-2t2c-ip4routing-iperf3}
+    \end{figure}
+
+.. raw:: latex
+
+    \clearpage
+
+4t4c
+----
+
+.. raw:: html
+
+    <iframe id="ifrm03" onload="setIframeHeight(this.id)" width="700" frameborder="0" scrolling="no" src="../../_static/vpp/2n-zn2-128kb-4t4c-ip4routing-iperf3.html"></iframe>
+
+.. raw:: latex
+
+    \begin{figure}[H]
+        \centering
+            \graphicspath{{../_build/_static/vpp/}}
+            \includegraphics[clip, trim=0cm 0cm 5cm 0cm, width=0.70\textwidth]{2n-zn2-128kb-4t4c-ip4routing-iperf3}
+            \label{fig:2n-zn2-128kb-4t4c-ip4routing-iperf3}
+    \end{figure}
diff --git a/docs/report/vpp_performance_tests/gso_testing/index.rst b/docs/report/vpp_performance_tests/gso_testing/index.rst
new file mode 100644 (file)
index 0000000..5caca9f
--- /dev/null
@@ -0,0 +1,8 @@
+GSO Testing
+===========
+
+.. toctree::
+
+    2n-skx
+    2n-clx
+    2n-zn2
index 22177ea..bd497ce 100644 (file)
@@ -12,6 +12,7 @@ VPP Performance
     reconf_tests/index
     nf_service_density/index
     hoststack_testing/index
+    gso_testing/index
     comparisons/index
     throughput_trending
     test_environment
index 4ceeebc..11892a7 100644 (file)
@@ -82,7 +82,8 @@ def generate_plots(spec, data):
         u"plot_http_server_perf_box": plot_http_server_perf_box,
         u"plot_nf_heatmap": plot_nf_heatmap,
         u"plot_hdrh_lat_by_percentile": plot_hdrh_lat_by_percentile,
-        u"plot_hdrh_lat_by_percentile_x_log": plot_hdrh_lat_by_percentile_x_log
+        u"plot_hdrh_lat_by_percentile_x_log": plot_hdrh_lat_by_percentile_x_log,
+        u"plot_mrr_error_bars_name": plot_mrr_error_bars_name
     }
 
     logging.info(u"Generating the plots ...")
@@ -698,6 +699,109 @@ def plot_perf_box_name(plot, input_data):
         return
 
 
+def plot_mrr_error_bars_name(plot, input_data):
+    """Generate the plot(s) with algorithm: plot_mrr_error_bars_name
+    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 data set for the {plot.get(u'type', u'')} "
+        f"{plot.get(u'title', u'')}."
+    )
+    data = input_data.filter_tests_by_name(
+        plot,
+        params=[u"result", u"parent", u"tags", u"type"])
+    if data is None:
+        logging.error(u"No data.")
+        return
+
+    # Prepare the data for the plot
+    data_x = list()
+    data_names = list()
+    data_y_avg = list()
+    data_y_stdev = list()
+    data_y_max = 0
+    hover_info = list()
+    idx = 1
+    for item in plot.get(u"include", tuple()):
+        reg_ex = re.compile(str(item).lower())
+        for job in data:
+            for build in job:
+                for test_id, test in build.iteritems():
+                    if not re.match(reg_ex, str(test_id).lower()):
+                        continue
+                    try:
+                        data_x.append(idx)
+                        name = re.sub(REGEX_NIC, u'', test[u'parent'].lower().
+                                      replace(u'-mrr', u'').
+                                      replace(u'2n1l-', u''))
+                        data_names.append(f"{idx}. {name}")
+                        data_y_avg.append(
+                            round(test[u"result"][u"receive-rate"], 3)
+                        )
+                        data_y_stdev.append(
+                            round(test[u"result"][u"receive-stdev"], 3)
+                        )
+                        hover_info.append(
+                            f"{data_names[-1]}<br>"
+                            f"average [Gbps]: {data_y_avg[-1]}<br>"
+                            f"stdev [Gbps]: {data_y_stdev[-1]}"
+                        )
+                        if data_y_avg[-1] + data_y_stdev[-1] > data_y_max:
+                            data_y_max = data_y_avg[-1] + data_y_stdev[-1]
+                        idx += 1
+                    except (KeyError, TypeError):
+                        pass
+
+    # Add plot traces
+    traces = list()
+    for idx in range(len(data_x)):
+        traces.append(
+            plgo.Scatter(
+                x=[data_x[idx], ],
+                y=[data_y_avg[idx], ],
+                error_y=dict(
+                    type=u"data",
+                    array=[data_y_stdev[idx], ],
+                    visible=True
+                ),
+                name=data_names[idx],
+                mode=u"markers",
+                text=hover_info[idx],
+                hoverinfo=u"text"
+            )
+        )
+
+    try:
+        # Create plot
+        layout = deepcopy(plot[u"layout"])
+        if layout.get(u"title", None):
+            layout[u"title"] = f"<b>Throughput:</b> {layout[u'title']}"
+        if data_y_max:
+            layout[u"yaxis"][u"range"] = [0, int(data_y_max) + 1]
+        plpl = plgo.Figure(data=traces, layout=layout)
+
+        # Export Plot
+        logging.info(f"    Writing file {plot[u'output-file']}.html.")
+        ploff.plot(
+            plpl,
+            show_link=False,
+            auto_open=False,
+            filename=f"{plot[u'output-file']}.html"
+        )
+    except PlotlyError as err:
+        logging.error(
+            f"   Finished with error: {repr(err)}".replace(u"\n", u" ")
+        )
+        return
+
+
 def plot_tsa_name(plot, input_data):
     """Generate the plot(s) with algorithm:
     plot_tsa_name
index 268a736..6742439 100644 (file)
@@ -268,7 +268,7 @@ class ExecutionChecker(ResultVisitor):
         r'tx\s(\d*),\srx\s(\d*)'
     )
     REGEX_BMRR = re.compile(
-        r'Maximum Receive Rate trial results .*: \[(.*)\]'
+        r'.*trial results.*: \[(.*)\]'
     )
     REGEX_RECONF_LOSS = re.compile(
         r'Packets lost due to reconfig: (\d*)'
@@ -1177,7 +1177,8 @@ class ExecutionChecker(ResultVisitor):
                 if groups is not None:
                     items_str = groups.group(1)
                     items_float = [
-                        float(item.strip()) for item in items_str.split(",")
+                        float(item.strip().replace(u"'", u""))
+                        for item in items_str.split(",")
                     ]
                     # Use whole list in CSIT-1180.
                     stats = jumpavg.AvgStdevStats.for_runs(items_float)
index 035fe1f..669d13f 100644 (file)
         - 104 # rls2101.rel NDRPDR reconf iter env 6
         - 106 # rls2101.rel NDRPDR reconf iter env 6
 
+    plot-vpp-gso-2n-skx:
+      csit-vpp-perf-report-iterative-2101-2n-skx:
+        - 129 # rls2101.rel MRR GSO iter env 6
+
     plot-dpdk-throughput-latency-2n-skx:
       csit-dpdk-perf-report-iterative-2101-2n-skx:
         - 11  # rls2101 NDRPDR iter env 6
       csit-vpp-perf-report-iterative-2101-2n-zn2:
         - 40  # rls2101.rel NDRPDR iter RND env 6
 
+    plot-vpp-gso-2n-zn2:
+      csit-vpp-perf-report-iterative-2101-2n-zn2:
+        - 56  # rls2101.rel MRR GSO iter env 6
+
     plot-dpdk-throughput-latency-2n-zn2:
       csit-dpdk-perf-report-iterative-2101-2n-zn2:
         - 11  # rls2101 NDRPDR iter env 6
         - 58  # rls2101.rel soak env 6
         - 61  # rls2101.rel soak env 6
 
+    plot-vpp-gso-2n-clx:
+      csit-vpp-perf-report-iterative-2101-2n-clx:
+        - 159 # rls2101.rel MRR GSO iter env 6
+
     plot-dpdk-throughput-latency-2n-clx:
       csit-dpdk-perf-report-iterative-2101-2n-clx:
         - 12  # rls2101 NDRPDR iter env 6
       paper_bgcolor: "white"
       plot_bgcolor: "white"
 
+    plot-scatter-error-bars-gbps:
+      titlefont:
+        size: 16
+      xaxis:
+        title: "<b>Test Cases [Index]</b>"
+        titlefont:
+          size: 14
+        autorange: True
+        fixedrange: False
+        gridcolor: "rgb(230, 230, 230)"
+        linecolor: "rgb(220, 220, 220)"
+        linewidth: 1
+        showgrid: True
+        showline: True
+        showticklabels: True
+        tickcolor: "rgb(220, 220, 220)"
+        tickmode: "linear"
+        tickfont:
+          size: 14
+        zeroline: False
+      yaxis:
+        title: "<b>Traffic Throughput [Gbps]</b>"
+        titlefont:
+          size: 14
+        gridcolor: "rgb(230, 230, 230)"
+        hoverformat: ".4r"
+        tickformat: ".3r"
+        linecolor: "rgb(220, 220, 220)"
+        linewidth: 1
+        showgrid: True
+        showline: True
+        showticklabels: True
+        tickcolor: "rgb(220, 220, 220)"
+        tickfont:
+          size: 14
+        zeroline: False
+        range: [0,10]
+      autosize: False
+      margin:
+        t: 50
+        b: 0
+        l: 80
+        r: 20
+      showlegend: True
+      legend:
+        orientation: "h"
+        font:
+          size: 14
+      width: 700
+      height: 900
+      paper_bgcolor: "#fff"
+      plot_bgcolor: "#fff"
+      hoverlabel:
+        namelength: -1
+
 - type: "static"
   src-path: "{DIR[RST]}"
   dst-path: "{DIR[WORKING,SRC]}"
       - 106 # rls2101.rel NDRPDR reconf iter env 6
       - 68  # rls2101.rel soak env 6
       - 73  # rls2101.rel soak env 6
+      - 129 # rls2101.rel MRR GSO iter env 6
     csit-vpp-perf-report-coverage-2101-2n-skx:
       - 1   # rls2101.rel NDRPDR cov env 6 2n-skx-ip4-00
       - 2   # rls2101.rel NDRPDR cov env 6 2n-skx-ip4-01
       - 110 # rls2101.rel NDRPDR reconf iter env 6
       - 58  # rls2101.rel soak env 6
       - 61  # rls2101.rel soak env 6
+      - 159 # rls2101.rel MRR GSO iter env 6
     csit-vpp-perf-report-coverage-2101-2n-clx:
       - 1   # rls2101.rel NDRPDR cov env 6 2n-clx-ip4-00
       - 2   # rls2101.rel NDRPDR cov env 6 2n-clx-ip4-01
       - 50  # rls2101.rel NDRPDR iter RND env 6
       - 51  # rls2101.rel NDRPDR iter RND env 6
       - 52  # rls2101.rel NDRPDR iter RND env 6
+      - 56  # rls2101.rel MRR GSO iter env 6
     csit-vpp-perf-report-coverage-2101-2n-zn2:
       - 1   # rls2101.rel NDRPDR cov env 6 2n-zn2-ip4-00
       - 2   # rls2101.rel NDRPDR cov env 6 2n-zn2-ip4-01
   format:
     html:
     - full
-    pdf:
-    - minimal
+    pdf:
+    - minimal
 
 ################################################################################
 ###                               T A B L E S                                ###
   filter: "'1T1C' and 'NIC_Intel-XL710'"
   layout:
     layout: "plot-hdrh-latency-percentile-x-log"
+
+###############################################################################
+
+- type: "plot"
+  title: "Throughput: 2n-skx-128kb-1t1c-ip4routing-iperf3"
+  algorithm: "plot_mrr_error_bars_name"
+  output-file: "{DIR[STATIC,VPP]}/2n-skx-128kb-1t1c-ip4routing-iperf3"
+  data: "plot-vpp-gso-2n-skx"
+  include:
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Tap-Gso-Iperf3-Mrr.128KB-1t1c-ethip4-ip4base-2tap-gso-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Tap-Iperf3-Mrr.128KB-1t1c-ethip4-ip4base-2tap-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Vhost-Gso-Iperf3-Mrr.128KB-1t1c-ethip4-ip4base-2vhost-gso-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Vhost-Iperf3-Mrr.128KB-1t1c-ethip4-ip4base-2vhost-iperf3-mrr"
+  layout:
+    title: "2n-skx-128kb-1t1c-ip4routing-iperf3"
+    layout: "plot-scatter-error-bars-gbps"
+
+- type: "plot"
+  title: "Throughput: 2n-skx-128kb-2t2c-ip4routing-iperf3"
+  algorithm: "plot_mrr_error_bars_name"
+  output-file: "{DIR[STATIC,VPP]}/2n-skx-128kb-2t2c-ip4routing-iperf3"
+  data: "plot-vpp-gso-2n-skx"
+  include:
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Tap-Gso-Iperf3-Mrr.128KB-2t2c-ethip4-ip4base-2tap-gso-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Tap-Iperf3-Mrr.128KB-2t2c-ethip4-ip4base-2tap-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Vhost-Gso-Iperf3-Mrr.128KB-2t2c-ethip4-ip4base-2vhost-gso-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Vhost-Iperf3-Mrr.128KB-2t2c-ethip4-ip4base-2vhost-iperf3-mrr"
+  layout:
+    title: "2n-skx-128kb-2t2c-ip4routing-iperf3"
+    layout: "plot-scatter-error-bars-gbps"
+
+- type: "plot"
+  title: "Throughput: 2n-skx-128kb-4t4c-ip4routing-iperf3"
+  algorithm: "plot_mrr_error_bars_name"
+  output-file: "{DIR[STATIC,VPP]}/2n-skx-128kb-4t4c-ip4routing-iperf3"
+  data: "plot-vpp-gso-2n-skx"
+  include:
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Tap-Gso-Iperf3-Mrr.128KB-4t4c-ethip4-ip4base-2tap-gso-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Tap-Iperf3-Mrr.128KB-4t4c-ethip4-ip4base-2tap-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Vhost-Gso-Iperf3-Mrr.128KB-4t4c-ethip4-ip4base-2vhost-gso-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Vhost-Iperf3-Mrr.128KB-4t4c-ethip4-ip4base-2vhost-iperf3-mrr"
+  layout:
+    title: "2n-skx-128kb-4t4c-ip4routing-iperf3"
+    layout: "plot-scatter-error-bars-gbps"
+
+- type: "plot"
+  title: "Throughput: 2n-clx-128kb-1t1c-ip4routing-iperf3"
+  algorithm: "plot_mrr_error_bars_name"
+  output-file: "{DIR[STATIC,VPP]}/2n-clx-128kb-1t1c-ip4routing-iperf3"
+  data: "plot-vpp-gso-2n-clx"
+  include:
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Tap-Gso-Iperf3-Mrr.128KB-1t1c-ethip4-ip4base-2tap-gso-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Tap-Iperf3-Mrr.128KB-1t1c-ethip4-ip4base-2tap-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Vhost-Gso-Iperf3-Mrr.128KB-1t1c-ethip4-ip4base-2vhost-gso-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Vhost-Iperf3-Mrr.128KB-1t1c-ethip4-ip4base-2vhost-iperf3-mrr"
+  layout:
+    title: "2n-clx-128kb-1t1c-ip4routing-iperf3"
+    layout: "plot-scatter-error-bars-gbps"
+
+- type: "plot"
+  title: "Throughput: 2n-clx-128kb-2t2c-ip4routing-iperf3"
+  algorithm: "plot_mrr_error_bars_name"
+  output-file: "{DIR[STATIC,VPP]}/2n-clx-128kb-2t2c-ip4routing-iperf3"
+  data: "plot-vpp-gso-2n-clx"
+  include:
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Tap-Gso-Iperf3-Mrr.128KB-2t2c-ethip4-ip4base-2tap-gso-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Tap-Iperf3-Mrr.128KB-2t2c-ethip4-ip4base-2tap-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Vhost-Gso-Iperf3-Mrr.128KB-2t2c-ethip4-ip4base-2vhost-gso-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Vhost-Iperf3-Mrr.128KB-2t2c-ethip4-ip4base-2vhost-iperf3-mrr"
+  layout:
+    title: "2n-clx-128kb-2t2c-ip4routing-iperf3"
+    layout: "plot-scatter-error-bars-gbps"
+
+- type: "plot"
+  title: "Throughput: 2n-clx-128kb-4t4c-ip4routing-iperf3"
+  algorithm: "plot_mrr_error_bars_name"
+  output-file: "{DIR[STATIC,VPP]}/2n-clx-128kb-4t4c-ip4routing-iperf3"
+  data: "plot-vpp-gso-2n-clx"
+  include:
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Tap-Gso-Iperf3-Mrr.128KB-4t4c-ethip4-ip4base-2tap-gso-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Tap-Iperf3-Mrr.128KB-4t4c-ethip4-ip4base-2tap-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Vhost-Gso-Iperf3-Mrr.128KB-4t4c-ethip4-ip4base-2vhost-gso-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Vhost-Iperf3-Mrr.128KB-4t4c-ethip4-ip4base-2vhost-iperf3-mrr"
+  layout:
+    title: "2n-clx-128kb-4t4c-ip4routing-iperf3"
+    layout: "plot-scatter-error-bars-gbps"
+
+- type: "plot"
+  title: "Throughput: 2n-zn2-128kb-1t1c-ip4routing-iperf3"
+  algorithm: "plot_mrr_error_bars_name"
+  output-file: "{DIR[STATIC,VPP]}/2n-zn2-128kb-1t1c-ip4routing-iperf3"
+  data: "plot-vpp-gso-2n-zn2"
+  include:
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Tap-Gso-Iperf3-Mrr.128KB-1t1c-ethip4-ip4base-2tap-gso-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Tap-Iperf3-Mrr.128KB-1t1c-ethip4-ip4base-2tap-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Vhost-Gso-Iperf3-Mrr.128KB-1t1c-ethip4-ip4base-2vhost-gso-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Vhost-Iperf3-Mrr.128KB-1t1c-ethip4-ip4base-2vhost-iperf3-mrr"
+  layout:
+    title: "2n-zn2-128kb-1t1c-ip4routing-iperf3"
+    layout: "plot-scatter-error-bars-gbps"
+
+- type: "plot"
+  title: "Throughput: 2n-zn2-128kb-2t2c-ip4routing-iperf3"
+  algorithm: "plot_mrr_error_bars_name"
+  output-file: "{DIR[STATIC,VPP]}/2n-zn2-128kb-2t2c-ip4routing-iperf3"
+  data: "plot-vpp-gso-2n-zn2"
+  include:
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Tap-Gso-Iperf3-Mrr.128KB-2t2c-ethip4-ip4base-2tap-gso-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Tap-Iperf3-Mrr.128KB-2t2c-ethip4-ip4base-2tap-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Vhost-Gso-Iperf3-Mrr.128KB-2t2c-ethip4-ip4base-2vhost-gso-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Vhost-Iperf3-Mrr.128KB-2t2c-ethip4-ip4base-2vhost-iperf3-mrr"
+  layout:
+    title: "2n-zn2-128kb-2t2c-ip4routing-iperf3"
+    layout: "plot-scatter-error-bars-gbps"
+
+- type: "plot"
+  title: "Throughput: 2n-zn2-128kb-4t4c-ip4routing-iperf3"
+  algorithm: "plot_mrr_error_bars_name"
+  output-file: "{DIR[STATIC,VPP]}/2n-zn2-128kb-4t4c-ip4routing-iperf3"
+  data: "plot-vpp-gso-2n-zn2"
+  include:
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Tap-Gso-Iperf3-Mrr.128KB-4t4c-ethip4-ip4base-2tap-gso-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Tap-Iperf3-Mrr.128KB-4t4c-ethip4-ip4base-2tap-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Vhost-Gso-Iperf3-Mrr.128KB-4t4c-ethip4-ip4base-2vhost-gso-iperf3-mrr"
+    - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Vhost-Iperf3-Mrr.128KB-4t4c-ethip4-ip4base-2vhost-iperf3-mrr"
+  layout:
+    title: "2n-zn2-128kb-4t4c-ip4routing-iperf3"
+    layout: "plot-scatter-error-bars-gbps"