diff options
33 files changed, 1839 insertions, 180 deletions
diff --git a/ansible/multi_port_baremetal_ixia_correlated_test.yaml b/ansible/baremetal_scale_out_ixia_correlated_test.yaml index 0d223181d..13f6fef15 100644 --- a/ansible/multi_port_baremetal_ixia_correlated_test.yaml +++ b/ansible/baremetal_scale_out_ixia_correlated_test.yaml @@ -1,4 +1,4 @@ -# Copyright (c) 2017 Intel Corporation. # +# Copyright (c) 2018 Intel Corporation. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -112,6 +112,7 @@ ip: mgmt: - '1.2.1.6/24' + - '1.2.1.7/24' uplink: - '152.16.100.10/24' - '172.16.100.10/24' @@ -127,6 +128,6 @@ - '00:00:00:9e:00:fb' tasks: - - include: multi_port_baremetal_ixia_correlated_test_templates.yml + - include: baremetal_scale_out_ixia_correlated_test_templates.yml with_items: "{{ scale_out }}" diff --git a/ansible/multi_port_baremetal_ixia_correlated_test_templates.yml b/ansible/baremetal_scale_out_ixia_correlated_test_templates.yml index 6f73d8c01..11d3d4674 100644 --- a/ansible/multi_port_baremetal_ixia_correlated_test_templates.yml +++ b/ansible/baremetal_scale_out_ixia_correlated_test_templates.yml @@ -1,4 +1,4 @@ -# Copyright (c) 2017 Intel Corporation. # +# Copyright (c) 2018 Intel Corporation. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -15,6 +15,10 @@ - set_fact: num_vnfs: "{{ item }}" +- file: + path: /etc/yardstick/nodes + state: directory + - debug: var: num_vnfs verbosity: 2 @@ -24,33 +28,33 @@ dest: ../samples/vnf_samples/traffic_profiles/ipv4_throughput-ixia-{{ num_vnfs }}.yaml - template: - src: ../etc/yardstick/nodes/standalone/ixia_template.yaml - dest: /etc/yardstick/nodes/ixia_{{ num_vnfs }}.yaml + src: ../etc/yardstick/nodes/standalone/ixia_correlated_template.yaml + dest: /etc/yardstick/nodes/ixia_correlated_{{ num_vnfs }}.yaml - template: - src: ../etc/yardstick/nodes/standalone/pod_bm_vnf.yaml + src: ../etc/yardstick/nodes/standalone/pod_bm_vnf_scale_out.yaml dest: /etc/yardstick/nodes/pod_bm_vnf_{{num_vnfs}}.yaml - template: - src: ../samples/vnf_samples/nsut/vfw/tc_baremetal_vfw_udp_ixia_correlated_multi_port_template.yaml - dest: ../samples/vnf_samples/nsut/vfw/tc_baremetal_vfw_udp_ixia_correlated_multi_port_{{ num_vnfs }}.yaml + src: ../samples/vnf_samples/nsut/vfw/tc_baremetal_vfw_udp_ixia_correlated_scale_out_template.yaml + dest: ../samples/vnf_samples/nsut/vfw/tc_baremetal_vfw_udp_ixia_correlated_scale_out_{{ num_vnfs }}.yaml - template: - src: ../samples/vnf_samples/nsut/vfw/vfw-tg-topology-ixia-correlated-multi-port.yaml - dest: ../samples/vnf_samples/nsut/vfw/vfw-tg-topology-ixia-correlated-multi-port-{{ num_vnfs }}.yaml + src: ../samples/vnf_samples/nsut/vfw/vfw-tg-topology-ixia-correlated-scale-out.yaml + dest: ../samples/vnf_samples/nsut/vfw/vfw-tg-topology-ixia-correlated-scale-out-{{ num_vnfs }}.yaml - template: - src: ../samples/vnf_samples/nsut/acl/tc_baremetal_acl_udp_ixia_correlated_multi_port_template.yaml - dest: ../samples/vnf_samples/nsut/acl/tc_baremetal_acl_udp_ixia_correlated_multi_port_{{num_vnfs}}.yaml + src: ../samples/vnf_samples/nsut/acl/tc_baremetal_acl_udp_ixia_correlated_scale_out_template.yaml + dest: ../samples/vnf_samples/nsut/acl/tc_baremetal_acl_udp_ixia_correlated_scale_out_{{num_vnfs}}.yaml - template: - src: ../samples/vnf_samples/nsut/acl/acl-tg-topology-ixia-correlated-multi-port.yaml - dest: ../samples/vnf_samples/nsut/acl/acl-tg-topology-ixia-correlated-multi-port-{{ num_vnfs }}.yaml + src: ../samples/vnf_samples/nsut/acl/acl-tg-topology-ixia-correlated-scale-out.yaml + dest: ../samples/vnf_samples/nsut/acl/acl-tg-topology-ixia-correlated-scale-out-{{ num_vnfs }}.yaml - template: - src: ../samples/vnf_samples/nsut/cgnapt/tc_baremetal_cgnapt_udp_ixia_correlated_multi_port_template.yaml - dest: ../samples/vnf_samples/nsut/cgnapt/tc_baremetal_cgnapt_udp_ixia_correlated_multi_port_{{num_vnfs}}.yaml + src: ../samples/vnf_samples/nsut/cgnapt/tc_baremetal_cgnapt_udp_ixia_correlated_scale_out_template.yaml + dest: ../samples/vnf_samples/nsut/cgnapt/tc_baremetal_cgnapt_udp_ixia_correlated_scale_out_{{num_vnfs}}.yaml - template: - src: ../samples/vnf_samples/nsut/cgnapt/cgnapt-tg-topology-ixia-correlated-multi-port.yaml - dest: ../samples/vnf_samples/nsut/cgnapt/cgnapt-tg-topology-ixia-correlated-multi-port-{{ num_vnfs }}.yaml + src: ../samples/vnf_samples/nsut/cgnapt/cgnapt-tg-topology-ixia-correlated-scale-out.yaml + dest: ../samples/vnf_samples/nsut/cgnapt/cgnapt-tg-topology-ixia-correlated-scale-out-{{ num_vnfs }}.yaml diff --git a/ansible/multi_port_baremetal_ixia_test_templates.yml b/ansible/multi_port_baremetal_ixia_test_templates.yml index f2e04a2d1..832f025a1 100644 --- a/ansible/multi_port_baremetal_ixia_test_templates.yml +++ b/ansible/multi_port_baremetal_ixia_test_templates.yml @@ -15,6 +15,10 @@ - set_fact: num_vnfs: "{{ item }}" +- file: + path: /etc/yardstick/nodes + state: directory + - debug: var: num_vnfs verbosity: 2 @@ -25,15 +29,15 @@ - template: src: ../etc/yardstick/nodes/standalone/ixia_template.yaml - dest: /etc/yardstick/nodes/ixia_{{ num_vnfs }}.yaml + dest: /etc/yardstick/nodes/baremetal_ixia_{{ num_vnfs }}.yaml - template: src: ../etc/yardstick/nodes/standalone/pod_bm_vnf.yaml dest: /etc/yardstick/nodes/pod_bm_vnf_{{num_vnfs}}.yaml - template: - src: ../samples/vnf_samples/nsut/vfw/tc_baremetal_vfw_rfc2544_template.yaml - dest: ../samples/vnf_samples/nsut/vfw/tc_baremetal_vfw_rfc2544_{{ num_vnfs }}.yaml + src: ../samples/vnf_samples/nsut/vfw/tc_baremetal_vfw_rfc2544_ixia_template.yaml + dest: ../samples/vnf_samples/nsut/vfw/tc_baremetal_vfw_rfc2544_ixia_{{ num_vnfs }}.yaml - template: src: ../samples/vnf_samples/nsut/vfw/vfw-tg-topology-ixia-multi-port.yaml @@ -45,7 +49,7 @@ - template: src: ../samples/vnf_samples/nsut/acl/acl-tg-topology-ixia-multi-port.yaml - dest: ../samples/vnf_samples/nsut/acl/acl-tg-topology-multi-port-ixia-{{ num_vnfs }}.yaml + dest: ../samples/vnf_samples/nsut/acl/acl-tg-topology-ixia-multi-port-{{ num_vnfs }}.yaml - template: src: ../samples/vnf_samples/traffic_profiles/ipv4_throughput-cgnapt-scale-out.yaml diff --git a/ansible/multi_port_baremetal_test_templates.yml b/ansible/multi_port_baremetal_test_templates.yml index 4b905f8c7..2d0259364 100644 --- a/ansible/multi_port_baremetal_test_templates.yml +++ b/ansible/multi_port_baremetal_test_templates.yml @@ -15,6 +15,10 @@ - set_fact: num_vnfs: "{{ item }}" +- file: + path: /etc/yardstick/nodes + state: directory + - debug: var: num_vnfs verbosity: 2 @@ -40,8 +44,8 @@ dest: ../samples/vnf_samples/nsut/vfw/vfw-tg-topology-multi-port-{{ num_vnfs }}.yaml - template: - src: ../samples/vnf_samples/nsut/acl/tc_baremetal_vfw_rfc2544_template.yaml - dest: ../samples/vnf_samples/nsut/acl/tc_baremetal_vfw_rfc2544_{{ num_vnfs }}.yaml + src: ../samples/vnf_samples/nsut/acl/tc_baremetal_acl_rfc2544_template.yaml + dest: ../samples/vnf_samples/nsut/acl/tc_baremetal_acl_rfc2544_{{ num_vnfs }}.yaml - template: src: ../samples/vnf_samples/nsut/acl/acl-tg-topology-multi-port.yaml @@ -52,8 +56,8 @@ dest: ../samples/vnf_samples/traffic_profiles/ipv4_throughput-cgnapt-{{ num_vnfs }}.yaml - template: - src: ../samples/vnf_samples/nsut/cgnapt/tc_baremetal_vfw_rfc2544_template.yaml - dest: ../samples/vnf_samples/nsut/cgnapt/tc_baremetal_vfw_rfc2544_{{ num_vnfs }}.yaml + src: ../samples/vnf_samples/nsut/cgnapt/tc_baremetal_cgnapt_rfc2544_template.yaml + dest: ../samples/vnf_samples/nsut/cgnapt/tc_baremetal_cgnapt_rfc2544_{{ num_vnfs }}.yaml - template: src: ../samples/vnf_samples/nsut/cgnapt/cgnapt-tg-topology-multi-port.yaml diff --git a/dashboard/Prox_BM_L3FWD-4Port-1536065939744.json b/dashboard/Prox_BM_L3FWD-4Port-1539358774395.json index 63b8f4f12..304290560 100644 --- a/dashboard/Prox_BM_L3FWD-4Port-1536065939744.json +++ b/dashboard/Prox_BM_L3FWD-4Port-1539358774395.json @@ -14,7 +14,7 @@ "type": "grafana", "id": "grafana", "name": "Grafana", - "version": "4.6.3" + "version": "4.4.3" }, { "type": "panel", @@ -60,7 +60,7 @@ "hideControls": false, "id": null, "links": [], - "refresh": false, + "refresh": "5s", "rows": [ { "collapse": false, @@ -547,7 +547,8 @@ "max": true, "min": true, "show": true, - "sortDesc": true, + "sort": null, + "sortDesc": null, "total": false, "values": true }, @@ -855,7 +856,7 @@ ], "timeFrom": null, "timeShift": null, - "title": "Generator stats", + "title": "Generator Stats: Average Throughout per step", "tooltip": { "msResolution": true, "shared": true, @@ -1040,6 +1041,558 @@ "error": false, "fill": 1, "grid": {}, + "height": "300px", + "id": 206, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "connected", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "span": 6, + "stack": false, + "steppedLine": true, + "targets": [ + { + "alias": "TG xe-0 Out packets", + "dsType": "influxdb", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "hide": false, + "measurement": "tc_prox_baremetal_l3fwd-4", + "orderByTime": "ASC", + "policy": "default", + "query": "SELECT mean(\"tg__0.collect_stats.xe0.out_packets\") / 1000000 FROM \"tc_prox_baremetal_l3fwd-4\" WHERE $timeFilter GROUP BY time($interval) fill(null)", + "rawQuery": false, + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tg__0.collect_stats.live_stats.xe0.out_packets" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + " / 1000000" + ], + "type": "math" + } + ] + ], + "tags": [] + }, + { + "alias": "TG xe-1 Out packets", + "dsType": "influxdb", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "hide": false, + "measurement": "tc_prox_baremetal_l3fwd-4", + "orderByTime": "ASC", + "policy": "default", + "query": "SELECT mean(\"tg__0.collect_stats.live_stats.xe1.out_packets\") FROM \"tc_prox_baremetal_l3fwd-4\" WHERE $timeFilter GROUP BY time($interval) fill(null)", + "rawQuery": false, + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tg__0.collect_stats.live_stats.xe1.out_packets" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + " / 1000000" + ], + "type": "math" + } + ] + ], + "tags": [] + }, + { + "alias": "TG xe-2 Out packets", + "dsType": "influxdb", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "hide": false, + "measurement": "tc_prox_baremetal_l3fwd-4", + "orderByTime": "ASC", + "policy": "default", + "query": "SELECT mean(\"tg__0.collect_stats.xe2.out_packets\") / 1000000 FROM \"tc_prox_baremetal_l3fwd-4\" WHERE $timeFilter GROUP BY time($interval) fill(null)", + "rawQuery": false, + "refId": "C", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tg__0.collect_stats.live_stats.xe2.out_packets" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + " / 1000000" + ], + "type": "math" + } + ] + ], + "tags": [] + }, + { + "alias": "TG xe-3 Out packets", + "dsType": "influxdb", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "measurement": "tc_prox_baremetal_l3fwd-4", + "orderByTime": "ASC", + "policy": "default", + "query": "SELECT mean(\"tg__0.collect_stats.xe3.out_packets\") / 1000000 FROM \"tc_prox_baremetal_l3fwd-4\" WHERE $timeFilter GROUP BY time($interval) fill(null)", + "rawQuery": false, + "refId": "D", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tg__0.collect_stats.live_stats.xe3.out_packets" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + " / 1000000" + ], + "type": "math" + } + ] + ], + "tags": [] + } + ], + "thresholds": [ + { + "colorMode": "custom", + "fill": true, + "fillColor": "rgba(216, 200, 27, 0.27)", + "op": "gt", + "value": 0 + }, + { + "colorMode": "custom", + "fill": true, + "fillColor": "rgba(234, 112, 112, 0.22)", + "op": "gt", + "value": 0 + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Packets Sent by Generator per second and per interface", + "tooltip": { + "msResolution": true, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Million Packets Per Second", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_YARDSTICK}", + "decimals": 4, + "editable": true, + "error": false, + "fill": 1, + "grid": {}, + "height": "300px", + "id": 207, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "connected", + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "span": 6, + "stack": false, + "steppedLine": false, + "targets": [ + { + "alias": "TG xe-0 in packets", + "dsType": "influxdb", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "measurement": "tc_prox_baremetal_l3fwd-4", + "orderByTime": "ASC", + "policy": "default", + "query": "SELECT mean(\"tg__0.collect_stats.xe0.in_packets\") / 1000000 FROM \"tc_prox_baremetal_l3fwd-4\" WHERE $timeFilter GROUP BY time($interval) fill(null)", + "rawQuery": false, + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tg__0.collect_stats.live_stats.xe0.in_packets" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + " / 1000000" + ], + "type": "math" + } + ] + ], + "tags": [] + }, + { + "alias": "TG xe-1 in packets", + "dsType": "influxdb", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "measurement": "tc_prox_baremetal_l3fwd-4", + "orderByTime": "ASC", + "policy": "default", + "query": "SELECT mean(\"tg__0.collect_stats.live_stats.xe1.in_packets\") FROM \"tc_prox_baremetal_l3fwd-4\" WHERE $timeFilter GROUP BY time($interval) fill(null)", + "rawQuery": false, + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tg__0.collect_stats.live_stats.xe1.in_packets" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + " / 1000000" + ], + "type": "math" + } + ] + ], + "tags": [] + }, + { + "alias": "TG xe-2 in packets", + "dsType": "influxdb", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "measurement": "tc_prox_baremetal_l3fwd-4", + "orderByTime": "ASC", + "policy": "default", + "query": "SELECT mean(\"tg__0.collect_stats.live_stats.xe2.in_packets\") FROM \"tc_prox_baremetal_l3fwd-4\" WHERE $timeFilter GROUP BY time($interval) fill(null)", + "rawQuery": false, + "refId": "C", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tg__0.collect_stats.live_stats.xe2.in_packets" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + " / 1000000" + ], + "type": "math" + } + ] + ], + "tags": [] + }, + { + "alias": "TG xe-3 in packets", + "dsType": "influxdb", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "measurement": "tc_prox_baremetal_l3fwd-4", + "orderByTime": "ASC", + "policy": "default", + "query": "SELECT mean(\"tg__0.collect_stats.live_stats.xe3.in_packets\") FROM \"tc_prox_baremetal_l3fwd-4\" WHERE $timeFilter GROUP BY time($interval) fill(null)", + "rawQuery": false, + "refId": "D", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tg__0.collect_stats.live_stats.xe3.in_packets" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + " / 1000000" + ], + "type": "math" + } + ] + ], + "tags": [] + } + ], + "thresholds": [ + { + "colorMode": "custom", + "fill": true, + "fillColor": "rgba(216, 200, 27, 0.27)", + "op": "gt", + "value": 0 + }, + { + "colorMode": "custom", + "fill": true, + "fillColor": "rgba(234, 112, 112, 0.22)", + "op": "gt", + "value": 0 + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Packets Received by Generator per second and per interface", + "tooltip": { + "msResolution": true, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": "Million Packets Per Second", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ] + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_YARDSTICK}", + "decimals": 4, + "editable": true, + "error": false, + "fill": 1, + "grid": {}, "height": "300", "id": 4, "legend": { @@ -1050,7 +1603,7 @@ "min": true, "rightSide": false, "show": true, - "sortDesc": true, + "sortDesc": false, "total": false, "values": true }, @@ -1295,7 +1848,7 @@ ] }, { - "content": "<h5 style=\"font-family:Verdana\"> <a style=\"color:#31A7D3\"><a style=\"font: 22px '#31A7D3'\"><center>Prox L3Fwd Traffic Gen stats</center> </a></h5>\n", + "content": "<h5 style=\"font-family:Verdana\"> <a style=\"color:#31A7D3\"><a style=\"font: 22px '#31A7D3'\"><center>Generator Stats: Packets per Step</center> </a></h5>\n", "editable": true, "error": false, "height": "40", @@ -1362,11 +1915,12 @@ "type": "fill" } ], + "hide": false, "measurement": "tc_prox_baremetal_l3fwd-4", "orderByTime": "ASC", "policy": "default", "query": "SELECT mean(\"tg__0.collect_stats.xe0.out_packets\") FROM \"tc_prox_baremetal_l3fwd-4\" WHERE $timeFilter GROUP BY time($interval) fill(null)", - "rawQuery": true, + "rawQuery": false, "refId": "A", "resultFormat": "time_series", "select": [ @@ -1380,6 +1934,12 @@ { "params": [], "type": "mean" + }, + { + "params": [ + " / 1000000" + ], + "type": "math" } ] ], @@ -1402,11 +1962,12 @@ "type": "fill" } ], + "hide": false, "measurement": "tc_prox_baremetal_l3fwd-4", "orderByTime": "ASC", "policy": "default", "query": "SELECT mean(\"tg__0.collect_stats.xe1.out_packets\") FROM \"tc_prox_baremetal_l3fwd-4\" WHERE $timeFilter GROUP BY time($interval) fill(null)", - "rawQuery": true, + "rawQuery": false, "refId": "B", "resultFormat": "time_series", "select": [ @@ -1420,6 +1981,12 @@ { "params": [], "type": "mean" + }, + { + "params": [ + " / 1000000" + ], + "type": "math" } ] ], @@ -1442,11 +2009,12 @@ "type": "fill" } ], + "hide": false, "measurement": "tc_prox_baremetal_l3fwd-4", "orderByTime": "ASC", "policy": "default", "query": "SELECT mean(\"tg__0.collect_stats.xe2.out_packets\") FROM \"tc_prox_baremetal_l3fwd-4\" WHERE $timeFilter GROUP BY time($interval) fill(null)", - "rawQuery": true, + "rawQuery": false, "refId": "C", "resultFormat": "time_series", "select": [ @@ -1460,6 +2028,12 @@ { "params": [], "type": "mean" + }, + { + "params": [ + " / 1000000" + ], + "type": "math" } ] ], @@ -1486,7 +2060,7 @@ "orderByTime": "ASC", "policy": "default", "query": "SELECT mean(\"tg__0.collect_stats.xe3.out_packets\") FROM \"tc_prox_baremetal_l3fwd-4\" WHERE $timeFilter GROUP BY time($interval) fill(null)", - "rawQuery": true, + "rawQuery": false, "refId": "D", "resultFormat": "time_series", "select": [ @@ -1500,6 +2074,12 @@ { "params": [], "type": "mean" + }, + { + "params": [ + " / 1000000" + ], + "type": "math" } ] ], @@ -1524,7 +2104,7 @@ ], "timeFrom": null, "timeShift": null, - "title": "Packets Sent by Generator", + "title": "Packets Sent by Generator per Step", "tooltip": { "msResolution": true, "shared": true, @@ -1542,7 +2122,7 @@ "yaxes": [ { "format": "short", - "label": "Packets ", + "label": "Million Packets Per Step", "logBase": 1, "max": null, "min": "0", @@ -1564,6 +2144,7 @@ "dashLength": 10, "dashes": false, "datasource": "${DS_YARDSTICK}", + "decimals": 4, "editable": true, "error": false, "fill": 1, @@ -1577,6 +2158,7 @@ "max": true, "min": true, "show": true, + "sortDesc": true, "total": false, "values": true }, @@ -1615,7 +2197,7 @@ "orderByTime": "ASC", "policy": "default", "query": "SELECT mean(\"tg__0.collect_stats.xe0.in_packets\") FROM \"tc_prox_baremetal_l3fwd-4\" WHERE $timeFilter GROUP BY time($interval) fill(null)", - "rawQuery": true, + "rawQuery": false, "refId": "A", "resultFormat": "time_series", "select": [ @@ -1629,6 +2211,12 @@ { "params": [], "type": "mean" + }, + { + "params": [ + " / 1000000" + ], + "type": "math" } ] ], @@ -1655,7 +2243,7 @@ "orderByTime": "ASC", "policy": "default", "query": "SELECT mean(\"tg__0.collect_stats.xe1.in_packets\") FROM \"tc_prox_baremetal_l3fwd-4\" WHERE $timeFilter GROUP BY time($interval) fill(null)", - "rawQuery": true, + "rawQuery": false, "refId": "B", "resultFormat": "time_series", "select": [ @@ -1669,6 +2257,12 @@ { "params": [], "type": "mean" + }, + { + "params": [ + " / 1000000" + ], + "type": "math" } ] ], @@ -1695,7 +2289,7 @@ "orderByTime": "ASC", "policy": "default", "query": "SELECT mean(\"tg__0.collect_stats.xe2.in_packets\") FROM \"tc_prox_baremetal_l3fwd-4\" WHERE $timeFilter GROUP BY time($interval) fill(null)", - "rawQuery": true, + "rawQuery": false, "refId": "C", "resultFormat": "time_series", "select": [ @@ -1709,6 +2303,12 @@ { "params": [], "type": "mean" + }, + { + "params": [ + " / 1000000" + ], + "type": "math" } ] ], @@ -1735,7 +2335,7 @@ "orderByTime": "ASC", "policy": "default", "query": "SELECT mean(\"tg__0.collect_stats.xe3.in_packets\") FROM \"tc_prox_baremetal_l3fwd-4\" WHERE $timeFilter GROUP BY time($interval) fill(null)", - "rawQuery": true, + "rawQuery": false, "refId": "D", "resultFormat": "time_series", "select": [ @@ -1749,6 +2349,12 @@ { "params": [], "type": "mean" + }, + { + "params": [ + " / 1000000" + ], + "type": "math" } ] ], @@ -1773,7 +2379,7 @@ ], "timeFrom": null, "timeShift": null, - "title": "Packets Received by Generator", + "title": "Packets Received by Generator per Step", "tooltip": { "msResolution": true, "shared": true, @@ -1791,7 +2397,7 @@ "yaxes": [ { "format": "short", - "label": "Packets Per Second", + "label": "Million Packets Per Step", "logBase": 1, "max": null, "min": "0", @@ -2470,7 +3076,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -2558,7 +3164,7 @@ "measurement": "tc_prox_baremetal_l3fwd-4", "orderByTime": "ASC", "policy": "default", - "query": "SELECT last(\"tg__0.collect_stats.theor_max_throughput\") FROM \"tc_prox_baremetal_l3fwd-4\" WHERE \"tg__0.collect_stats.PktSize\" = 64 AND \"tg__0.collect_stats.Status\" = 'Result' AND $timeFilter GROUP BY time($__interval) fill(null)", + "query": "SELECT last(\"tg__0.collect_stats.theor_max_throughput\") FROM \"tc_prox_baremetal_l3fwd-4\" WHERE \"tg__0.collect_stats.PktSize\" = 64 AND \"tg__0.collect_stats.Status\" = 'Result' AND $timeFilter GROUP BY time($__interval) fill(null)", "rawQuery": true, "refId": "A", "resultFormat": "time_series", @@ -2566,7 +3172,7 @@ [ { "params": [ - "tg__0.collect_stats.theor_max_throughput" + "tg__0.collect_stats.RequestedTxThroughput" ], "type": "field" }, @@ -2588,7 +3194,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -2701,7 +3307,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -2819,7 +3425,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -2936,7 +3542,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -3053,7 +3659,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -3170,7 +3776,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -3287,7 +3893,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -3405,7 +4011,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -3540,7 +4146,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -3658,7 +4264,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -3771,7 +4377,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -3889,7 +4495,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -4006,7 +4612,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -4123,7 +4729,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -4240,7 +4846,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -4357,7 +4963,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -4475,7 +5081,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -4610,7 +5216,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -4728,7 +5334,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -4841,7 +5447,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -4959,7 +5565,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -5076,7 +5682,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -5193,7 +5799,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -5310,7 +5916,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -5427,7 +6033,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -5545,7 +6151,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -5680,7 +6286,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -5798,7 +6404,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -5911,7 +6517,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -6029,7 +6635,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -6146,7 +6752,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -6263,7 +6869,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -6380,7 +6986,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -6497,7 +7103,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -6615,7 +7221,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -6750,7 +7356,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -6868,7 +7474,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -6981,7 +7587,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -7099,7 +7705,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -7216,7 +7822,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -7333,7 +7939,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -7450,7 +8056,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -7567,7 +8173,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -7685,7 +8291,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -7820,7 +8426,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -7938,7 +8544,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -8051,7 +8657,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -8169,7 +8775,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -8286,7 +8892,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -8403,7 +9009,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -8520,7 +9126,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -8637,7 +9243,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -8755,7 +9361,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -8890,7 +9496,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -9008,7 +9614,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -9121,7 +9727,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -9239,7 +9845,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -9356,7 +9962,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -9473,7 +10079,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -9590,7 +10196,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -9707,7 +10313,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -9825,7 +10431,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -9960,7 +10566,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -10078,7 +10684,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -10191,7 +10797,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -10309,7 +10915,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -10426,7 +11032,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -10543,7 +11149,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -10660,7 +11266,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -10777,7 +11383,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -10895,7 +11501,7 @@ "thresholds": "", "title": "", "type": "singlestat", - "valueFontSize": "50%", + "valueFontSize": "30%", "valueMaps": [ { "op": "=", @@ -12457,8 +13063,8 @@ "list": [] }, "time": { - "from": "2018-09-04T00:52:16.948Z", - "to": "2018-09-04T12:52:16.948Z" + "from": "now-3h", + "to": "now" }, "timepicker": { "refresh_intervals": [ @@ -12487,5 +13093,5 @@ }, "timezone": "browser", "title": "Prox_BM_L3FWD-4Port", - "version": 3 + "version": 6 }
\ No newline at end of file diff --git a/etc/yardstick/nodes/standalone/pod_bm_vnf_scale_out.yaml b/etc/yardstick/nodes/standalone/pod_bm_vnf_scale_out.yaml new file mode 100644 index 000000000..b48a04911 --- /dev/null +++ b/etc/yardstick/nodes/standalone/pod_bm_vnf_scale_out.yaml @@ -0,0 +1,37 @@ +# Copyright (c) 2018 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +nodes: +{% for num in range(num_vnfs|int) %} +- + name: vnf__{{ num }} + role: vnf__{{ num }} + ip: {{vnf.ip.mgmt[num] | ipaddr('address')}} + user: {{vnf.user}} + password: {{vnf.password}} + key_filename: {{vnf.key_filename}} + interfaces: + xe0: # logical name from topology.yaml and vnfd.yaml + vpci: "{{vnf.pcis.uplink[num]}}" + dpdk_port_num: 0 + local_ip: "{{vnf.ip.uplink[num] | ipaddr('address')}}" + netmask: "{{vnf.ip.uplink[num] | ipaddr('netmask')}}" + local_mac: "{{vnf.mac.uplink[num]}}" + xe1: # logical name from topology.yaml and vnfd.yaml + vpci: "{{vnf.pcis.downlink[num]}}" + dpdk_port_num: 1 + local_ip: "{{vnf.ip.downlink[num] | ipaddr('address') }}" + netmask: "{{vnf.ip.downlink[num] | ipaddr('netmask')}}" + local_mac: "{{vnf.mac.downlink[num]}}" +{% endfor %} diff --git a/samples/vnf_samples/nsut/acl/tc_baremetal_acl_rfc2544_ixia_template.yaml b/samples/vnf_samples/nsut/acl/tc_baremetal_acl_rfc2544_ixia_template.yaml index 8c7651bf7..91155070a 100644 --- a/samples/vnf_samples/nsut/acl/tc_baremetal_acl_rfc2544_ixia_template.yaml +++ b/samples/vnf_samples/nsut/acl/tc_baremetal_acl_rfc2544_ixia_template.yaml @@ -48,7 +48,7 @@ scenarios: contexts: - name: yardstick type: Node - file: /etc/yardstick/nodes/baremetal_trex_{{num_vnfs}}.yaml + file: /etc/yardstick/nodes/baremetal_ixia_{{num_vnfs}}.yaml - name: yardstick type: Node file: /etc/yardstick/nodes/pod_bm_vnf_{{num_vnfs}}.yaml diff --git a/samples/vnf_samples/nsut/acl/tc_baremetal_acl_rfc2544_template.yaml b/samples/vnf_samples/nsut/acl/tc_baremetal_acl_rfc2544_template.yaml index 1333b2721..8ba836841 100644 --- a/samples/vnf_samples/nsut/acl/tc_baremetal_acl_rfc2544_template.yaml +++ b/samples/vnf_samples/nsut/acl/tc_baremetal_acl_rfc2544_template.yaml @@ -17,7 +17,7 @@ schema: yardstick:task:0.1 scenarios: - type: NSPerf traffic_profile: ../../traffic_profiles/ipv4_throughput-{{ num_vnfs }}.yaml - topology: acl-tg-topology-scale-out-{{ num_vnfs }}.yaml + topology: acl-tg-topology-multi-port-{{ num_vnfs }}.yaml nodes: tg__0: tg__0.yardstick vnf__0: vnf__0.yardstick diff --git a/samples/vnf_samples/nsut/acl/tc_baremetal_acl_udp_ixia_correlated_multi_port_template.yaml b/samples/vnf_samples/nsut/acl/tc_baremetal_acl_udp_ixia_correlated_multi_port_template.yaml index da1c5a7ab..e3558b80e 100644 --- a/samples/vnf_samples/nsut/acl/tc_baremetal_acl_udp_ixia_correlated_multi_port_template.yaml +++ b/samples/vnf_samples/nsut/acl/tc_baremetal_acl_udp_ixia_correlated_multi_port_template.yaml @@ -42,7 +42,6 @@ scenarios: vnf__0: rules: acl_1rule.yaml vnf_config: {lb_config: '{{flow.vnf_config.lb_config}}', lb_count: {{flow.vnf_config.lb_count}} , worker_config: '{{flow.vnf_config.worker_config}}', worker_threads: {{flow.vnf_config.worker_threads}}} - runner: type: Iteration iterations: 10 diff --git a/samples/vnf_samples/nsut/acl/tc_baremetal_acl_udp_ixia_correlated_scale_out_template.yaml b/samples/vnf_samples/nsut/acl/tc_baremetal_acl_udp_ixia_correlated_scale_out_template.yaml new file mode 100644 index 000000000..55ff62d70 --- /dev/null +++ b/samples/vnf_samples/nsut/acl/tc_baremetal_acl_udp_ixia_correlated_scale_out_template.yaml @@ -0,0 +1,60 @@ +# Copyright (c) 2018 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +--- +schema: yardstick:task:0.1 +scenarios: + - type: NSPerf + traffic_profile: ../../traffic_profiles/ipv4_throughput-ixia-{{ num_vnfs }}.yaml + topology: acl-tg-topology-ixia-correlated-scale-out-{{ num_vnfs }}.yaml + nodes: + tg__0: tg__0.yardstick + tg__1: tg__1.yardstick +{% for vnf_num in range(num_vnfs|int) %} + vnf__{{ vnf_num }}: vnf_{{ vnf_num }}.yardstick +{% endfor %} + options: + framesize: + uplink: {{ flow.pkt_size.uplink | to_yaml }} + downlink: {{ flow.pkt_size.downlink | to_yaml }} + flow: + src_ip: +{% for vnf_num in range(num_vnfs|int) %} + - {'tg__0': 'xe{{ vnf_num }}'} +{% endfor %} + dst_ip: +{% for vnf_num in range(num_vnfs|int) %} + - {'tg__1': 'xe{{ vnf_num }}'} +{% endfor %} + count: {{ flow.count }} + traffic_type: {{ flow.traffic_type }} + rfc2544: + allowed_drop_rate: {{ flow.rfc2544.allowed_drop_rate }} + correlated_traffic: true + vnf__0: + rules: acl_1rule.yaml + vnf_config: {lb_config: '{{flow.vnf_config.lb_config}}', lb_count: {{flow.vnf_config.lb_count}} , worker_config: '{{flow.vnf_config.worker_config}}', worker_threads: {{flow.vnf_config.worker_threads}}} + ixia_profile: ../../traffic_profiles/ixia/ixia_ipv4_profile_{{ num_vnfs * 2 }}_port.ixncfg + + runner: + type: Iteration + iterations: 10 + interval: 35 +contexts: + - name: yardstick + type: Node + file: /etc/yardstick/nodes/ixia_correlated_{{num_vnfs}}.yaml + - type: Node + file: /etc/yardstick/nodes/pod_bm_vnf_{{num_vnfs}}.yaml + name: yardstick diff --git a/samples/vnf_samples/nsut/cgnapt/tc_baremetal_cgnapt_rfc2544_ixia_template.yaml b/samples/vnf_samples/nsut/cgnapt/tc_baremetal_cgnapt_rfc2544_ixia_template.yaml index 778494745..deb28dcc3 100644 --- a/samples/vnf_samples/nsut/cgnapt/tc_baremetal_cgnapt_rfc2544_ixia_template.yaml +++ b/samples/vnf_samples/nsut/cgnapt/tc_baremetal_cgnapt_rfc2544_ixia_template.yaml @@ -17,7 +17,7 @@ schema: yardstick:task:0.1 scenarios: - type: NSPerf traffic_profile: ../../traffic_profiles/ipv4_throughput-{{ num_vnfs }}.yaml - topology: cgnapt-tg-topology-ixia-multi-port-{{ num_vnfs }}.yaml + topology: cgnapt-tg-topology-multi-port-ixia-{{ num_vnfs }}.yaml nodes: tg__0: tg__0.yardstick vnf__0: vnf__0.yardstick @@ -39,7 +39,6 @@ scenarios: rfc2544: allowed_drop_rate: {{ flow.rfc2544.allowed_drop_rate }} vnf__0: - rules: acl_1rule.yaml vnf_config: {lb_config: '{{flow.vnf_config.lb_config}}', lb_count: {{flow.vnf_config.lb_count}} , worker_config: '{{flow.vnf_config.worker_config}}', worker_threads: {{flow.vnf_config.worker_threads}}} runner: type: Iteration @@ -48,7 +47,7 @@ scenarios: contexts: - name: yardstick type: Node - file: /etc/yardstick/nodes/baremetal_trex_{{num_vnfs}}.yaml + file: /etc/yardstick/nodes/baremetal_ixia_{{num_vnfs}}.yaml - name: yardstick type: Node file: /etc/yardstick/nodes/pod_bm_vnf_{{num_vnfs}}.yaml diff --git a/samples/vnf_samples/nsut/cgnapt/tc_baremetal_cgnapt_rfc2544_template.yaml b/samples/vnf_samples/nsut/cgnapt/tc_baremetal_cgnapt_rfc2544_template.yaml index 81000a7a5..f52b41bb3 100644 --- a/samples/vnf_samples/nsut/cgnapt/tc_baremetal_cgnapt_rfc2544_template.yaml +++ b/samples/vnf_samples/nsut/cgnapt/tc_baremetal_cgnapt_rfc2544_template.yaml @@ -39,7 +39,6 @@ scenarios: rfc2544: allowed_drop_rate: {{ flow.rfc2544.allowed_drop_rate }} vnf__0: - rules: acl_1rule.yaml vnf_config: {lb_config: '{{flow.vnf_config.lb_config}}', lb_count: {{flow.vnf_config.lb_count}} , worker_config: '{{flow.vnf_config.worker_config}}', worker_threads: {{flow.vnf_config.worker_threads}}} runner: type: Iteration diff --git a/samples/vnf_samples/nsut/cgnapt/tc_baremetal_cgnapt_udp_ixia_correlated_multi_port_template.yaml b/samples/vnf_samples/nsut/cgnapt/tc_baremetal_cgnapt_udp_ixia_correlated_multi_port_template.yaml index 0621f9afe..198c84713 100644 --- a/samples/vnf_samples/nsut/cgnapt/tc_baremetal_cgnapt_udp_ixia_correlated_multi_port_template.yaml +++ b/samples/vnf_samples/nsut/cgnapt/tc_baremetal_cgnapt_udp_ixia_correlated_multi_port_template.yaml @@ -40,9 +40,7 @@ scenarios: rfc2544: allowed_drop_rate: {{ flow.rfc2544.allowed_drop_rate }} vnf__0: - rules: acl_1rule.yaml vnf_config: {lb_config: '{{flow.vnf_config.lb_config}}', lb_count: {{flow.vnf_config.lb_count}} , worker_config: '{{flow.vnf_config.worker_config}}', worker_threads: {{flow.vnf_config.worker_threads}}} - runner: type: Iteration iterations: 10 diff --git a/samples/vnf_samples/nsut/cgnapt/tc_baremetal_cgnapt_udp_ixia_correlated_scale_out_template.yaml b/samples/vnf_samples/nsut/cgnapt/tc_baremetal_cgnapt_udp_ixia_correlated_scale_out_template.yaml new file mode 100644 index 000000000..c0936082a --- /dev/null +++ b/samples/vnf_samples/nsut/cgnapt/tc_baremetal_cgnapt_udp_ixia_correlated_scale_out_template.yaml @@ -0,0 +1,59 @@ +# Copyright (c) 2018 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +--- +schema: yardstick:task:0.1 +scenarios: + - type: NSPerf + traffic_profile: ../../traffic_profiles/ipv4_throughput-ixia-{{ num_vnfs }}.yaml + topology: cgnapt-tg-topology-ixia-correlated-scale-out-{{ num_vnfs }}.yaml + nodes: + tg__0: tg__0.yardstick + tg__1: tg__1.yardstick +{% for vnf_num in range(num_vnfs|int) %} + vnf__{{ vnf_num }}: vnf_{{ vnf_num }}.yardstick +{% endfor %} + options: + framesize: + uplink: {{ flow.pkt_size.uplink | to_yaml }} + downlink: {{ flow.pkt_size.downlink | to_yaml }} + flow: + src_ip: +{% for vnf_num in range(num_vnfs|int) %} + - {'tg__0': 'xe{{ vnf_num }}'} +{% endfor %} + dst_ip: +{% for vnf_num in range(num_vnfs|int) %} + - {'tg__1': 'xe{{ vnf_num }}'} +{% endfor %} + count: {{ flow.count }} + traffic_type: {{ flow.traffic_type }} + rfc2544: + allowed_drop_rate: {{ flow.rfc2544.allowed_drop_rate }} + correlated_traffic: true + vnf__0: + vnf_config: {lb_config: '{{flow.vnf_config.lb_config}}', lb_count: {{flow.vnf_config.lb_count}} , worker_config: '{{flow.vnf_config.worker_config}}', worker_threads: {{flow.vnf_config.worker_threads}}} + ixia_profile: ../../traffic_profiles/ixia/ixia_ipv4_profile_{{ num_vnfs * 2}}_port.ixncfg + + runner: + type: Iteration + iterations: 10 + interval: 35 +contexts: + - name: yardstick + type: Node + file: /etc/yardstick/nodes/ixia_correlated_{{num_vnfs}}.yaml + - type: Node + file: /etc/yardstick/nodes/pod_bm_vnf_{{num_vnfs}}.yaml + name: yardstick diff --git a/samples/vnf_samples/nsut/prox/configs/gen_l2fwd_multiflow-2.cfg b/samples/vnf_samples/nsut/prox/configs/gen_l2fwd_multiflow-2.cfg index c1939c06c..fb2584e91 100644 --- a/samples/vnf_samples/nsut/prox/configs/gen_l2fwd_multiflow-2.cfg +++ b/samples/vnf_samples/nsut/prox/configs/gen_l2fwd_multiflow-2.cfg @@ -53,15 +53,19 @@ mode=gen tx port=p0 bps=1250000000 ; Ethernet + IP + UDP -pkt inline=${sut_mac0} 70 00 00 00 00 01 08 00 45 00 00 1c 00 01 00 00 40 11 f7 7d 98 10 64 01 98 10 64 02 13 88 13 88 00 08 55 7b -; src_ip: 152.16.100.0/8 +pkt inline=${sut_mac0} 70 00 00 00 00 01 08 00 45 00 00 24 00 01 00 00 40 11 f7 7d 98 10 64 01 98 10 64 02 13 88 13 88 00 10 55 7b 00 01 02 03 04 05 06 07 +; src_ip: 152.16.100.0/28 random=0000XXX1 rand_offset=29 -; dst_ip: 152.16.100.0/8 +; dst_ip: 152.16.100.0/28 random=0000XXX0 rand_offset=33 +; src_port: 5000-5007, dst_port: 5000-5007 random=0001001110001XXX0001001110001XXX rand_offset=34 +lat pos=42 +signature pos=46 +signature=0xcafedeca [core 2] name=p1 @@ -70,16 +74,19 @@ mode=gen tx port=p1 bps=1250000000 ; Ethernet + IP + UDP -pkt inline=${sut_mac1} 70 00 00 00 00 01 08 00 45 00 00 1c 00 01 00 00 40 11 f7 7d 98 10 28 01 98 10 28 02 13 88 13 88 00 08 55 7b -; src_ip: 152.16.40.0/8 -random=1001100000010000001010000000XXXX -rand_offset=26 -; dst_ip: 152.16.40.0/8 -random=1001100000010000001010000000XXXX -rand_offset=30 +pkt inline=${sut_mac1} 70 00 00 00 00 02 08 00 45 00 00 24 00 01 00 00 40 11 f7 7d 98 10 64 01 98 10 64 02 13 88 13 88 00 10 55 7b 00 01 02 03 04 05 06 07 +; src_ip: 152.16.100.0/28 +random=0000XXX1 +rand_offset=29 +; dst_ip: 152.16.100.0/28 +random=0000XXX0 +rand_offset=33 +; src_port: 5000-5007, dst_port: 5000-5007 random=0001001110001XXX0001001110001XXX rand_offset=34 - +lat pos=42 +signature pos=46 +signature=0xcafedeca [core 3] name=rec 0 @@ -87,6 +94,8 @@ task=0 mode=lat rx port=p0 lat pos=42 +signature pos=46 +signature=0xcafedeca [core 4] name=rec 1 @@ -94,3 +103,5 @@ task=0 mode=lat rx port=p1 lat pos=42 +signature pos=46 +signature=0xcafedeca
\ No newline at end of file diff --git a/samples/vnf_samples/nsut/prox/configs/gen_l2fwd_multiflow-4.cfg b/samples/vnf_samples/nsut/prox/configs/gen_l2fwd_multiflow-4.cfg index f1e158414..c3c7c25d7 100644 --- a/samples/vnf_samples/nsut/prox/configs/gen_l2fwd_multiflow-4.cfg +++ b/samples/vnf_samples/nsut/prox/configs/gen_l2fwd_multiflow-4.cfg @@ -27,21 +27,29 @@ $sut_mac3=@@dst_mac3 [port 0] name=p0 mac=hardware +rx desc=2048 +tx desc=2048 promiscuous=yes [port 1] name=p1 mac=hardware +rx desc=2048 +tx desc=2048 promiscuous=yes [port 2] name=p2 mac=hardware +rx desc=2048 +tx desc=2048 promiscuous=yes [port 3] name=p3 mac=hardware +rx desc=2048 +tx desc=2048 promiscuous=yes [defaults] @@ -61,15 +69,19 @@ mode=gen tx port=p0 bps=1250000000 ; Ethernet + IP + UDP -pkt inline=${sut_mac0} 70 00 00 00 00 01 08 00 45 00 00 1c 00 01 00 00 40 11 f7 7d 98 10 64 01 98 10 64 02 13 88 13 88 00 08 55 7b -; src_ip: 152.16.100.0/8 +pkt inline=${sut_mac0} 70 00 00 00 00 01 08 00 45 00 00 24 00 01 00 00 40 11 f7 7d 98 10 64 01 98 10 64 02 13 88 13 88 00 10 55 7b 00 01 02 03 04 05 06 07 +; src_ip: 152.16.100.0/28 random=0000XXX1 rand_offset=29 -; dst_ip: 152.16.100.0/8 +; dst_ip: 152.16.100.0/28 random=0000XXX0 rand_offset=33 +; src_port: 5000-5007, dst_port: 5000-5007 random=0001001110001XXX0001001110001XXX rand_offset=34 +lat pos=42 +signature pos=46 +signature=0xcafedeca [core 2] name=p1 @@ -78,15 +90,19 @@ mode=gen tx port=p1 bps=1250000000 ; Ethernet + IP + UDP -pkt inline=${sut_mac1} 70 00 00 00 00 01 08 00 45 00 00 1c 00 01 00 00 40 11 f7 7d 98 10 64 01 98 10 64 02 13 88 13 88 00 08 55 7b -; src_ip: 152.16.100.0/8 +pkt inline=${sut_mac1} 70 00 00 00 00 02 08 00 45 00 00 24 00 01 00 00 40 11 f7 7d 98 10 64 01 98 10 64 02 13 88 13 88 00 10 55 7b 00 01 02 03 04 05 06 07 +; src_ip: 152.16.100.0/28 random=0000XXX1 rand_offset=29 -; dst_ip: 152.16.100.0/8 +; dst_ip: 152.16.100.0/28 random=0000XXX0 rand_offset=33 +; src_port: 5000-5007, dst_port: 5000-5007 random=0001001110001XXX0001001110001XXX rand_offset=34 +lat pos=42 +signature pos=46 +signature=0xcafedeca [core 3] name=p2 @@ -95,15 +111,19 @@ mode=gen tx port=p2 bps=1250000000 ; Ethernet + IP + UDP -pkt inline=${sut_mac2} 70 00 00 00 00 01 08 00 45 00 00 1c 00 01 00 00 40 11 f7 7d 98 10 64 01 98 10 64 02 13 88 13 88 00 08 55 7b -; src_ip: 152.16.100.0/8 +pkt inline=${sut_mac2} 70 00 00 00 00 03 08 00 45 00 00 24 00 01 00 00 40 11 f7 7d 98 10 64 01 98 10 64 02 13 88 13 88 00 10 55 7b 00 01 02 03 04 05 06 07 +; src_ip: 152.16.100.0/28 random=0000XXX1 rand_offset=29 -; dst_ip: 152.16.100.0/8 +; dst_ip: 152.16.100.0/28 random=0000XXX0 rand_offset=33 +; src_port: 5000-5007, dst_port: 5000-5007 random=0001001110001XXX0001001110001XXX rand_offset=34 +lat pos=42 +signature pos=46 +signature=0xcafedeca [core 4] name=p3 @@ -112,36 +132,52 @@ mode=gen tx port=p3 bps=1250000000 ; Ethernet + IP + UDP -pkt inline=${sut_mac3} 70 00 00 00 00 01 08 00 45 00 00 1c 00 01 00 00 40 11 f7 7d 98 10 64 01 98 10 64 02 13 88 13 88 00 08 55 7b -; src_ip: 152.16.100.0/8 +pkt inline=${sut_mac3} 70 00 00 00 00 04 08 00 45 00 00 24 00 01 00 00 40 11 f7 7d 98 10 64 01 98 10 64 02 13 88 13 88 00 10 55 7b 00 01 02 03 04 05 06 07 +; src_ip: 152.16.100.0/28 random=0000XXX1 rand_offset=29 -; dst_ip: 152.16.100.0/8 +; dst_ip: 152.16.100.0/28 random=0000XXX0 rand_offset=33 +; src_port: 5000-5007, dst_port: 5000-5007 random=0001001110001XXX0001001110001XXX rand_offset=34 +lat pos=42 +signature pos=46 +signature=0xcafedeca [core 5] name=rec 0 task=0 mode=lat rx port=p0 +lat pos=42 +signature pos=46 +signature=0xcafedeca [core 6] name=rec 1 task=0 mode=lat rx port=p1 +lat pos=42 +signature pos=46 +signature=0xcafedeca [core 7] name=rec 2 task=0 mode=lat rx port=p2 +lat pos=42 +signature pos=46 +signature=0xcafedeca [core 8] name=rec 3 task=0 mode=lat rx port=p3 +lat pos=42 +signature pos=46 +signature=0xcafedeca diff --git a/samples/vnf_samples/nsut/prox/tc_prox_ovs-dpdk_l3fwd-scale-up.yaml b/samples/vnf_samples/nsut/prox/tc_prox_ovs-dpdk_l3fwd-scale-up.yaml new file mode 100644 index 000000000..450775805 --- /dev/null +++ b/samples/vnf_samples/nsut/prox/tc_prox_ovs-dpdk_l3fwd-scale-up.yaml @@ -0,0 +1,107 @@ +# Copyright (c) 2016-2018 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +{% set vports = vports or 2 %} +--- +schema: "yardstick:task:0.1" + +scenarios: +- + type: NSPerf + traffic_profile: ../../traffic_profiles/prox_binsearch.yaml + extra_args: + vports: {{ vports }} + topology: prox-tg-topology-scale-up.yaml + + nodes: + tg__0: tg__0.yardstick + vnf__0: vnf__0.yardstick + + options: + vnf__0: + prox_path: /opt/nsb_bin/prox + prox_config: "configs/handle_l3fwd-{{ vports }}.cfg" + prox_args: + "-t": "" + prox_files: +{% if vports == 2 %} + "configs/ipv4-2port.lua" : "" +{% else %} + "configs/ipv4.lua" : "" +{% endif %} + prox_generate_parameter: True + + tg__0: + prox_path: /opt/nsb_bin/prox + prox_config: "configs/gen_l3fwd-{{ vports }}.cfg" + prox_args: + "-e": "" + "-t": "" + + runner: + type: Duration + # we kill after duration, independent of test duration, so set this high + duration: 600 + +contexts: + - name: yardstick + type: Node + file: prox_tg_bm.yaml + - name: yardstick + type: StandaloneOvsDpdk + file: /etc/yardstick/nodes/standalone/host_ovs.yaml + vm_deploy: True + ovs_properties: + version: + ovs: 2.8.0 + dpdk: 17.05.2 + pmd_threads: 2 + ram: + socket_0: 2048 + socket_1: 2048 + queues: 4 + vpath: "/usr/local" + flavor: + images: "/var/lib/libvirt/images/yardstick-nsb-image.img" + ram: 16384 + extra_specs: + hw:cpu_sockets: 1 + hw:cpu_cores: 10 + hw:cpu_threads: 2 + servers: + vnf__0: + network_ports: + mgmt: + cidr: '1.1.1.62/24' +{% for port_num in range(1,vports,2|int) %} + xe{{ loop.index0 * 2 }}: + - uplink_{{ loop.index0 }} + xe{{ (loop.index0 * 2) + 1 }}: + - downlink_{{ loop.index0 }} +{% endfor %} + networks: +{% for port_num in range(1,vports,2|int) %} + uplink_{{ loop.index0 }}: + port_num: {{ networks.uplink[loop.index0].port_num }} + phy_port: "{{ networks.uplink[loop.index0].phy_port }}" + vpci: "{{ networks.uplink[loop.index0].vpci }}" + cidr: "{{ networks.uplink[loop.index0].cidr }}" + gateway_ip: "{{ networks.uplink[loop.index0].gateway_ip }}" + downlink_{{ loop.index0 }}: + port_num: {{ networks.downlink[loop.index0].port_num }} + phy_port: "{{ networks.downlink[loop.index0].phy_port }}" + vpci: "{{ networks.downlink[loop.index0].vpci }}" + cidr: "{{ networks.downlink[loop.index0].cidr }}" + gateway_ip: "{{ networks.downlink[loop.index0].gateway_ip }}" +{% endfor %} diff --git a/samples/vnf_samples/nsut/vfw/tc_baremetal_vfw_rfc2544_ixia_template.yaml b/samples/vnf_samples/nsut/vfw/tc_baremetal_vfw_rfc2544_ixia_template.yaml index 96a079b91..28e3216ba 100644 --- a/samples/vnf_samples/nsut/vfw/tc_baremetal_vfw_rfc2544_ixia_template.yaml +++ b/samples/vnf_samples/nsut/vfw/tc_baremetal_vfw_rfc2544_ixia_template.yaml @@ -48,7 +48,7 @@ scenarios: contexts: - name: yardstick type: Node - file: /etc/yardstick/nodes/baremetal_trex_{{num_vnfs}}.yaml + file: /etc/yardstick/nodes/baremetal_ixia_{{num_vnfs}}.yaml - name: yardstick type: Node file: /etc/yardstick/nodes/pod_bm_vnf_{{num_vnfs}}.yaml diff --git a/samples/vnf_samples/nsut/vfw/tc_baremetal_vfw_udp_ixia_correlated_multi_port_template.yaml b/samples/vnf_samples/nsut/vfw/tc_baremetal_vfw_udp_ixia_correlated_multi_port_template.yaml index 43803d382..462d14f1a 100644 --- a/samples/vnf_samples/nsut/vfw/tc_baremetal_vfw_udp_ixia_correlated_multi_port_template.yaml +++ b/samples/vnf_samples/nsut/vfw/tc_baremetal_vfw_udp_ixia_correlated_multi_port_template.yaml @@ -42,7 +42,6 @@ scenarios: vnf__0: rules: acl_1rule.yaml vnf_config: {lb_config: '{{flow.vnf_config.lb_config}}', lb_count: {{flow.vnf_config.lb_count}} , worker_config: '{{flow.vnf_config.worker_config}}', worker_threads: {{flow.vnf_config.worker_threads}}} - runner: type: Iteration iterations: 10 diff --git a/samples/vnf_samples/nsut/vfw/tc_baremetal_vfw_udp_ixia_correlated_scale_out_template.yaml b/samples/vnf_samples/nsut/vfw/tc_baremetal_vfw_udp_ixia_correlated_scale_out_template.yaml new file mode 100644 index 000000000..77d0bf809 --- /dev/null +++ b/samples/vnf_samples/nsut/vfw/tc_baremetal_vfw_udp_ixia_correlated_scale_out_template.yaml @@ -0,0 +1,60 @@ +# Copyright (c) 2018 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +--- +schema: yardstick:task:0.1 +scenarios: + - type: NSPerf + traffic_profile: ../../traffic_profiles/ipv4_throughput-ixia-{{ num_vnfs }}.yaml + topology: vfw-tg-topology-ixia-correlated-scale-out-{{ num_vnfs }}.yaml + nodes: + tg__0: tg__0.yardstick + tg__1: tg__1.yardstick +{% for vnf_num in range(num_vnfs|int) %} + vnf__{{ vnf_num }}: vnf_{{ vnf_num }}.yardstick +{% endfor %} + options: + framesize: + uplink: {{ flow.pkt_size.uplink | to_yaml }} + downlink: {{ flow.pkt_size.downlink | to_yaml }} + flow: + src_ip: +{% for vnf_num in range(num_vnfs|int) %} + - {'tg__0': 'xe{{ vnf_num }}'} +{% endfor %} + dst_ip: +{% for vnf_num in range(num_vnfs|int) %} + - {'tg__1': 'xe{{ vnf_num }}'} +{% endfor %} + count: {{ flow.count }} + traffic_type: {{ flow.traffic_type }} + rfc2544: + allowed_drop_rate: {{ flow.rfc2544.allowed_drop_rate }} + correlated_traffic: true + vnf__0: + rules: acl_1rule.yaml + vnf_config: {lb_config: '{{flow.vnf_config.lb_config}}', lb_count: {{flow.vnf_config.lb_count}} , worker_config: '{{flow.vnf_config.worker_config}}', worker_threads: {{flow.vnf_config.worker_threads}}} + ixia_profile: ../../traffic_profiles/ixia/ixia_ipv4_profile_{{ num_vnfs * 2 }}_port.ixncfg + + runner: + type: Iteration + iterations: 10 + interval: 35 +contexts: + - name: yardstick + type: Node + file: /etc/yardstick/nodes/ixia_correlated_{{num_vnfs}}.yaml + - type: Node + file: /etc/yardstick/nodes/pod_bm_vnf_{{num_vnfs}}.yaml + name: yardstick diff --git a/tests/opnfv/test_suites/opnfv_os-ovn-nofeature-ha_daily.yaml b/tests/opnfv/test_suites/opnfv_os-ovn-nofeature-ha_daily.yaml new file mode 100644 index 000000000..d0677280c --- /dev/null +++ b/tests/opnfv/test_suites/opnfv_os-ovn-nofeature-ha_daily.yaml @@ -0,0 +1,38 @@ +############################################################################## +# Copyright (c) 2018 Huawei Technologies Co.,Ltd and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## +--- +# opnfv os-ovn-nofeature-ha daily task suite + +schema: "yardstick:suite:0.1" + +name: "os-ovn-nofeature-ha" +test_cases_dir: "tests/opnfv/test_cases/" +test_cases: +- + file_name: opnfv_yardstick_tc002.yaml +- + file_name: opnfv_yardstick_tc005.yaml +- + file_name: opnfv_yardstick_tc010.yaml +- + file_name: opnfv_yardstick_tc011.yaml +- + file_name: opnfv_yardstick_tc012.yaml +- + file_name: opnfv_yardstick_tc014.yaml +- + file_name: opnfv_yardstick_tc037.yaml +- + file_name: opnfv_yardstick_tc069.yaml +- + file_name: opnfv_yardstick_tc070.yaml +- + file_name: opnfv_yardstick_tc071.yaml +- + file_name: opnfv_yardstick_tc072.yaml diff --git a/yardstick/benchmark/contexts/standalone/ovs_dpdk.py b/yardstick/benchmark/contexts/standalone/ovs_dpdk.py index 3a310f146..c6e19f614 100644 --- a/yardstick/benchmark/contexts/standalone/ovs_dpdk.py +++ b/yardstick/benchmark/contexts/standalone/ovs_dpdk.py @@ -172,12 +172,12 @@ class OvsDpdkContext(base.Context): def setup_ovs_bridge_add_flows(self): dpdk_args = "" - dpdk_list = [] vpath = self.ovs_properties.get("vpath", "/usr/local") version = self.ovs_properties.get('version', {}) ovs_ver = [int(x) for x in version.get('ovs', self.DEFAULT_OVS).split('.')] ovs_add_port = ('ovs-vsctl add-port {br} {port} -- ' - 'set Interface {port} type={type_}{dpdk_args}{dpdk_rxq}') + 'set Interface {port} type={type_}{dpdk_args}' + '{dpdk_rxq}{pmd_rx_aff}') chmod_vpath = 'chmod 0777 {0}/var/run/openvswitch/dpdkvhostuser*' cmd_list = [ @@ -191,23 +191,38 @@ class OvsDpdkContext(base.Context): if queues: dpdk_rxq = " options:n_rxq={queue}".format(queue=queues) - ordered_network = collections.OrderedDict(self.networks) + # Sorting the array to make sure we execute dpdk0... in the order + ordered_network = collections.OrderedDict( + sorted(self.networks.items(), key=lambda t: t[1].get('port_num', 0))) + pmd_rx_aff_ports = self.ovs_properties.get("dpdk_pmd-rxq-affinity", {}) for index, vnf in enumerate(ordered_network.values()): if ovs_ver >= [2, 7, 0]: dpdk_args = " options:dpdk-devargs=%s" % vnf.get("phy_port") - dpdk_list.append(ovs_add_port.format( + affinity = pmd_rx_aff_ports.get(vnf.get("port_num", -1), "") + if affinity: + pmd_rx_aff = ' other_config:pmd-rxq-affinity=' \ + '"{affinity}"'.format(affinity=affinity) + else: + pmd_rx_aff = "" + cmd_list.append(ovs_add_port.format( br=MAIN_BRIDGE, port='dpdk%s' % vnf.get("port_num", 0), - type_='dpdk', dpdk_args=dpdk_args, dpdk_rxq=dpdk_rxq)) - - # Sorting the array to make sure we execute dpdk0... in the order - list.sort(dpdk_list) - cmd_list.extend(dpdk_list) + type_='dpdk', dpdk_args=dpdk_args, dpdk_rxq=dpdk_rxq, + pmd_rx_aff=pmd_rx_aff)) # Need to do two for loop to maintain the dpdk/vhost ports. + pmd_rx_aff_ports = self.ovs_properties.get("vhost_pmd-rxq-affinity", + {}) for index, _ in enumerate(ordered_network): + affinity = pmd_rx_aff_ports.get(index) + if affinity: + pmd_rx_aff = ' other_config:pmd-rxq-affinity=' \ + '"{affinity}"'.format(affinity=affinity) + else: + pmd_rx_aff = "" cmd_list.append(ovs_add_port.format( br=MAIN_BRIDGE, port='dpdkvhostuser%s' % index, - type_='dpdkvhostuser', dpdk_args="", dpdk_rxq="")) + type_='dpdkvhostuser', dpdk_args="", dpdk_rxq=dpdk_rxq, + pmd_rx_aff=pmd_rx_aff)) ovs_flow = ("ovs-ofctl add-flow {0} in_port=%s,action=output:%s". format(MAIN_BRIDGE)) diff --git a/yardstick/benchmark/core/report.py b/yardstick/benchmark/core/report.py index a43efecb7..a484a49f3 100644 --- a/yardstick/benchmark/core/report.py +++ b/yardstick/benchmark/core/report.py @@ -1,7 +1,7 @@ -############################################################################# -# Copyright (c) 2017 Rajesh Kudaka +############################################################################## +# Copyright (c) 2017 Rajesh Kudaka <4k.rajesh@gmail.com> +# Copyright (c) 2018 Intel Corporation. # -# Author: Rajesh Kudaka 4k.rajesh@gmail.com # All rights reserved. This program and the accompanying materials # are made available under the terms of the Apache License, Version 2.0 # which accompanies this distribution, and is available at @@ -22,6 +22,66 @@ from yardstick.common import constants as consts from yardstick.common.utils import cliargs +class JSTree(object): + """Data structure to parse data for use with the JS library jsTree""" + def __init__(self): + self._created_nodes = ['#'] + self.jstree_data = [] + + def _create_node(self, _id): + """Helper method for format_for_jstree to create each node. + + Creates the node (and any required parents) and keeps track + of the created nodes. + + :param _id: (string) id of the node to be created + :return: None + """ + components = _id.split(".") + + if len(components) == 1: + text = components[0] + parent_id = "#" + else: + text = components[-1] + parent_id = ".".join(components[:-1]) + # make sure the parent has been created + if not parent_id in self._created_nodes: + self._create_node(parent_id) + + self.jstree_data.append({"id": _id, "text": text, "parent": parent_id}) + self._created_nodes.append(_id) + + def format_for_jstree(self, data): + """Format the data into the required format for jsTree. + + The data format expected is a list of key-value pairs which represent + the data and name for each metric e.g.: + + [{'data': [0, ], 'name': 'tg__0.DropPackets'}, + {'data': [548, ], 'name': 'tg__0.LatencyAvg.5'},] + + This data is converted into the format required for jsTree to group and + display the metrics in a hierarchial fashion, including creating a + number of parent nodes e.g.:: + + [{"id": "tg__0", "text": "tg__0", "parent": "#"}, + {"id": "tg__0.DropPackets", "text": "DropPackets", "parent": "tg__0"}, + {"id": "tg__0.LatencyAvg", "text": "LatencyAvg", "parent": "tg__0"}, + {"id": "tg__0.LatencyAvg.5", "text": "5", "parent": "tg__0.LatencyAvg"},] + + :param data: (list) data to be converted + :return: list + """ + self._created_nodes = ['#'] + self.jstree_data = [] + + for item in data: + self._create_node(item["name"]) + + return self.jstree_data + + class Report(object): """Report commands. diff --git a/yardstick/common/nsb_report.css b/yardstick/common/nsb_report.css new file mode 100644 index 000000000..0c47791e2 --- /dev/null +++ b/yardstick/common/nsb_report.css @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2017 Rajesh Kudaka <4k.rajesh@gmail.com> + * Copyright (c) 2018 Intel Corporation. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Apache License, Version 2.0 + * which accompanies this distribution, and is available at + * http://www.apache.org/licenses/LICENSE-2.0 + ******************************************************************************/ + +body { + font-size: 16pt; +} + +table { + overflow-y: scroll; + height: 360px; + display: block; +} + +header { + font-family: Frutiger; + clear: left; + text-align: center; +} + +.control-pane { + font-size: 10pt; +} diff --git a/yardstick/common/nsb_report.html.j2 b/yardstick/common/nsb_report.html.j2 new file mode 100644 index 000000000..f1b4ae1c2 --- /dev/null +++ b/yardstick/common/nsb_report.html.j2 @@ -0,0 +1,160 @@ +<!DOCTYPE html> +<html> + +<!-- + Copyright (c) 2017 Rajesh Kudaka <4k.rajesh@gmail.com> + Copyright (c) 2018 Intel Corporation. + + All rights reserved. This program and the accompanying materials + are made available under the terms of the Apache License, Version 2.0 + which accompanies this distribution, and is available at + http://www.apache.org/licenses/LICENSE-2.0 +--> + + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> + <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.3.5/themes/default/style.min.css"> + <link rel="stylesheet" href="{{template_dir}}/nsb_report.css"> + <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> + <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> + <script src="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/jstree.min.js"></script> + <script src="https://code.highcharts.com/highcharts.js"></script> + </head> + + <body> + <div class="container" style="width:80%"> + <div class="row"> + <header class="jumbotron"> + <h1>Yardstick User Interface</h1> + <h4>Report of {{task_id}} Generated</h4> + </header> + </div> + <div class="row" style="height:500px"> + <div class="col-md-2 control-pane"> + <div id="data_selector"></div> + </div> + <div class="col-md-10 data-pane"> + <div id="graph"></div> + </div> + </div> + <div class="row"> + <div class="col-md-12 table-responsive"> + <table class="table table-hover"></table> + </div> + </div> + </div> + + <script> + var arr, tab, tr, td, tbody, keys, key, curr_data; + arr = {{table|safe}}; + + tab = document.getElementsByTagName('table')[0]; + tbody = document.createElement('tbody'); + keys = Object.keys(arr); + // for each metric + for (var i = 0; i < keys.length; i++) { + tr = document.createElement('tr'); + td = document.createElement('td'); + key = keys[i]; + td.append(key); + tr.append(td); + curr_data = arr[key]; + // add each piece of data as its own column + for (var j = 0; j < curr_data.length; j++) { + td = document.createElement('td'); + td.append(curr_data[j]); + tr.append(td); + } + tbody.append(tr); + } + tab.appendChild(tbody); + + $(function() { + $('#data_selector').jstree({ + plugins: ['checkbox'], + checkbox: { + three_state: false, + whole_node: true, + tie_selection: false, + }, + core: { + themes: { + icons: false, + stripes: true, + }, + data: {{jstree_nodes|safe}}, + }, + }); + + $('#data_selector').on('check_node.jstree uncheck_node.jstree', function(e, data) { + var selected_leaves = []; + for (var i = 0; i < data.selected.length; i++) { + var node = data.instance.get_node(data.selected[i]); + if (node.children.length == 0) { + var point = {name: node.id, data: arr[node.id]}; + selected_leaves.push(point); + } + } + + $('#graph').highcharts({ + title: { + text: 'Yardstick Graphs', + x: -20, //center + }, + chart: { + marginLeft: 400, + zoomType: 'x', + type: 'spline', + }, + xAxis: { + crosshair: { + width: 1, + color: 'black', + }, + title: { + text: 'Timestamp', + }, + categories: {{Timestamps|safe}}, + }, + yAxis: { + crosshair: { + width: 1, + color: 'black', + }, + plotLines: [{ + value: 0, + width: 1, + color: '#808080', + }], + }, + plotOptions: { + series: { + showCheckbox: false, + visible: false, + }, + }, + tooltip: { + valueSuffix: '', + }, + legend: { + enabled: true, + }, + series: selected_leaves, + }); + + var chart = $('#graph').highcharts(); + for (var i = 0; i < chart.series.length; i++) { + var series = chart.series[i]; + if (series.visible) { + series.hide(); + } else { + series.show(); + } + } + }); + }); + </script> + </body> +</html> diff --git a/yardstick/network_services/traffic_profile/http_ixload.py b/yardstick/network_services/traffic_profile/http_ixload.py index c64e7511f..b88aadff7 100644 --- a/yardstick/network_services/traffic_profile/http_ixload.py +++ b/yardstick/network_services/traffic_profile/http_ixload.py @@ -278,8 +278,12 @@ class IXLOADHttpTest(object): :param param: (dict) http_client section from traffic profile :return: """ - self.update_page_size(net_traffic, param["page_object"]) - self.update_user_count(net_traffic, param["simulated_users"]) + page = param.get("page_object") + if page: + self.update_page_size(net_traffic, page) + users = param.get("simulated_users") + if users: + self.update_user_count(net_traffic, users) def update_page_size(self, net_traffic, page_object): """Update page_object field in http client object in net_traffic diff --git a/yardstick/network_services/traffic_profile/prox_binsearch.py b/yardstick/network_services/traffic_profile/prox_binsearch.py index f924cf419..402bf741c 100644 --- a/yardstick/network_services/traffic_profile/prox_binsearch.py +++ b/yardstick/network_services/traffic_profile/prox_binsearch.py @@ -168,8 +168,8 @@ class ProxBinSearchProfile(ProxProfile): samples = result.get_samples(pkt_size, successful_pkt_loss, port_samples) - if theor_max_thruput < samples["TxThroughput"]: - theor_max_thruput = samples['TxThroughput'] + if theor_max_thruput < samples["RequestedTxThroughput"]: + theor_max_thruput = samples['RequestedTxThroughput'] samples['theor_max_throughput'] = theor_max_thruput samples["rx_total"] = int(result.rx_total) diff --git a/yardstick/network_services/vnf_generic/vnf/prox_helpers.py b/yardstick/network_services/vnf_generic/vnf/prox_helpers.py index 8d721c045..e9d83623b 100644 --- a/yardstick/network_services/vnf_generic/vnf/prox_helpers.py +++ b/yardstick/network_services/vnf_generic/vnf/prox_helpers.py @@ -601,6 +601,99 @@ class ProxSocketHelper(object): LOG.debug("Multi port packet ..OK.. %s", tot_result) return True, tot_result + @staticmethod + def multi_port_stats_tuple(stats, ports): + """ + Create a statistics tuple from port stats. + + Returns a dict with contains the port stats indexed by port name + + :param stats: (List) - List of List of port stats in pps + :param ports (Iterator) - to List of Ports + + :return: (Dict) of port stats indexed by port_name + """ + + samples = {} + port_names = {} + try: + port_names = {port_num: port_name for port_name, port_num in ports} + except (TypeError, IndexError, KeyError): + LOG.critical("Ports are not initialized or number of port is ZERO ... CRITICAL ERROR") + return {} + + try: + for stat in stats: + port_num = stat[0] + samples[port_names[port_num]] = { + "in_packets": stat[1], + "out_packets": stat[2]} + except (TypeError, IndexError, KeyError): + LOG.error("Ports data and samples data is incompatable ....") + return {} + + return samples + + @staticmethod + def multi_port_stats_diff(prev_stats, new_stats, hz): + """ + Create a statistics tuple from difference between prev port stats + and current port stats. And store results in pps. + + :param prev_stats: (List) - Previous List of port statistics + :param new_stats: (List) - Current List of port statistics + :param hz (float) - speed of system in Hz + + :return: sample (List) - Difference of prev_port_stats and + new_port_stats in pps + """ + + RX_TOTAL_INDEX = 1 + TX_TOTAL_INDEX = 2 + TSC_INDEX = 5 + + stats = [] + + if len(prev_stats) is not len(new_stats): + for port_index, stat in enumerate(new_stats): + stats.append([port_index, float(0), float(0), 0, 0, 0]) + return stats + + try: + for port_index, stat in enumerate(new_stats): + if stat[RX_TOTAL_INDEX] > prev_stats[port_index][RX_TOTAL_INDEX]: + rx_total = stat[RX_TOTAL_INDEX] - \ + prev_stats[port_index][RX_TOTAL_INDEX] + else: + rx_total = stat[RX_TOTAL_INDEX] + + if stat[TX_TOTAL_INDEX] > prev_stats[port_index][TX_TOTAL_INDEX]: + tx_total = stat[TX_TOTAL_INDEX] - prev_stats[port_index][TX_TOTAL_INDEX] + else: + tx_total = stat[TX_TOTAL_INDEX] + + if stat[TSC_INDEX] > prev_stats[port_index][TSC_INDEX]: + tsc = stat[TSC_INDEX] - prev_stats[port_index][TSC_INDEX] + else: + tsc = stat[TSC_INDEX] + + if tsc is 0: + rx_total = tx_total = float(0) + else: + if hz is 0: + LOG.error("HZ is ZERO ..") + rx_total = tx_total = float(0) + else: + rx_total = float(rx_total * hz / tsc) + tx_total = float(tx_total * hz / tsc) + + stats.append([port_index, rx_total, tx_total, 0, 0, tsc]) + except (TypeError, IndexError, KeyError): + stats = [] + LOG.info("Current Port Stats incompatable to previous Port stats .. Discarded") + + return stats + def port_stats(self, ports): """get counter values from a specific port""" tot_result = [0] * 12 @@ -968,6 +1061,8 @@ class ProxResourceHelper(ClientResourceHelper): self.step_delta = 1 self.step_time = 0.5 self._test_type = None + self.prev_multi_port = [] + self.prev_hz = 0 @property def sut(self): @@ -1006,11 +1101,40 @@ class ProxResourceHelper(ClientResourceHelper): def collect_collectd_kpi(self): return self._collect_resource_kpi() + def collect_live_stats(self): + ports = [] + for _, port_num in self.vnfd_helper.ports_iter(): + ports.append(port_num) + + ok, curr_port_stats = self.sut.multi_port_stats(ports) + if not ok: + return False, {} + + hz = self.sut.hz() + if hz is 0: + hz = self.prev_hz + else: + self.prev_hz = hz + + new_all_port_stats = \ + self.sut.multi_port_stats_diff(self.prev_multi_port, curr_port_stats, hz) + + self.prev_multi_port = curr_port_stats + + live_stats = self.sut.multi_port_stats_tuple(new_all_port_stats, + self.vnfd_helper.ports_iter()) + return True, live_stats + def collect_kpi(self): result = super(ProxResourceHelper, self).collect_kpi() # add in collectd kpis manually if result: result['collect_stats'] = self._collect_resource_kpi() + + ok, live_stats = self.collect_live_stats() + if ok: + result.update({'live_stats': live_stats}) + return result def terminate(self): diff --git a/yardstick/tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py b/yardstick/tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py index b5051e90c..413bb68b7 100644 --- a/yardstick/tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py +++ b/yardstick/tests/unit/benchmark/contexts/standalone/test_ovs_dpdk.py @@ -160,6 +160,13 @@ class OvsDpdkContextTestCase(unittest.TestCase): } self.ovs_dpdk.wait_for_vswitchd = 0 self.assertIsNone(self.ovs_dpdk.setup_ovs_bridge_add_flows()) + self.ovs_dpdk.ovs_properties.update( + {'dpdk_pmd-rxq-affinity': {'0': "0:1"}}) + self.ovs_dpdk.ovs_properties.update( + {'vhost_pmd-rxq-affinity': {'0': "0:1"}}) + self.NETWORKS['private_0'].update({'port_num': '0'}) + self.NETWORKS['public_0'].update({'port_num': '1'}) + self.ovs_dpdk.setup_ovs_bridge_add_flows() @mock.patch("yardstick.ssh.SSH") def test_cleanup_ovs_dpdk_env(self, mock_ssh): diff --git a/yardstick/tests/unit/benchmark/core/test_report.py b/yardstick/tests/unit/benchmark/core/test_report.py index 2827f8e26..3e80dcc45 100644 --- a/yardstick/tests/unit/benchmark/core/test_report.py +++ b/yardstick/tests/unit/benchmark/core/test_report.py @@ -1,5 +1,6 @@ ############################################################################## # Copyright (c) 2017 Rajesh Kudaka. +# Copyright (c) 2018 Intel Corporation. # # All rights reserved. This program and the accompanying materials # are made available under the terms of the Apache License, Version 2.0 @@ -27,6 +28,75 @@ BAD_YAML_NAME = 'F@KE_NAME' BAD_TASK_ID = 'aaaaaa-aaaaaaaa-aaaaaaaaaa-aaaaaa' +class JSTreeTestCase(unittest.TestCase): + + def setUp(self): + self.jstree = report.JSTree() + + def test__create_node(self): + _id = "tg__0.DropPackets" + + expected_data = [ + {"id": "tg__0", "text": "tg__0", "parent": "#"}, + {"id": "tg__0.DropPackets", "text": "DropPackets", "parent": "tg__0"} + ] + self.jstree._create_node(_id) + + self.assertEqual(self.jstree._created_nodes, ['#', 'tg__0', 'tg__0.DropPackets']) + self.assertEqual(self.jstree.jstree_data, expected_data) + + def test_format_for_jstree(self): + data = [ + {'data': [0, ], 'name': 'tg__0.DropPackets'}, + {'data': [548, ], 'name': 'tg__0.LatencyAvg.5'}, + {'data': [1172, ], 'name': 'tg__0.LatencyAvg.6'}, + {'data': [1001, ], 'name': 'tg__0.LatencyMax.5'}, + {'data': [1468, ], 'name': 'tg__0.LatencyMax.6'}, + {'data': [18.11, ], 'name': 'tg__0.RxThroughput'}, + {'data': [18.11, ], 'name': 'tg__0.TxThroughput'}, + {'data': [0, ], 'name': 'tg__1.DropPackets'}, + {'data': [548, ], 'name': 'tg__1.LatencyAvg.5'}, + {'data': [1172, ], 'name': 'tg__1.LatencyAvg.6'}, + {'data': [1001, ], 'name': 'tg__1.LatencyMax.5'}, + {'data': [1468, ], 'name': 'tg__1.LatencyMax.6'}, + {'data': [18.1132084505, ], 'name': 'tg__1.RxThroughput'}, + {'data': [18.1157260383, ], 'name': 'tg__1.TxThroughput'}, + {'data': [9057888, ], 'name': 'vnf__0.curr_packets_in'}, + {'data': [0, ], 'name': 'vnf__0.packets_dropped'}, + {'data': [617825443, ], 'name': 'vnf__0.packets_fwd'}, + ] + + expected_output = [ + {"id": "tg__0", "text": "tg__0", "parent": "#"}, + {"id": "tg__0.DropPackets", "text": "DropPackets", "parent": "tg__0"}, + {"id": "tg__0.LatencyAvg", "text": "LatencyAvg", "parent": "tg__0"}, + {"id": "tg__0.LatencyAvg.5", "text": "5", "parent": "tg__0.LatencyAvg"}, + {"id": "tg__0.LatencyAvg.6", "text": "6", "parent": "tg__0.LatencyAvg"}, + {"id": "tg__0.LatencyMax", "text": "LatencyMax", "parent": "tg__0"}, + {"id": "tg__0.LatencyMax.5", "text": "5", "parent": "tg__0.LatencyMax"}, + {"id": "tg__0.LatencyMax.6", "text": "6", "parent": "tg__0.LatencyMax"}, + {"id": "tg__0.RxThroughput", "text": "RxThroughput", "parent": "tg__0"}, + {"id": "tg__0.TxThroughput", "text": "TxThroughput", "parent": "tg__0"}, + {"id": "tg__1", "text": "tg__1", "parent": "#"}, + {"id": "tg__1.DropPackets", "text": "DropPackets", "parent": "tg__1"}, + {"id": "tg__1.LatencyAvg", "text": "LatencyAvg", "parent": "tg__1"}, + {"id": "tg__1.LatencyAvg.5", "text": "5", "parent": "tg__1.LatencyAvg"}, + {"id": "tg__1.LatencyAvg.6", "text": "6", "parent": "tg__1.LatencyAvg"}, + {"id": "tg__1.LatencyMax", "text": "LatencyMax", "parent": "tg__1"}, + {"id": "tg__1.LatencyMax.5", "text": "5", "parent": "tg__1.LatencyMax"}, + {"id": "tg__1.LatencyMax.6", "text": "6", "parent": "tg__1.LatencyMax"}, + {"id": "tg__1.RxThroughput", "text": "RxThroughput", "parent": "tg__1"}, + {"id": "tg__1.TxThroughput", "text": "TxThroughput", "parent": "tg__1"}, + {"id": "vnf__0", "text": "vnf__0", "parent": "#"}, + {"id": "vnf__0.curr_packets_in", "text": "curr_packets_in", "parent": "vnf__0"}, + {"id": "vnf__0.packets_dropped", "text": "packets_dropped", "parent": "vnf__0"}, + {"id": "vnf__0.packets_fwd", "text": "packets_fwd", "parent": "vnf__0"}, + ] + + result = self.jstree.format_for_jstree(data) + self.assertEqual(expected_output, result) + + class ReportTestCase(unittest.TestCase): def setUp(self): diff --git a/yardstick/tests/unit/network_services/traffic_profile/test_prox_binsearch.py b/yardstick/tests/unit/network_services/traffic_profile/test_prox_binsearch.py index 4524eb7e6..f17656328 100644 --- a/yardstick/tests/unit/network_services/traffic_profile/test_prox_binsearch.py +++ b/yardstick/tests/unit/network_services/traffic_profile/test_prox_binsearch.py @@ -21,6 +21,8 @@ from yardstick.network_services.traffic_profile import prox_binsearch class TestProxBinSearchProfile(unittest.TestCase): + THEOR_MAX_THROUGHPUT = 0.00012340000000000002 + def setUp(self): self._mock_log_info = mock.patch.object(prox_binsearch.LOG, 'info') self.mock_log_info = self._mock_log_info.start() @@ -80,7 +82,7 @@ class TestProxBinSearchProfile(unittest.TestCase): # Result Samples inc theor_max result_tuple = {'Actual_throughput': 5e-07, - 'theor_max_throughput': 7.5e-07, + 'theor_max_throughput': self.THEOR_MAX_THROUGHPUT, 'PktSize': 200, 'Status': 'Result'} @@ -96,7 +98,7 @@ class TestProxBinSearchProfile(unittest.TestCase): "PktSize": 200, "RxThroughput": 7.5e-07, "Throughput": 7.5e-07, - "TxThroughput": 0.00012340000000000002, + "TxThroughput": self.THEOR_MAX_THROUGHPUT, "Status": 'Success'} calls = profile.queue.put(success_result_tuple) @@ -222,6 +224,7 @@ class TestProxBinSearchProfile(unittest.TestCase): raise RuntimeError(' '.join([str(args), str(runs)])) if args[2] > 75.0: return fail_tuple, {} + return success_tuple, {} tp_config = { @@ -258,7 +261,7 @@ class TestProxBinSearchProfile(unittest.TestCase): # Result Samples inc theor_max result_tuple = {'Actual_throughput': 5e-07, - 'theor_max_throughput': 7.5e-07, + 'theor_max_throughput': self.THEOR_MAX_THROUGHPUT, 'PktSize': 200, "Status": 'Result'} @@ -274,7 +277,7 @@ class TestProxBinSearchProfile(unittest.TestCase): "PktSize": 200, "RxThroughput": 7.5e-07, "Throughput": 7.5e-07, - "TxThroughput": 0.00012340000000000002, + "TxThroughput": self.THEOR_MAX_THROUGHPUT, "Status": 'Success'} calls = profile.queue.put(success_result_tuple) diff --git a/yardstick/tests/unit/network_services/vnf_generic/vnf/test_prox_helpers.py b/yardstick/tests/unit/network_services/vnf_generic/vnf/test_prox_helpers.py index 894b16e13..6d1d8c6a1 100644 --- a/yardstick/tests/unit/network_services/vnf_generic/vnf/test_prox_helpers.py +++ b/yardstick/tests/unit/network_services/vnf_generic/vnf/test_prox_helpers.py @@ -648,6 +648,82 @@ class TestProxSocketHelper(unittest.TestCase): self.assertListEqual(result, expected) self.assertTrue(ok) + @mock.patch.object(prox_helpers.LOG, 'error') + def test_multi_port_stats_diff(self, *args): + mock_socket = mock.MagicMock() + prox = prox_helpers.ProxSocketHelper(mock_socket) + prox.get_string = mock.MagicMock(return_value=(True, '0,1,2,3,4,5;1,1,2,3,4,5')) + _, t1 = prox.multi_port_stats([0, 1]) + + prox.get_string = mock.MagicMock(return_value=(True, '0,2,4,6,8,6;1,4,8,16,32,6')) + _, t2 = prox.multi_port_stats([0, 1]) + + prox.get_string = mock.MagicMock(return_value=(True, '0,1,1,1,1,1;1,1,1,1,1,1')) + _, t3 = prox.multi_port_stats([0, 1]) + + prox.get_string = mock.MagicMock(return_value=(True, '0,2,2,2,2,2;1,2,2,2,2,2')) + _, t4 = prox.multi_port_stats([0, 1]) + + expected = [[0, 1.0, 2.0, 0, 0, 1], [1, 3.0, 6.0, 0, 0, 1]] + result = prox.multi_port_stats_diff(t1, t2, 1) + + self.assertListEqual(result, expected) + + result = prox.multi_port_stats_diff(t4, t3, 1) + expected = [[0, 1.0, 1.0, 0, 0, 1], [1, 1.0, 1.0, 0, 0, 1]] + + self.assertListEqual(result, expected) + + prox.get_string = mock.MagicMock(return_value=(True, '0,2,4,6,8,10')) + ok, t5 = prox.multi_port_stats([0, 1]) + self.assertFalse(ok) + self.assertListEqual(t5, []) + + result = prox.multi_port_stats_diff(t5, t4, 1) + expected = [[0, 0.0, 0.0, 0, 0, 0], [1, 0.0, 0.0, 0, 0, 0]] + self.assertListEqual(result, expected) + + prox.get_string = mock.MagicMock(return_value=(True, '0,10,10,20,30,0;1,30,40,50,60,0')) + _, t6 = prox.multi_port_stats([0, 1]) + + prox.get_string = \ + mock.MagicMock(return_value=(True, '0,100,100,100,100,0;1,100,100,100,100,0')) + _, t7 = prox.multi_port_stats([0, 1]) + + result = prox.multi_port_stats_diff(t6, t7, 1) + expected = [[0, 0.0, 0.0, 0, 0, 0], [1, 0.0, 0.0, 0, 0, 0]] + self.assertListEqual(result, expected) + + result = prox.multi_port_stats_diff(t1, t2, 0) + expected = [[0, 0.0, 0.0, 0, 0, 1], [1, 0.0, 0.0, 0, 0, 1]] + self.assertListEqual(result, expected) + + @mock.patch.object(prox_helpers.LOG, 'error') + def test_multi_port_stats_tuple(self, *args): + mock_socket = mock.MagicMock() + prox = prox_helpers.ProxSocketHelper(mock_socket) + prox.get_string = mock.MagicMock(return_value=(True, '0,1,2,3,4,5;1,1,2,3,4,5')) + _, result1 = prox.multi_port_stats([0, 1]) + prox.get_string = mock.MagicMock(return_value=(True, '0,2,4,6,8,6;1,4,8,16,32,6')) + _, result2 = prox.multi_port_stats([0, 1]) + + result = prox.multi_port_stats_diff(result1, result2, 1) + + vnfd_helper = mock.MagicMock() + vnfd_helper.ports_iter.return_value = [('xe0', 0), ('xe1', 1)] + + expected = {'xe0': {'in_packets': 1.0, 'out_packets': 2.0}, + 'xe1': {'in_packets': 3.0, 'out_packets': 6.0}} + live_stats = prox.multi_port_stats_tuple(result, vnfd_helper.ports_iter()) + self.assertDictEqual(live_stats, expected) + + live_stats = prox.multi_port_stats_tuple(result, None) + expected = {} + self.assertDictEqual(live_stats, expected) + + live_stats = prox.multi_port_stats_tuple(None, vnfd_helper.ports_iter()) + self.assertDictEqual(live_stats, expected) + def test_port_stats(self): port_stats = [ ','.join(str(n) for n in range(3, 15)), @@ -1568,8 +1644,83 @@ class TestProxResourceHelper(unittest.TestCase): helper = prox_helpers.ProxResourceHelper(mock.MagicMock()) helper._queue = queue = mock.MagicMock() helper._result = {'z': 123} + + helper.client = mock.MagicMock() + helper.client.hz.return_value = 1 + helper.client.multi_port_stats.return_value = \ + (True, [[0, 1, 2, 3, 4, 5], [1, 1, 2, 3, 4, 5]]) + helper.client.multi_port_stats_diff.return_value = \ + ([0, 1, 2, 3, 4, 5, 6, 7]) + helper.client.multi_port_stats_tuple.return_value = \ + {"xe0": {"in_packets": 1, "out_packets": 2}} + helper.resource = resource = mock.MagicMock() + + vnfd_helper = mock.MagicMock() + vnfd_helper.ports_iter.return_value = [('xe0', 0), ('xe1', 1)] + helper.vnfd_helper = vnfd_helper + + resource.check_if_system_agent_running.return_value = 0, '1234' + resource.amqp_collect_nfvi_kpi.return_value = 543 + resource.check_if_system_agent_running.return_value = (0, None) + + queue.empty.return_value = False + queue.get.return_value = {'a': 789} + + expected = {'z': 123, 'a': 789, + 'collect_stats': {'core': 543}, + 'live_stats': {'xe0': {'in_packets': 1, 'out_packets': 2}}} + result = helper.collect_kpi() + self.assertDictEqual(result, expected) + + def test_collect_kpi_no_hz(self): + helper = prox_helpers.ProxResourceHelper(mock.MagicMock()) + helper._queue = queue = mock.MagicMock() + helper._result = {'z': 123} + + helper.client = mock.MagicMock() + helper.client.multi_port_stats.return_value = \ + (True, [[0, 1, 2, 3, 4, 5], [1, 1, 2, 3, 4, 5]]) + helper.client.multi_port_stats_diff.return_value = \ + ([0, 1, 2, 3, 4, 5, 6, 7]) + helper.client.multi_port_stats_tuple.return_value = \ + {"xe0": {"in_packets": 1, "out_packets": 2}} + helper.resource = resource = mock.MagicMock() + + vnfd_helper = mock.MagicMock() + vnfd_helper.ports_iter.return_value = [('xe0', 0), ('xe1', 1)] + helper.vnfd_helper = vnfd_helper + + resource.check_if_system_agent_running.return_value = 0, '1234' + resource.amqp_collect_nfvi_kpi.return_value = 543 + resource.check_if_system_agent_running.return_value = (0, None) + + queue.empty.return_value = False + queue.get.return_value = {'a': 789} + + expected = {'z': 123, 'a': 789, + 'collect_stats': {'core': 543}, + 'live_stats': {'xe0': {'in_packets': 1, 'out_packets': 2}}} + result = helper.collect_kpi() + self.assertDictEqual(result, expected) + + def test_collect_kpi_bad_data(self): + helper = prox_helpers.ProxResourceHelper(mock.MagicMock()) + helper._queue = queue = mock.MagicMock() + helper._result = {'z': 123} + + helper.client = mock.MagicMock() + helper.client.multi_port_stats.return_value = \ + (False, [[0, 1, 2, 3, 4, 5], [1, 1, 2, 3, 4, 5]]) + helper.client.multi_port_stats_diff.return_value = \ + ([0, 1, 2, 3, 4, 5, 6, 7]) + helper.client.multi_port_stats_tuple.return_value = \ + {"xe0": {"in_packets": 1, "out_packets": 2}} helper.resource = resource = mock.MagicMock() + vnfd_helper = mock.MagicMock() + vnfd_helper.ports_iter.return_value = [('xe0', 0), ('xe1', 1)] + helper.vnfd_helper = vnfd_helper + resource.check_if_system_agent_running.return_value = 0, '1234' resource.amqp_collect_nfvi_kpi.return_value = 543 resource.check_if_system_agent_running.return_value = (0, None) @@ -1577,7 +1728,8 @@ class TestProxResourceHelper(unittest.TestCase): queue.empty.return_value = False queue.get.return_value = {'a': 789} - expected = {'z': 123, 'a': 789, 'collect_stats': {'core': 543}} + expected = {'z': 123, 'a': 789, + 'collect_stats': {'core': 543}} result = helper.collect_kpi() self.assertDictEqual(result, expected) diff --git a/yardstick/tests/unit/network_services/vnf_generic/vnf/test_tg_prox.py b/yardstick/tests/unit/network_services/vnf_generic/vnf/test_tg_prox.py index a7e61da0f..935d3fa30 100644 --- a/yardstick/tests/unit/network_services/vnf_generic/vnf/test_tg_prox.py +++ b/yardstick/tests/unit/network_services/vnf_generic/vnf/test_tg_prox.py @@ -329,13 +329,27 @@ class TestProxTrafficGen(unittest.TestCase): } prox_traffic_gen._vnf_wrapper.resource_helper.resource = mock.MagicMock( **{"self.check_if_system_agent_running.return_value": [False]}) + + vnfd_helper = mock.MagicMock() + vnfd_helper.ports_iter.return_value = [('xe0', 0), ('xe1', 1)] + prox_traffic_gen.resource_helper.vnfd_helper = vnfd_helper + + prox_traffic_gen._vnf_wrapper.resource_helper.client = mock.MagicMock() + prox_traffic_gen._vnf_wrapper.resource_helper.client.multi_port_stats.return_value = \ + [[0, 1, 2, 3, 4, 5], [1, 1, 2, 3, 4, 5]] + prox_traffic_gen._vnf_wrapper.resource_helper.client.multi_port_stats_diff.return_value = \ + [0, 1, 2, 3, 4, 5, 6, 7], [0, 1, 2, 3, 4, 5, 6, 7] + prox_traffic_gen._vnf_wrapper.resource_helper.client.\ + multi_port_stats_tuple.return_value = \ + {"xe0": {"in_packets": 1, "out_packets": 2}} + prox_traffic_gen._vnf_wrapper.vnf_execute = mock.Mock(return_value="") expected = { - 'collect_stats': {}, + 'collect_stats': {'live_stats': {'xe0': {'in_packets': 1, 'out_packets': 2}}}, 'physical_node': 'mock_node' } - self.assertEqual(prox_traffic_gen.collect_kpi(), expected) - + result = prox_traffic_gen.collect_kpi() + self.assertDictEqual(result, expected) @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.find_relative_file') @mock.patch( |