aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--.gitlab-ci.yml76
-rw-r--r--INFO.yaml20
-rw-r--r--README.rst7
-rw-r--r--behave_tests/__init__.py0
-rw-r--r--behave_tests/behavedriver.py70
-rw-r--r--behave_tests/features/__init__.py0
-rw-r--r--behave_tests/features/characterization-full.feature69
-rw-r--r--behave_tests/features/characterization-samples.feature42
-rw-r--r--behave_tests/features/environment.py88
-rw-r--r--behave_tests/features/non-regression.feature45
-rw-r--r--behave_tests/features/quick-test-10kpps.feature13
-rw-r--r--behave_tests/features/steps/__init__.py0
-rw-r--r--behave_tests/features/steps/steps.py629
-rw-r--r--behave_tests/features/steps/testapi.py195
-rw-r--r--client/client.py36
-rw-r--r--client/nfvbench_client.py5
-rw-r--r--client/requirements.txt6
-rw-r--r--docker/Dockerfile54
-rwxr-xr-xdocker/cleanup_generators.py14
-rwxr-xr-xdocker/nfvbench-entrypoint.sh14
-rw-r--r--docs/Makefile231
-rw-r--r--docs/conf.py69
-rw-r--r--docs/conf.yaml3
-rw-r--r--docs/developer/building.rst77
-rw-r--r--docs/developer/design/design.rst (renamed from docs/development/design/design.rst)19
-rw-r--r--docs/developer/design/index.rst (renamed from docs/development/design/index.rst)7
-rw-r--r--docs/developer/design/ndrpdr.rst (renamed from docs/development/design/ndrpdr.rst)0
-rw-r--r--docs/developer/design/overview.rst (renamed from docs/development/overview/overview.rst)8
-rw-r--r--docs/developer/design/traffic_desc.rst (renamed from docs/development/design/traffic_desc.rst)2
-rw-r--r--docs/developer/design/versioning.rst (renamed from docs/development/design/versioning.rst)0
-rw-r--r--docs/developer/index.rst (renamed from docs/development/index.rst)8
-rw-r--r--docs/developer/nfvbenchvm.rst365
-rw-r--r--docs/developer/testing-nfvbench.rst91
-rw-r--r--docs/development/overview/index.rst13
-rw-r--r--docs/index.rst12
-rw-r--r--docs/make.bat35
-rw-r--r--docs/release-notes/index.rst (renamed from docs/release/release-notes/index.rst)9
-rw-r--r--docs/release-notes/nfvbench-release-notes.rst (renamed from docs/release/release-notes/release-notes.rst)47
-rw-r--r--docs/release-notes/nfvbenchvm-release-notes.rst94
-rw-r--r--docs/requirements.txt9
-rw-r--r--docs/testing/developer/devguide/index.rst8
-rw-r--r--docs/testing/index.rst11
-rw-r--r--docs/testing/user/configguide/configguide.rst8
-rw-r--r--docs/testing/user/configguide/index.rst9
-rw-r--r--docs/testing/user/userguide/_static/custom.css4
-rw-r--r--docs/testing/user/userguide/_templates/layout.html5
-rw-r--r--docs/testing/user/userguide/advanced.rst336
-rw-r--r--docs/testing/user/userguide/conf.py358
-rw-r--r--docs/testing/user/userguide/faq.rst49
-rw-r--r--docs/testing/user/userguide/quickstart_docker.rst243
-rw-r--r--docs/user/advanced.rst897
-rw-r--r--docs/user/examples.rst (renamed from docs/testing/user/userguide/examples.rst)0
-rw-r--r--docs/user/extchains.rst (renamed from docs/testing/user/userguide/extchains.rst)0
-rw-r--r--docs/user/faq.rst95
-rw-r--r--docs/user/fluentd.rst (renamed from docs/testing/user/userguide/fluentd.rst)1
-rw-r--r--docs/user/hw_requirements.rst (renamed from docs/testing/user/userguide/hw_requirements.rst)5
-rw-r--r--docs/user/images/extchain-config.png (renamed from docs/testing/user/userguide/images/extchain-config.png)bin227354 -> 227354 bytes
-rw-r--r--docs/user/images/nfvbench-all-sriov-pvvp.png (renamed from docs/testing/user/userguide/images/nfvbench-all-sriov-pvvp.png)bin34850 -> 34850 bytes
-rw-r--r--docs/user/images/nfvbench-all-sriov-pvvp2.png (renamed from docs/testing/user/userguide/images/nfvbench-all-sriov-pvvp2.png)bin44379 -> 44379 bytes
-rw-r--r--docs/user/images/nfvbench-ext-multi-vlans.png (renamed from docs/testing/user/userguide/images/nfvbench-ext-multi-vlans.png)bin120315 -> 120315 bytes
-rw-r--r--docs/user/images/nfvbench-ext-shared.png (renamed from docs/testing/user/userguide/images/nfvbench-ext-shared.png)bin100743 -> 100743 bytes
-rw-r--r--docs/user/images/nfvbench-kibana-filter-kql.pngbin0 -> 27039 bytes
-rw-r--r--docs/user/images/nfvbench-kibana-filter.pngbin0 -> 22998 bytes
-rw-r--r--docs/user/images/nfvbench-kibana-gbps-line.pngbin0 -> 61856 bytes
-rw-r--r--docs/user/images/nfvbench-kibana-pps-scatter.pngbin0 -> 56762 bytes
-rw-r--r--docs/user/images/nfvbench-kibana-pps-theoretical.pngbin0 -> 60589 bytes
-rw-r--r--docs/user/images/nfvbench-kibana-zoom-selection.pngbin0 -> 54663 bytes
-rw-r--r--docs/user/images/nfvbench-kibana.pngbin0 -> 23015 bytes
-rw-r--r--docs/user/images/nfvbench-npvp.png (renamed from docs/testing/user/userguide/images/nfvbench-npvp.png)bin30328 -> 30328 bytes
-rw-r--r--docs/user/images/nfvbench-pvp.png (renamed from docs/testing/user/userguide/images/nfvbench-pvp.png)bin20770 -> 20770 bytes
-rw-r--r--docs/user/images/nfvbench-pvpl3.pngbin0 -> 45570 bytes
-rw-r--r--docs/user/images/nfvbench-pvvp.png (renamed from docs/testing/user/userguide/images/nfvbench-pvvp.png)bin31338 -> 31338 bytes
-rw-r--r--docs/user/images/nfvbench-pvvp2.png (renamed from docs/testing/user/userguide/images/nfvbench-pvvp2.png)bin42583 -> 42583 bytes
-rw-r--r--docs/user/images/nfvbench-sriov-pvp.png (renamed from docs/testing/user/userguide/images/nfvbench-sriov-pvp.png)bin19982 -> 19982 bytes
-rw-r--r--docs/user/images/nfvbench-sriov-pvvp.png (renamed from docs/testing/user/userguide/images/nfvbench-sriov-pvvp.png)bin31769 -> 31769 bytes
-rw-r--r--docs/user/images/nfvbench-sriov-pvvp2.png (renamed from docs/testing/user/userguide/images/nfvbench-sriov-pvvp2.png)bin44101 -> 44101 bytes
-rw-r--r--docs/user/images/nfvbench-trex-setup.png (renamed from docs/testing/user/userguide/images/nfvbench-trex-setup.png)bin34090 -> 34090 bytes
-rw-r--r--docs/user/images/nfvbench-xtesting.pngbin0 -> 17342 bytes
-rw-r--r--docs/user/index.rst (renamed from docs/testing/user/userguide/index.rst)8
-rw-r--r--docs/user/installation.rst (renamed from docs/testing/user/userguide/installation.rst)0
-rw-r--r--docs/user/kibana.rst96
-rw-r--r--docs/user/mpls.rst96
-rw-r--r--docs/user/pvpl3.rst69
-rw-r--r--docs/user/quickstart_docker.rst333
-rw-r--r--docs/user/readme.rst (renamed from docs/testing/user/userguide/readme.rst)75
-rw-r--r--docs/user/server.rst (renamed from docs/testing/user/userguide/server.rst)89
-rw-r--r--docs/user/sriov.rst (renamed from docs/testing/user/userguide/sriov.rst)0
-rw-r--r--docs/user/xtesting.rst252
-rw-r--r--kibana/visualizations/export.ndjson25
-rw-r--r--kibana/visualizations/ndr_capacity_gbps_line_chart.json95
-rw-r--r--kibana/visualizations/ndr_capacity_gbps_scatter_plot.json108
-rw-r--r--kibana/visualizations/ndr_capacity_gbps_theoretical_line_chart.json114
-rw-r--r--kibana/visualizations/ndr_capacity_gbps_theoretical_scatter_plot.json128
-rw-r--r--kibana/visualizations/ndr_capacity_pps_line_chart.json98
-rw-r--r--kibana/visualizations/ndr_capacity_pps_scatter_plot.json108
-rw-r--r--kibana/visualizations/ndr_capacity_pps_theoretical_line_chart.json115
-rw-r--r--kibana/visualizations/ndr_capacity_pps_theoretical_scatter_plot.json128
-rw-r--r--[-rwxr-xr-x]nfvbench/cfg.default.yaml511
-rw-r--r--nfvbench/chain_router.py190
-rw-r--r--nfvbench/chain_runner.py60
-rw-r--r--nfvbench/chain_workers.py2
-rw-r--r--nfvbench/chaining.py503
-rw-r--r--nfvbench/cleanup.py251
-rw-r--r--nfvbench/compute.py34
-rw-r--r--nfvbench/config.py16
-rw-r--r--nfvbench/config_plugin.py11
-rw-r--r--nfvbench/credentials.py112
-rw-r--r--nfvbench/factory.py4
-rw-r--r--nfvbench/fluentd.py4
-rw-r--r--nfvbench/nfvbench.py504
-rw-r--r--nfvbench/nfvbenchd.py128
-rw-r--r--nfvbench/nfvbenchvm/nfvbenchvm.conf5
-rw-r--r--nfvbench/packet_stats.py36
-rw-r--r--nfvbench/specs.py2
-rw-r--r--nfvbench/stats_collector.py51
-rw-r--r--nfvbench/stats_manager.py8
-rw-r--r--nfvbench/summarizer.py215
-rwxr-xr-xnfvbench/traffic_client.py631
-rw-r--r--nfvbench/traffic_gen/dummy.py21
-rw-r--r--nfvbench/traffic_gen/traffic_base.py57
-rw-r--r--nfvbench/traffic_gen/traffic_utils.py28
-rw-r--r--nfvbench/traffic_gen/trex.py700
-rw-r--r--nfvbench/traffic_gen/trex_gen.py1208
-rw-r--r--nfvbench/traffic_server.py142
-rw-r--r--nfvbench/utils.py166
-rw-r--r--nfvbenchvm/README.rst86
-rwxr-xr-xnfvbenchvm/dib/build-image.sh268
-rw-r--r--nfvbenchvm/dib/elements/nfvbenchvm/element-deps1
-rw-r--r--nfvbenchvm/dib/elements/nfvbenchvm/fdio-release.repo12
-rwxr-xr-xnfvbenchvm/dib/elements/nfvbenchvm/finalise.d/51-add-cpu-isolation12
-rwxr-xr-xnfvbenchvm/dib/elements/nfvbenchvm/finalise.d/52-change-resolution7
-rwxr-xr-xnfvbenchvm/dib/elements/nfvbenchvm/finalise.d/53-boot-from-new-kernel7
-rw-r--r--nfvbenchvm/dib/elements/nfvbenchvm/package-installs.yaml8
-rwxr-xr-xnfvbenchvm/dib/elements/nfvbenchvm/post-install.d/01-update-kernel7
-rwxr-xr-xnfvbenchvm/dib/elements/nfvbenchvm/post-install.d/02-pip-package12
-rwxr-xr-xnfvbenchvm/dib/elements/nfvbenchvm/post-install.d/02-testpmd-script26
-rwxr-xr-xnfvbenchvm/dib/elements/nfvbenchvm/post-install.d/03-add-execute-attribute4
-rwxr-xr-xnfvbenchvm/dib/elements/nfvbenchvm/post-install.d/03-copy-rc-local15
-rwxr-xr-xnfvbenchvm/dib/elements/nfvbenchvm/post-install.d/04-add-execute-attribute14
-rwxr-xr-xnfvbenchvm/dib/elements/nfvbenchvm/post-install.d/50-pip-package8
-rwxr-xr-xnfvbenchvm/dib/elements/nfvbenchvm/post-install.d/51-cloudcfg-edit5
-rwxr-xr-xnfvbenchvm/dib/elements/nfvbenchvm/post-install.d/52-nfvbench-script56
-rwxr-xr-xnfvbenchvm/dib/elements/nfvbenchvm/post-install.d/53-sshd-script11
-rwxr-xr-xnfvbenchvm/dib/elements/nfvbenchvm/post-install.d/99-cleanup9
-rw-r--r--nfvbenchvm/dib/elements/nfvbenchvm/static/etc/modprobe.d/vfio.conf1
-rw-r--r--nfvbenchvm/dib/elements/nfvbenchvm/static/etc/modules-load.d/vfio-pci.conf1
-rw-r--r--nfvbenchvm/dib/elements/nfvbenchvm/static/etc/openstack/clouds.yaml1
-rw-r--r--nfvbenchvm/dib/elements/nfvbenchvm/static/etc/profile.d/nfvbench.sh1
-rw-r--r--nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local110
-rw-r--r--nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local.generator122
-rw-r--r--nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local.loopvm298
-rw-r--r--nfvbenchvm/dib/elements/nfvbenchvm/static/etc/systemd/system/nfvbench.service12
-rw-r--r--nfvbenchvm/dib/elements/nfvbenchvm/static/nfvbench/configure-nfvbench.sh258
-rw-r--r--nfvbenchvm/dib/elements/nfvbenchvm/static/nfvbench/nfvbench.conf25
-rw-r--r--nfvbenchvm/dib/elements/nfvbenchvm/static/nfvbench/start-nfvbench.sh51
-rw-r--r--nfvbenchvm/dib/elements/nfvbenchvm/static/vpp/startup.conf4
-rw-r--r--nfvbenchvm/dib/verify-image.sh7
-rw-r--r--pylint.rc42
-rw-r--r--requirements-dev.txt18
-rw-r--r--requirements.txt39
-rw-r--r--setup.cfg7
-rw-r--r--setup.py28
-rw-r--r--test-requirements.txt29
-rw-r--r--test/mock_trex.py49
-rw-r--r--test/test_chains.py105
-rw-r--r--test/test_nfvbench.py843
-rw-r--r--test/ut_behave_tests/__init__.py1
-rw-r--r--test/ut_behave_tests/test_data/project=nfvbench&case=characterization&criteria=PASS&page=1.json48702
-rw-r--r--test/ut_behave_tests/test_data/project=nfvbench&case=characterization&criteria=PASS&page=2.json25065
-rw-r--r--test/ut_behave_tests/test_data/project=nfvbench&case=non-regression&criteria=PASS&page=1.json8124
-rw-r--r--test/ut_behave_tests/test_steps.py151
-rw-r--r--test/ut_behave_tests/test_testapi.py132
-rw-r--r--test/ut_behave_tests/test_utils.py119
-rw-r--r--tox.ini59
-rw-r--r--xtesting/ansible/host_vars/127.0.0.110
-rw-r--r--xtesting/ansible/site.yml22
-rw-r--r--xtesting/testcases.yaml101
178 files changed, 93773 insertions, 3382 deletions
diff --git a/.gitignore b/.gitignore
index 2b16029..93ef7df 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,9 +1,11 @@
.DS_store
*.pyc
+*~
.idea
.tox
.cache
.eggs
+.vscode
.pytest_cache/
venv
nfvbench.egg-info
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..32e3299
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,76 @@
+# NFVBench Gitlab-CI Jobs
+---
+include:
+ - project: anuket/releng
+ file: '/gitlab-templates/RTD.gitlab-ci.yml'
+ - project: anuket/releng
+ file: '/gitlab-templates/Docker.gitlab-ci.yml'
+ - project: anuket/releng
+ file: '/gitlab-templates/GoogleStorage.gitlab-ci.yml'
+
+variables:
+ DOCKER_REGISTRY: docker.io
+
+.tox-defaults: &tox-defaults
+ stage: test
+ image: python:3.8
+ before_script:
+ - pip install tox==3.21.4
+ cache:
+ paths:
+ - .cache/pip
+ - venv/
+ rules:
+ - if: $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
+
+pep8:
+ <<: *tox-defaults
+ stage: build
+ script:
+ tox -e pep8
+
+tox-py38:
+ <<: *tox-defaults
+ script:
+ tox -e py38
+
+verify-image:
+ stage: build
+ image: centos:7
+ before_script:
+ - yum -y install python3 qemu-img kpartx sudo e2fsprogs
+ - python3 -m venv venv
+ script:
+ - source venv/bin/activate
+ - !reference [.gsutil-install, script]
+ - cd nfvbenchvm/dib
+ - |
+ echo -e "\e[0Ksection_start:`date +%s`:build_image\r\e[0KBuild Image"
+ bash verify-image.sh -v
+ echo -e "\e[0Ksection_end:`date +%s`:build_image\r\e[0K"
+ rules:
+ - if: $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
+
+build-image:
+ stage: deploy
+ image: centos:7
+ before_script:
+ - yum -y install python3 qemu-img kpartx sudo e2fsprogs
+ - python3 -m venv venv
+ script:
+ - source venv/bin/activate
+ - !reference [.gsutil-install, script]
+ - cd nfvbenchvm/dib
+ - |
+ echo -e "\e[0Ksection_start:`date +%s`:build_image\r\e[0KBuild Image"
+ bash build-image.sh
+ echo -e "\e[0Ksection_end:`date +%s`:build_image\r\e[0K"
+ rules:
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
+
+docker-build-nfvbench:
+ extends: .docker-build-and-push
+ variables:
+ DOCKER_IMAGE: "$DOCKER_ORGANIZATION/nfvbench"
+ DOCKER_BUILDCONTEXT: "docker"
+ DOCKER_FILEPATH: "docker/Dockerfile"
diff --git a/INFO.yaml b/INFO.yaml
index 2796535..703d920 100644
--- a/INFO.yaml
+++ b/INFO.yaml
@@ -8,16 +8,16 @@ project_lead: &opnfv_nfvbench_ptl
email: 'ahothan@cisco.com'
id: 'ahothan'
company: 'cisco.com'
- timezone: 'Unknown'
+ timezone: 'PST'
primary_contact: *opnfv_nfvbench_ptl
issue_tracking:
type: 'jira'
- url: 'https://jira.opnfv.org/projects/NFVBENCH'
+ url: 'https://jira-old.opnfv.org/projects/NFVBENCH'
key: 'NFVBENCH'
mailing_list:
type: 'mailman2'
- url: 'opnfv-tech-discuss@lists.opnfv.org'
- tag: '[nfvbench]'
+ url: 'anuket-tech-discuss@lists.anuket.io'
+ tag: '#nfvbench'
realtime_discussion:
type: irc
server: 'freenode.net'
@@ -38,10 +38,14 @@ committers:
email: 'yicwang@cisco.com'
company: 'cisco.com'
id: 'yicwang'
- - name: 'Al Morton'
- email: 'acmorton@att.com'
- company: 'att.com'
- id: 'acm'
+ - name: 'Francois-Regis Menguy'
+ email: 'francoisregis.menguy@orange.com'
+ company: 'orange.com'
+ id: 'fmenguy'
+ - name: 'Gwenael Lambrouin'
+ email: 'gwenael.lambrouin@orange.com'
+ company: 'orange.com'
+ id: 'glambrouin'
tsc:
# yamllint disable rule:line-length
approval: ''
diff --git a/README.rst b/README.rst
index a3f67cf..ead5053 100644
--- a/README.rst
+++ b/README.rst
@@ -22,11 +22,10 @@ Online Documentation
--------------------
The latest version of the NFVbench documentation is available online at:
-http://docs.opnfv.org/en/latest/submodules/nfvbench/docs/testing/user/userguide/index.html
-
+https://docs.anuket.io/projects/nfvbench/en/latest/index.html
Contact Information
-------------------
-Inquiries and questions: send an email to opnfv-tech-discuss@lists.opnfv.org with a Subject line starting with "#nfvbench"
+Inquiries and questions: send an email to anuket-tech-discuss@lists.anuket.io with a Subject line starting with "#nfvbench"
-Open issues or submit an issue or enhancement request: https://jira.opnfv.org/projects/NFVBENCH/issues (this requires an OPNFV Linux Foundation login).
+Open issues or submit an issue or enhancement request: https://jira-old.opnfv.org/projects/NFVBENCH/issues (this requires an OPNFV Linux Foundation login).
diff --git a/behave_tests/__init__.py b/behave_tests/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/behave_tests/__init__.py
diff --git a/behave_tests/behavedriver.py b/behave_tests/behavedriver.py
new file mode 100644
index 0000000..ad0c8b7
--- /dev/null
+++ b/behave_tests/behavedriver.py
@@ -0,0 +1,70 @@
+#!/usr/bin/env python
+# Copyright 2021 Orange
+#
+# 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.
+#
+
+"""Define classes required to run any Behave test suites."""
+
+from __future__ import division
+
+import json
+import logging
+import os
+
+from xtesting.core.behaveframework import BehaveFramework
+
+__author__ = "François-Régis Menguy <francoisregis.menguy@orange.com>"
+
+
+class BehaveDriver(BehaveFramework):
+ """NFVbench custom BehaveDriver for Xtesting."""
+ # pylint: disable=too-many-instance-attributes
+
+ __logger = logging.getLogger('xtesting.core.behavedriver')
+
+ def __init__(self, **kwargs):
+ super().__init__(**kwargs)
+ self.campaign_json_file = os.path.join(self.res_dir, 'campaign_result.json')
+
+ def extract_nfvbench_results(self):
+ with open(self.campaign_json_file) as stream_:
+ self.details['results'] = json.load(stream_)
+
+ def run(self, **kwargs):
+
+ """Override existing Xtesting BehaveFramework core script run method
+ to extract NFVbench result and push them to DB
+
+ Here are the steps:
+ * run Xtesting behave method:
+ * create the output directories if required,
+ * run behave features with parameters
+ * get the behave results in output.json,
+ * get the nfvbench results in campaign_result.json
+
+ Args:
+ kwargs: Arbitrary keyword arguments.
+
+ Returns:
+ EX_OK if all suites ran well.
+ EX_RUN_ERROR otherwise.
+ """
+ try:
+ super().run(**kwargs)
+ self.extract_nfvbench_results()
+ self.__logger.info("NFVbench results were successfully parsed")
+ except Exception: # pylint: disable=broad-except
+ self.__logger.exception("Cannot parse NFVbench results")
+ return self.EX_RUN_ERROR
+ return self.EX_OK
diff --git a/behave_tests/features/__init__.py b/behave_tests/features/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/behave_tests/features/__init__.py
diff --git a/behave_tests/features/characterization-full.feature b/behave_tests/features/characterization-full.feature
new file mode 100644
index 0000000..8b47dec
--- /dev/null
+++ b/behave_tests/features/characterization-full.feature
@@ -0,0 +1,69 @@
+@characterization
+Feature: characterization
+
+ @throughput
+ Scenario Outline: Run a NDR test for a defined frame size and flow count
+ Given 10 sec run duration
+ And <frame_size> frame size
+ And <flow_count> flow count
+ And ndr rate
+ When NFVbench API is ready
+ Then 3 runs are started and waiting for maximum result
+ And push result to database
+ And extract offered rate result
+
+ Examples: Frame sizes and flow counts
+ | frame_size | flow_count |
+ | 64 | 128 |
+ | 128 | 128 |
+ | 256 | 128 |
+ | 512 | 128 |
+ | 768 | 128 |
+ | 1024 | 128 |
+ | 1280 | 128 |
+ | 1518 | 128 |
+ | IMIX | 128 |
+ | 9000 | 128 |
+ | 64 | 10k |
+ | 128 | 10k |
+ | 256 | 10k |
+ | 512 | 10k |
+ | 768 | 10k |
+ | 1024 | 10k |
+ | 1280 | 10k |
+ | 1518 | 10k |
+ | IMIX | 10k |
+ | 9000 | 10k |
+ | 64 | 100k |
+ | 128 | 100k |
+ | 256 | 100k |
+ | 512 | 100k |
+ | 768 | 100k |
+ | 1024 | 100k |
+ | 1280 | 100k |
+ | 1518 | 100k |
+ | IMIX | 100k |
+ | 9000 | 100k |
+
+
+ @latency
+ Scenario Outline: Run a latency test for a defined frame size and throughput percentage
+ Given 10 sec run duration
+ And TRex is restarted
+ And <frame_size> frame size
+ And 100k flow count
+ And <throughput> rate of previous scenario
+ When NFVbench API is ready
+ Then run is started and waiting for result
+ And push result to database
+
+ Examples: Frame sizes and throughput percentages
+ | frame_size | throughput |
+ | 64 | 70% |
+ | 64 | 90% |
+ | 768 | 70% |
+ | 768 | 90% |
+ | 1518 | 70% |
+ | 1518 | 90% |
+ | 9000 | 70% |
+ | 9000 | 90% |
diff --git a/behave_tests/features/characterization-samples.feature b/behave_tests/features/characterization-samples.feature
new file mode 100644
index 0000000..fc55762
--- /dev/null
+++ b/behave_tests/features/characterization-samples.feature
@@ -0,0 +1,42 @@
+@characterization
+Feature: characterization
+
+ @throughput
+ Scenario Outline: Run a NDR test for a defined frame size and flow count
+ Given 10 sec run duration
+ And <frame_size> frame size
+ And <flow_count> flow count
+ And ndr rate
+ When NFVbench API is ready
+ Then 3 runs are started and waiting for maximum result
+ And push result to database
+ And extract offered rate result
+
+ Examples: Frame sizes and flow counts
+ | frame_size | flow_count |
+ | 64 | 100k |
+ | 768 | 100k |
+ | 1518 | 100k |
+ | 9000 | 100k |
+
+
+ @latency
+ Scenario Outline: Run a latency test for a defined frame size and throughput percentage
+ Given 10 sec run duration
+ And <frame_size> frame size
+ And 100k flow count
+ And <throughput> rate of previous scenario
+ When NFVbench API is ready
+ Then run is started and waiting for result
+ And push result to database
+
+ Examples: Frame sizes and throughput percentages
+ | frame_size | throughput |
+ | 64 | 70% |
+ | 64 | 90% |
+ | 768 | 70% |
+ | 768 | 90% |
+ | 1518 | 70% |
+ | 1518 | 90% |
+ | 9000 | 70% |
+ | 9000 | 90% |
diff --git a/behave_tests/features/environment.py b/behave_tests/features/environment.py
new file mode 100644
index 0000000..7621075
--- /dev/null
+++ b/behave_tests/features/environment.py
@@ -0,0 +1,88 @@
+#!/usr/bin/env python
+# Copyright 2021 Orange
+#
+# 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.
+#
+
+
+import json
+import os
+import logging
+import pathlib
+import time
+
+
+def before_all(context):
+ context.data = {'config': os.getenv('NFVBENCH_CONFIG_PATH', '/etc/nfvbench/nfvbench.cfg')}
+
+ context.data['PROJECT_NAME'] = os.getenv('PROJECT_NAME', 'nfvbench')
+ context.data['TEST_DB_URL'] = os.getenv('TEST_DB_URL')
+ context.data['BASE_TEST_DB_URL'] = ''
+ if context.data['TEST_DB_URL']:
+ context.data['BASE_TEST_DB_URL'] = context.data['TEST_DB_URL'].replace('results', '')
+ context.data['INSTALLER_TYPE'] = os.getenv('INSTALLER_TYPE')
+ context.data['DEPLOY_SCENARIO'] = os.getenv('DEPLOY_SCENARIO')
+ context.data['NODE_NAME'] = os.getenv('NODE_NAME', 'nfvbench')
+ context.data['BUILD_TAG'] = os.getenv('BUILD_TAG')
+
+ # NFVbench server host and port
+ context.host_ip = os.getenv('NFVBENCH_SERVER_HOST', '127.0.0.1')
+ context.port = int(os.getenv('NFVBENCH_SERVER_PORT', '7555'))
+
+
+def before_feature(context, feature):
+ context.rates = {}
+ context.results = {}
+ context.start_time = time.time()
+ context.CASE_NAME = feature.name
+
+ # Create results dir if needed
+ results_dir = pathlib.Path('/var/lib/xtesting/results/' + context.CASE_NAME)
+ if not results_dir.exists():
+ results_dir.mkdir()
+
+ # Setup a second logger to be able to understand why a test passed or failed
+ # (The main logger is used by behave itself)
+ context.logger = logging.getLogger('behave_tests')
+ context.logger.setLevel(logging.INFO)
+ fh = logging.FileHandler(filename=results_dir / pathlib.Path('behave_tests.log'),
+ mode='w') # Re-create the file at the beginning of the feature
+ fh.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
+ context.logger.addHandler(fh)
+
+ context.logger.info('before_feature: ' + feature.name)
+
+
+def before_scenario(context, scenario):
+ context.tag = scenario.tags[0]
+ context.json = {'log_file': '/var/lib/xtesting/results/' + context.CASE_NAME + '/nfvbench.log'}
+ user_label = os.getenv('NFVBENCH_USER_LABEL', None)
+ if user_label:
+ context.json['user_label'] = user_label
+ loopvm_flavor = os.getenv('NFVBENCH_LOOPVM_FLAVOR_NAME', None)
+ if loopvm_flavor:
+ context.json['flavor_type'] = loopvm_flavor
+ context.synthesis = {}
+ context.percentage_rate = None
+
+ context.logger.info('before_scenario: ' + scenario.name)
+
+
+def after_feature(context, feature):
+ if len(context.results) == 0:
+ # No result to dump
+ return
+
+ results_dir = pathlib.Path('/var/lib/xtesting/results/' + context.CASE_NAME)
+ results_file = results_dir / pathlib.Path('campaign_result.json')
+ results_file.write_text(json.dumps(context.results, indent=4))
diff --git a/behave_tests/features/non-regression.feature b/behave_tests/features/non-regression.feature
new file mode 100644
index 0000000..1c21c47
--- /dev/null
+++ b/behave_tests/features/non-regression.feature
@@ -0,0 +1,45 @@
+@non-regression
+Feature: non-regression
+
+ @throughput
+ Scenario Outline: Run a NDR test for a defined frame size
+ Given 10 sec run duration
+ And <frame_size> frame size
+ And 100k flow count
+ And ndr rate
+ When NFVbench API is ready
+ Then 3 runs are started and waiting for maximum result
+ And push result to database
+ And extract offered rate result
+ And verify throughput result is in same range as the previous result
+ And verify throughput result is in same range as the characterization result
+
+ Examples: Frame sizes
+ | frame_size |
+ | 64 |
+ | 768 |
+ | 1518 |
+ | 9000 |
+
+
+ @latency
+ Scenario Outline: Run a latency test for a defined frame size and throughput percentage
+ Given 10 sec run duration
+ And <frame_size> frame size
+ And 100k flow count
+ And packet rate equal to <percentage> of max throughput of last characterization
+ When NFVbench API is ready
+ Then run is started and waiting for result
+ And push result to database
+ And verify latency result is lower than 1000 microseconds
+
+ Examples: Frame sizes and throughput percentages
+ | frame_size | percentage |
+ | 64 | 70% |
+ | 64 | 90% |
+ | 768 | 70% |
+ | 768 | 90% |
+ | 1518 | 70% |
+ | 1518 | 90% |
+ | 9000 | 70% |
+ | 9000 | 90% |
diff --git a/behave_tests/features/quick-test-10kpps.feature b/behave_tests/features/quick-test-10kpps.feature
new file mode 100644
index 0000000..d46000c
--- /dev/null
+++ b/behave_tests/features/quick-test-10kpps.feature
@@ -0,0 +1,13 @@
+@quick-test-10kpps
+Feature: quick-test-10kpps
+
+ @throughput
+ Scenario: Run a 10s test at 10kpps with 64-byte frames and 128 flows
+ Given 10 sec run duration
+ And TRex is restarted
+ And 64 frame size
+ And 128 flow count
+ And 10kpps rate
+ When NFVbench API is ready
+ Then 1 runs are started and waiting for maximum result
+ And push result to database
diff --git a/behave_tests/features/steps/__init__.py b/behave_tests/features/steps/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/behave_tests/features/steps/__init__.py
diff --git a/behave_tests/features/steps/steps.py b/behave_tests/features/steps/steps.py
new file mode 100644
index 0000000..c347871
--- /dev/null
+++ b/behave_tests/features/steps/steps.py
@@ -0,0 +1,629 @@
+#!/usr/bin/env python
+# Copyright 2021 Orange
+#
+# 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.
+#
+
+from behave import given
+from behave import when
+from behave import then
+from copy import deepcopy
+from requests import RequestException
+from retry import retry
+import json
+import requests
+import subprocess
+from subprocess import DEVNULL
+from typing import Optional
+
+from nfvbench.summarizer import Formatter
+from nfvbench.traffic_gen.traffic_utils import parse_rate_str
+
+from behave_tests.features.steps.testapi import TestapiClient, nfvbench_input_to_str
+
+
+STATUS_ERROR = "ERROR"
+
+STATUS_OK = "OK"
+
+
+"""Given steps."""
+
+
+@given('PROJECT_NAME: {project_name}')
+def override_xtesting_project_name(context, project_name):
+ context.data['PROJECT_NAME'] = project_name
+
+
+@given('TEST_DB_URL: {test_db_url}')
+def override_xtesting_test_db_url(context, test_db_url):
+ context.data['TEST_DB_URL'] = test_db_url
+ context.data['BASE_TEST_DB_URL'] = context.data['TEST_DB_URL'].replace('results', '')
+
+
+@given('INSTALLER_TYPE: {installer_type}')
+def override_xtesting_installer_type(context, installer_type):
+ context.data['INSTALLER_TYPE'] = installer_type
+
+
+@given('DEPLOY_SCENARIO: {deploy_scenario}')
+def override_xtesting_deploy_scenario(context, deploy_scenario):
+ context.data['DEPLOY_SCENARIO'] = deploy_scenario
+
+
+@given('NODE_NAME: {node_name}')
+def override_xtesting_node_name(context, node_name):
+ context.data['NODE_NAME'] = node_name
+
+
+@given('BUILD_TAG: {build_tag}')
+def override_xtesting_build_tag(context, build_tag):
+ context.data['BUILD_TAG'] = build_tag
+
+
+@given('NFVbench config from file: {config_path}')
+def init_config(context, config_path):
+ context.data['config'] = config_path
+
+
+@given('a JSON NFVbench config')
+def init_config_from_json(context):
+ context.json.update(json.loads(context.text))
+
+
+@given('log file: {log_file_path}')
+def log_config(context, log_file_path):
+ context.json['log_file'] = log_file_path
+
+
+@given('json file: {json_file_path}')
+def json_config(context, json_file_path):
+ context.json['json'] = json_file_path
+
+
+@given('no clean up')
+def add_no_clean_up_flag(context):
+ context.json['no_cleanup'] = 'true'
+
+
+@given('TRex is restarted')
+def add_restart(context):
+ context.json['restart'] = 'true'
+
+
+@given('{label} label')
+def add_label(context, label):
+ context.json['label'] = label
+
+
+@given('{frame_size} frame size')
+def add_frame_size(context, frame_size):
+ context.json['frame_sizes'] = [frame_size]
+
+
+@given('{flow_count} flow count')
+def add_flow_count(context, flow_count):
+ context.json['flow_count'] = flow_count
+
+
+@given('{rate} rate')
+def add_rate(context, rate):
+ context.json['rate'] = rate
+
+
+@given('{duration} sec run duration')
+def add_duration(context, duration):
+ context.json['duration_sec'] = duration
+
+
+@given('{percentage_rate} rate of previous scenario')
+def add_percentage_rate(context, percentage_rate):
+ context.percentage_rate = percentage_rate
+ rate = percentage_previous_rate(context, percentage_rate)
+ context.json['rate'] = rate
+ context.logger.info(f"add_percentage_rate: {percentage_rate} => rate={rate}")
+
+
+@given('packet rate equal to {percentage} of max throughput of last characterization')
+def add_packet_rate(context, percentage: str):
+ """Update nfvbench run config with packet rate based on reference value.
+
+ For the already configured frame size and flow count, retrieve the max
+ throughput obtained during the latest successful characterization run. Then
+ retain `percentage` of this value for the packet rate and update `context`.
+
+ Args:
+ context: The context data of the current scenario run. It includes the
+ testapi endpoints to retrieve the reference values.
+
+ percentage: String representation of the percentage of the reference max
+ throughput. Example: "70%"
+
+ Updates context:
+ context.percentage_rate: percentage of reference max throughput
+ using a string representation. Example: "70%"
+
+ context.json['rate']: packet rate in packets per second using a string
+ representation. Example: "2000pps"
+
+ Raises:
+ ValueError: invalid percentage string
+
+ AssertionError: cannot find reference throughput value
+
+ """
+ # Validate percentage
+ if not percentage.endswith('%'):
+ raise ValueError('Invalid percentage string: "{0}"'.format(percentage))
+ percentage_float = convert_percentage_str_to_float(percentage)
+
+ # Retrieve nfvbench results report from testapi for:
+ # - the latest throughput scenario inside a characterization feature that passed
+ # - the test duration, frame size and flow count given in context.json
+ # - (optionally) the user_label and flavor_type given in context.json
+ # - the 'ndr' rate
+ testapi_params = {"project_name": context.data['PROJECT_NAME'],
+ "case_name": "characterization"}
+ nfvbench_test_conditions = deepcopy(context.json)
+ nfvbench_test_conditions['rate'] = 'ndr'
+ testapi_client = TestapiClient(testapi_url=context.data['TEST_DB_URL'])
+ last_result = testapi_client.find_last_result(testapi_params,
+ scenario_tag="throughput",
+ nfvbench_test_input=nfvbench_test_conditions)
+ if last_result is None:
+ error_msg = "No characterization result found for scenario_tag=throughput"
+ error_msg += " and nfvbench test conditions "
+ error_msg += nfvbench_input_to_str(nfvbench_test_conditions)
+ context.logger.error(error_msg)
+ raise AssertionError(error_msg)
+
+ # From the results report, extract the max throughput in packets per second
+ total_tx_rate = extract_value(last_result["output"], "total_tx_rate")
+ context.logger.info("add_packet_rate: max throughput of last characterization (pps): "
+ f"{total_tx_rate:,}")
+
+ # Compute the desired packet rate
+ rate = round(total_tx_rate * percentage_float)
+ context.logger.info(f"add_packet_rate: percentage={percentage} rate(pps)={rate:,}")
+
+ # Build rate string using a representation understood by nfvbench
+ rate_str = str(rate) + "pps"
+
+ # Update context
+ context.percentage_rate = percentage
+ context.json['rate'] = rate_str
+
+
+"""When steps."""
+
+
+@when('NFVbench API is ready')
+@when('NFVbench API is ready on host {host_ip}')
+@when('NFVbench API is ready on host {host_ip} and port {port:d}')
+def start_server(context, host_ip: Optional[str]=None, port: Optional[int]=None):
+ """Start nfvbench server if needed and wait until it is ready.
+
+ Quickly check whether nfvbench HTTP server is ready by reading the "/status"
+ page. If not, start the server locally. Then wait until nfvbench API is
+ ready by polling the "/status" page.
+
+ This code is useful when behave and nfvbench run on the same machine. In
+ particular, it is needed to run behave tests with nfvbench Docker container.
+
+ There is currently no way to prevent behave from starting automatically
+ nfvbench server when this is not desirable, for instance when behave is
+ started using ansible-role-nfvbench. The user or the orchestration layer
+ should make sure nfvbench API is ready before starting behave tests.
+
+ """
+ # NFVbench server host IP and port number have been setup from environment variables (see
+ # environment.py:before_all()). Here we allow to override them from feature files:
+ if host_ip is not None:
+ context.host_ip = host_ip
+ if port is not None:
+ context.port = port
+
+ nfvbench_test_url = "http://{ip}:{port}/status".format(ip=context.host_ip, port=context.port)
+ context.logger.info("start_server: test nfvbench API on URL: " + nfvbench_test_url)
+
+ try:
+ # check if API is already available
+ requests.get(nfvbench_test_url)
+ except RequestException:
+ context.logger.info("nfvbench server not running")
+
+ cmd = ["nfvbench", "-c", context.data['config'], "--server"]
+ if context.host_ip != "127.0.0.1":
+ cmd.append("--host")
+ cmd.append(context.host_ip)
+ if context.port != 7555:
+ cmd.append("--port")
+ cmd.append(str(context.port))
+
+ context.logger.info("Start nfvbench server with command: " + " ".join(cmd))
+
+ subprocess.Popen(cmd, stdout=DEVNULL, stderr=subprocess.STDOUT)
+
+ # Wait until nfvbench API is ready
+ test_nfvbench_api(nfvbench_test_url)
+
+
+"""Then steps."""
+
+
+@then('run is started and waiting for result')
+@then('{repeat:d} runs are started and waiting for maximum result')
+def run_nfvbench_traffic(context, repeat=1):
+ context.logger.info(f"run_nfvbench_traffic: fs={context.json['frame_sizes'][0]} "
+ f"fc={context.json['flow_count']} "
+ f"rate={context.json['rate']} repeat={repeat}")
+
+ if 'json' not in context.json:
+ # Build filename for nfvbench results in JSON format
+ context.json['json'] = '/var/lib/xtesting/results/' + context.CASE_NAME + \
+ '/nfvbench-' + context.tag + \
+ '-fs_' + context.json['frame_sizes'][0] + \
+ '-fc_' + context.json['flow_count']
+ if context.percentage_rate is not None:
+ # Add rate as a percentage, eg '-rate_70%'
+ context.json['json'] += '-rate_' + context.percentage_rate
+ else:
+ # Add rate in bits or packets per second, eg '-rate_15Gbps' or '-rate_10kpps'
+ context.json['json'] += '-rate_' + context.json['rate']
+ context.json['json'] += '.json'
+
+ json_base_name = context.json['json']
+
+ max_total_tx_rate = None
+ # rem: don't init with 0 in case nfvbench gets crazy and returns a negative packet rate
+
+ for i in range(repeat):
+ if repeat > 1:
+ context.json['json'] = json_base_name.strip('.json') + '-' + str(i) + '.json'
+
+ # Start nfvbench traffic and wait result:
+ url = "http://{ip}:{port}/start_run".format(ip=context.host_ip, port=context.port)
+ payload = json.dumps(context.json)
+ r = requests.post(url, data=payload, headers={'Content-Type': 'application/json'})
+ context.request_id = json.loads(r.text)["request_id"]
+ assert r.status_code == 200
+ result = wait_result(context)
+ assert result["status"] == STATUS_OK
+
+ # Extract useful metrics from result:
+ total_tx_rate = extract_value(result, "total_tx_rate")
+ overall = extract_value(result, "overall")
+ avg_delay_usec = extract_value(overall, "avg_delay_usec")
+
+ # Log latest result:
+ context.logger.info(f"run_nfvbench_traffic: result #{i+1}: "
+ f"total_tx_rate(pps)={total_tx_rate:,} " # Add ',' thousand separator
+ f"avg_latency_usec={round(avg_delay_usec)}")
+
+ # Keep only the result with the highest packet rate:
+ if max_total_tx_rate is None or total_tx_rate > max_total_tx_rate:
+ max_total_tx_rate = total_tx_rate
+ context.result = result
+ context.synthesis['total_tx_rate'] = total_tx_rate
+ context.synthesis['avg_delay_usec'] = avg_delay_usec
+
+ # Log max result only when we did two nfvbench runs or more:
+ if repeat > 1:
+ context.logger.info(f"run_nfvbench_traffic: max result: "
+ f"total_tx_rate(pps)={context.synthesis['total_tx_rate']:,} "
+ f"avg_latency_usec={round(context.synthesis['avg_delay_usec'])}")
+
+
+@then('extract offered rate result')
+def save_rate_result(context):
+ total_tx_rate = extract_value(context.result, "total_tx_rate")
+ context.rates[context.json['frame_sizes'][0] + '_' + context.json['flow_count']] = total_tx_rate
+
+
+@then('verify throughput result is in same range as the previous result')
+@then('verify throughput result is greater than {threshold} of the previous result')
+def get_throughput_result_from_database(context, threshold='90%'):
+ last_result = get_last_result(context)
+
+ if last_result:
+ compare_throughput_values(context, last_result, threshold)
+
+
+@then('verify latency result is in same range as the previous result')
+@then('verify latency result is greater than {threshold} of the previous result')
+def get_latency_result_from_database(context, threshold='90%'):
+ last_result = get_last_result(context)
+
+ if last_result:
+ compare_latency_values(context, last_result, threshold)
+
+
+@then('verify latency result is lower than {max_avg_latency_usec:g} microseconds')
+def check_latency_result_against_fixed_threshold(context, max_avg_latency_usec: float):
+ """Check latency result against a fixed threshold.
+
+ Check that the average latency measured during the current scenario run is
+ lower or equal to the provided fixed reference value.
+
+ Args:
+ context: The context data of the current scenario run. It includes the
+ test results for that run.
+
+ max_avg_latency_usec: Reference value to be used as a threshold. This
+ is a maximum average latency expressed in microseconds.
+
+ Raises:
+ AssertionError: The latency result is strictly greater than the reference value.
+
+ """
+ # Get the just measured average latency (a float):
+ new_avg_latency_usec = context.synthesis['avg_delay_usec']
+
+ # Log what we test:
+ context.logger.info("check_latency_result_against_fixed_threshold(usec): "
+ "{value}<={ref}?".format(
+ value=round(new_avg_latency_usec),
+ ref=round(max_avg_latency_usec)))
+
+ # Compare measured value to reference:
+ if new_avg_latency_usec > max_avg_latency_usec:
+ raise AssertionError("Average latency higher than max threshold: "
+ "{value} usec > {ref} usec".format(
+ value=round(new_avg_latency_usec),
+ ref=round(max_avg_latency_usec)))
+
+
+@then(
+ 'verify result is in [{min_reference_value}pps, {max_reference_value}pps] range for throughput')
+def compare_throughput_pps_result_with_range_values(context, min_reference_value,
+ max_reference_value):
+ context.unit = 'pps'
+ reference_values = [min_reference_value + 'pps', max_reference_value + 'pps']
+ throughput_comparison(context, reference_values=reference_values)
+
+
+@then(
+ 'verify result is in [{min_reference_value}bps, {max_reference_value}bps] range for throughput')
+def compare_throughput_bps_result_with_range_values(context, min_reference_value,
+ max_reference_value):
+ context.unit = 'bps'
+ reference_values = [min_reference_value + 'bps', max_reference_value + 'bps']
+ throughput_comparison(context, reference_values=reference_values)
+
+
+@then('verify result is in {reference_values} range for latency')
+def compare_result_with_range_values(context, reference_values):
+ latency_comparison(context, reference_values=reference_values)
+
+
+@then('verify throughput result is in same range as the characterization result')
+@then('verify throughput result is greater than {threshold} of the characterization result')
+def get_characterization_throughput_result_from_database(context, threshold='90%'):
+ last_result = get_last_result(context, True)
+ if not last_result:
+ raise AssertionError("No characterization result found.")
+ compare_throughput_values(context, last_result, threshold)
+
+
+@then('verify latency result is in same range as the characterization result')
+@then('verify latency result is greater than {threshold} of the characterization result')
+def get_characterization_latency_result_from_database(context, threshold='90%'):
+ last_result = get_last_result(context, True)
+ if not last_result:
+ raise AssertionError("No characterization result found.")
+ compare_latency_values(context, last_result, threshold)
+
+@then('push result to database')
+def push_result_database(context):
+ if context.tag == "latency":
+ # override input rate value with percentage one to avoid no match
+ # if pps is not accurate with previous one
+ context.json["rate"] = context.percentage_rate
+ json_result = {"synthesis": context.synthesis, "input": context.json, "output": context.result}
+
+ if context.tag not in context.results:
+ context.results[context.tag] = [json_result]
+ else:
+ context.results[context.tag].append(json_result)
+
+
+"""Utils methods."""
+
+
+@retry(AssertionError, tries=24, delay=5.0, logger=None)
+def test_nfvbench_api(nfvbench_test_url: str):
+ try:
+ r = requests.get(nfvbench_test_url)
+ assert r.status_code == 200
+ assert json.loads(r.text)["error_message"] == "no pending NFVbench run"
+ except RequestException as exc:
+ raise AssertionError("Fail to access NFVbench API") from exc
+
+
+@retry(AssertionError, tries=1000, delay=2.0, logger=None)
+def wait_result(context):
+ r = requests.get("http://{ip}:{port}/status".format(ip=context.host_ip, port=context.port))
+ context.raw_result = r.text
+ result = json.loads(context.raw_result)
+ assert r.status_code == 200
+ assert result["status"] == STATUS_OK or result["status"] == STATUS_ERROR
+ return result
+
+
+def percentage_previous_rate(context, rate):
+ previous_rate = context.rates[context.json['frame_sizes'][0] + '_' + context.json['flow_count']]
+
+ if rate.endswith('%'):
+ rate_percent = convert_percentage_str_to_float(rate)
+ return str(int(previous_rate * rate_percent)) + 'pps'
+ raise Exception('Unknown rate string format %s' % rate)
+
+
+def convert_percentage_str_to_float(percentage):
+ float_percent = float(percentage.replace('%', '').strip())
+ if float_percent <= 0 or float_percent > 100.0:
+ raise Exception('%s is out of valid range (must be 1-100%%)' % percentage)
+ return float_percent / 100
+
+
+def compare_throughput_values(context, last_result, threshold):
+ assert last_result["output"]["status"] == context.result["status"]
+ if last_result["output"]["status"] == "OK":
+ old_throughput = extract_value(last_result["output"], "total_tx_rate")
+ throughput_comparison(context, old_throughput, threshold=threshold)
+
+
+def compare_latency_values(context, last_result, threshold):
+ assert last_result["output"]["status"] == context.result["status"]
+ if last_result["output"]["status"] == "OK":
+ old_latency = extract_value(extract_value(last_result["output"], "overall"),
+ "avg_delay_usec")
+ latency_comparison(context, old_latency, threshold=threshold)
+
+
+def throughput_comparison(context, old_throughput_pps=None, threshold=None, reference_values=None):
+ current_throughput_pps = extract_value(context.result, "total_tx_rate")
+
+ if old_throughput_pps:
+ if not current_throughput_pps >= convert_percentage_str_to_float(
+ threshold) * old_throughput_pps:
+ raise AssertionError(
+ "Current run throughput {current_throughput_pps} is not over {threshold} "
+ " of previous value ({old_throughput_pps})".format(
+ current_throughput_pps=Formatter.suffix('pps')(
+ Formatter.standard(current_throughput_pps)),
+ threshold=threshold, old_throughput_pps=Formatter.suffix('pps')(
+ Formatter.standard(old_throughput_pps))))
+ elif reference_values:
+ if context.unit == 'bps':
+ current_throughput = extract_value(context.result, "offered_tx_rate_bps")
+ reference_values = [int(parse_rate_str(x)['rate_bps']) for x in reference_values]
+ formatted_current_throughput = Formatter.bits(current_throughput)
+ formatted_min_reference_value = Formatter.bits(reference_values[0])
+ formatted_max_reference_value = Formatter.bits(reference_values[1])
+ else:
+ current_throughput = current_throughput_pps
+ reference_values = [int(parse_rate_str(x)['rate_pps']) for x in reference_values]
+ formatted_current_throughput = Formatter.suffix('pps')(
+ Formatter.standard(current_throughput))
+ formatted_min_reference_value = Formatter.suffix('pps')(
+ Formatter.standard(reference_values[0]))
+ formatted_max_reference_value = Formatter.suffix('pps')(
+ Formatter.standard(reference_values[1]))
+ if not reference_values[0] <= int(current_throughput) <= reference_values[1]:
+ raise AssertionError(
+ "Current run throughput {current_throughput} is not in reference values "
+ "[{min_reference_value}, {max_reference_value}]".format(
+ current_throughput=formatted_current_throughput,
+ min_reference_value=formatted_min_reference_value,
+ max_reference_value=formatted_max_reference_value))
+
+
+def latency_comparison(context, old_latency=None, threshold=None, reference_values=None):
+ overall = extract_value(context.result, "overall")
+ current_latency = extract_value(overall, "avg_delay_usec")
+
+ if old_latency:
+ if not current_latency <= (2 - convert_percentage_str_to_float(threshold)) * old_latency:
+ threshold = str(200 - int(threshold.strip('%'))) + '%'
+ raise AssertionError(
+ "Current run latency {current_latency}usec is not less than {threshold} of "
+ "previous value ({old_latency}usec)".format(
+ current_latency=Formatter.standard(current_latency), threshold=threshold,
+ old_latency=Formatter.standard(old_latency)))
+ elif reference_values:
+ if not reference_values[0] <= current_latency <= reference_values[1]:
+ raise AssertionError(
+ "Current run latency {current_latency}usec is not in reference values "
+ "[{min_reference_value}, {max_reference_value}]".format(
+ current_latency=Formatter.standard(current_latency),
+ min_reference_value=Formatter.standard(reference_values[0]),
+ max_reference_value=Formatter.standard(reference_values[1])))
+
+
+def extract_value(obj, key):
+ """Pull all values of specified key from nested JSON."""
+ arr = []
+
+ def extract(obj, arr, key):
+ """Recursively search for values of key in JSON tree."""
+ if isinstance(obj, dict):
+ for k, v in obj.items():
+ if k == key:
+ arr.append(v)
+ elif isinstance(v, (dict, list)):
+ extract(v, arr, key)
+ elif isinstance(obj, list):
+ for item in obj:
+ extract(item, arr, key)
+ return arr
+
+ results = extract(obj, arr, key)
+ return results[0]
+
+
+def get_last_result(context, reference: bool = False):
+ """Look for a previous result in TestAPI database.
+
+ Search TestAPI results from newest to oldest and return the first result
+ record matching the context constraints. Log an overview of the results
+ found (max rate pps, avg delay usec, test conditions, date of measurement).
+
+ The result record test case must match the current test case
+ ('characterization' or 'non-regression') unless `reference` is set to True.
+
+ The result record scenario tag must match the current scenario tag
+ ('throughput' or 'latency').
+
+ Args:
+ context: behave context including project name, test case name, traffic
+ configuration (frame size, flow count, test duration), type of the
+ compute node under test (via loop VM flavor_type) and platform (via
+ user_label).
+
+ reference: when True, look for results with the 'characterization' test
+ case name instead of the current test case name.
+
+ Returns:
+ a JSON dictionary with the results, ie a dict with the keys "input",
+ "output" and "synthesis" when the scenario tag is 'throughput' or
+ 'latency'
+ """
+ if reference:
+ case_name = 'characterization'
+ else:
+ case_name = context.CASE_NAME
+ testapi_params = {"project_name": context.data['PROJECT_NAME'],
+ "case_name": case_name}
+ testapi_client = TestapiClient(testapi_url=context.data['TEST_DB_URL'])
+ last_result = testapi_client.find_last_result(testapi_params,
+ scenario_tag=context.tag,
+ nfvbench_test_input=context.json)
+ if last_result is None:
+ error_msg = "get_last_result: No result found in TestAPI database:"
+ error_msg += f" case_name={case_name} scenario_tag={context.tag} "
+ error_msg += nfvbench_input_to_str(context.json)
+ context.logger.error(error_msg)
+ raise AssertionError(error_msg)
+
+ # Log an overview of the last result (latency and max throughput)
+ measurement_date = last_result["output"]["result"]["date"]
+ total_tx_rate = extract_value(last_result["output"], "total_tx_rate")
+ avg_delay_usec = extract_value(extract_value(last_result["output"], "overall"),
+ "avg_delay_usec")
+ context.logger.info(f"get_last_result: case_name={case_name} scenario_tag={context.tag}"
+ f' measurement_date="{measurement_date}"'
+ f" total_tx_rate(pps)={total_tx_rate:,}"
+ f" avg_latency_usec={round(avg_delay_usec)}")
+
+ return last_result
diff --git a/behave_tests/features/steps/testapi.py b/behave_tests/features/steps/testapi.py
new file mode 100644
index 0000000..f211ee5
--- /dev/null
+++ b/behave_tests/features/steps/testapi.py
@@ -0,0 +1,195 @@
+#!/usr/bin/env python
+# Copyright 2021 Orange
+#
+# 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.
+#
+
+import logging
+import requests
+
+
+class TestapiClient:
+ __test__ = False # Hint for pytest: TestapiClient is not a test class.
+
+ def __init__(self, testapi_url: str):
+ """
+ Args:
+ testapi_url: testapi URL as a string, for instance
+ "http://172.20.73.203:8000/api/v1/results"
+ """
+ self._base_url = testapi_url
+ self._logger = logging.getLogger("behave_tests")
+
+ def find_last_result(self, testapi_params, scenario_tag: str, nfvbench_test_input):
+ """Search testapi database and return latest result matching filters.
+
+ Look for the most recent testapi result matching testapi params, behave
+ scenario tag and nfvbench test input params, and return that result as a
+ dictionary.
+
+ Args:
+ testapi_params: dict holding the parameters of the testapi request. See
+ `build_testapi_url()` for the list of supported keys.
+
+ scenario_tag: Behave scenario tag to filter results. One of
+ "throughput" or "latency".
+
+ nfvbench_test_input: dict holding nfvbench test parameters and used
+ to filter the testapi results. The following keys are currently
+ supported:
+ - mandatory keys: 'duration_sec', 'frame_sizes', 'flow_count', 'rate'
+ - optional keys: 'user_label'
+
+ Returns:
+ None if no result matching the filters can be found, else a dictionary
+ built from testapi JSON test result.
+
+ """
+ self._logger.info(f"find_last_result: filter on scenario tag: {scenario_tag}")
+ nfvbench_input_str = nfvbench_input_to_str(nfvbench_test_input)
+ self._logger.info(f"find_last_result: filter on test conditions: {nfvbench_input_str}")
+
+ page = 1
+ while True: # While there are results pages to read
+ url = self._build_testapi_url(testapi_params, page)
+ self._logger.info("find_last_result: GET " + url)
+ last_results = self._do_testapi_request(url)
+
+ for result in last_results["results"]:
+ for tagged_result in result["details"]["results"][scenario_tag]:
+ if tagged_result["output"]["status"] != "OK":
+ # Drop result if nfvbench status is not OK
+ # (such result should not have been put in database by behave_tests,
+ # but let's be cautious)
+ continue
+ if equal_test_conditions(tagged_result["input"], nfvbench_test_input):
+ return tagged_result
+
+ if page >= last_results["pagination"]["total_pages"]:
+ break
+ page += 1
+
+ return None
+
+ def _build_testapi_url(self, testapi_params, page=1):
+ """Build URL for testapi request.
+
+ Build a URL for a testapi HTTP GET request using the provided parameters and
+ limiting the results to the tests whose criteria equals "PASS".
+
+ Args:
+ testapi_params: dictionary holding the parameters of the testapi
+ request:
+ - mandatory keys: "project_name", "case_name"
+ - optional keys: "installer", "pod_name"
+ - ignored keys: "build_tag", "scenario", "version", "criteria".
+
+ page: (Optional) number of the results page to get.
+
+ """
+ url = self._base_url
+ url += f"?project={testapi_params['project_name']}"
+ url += f"&case={testapi_params['case_name']}"
+
+ if "installer" in testapi_params.keys():
+ url += f"&installer={testapi_params['installer']}"
+ if "pod_name" in testapi_params.keys():
+ url += f"&pod={testapi_params['pod_name']}"
+
+ url += '&criteria=PASS'
+ url += f"&page={page}"
+
+ return url
+
+ def _do_testapi_request(self, testapi_url):
+ """Perform HTTP GET request on testapi.
+
+ Perform an HTTP GET request on testapi, check status code and return JSON
+ results as dictionary.
+
+ Args:
+ testapi_url: a complete URL to request testapi results (with base
+ endpoint and parameters)
+
+ Returns:
+ The JSON document from testapi as a Python dictionary
+
+ Raises:
+ * requests.exceptions.ConnectionError in case of network problem
+ when trying to establish a connection with the TestAPI database
+ (DNS failure, refused connection, ...)
+
+ * requests.exceptions.ConnectTimeout in case of timeout during the
+ request.
+
+ * requests.exception.HTTPError if the HTTP request returned an
+ unsuccessful status code.
+
+ * another exception derived from requests.exceptions.RequestException
+ in case of problem during the HTTP request.
+ """
+ response = requests.get(testapi_url)
+ # raise an HTTPError if the HTTP request returned an unsuccessful status code:
+ response.raise_for_status()
+ return response.json()
+
+
+def equal_test_conditions(testapi_input, nfvbench_input):
+ """Check test conditions in behave scenario results record.
+
+ Check whether a behave scenario results record from testapi matches a given
+ nfvbench input, ie whether the record comes from a test done under the same
+ conditions (frame size, flow count, ...)
+
+ Args:
+ testapi_input: dict holding the test conditions of a behave scenario
+ results record from testapi
+
+ nfvbench_input: dict of nfvbench test parameters (reference)
+
+ The following dict keys are currently supported:
+ - mandatory keys: 'duration_sec', 'frame_sizes', 'flow_count', 'rate'
+ - optional keys: 'user_label'
+
+ Optional keys are taken into account only when they can be found in
+ `nfvbench_input`, else they are ignored.
+
+ Returns:
+ True if test conditions match, else False.
+
+ """
+ # Select required keys (other keys can be not set or unconsistent between scenarios)
+ required_keys = ['duration_sec', 'frame_sizes', 'flow_count', 'rate']
+ if 'user_label' in nfvbench_input:
+ required_keys.append('user_label')
+
+ try:
+ testapi_subset = {k: testapi_input[k] for k in required_keys}
+ nfvbench_subset = {k: nfvbench_input[k] for k in required_keys}
+ return testapi_subset == nfvbench_subset
+ except KeyError:
+ # Fail the comparison if a required key is missing from one of the dicts
+ return False
+
+
+def nfvbench_input_to_str(nfvbench_input: dict) -> str:
+ """Build string showing nfvbench input parameters used for results search
+
+ Args:
+ nfvbench_input: dict of nfvbench test parameters
+ """
+ string = ""
+ for key in ['user_label', 'frame_sizes', 'flow_count', 'rate', 'duration_sec']:
+ if key in nfvbench_input:
+ string += f"{key}={nfvbench_input[key]} "
+ return string
diff --git a/client/client.py b/client/client.py
index 5cbc733..b1be69c 100644
--- a/client/client.py
+++ b/client/client.py
@@ -17,8 +17,6 @@
import requests
import time
-from socketIO_client import SocketIO
-
class TimeOutException(Exception):
pass
@@ -32,42 +30,14 @@ class NfvbenchClient(object):
"""Python client class to control a nfvbench server
The nfvbench server must run in background using the --server option.
- Since HTML pages are not required, the path to pass to --server can be
- any directory on the host.
"""
- def __init__(self, nfvbench_url, use_socketio):
+ def __init__(self, nfvbench_url):
"""Client class to send requests to the nfvbench server
Args:
nfvbench_url: the URL of the nfvbench server (e.g. 'http://127.0.0.1:7555')
"""
self.url = nfvbench_url
- self.use_socketio = use_socketio
-
- def socketio_send(self, send_event, receive_event, config, timeout):
- class Exec(object):
- socketIO = None
- socketio_result = None
-
- def close_socketio(result):
- Exec.socketio_result = result
- Exec.socketIO.disconnect()
-
- def on_response(*args):
- close_socketio(args[0])
-
- def on_error(*args):
- raise NfvbenchException(args[0])
-
- Exec.socketIO = SocketIO(self.url)
- Exec.socketIO.on(receive_event, on_response)
- Exec.socketIO.on('error', on_error)
- Exec.socketIO.emit(send_event, config)
- Exec.socketIO.wait(seconds=timeout)
-
- if timeout and not Exec.socketio_result:
- raise TimeOutException()
- return Exec.socketio_result
def http_get(self, command, config):
url = self.url + '/' + command
@@ -102,8 +72,6 @@ class NfvbenchClient(object):
TimeOutException: the request timed out (and might still being executed
by the server)
"""
- if self.use_socketio:
- return self.socketio_send('echo', 'echo', config, timeout)
return self.http_get('echo', config)
def run_config(self, config, timeout=300, poll_interval=5):
@@ -132,8 +100,6 @@ class NfvbenchClient(object):
the exception contains the description of the failure.
TimeOutException: the request timed out but will still be executed by the server.
"""
- if self.use_socketio:
- return self.socketio_send('start_run', 'run_end', config, timeout)
res = self.http_post('start_run', config)
if res['status'] != 'PENDING':
raise NfvbenchException(res['error_message'])
diff --git a/client/nfvbench_client.py b/client/nfvbench_client.py
index 3973b9c..c528df8 100644
--- a/client/nfvbench_client.py
+++ b/client/nfvbench_client.py
@@ -54,9 +54,6 @@ def main():
action='store',
help='time (seconds) to wait for NFVbench result',
metavar='<config>')
- parser.add_argument('--use-socketio', dest='use_socketio',
- action='store_true',
- help='NFVbench config to echo (json format)')
parser.add_argument('url', help='nfvbench server url (e.g. http://10.0.0.1:5000)')
opts = parser.parse_args()
@@ -64,7 +61,7 @@ def main():
print('at least one of -f or -c or -e required')
sys.exit(-1)
- nfvbench = NfvbenchClient(opts.url, opts.use_socketio)
+ nfvbench = NfvbenchClient(opts.url)
# convert JSON into a dict
try:
timeout = int(opts.timeout)
diff --git a/client/requirements.txt b/client/requirements.txt
index 80fc402..84ced9c 100644
--- a/client/requirements.txt
+++ b/client/requirements.txt
@@ -1,7 +1,5 @@
#
#
backports.ssl-match-hostname==3.5.0.1 # via websocket-client
-requests==2.13.0 # via socketio-client
-six==1.10.0 # via socketio-client, websocket-client
-socketIO-client==0.7.2
-websocket-client==0.40.0 # via socketio-client
+requests==2.13.0
+six==1.10.0 # via websocket-client
diff --git a/docker/Dockerfile b/docker/Dockerfile
index cd59fa0..46be733 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -1,41 +1,53 @@
# docker file for creating a container that has nfvbench installed and ready to use
-FROM ubuntu:16.04
+FROM ubuntu:20.04
-ENV TREX_VER "v2.32"
-ENV VM_IMAGE_VER "0.6"
+ENV TREX_VER "v2.89"
+ENV VM_IMAGE_VER "0.15"
+ENV PYTHONIOENCODING "utf8"
RUN apt-get update && apt-get install -y \
git \
kmod \
pciutils \
- python \
- python-pip \
+ python3.8 \
vim \
wget \
net-tools \
+ iproute2 \
libelf1 \
- && mkdir /tmp/http_root \
+ python3-dev \
+ libpython3.8-dev \
+ python3-distutils \
+ gcc \
+ && ln -s /usr/bin/python3.8 /usr/local/bin/python3 \
&& mkdir -p /opt/trex \
&& mkdir /var/log/nfvbench \
- && wget --no-cache https://trex-tgn.cisco.com/trex/release/$TREX_VER.tar.gz \
+ && wget --no-cache --no-check-certificate https://trex-tgn.cisco.com/trex/release/$TREX_VER.tar.gz \
&& tar xzf $TREX_VER.tar.gz -C /opt/trex \
&& rm -f /$TREX_VER.tar.gz \
&& rm -f /opt/trex/$TREX_VER/trex_client_$TREX_VER.tar.gz \
- && cp -a /opt/trex/$TREX_VER/automation/trex_control_plane/stl/trex_stl_lib /usr/local/lib/python2.7/dist-packages/ \
- && rm -rf /opt/trex/$TREX_VER/automation/trex_control_plane/stl/trex_stl_lib \
- && sed -i -e "s/2048 /512 /" -e "s/2048\"/512\"/" /opt/trex/$TREX_VER/trex-cfg \
- && pip install -U pip pbr \
- && hash -r pip \
- && pip install -U setuptools \
- && cd / \
- && git clone --depth 1 https://gerrit.opnfv.org/gerrit/nfvbench \
- && cd /nfvbench && pip install -e . \
+ && cp -a /opt/trex/$TREX_VER/automation/trex_control_plane/interactive/trex /usr/local/lib/python3.8/dist-packages/ \
+ && rm -rf /opt/trex/$TREX_VER/automation/trex_control_plane/interactive/trex \
+ && wget https://bootstrap.pypa.io/get-pip.py \
+ && python3 get-pip.py \
+ && pip3 install -U pbr \
+ && pip3 install -U setuptools \
+ && cd /opt \
+ # Note: do not clone with --depth 1 as it will cause pbr to fail extracting the nfvbench version
+ # from the git tag
+ && git clone https://gerrit.opnfv.org/gerrit/nfvbench \
+ && cd nfvbench && pip3 install -e . \
&& wget -O nfvbenchvm-$VM_IMAGE_VER.qcow2 http://artifacts.opnfv.org/nfvbench/images/nfvbenchvm_centos-$VM_IMAGE_VER.qcow2 \
- && python ./docker/cleanup_generators.py \
- && rm -rf /nfvbench/.git \
- && apt-get remove -y wget git \
+ # Override Xtesting testcases.yaml file by NFVbench default one
+ && cp xtesting/testcases.yaml /usr/local/lib/python3.8/dist-packages/xtesting/ci/testcases.yaml \
+ && python3 ./docker/cleanup_generators.py \
+ && rm -rf /opt/nfvbench/.git \
+ # Symlink for retrocompatibility 4.x
+ && ln -s /opt/nfvbench /nfvbench \
+ && apt-get remove -y wget git python3-dev libpython3.8-dev gcc \
&& apt-get autoremove -y && apt-get clean && rm -rf /var/lib/apt/lists/*
-ENV TREX_STL_EXT_PATH "/opt/trex/$TREX_VER/external_libs"
+ENV TREX_EXT_LIBS "/opt/trex/$TREX_VER/external_libs"
-ENTRYPOINT ["/nfvbench/docker/nfvbench-entrypoint.sh"]
+
+ENTRYPOINT ["/opt/nfvbench/docker/nfvbench-entrypoint.sh"]
diff --git a/docker/cleanup_generators.py b/docker/cleanup_generators.py
index db68dcb..c555d59 100755
--- a/docker/cleanup_generators.py
+++ b/docker/cleanup_generators.py
@@ -40,8 +40,8 @@ def remove_unused_libs(path, files):
else:
os.remove(f)
except OSError:
- print "Skipped file:"
- print f
+ print("Skipped file:")
+ print(f)
continue
@@ -65,14 +65,14 @@ if __name__ == "__main__":
versions = os.listdir(TREX_OPT)
for version in versions:
trex_path = os.path.join(TREX_OPT, version)
- print 'Cleaning TRex', version
+ print('Cleaning TRex', version)
try:
size_before = get_dir_size(trex_path)
remove_unused_libs(trex_path, TREX_UNUSED)
size_after = get_dir_size(trex_path)
- print '==== Saved Space ===='
- print size_before - size_after
+ print('==== Saved Space ====')
+ print(size_before - size_after)
except OSError:
import traceback
- print traceback.print_exc()
- print 'Cleanup was not finished.'
+ print(traceback.print_exc())
+ print('Cleanup was not finished.')
diff --git a/docker/nfvbench-entrypoint.sh b/docker/nfvbench-entrypoint.sh
index ed98ced..913e5ba 100755
--- a/docker/nfvbench-entrypoint.sh
+++ b/docker/nfvbench-entrypoint.sh
@@ -13,11 +13,19 @@
# License for the specific language governing permissions and limitations
# under the License.
#
-
-if [ -z "$1" ] || [ $1 != 'start_rest_server' ]; then
+if [ -z "$1" ] || ([ $1 != 'start_rest_server' ] && [ $1 != 'run_tests' ] && [ $1 != 'zip_campaign' ]); then
tail -f /dev/null
+elif [ $1 == 'run_tests' ]; then
+ PARAMS=""
+ for var in "${@:2}"
+ do
+ PARAMS+="$var "
+ done
+ eval "run_tests $PARAMS"
+elif [ $1 == 'zip_campaign' ]; then
+ zip_campaign
else
- PARAMS="--server /tmp/http_root"
+ PARAMS="--server"
if [ -n "$HOST" ]; then
PARAMS+=" --host $HOST"
fi
diff --git a/docs/Makefile b/docs/Makefile
index 2d4ff46..d4bb2cb 100644
--- a/docs/Makefile
+++ b/docs/Makefile
@@ -1,225 +1,20 @@
-# Makefile for Sphinx documentation
+# Minimal makefile for Sphinx documentation
#
-# You can set these variables from the command line.
-SPHINXOPTS =
-SPHINXBUILD = sphinx-build
-PAPER =
+# You can set these variables from the command line, and also
+# from the environment for the first two.
+SPHINXOPTS ?=
+SPHINXBUILD ?= sphinx-build
+SOURCEDIR = .
BUILDDIR = _build
-# Internal variables.
-PAPEROPT_a4 = -D latex_paper_size=a4
-PAPEROPT_letter = -D latex_paper_size=letter
-ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) testing/user/userguide
-# the i18n builder cannot share the environment and doctrees with the others
-I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) testing/user/userguide
-
-.PHONY: help
+# Put it first so that "make" without argument is like "make help".
help:
- @echo "Please use \`make <target>' where <target> is one of"
- @echo " html to make standalone HTML files"
- @echo " dirhtml to make HTML files named index.html in directories"
- @echo " singlehtml to make a single large HTML file"
- @echo " pickle to make pickle files"
- @echo " json to make JSON files"
- @echo " htmlhelp to make HTML files and a HTML help project"
- @echo " qthelp to make HTML files and a qthelp project"
- @echo " applehelp to make an Apple Help Book"
- @echo " devhelp to make HTML files and a Devhelp project"
- @echo " epub to make an epub"
- @echo " epub3 to make an epub3"
- @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
- @echo " latexpdf to make LaTeX files and run them through pdflatex"
- @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
- @echo " text to make text files"
- @echo " man to make manual pages"
- @echo " texinfo to make Texinfo files"
- @echo " info to make Texinfo files and run them through makeinfo"
- @echo " gettext to make PO message catalogs"
- @echo " changes to make an overview of all changed/added/deprecated items"
- @echo " xml to make Docutils-native XML files"
- @echo " pseudoxml to make pseudoxml-XML files for display purposes"
- @echo " linkcheck to check all external links for integrity"
- @echo " doctest to run all doctests embedded in the documentation (if enabled)"
- @echo " coverage to run coverage check of the documentation (if enabled)"
- @echo " dummy to check syntax errors of document sources"
-
-.PHONY: clean
-clean:
- rm -rf $(BUILDDIR)/*
-
-.PHONY: html
-html:
- $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
- @echo
- @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
-
-.PHONY: dirhtml
-dirhtml:
- $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
- @echo
- @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
-
-.PHONY: singlehtml
-singlehtml:
- $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
- @echo
- @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
-
-.PHONY: pickle
-pickle:
- $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
- @echo
- @echo "Build finished; now you can process the pickle files."
-
-.PHONY: json
-json:
- $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
- @echo
- @echo "Build finished; now you can process the JSON files."
-
-.PHONY: htmlhelp
-htmlhelp:
- $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
- @echo
- @echo "Build finished; now you can run HTML Help Workshop with the" \
- ".hhp project file in $(BUILDDIR)/htmlhelp."
-
-.PHONY: qthelp
-qthelp:
- $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
- @echo
- @echo "Build finished; now you can run "qcollectiongenerator" with the" \
- ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
- @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/NFVBench.qhcp"
- @echo "To view the help file:"
- @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/NFVBench.qhc"
-
-.PHONY: applehelp
-applehelp:
- $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
- @echo
- @echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
- @echo "N.B. You won't be able to view it unless you put it in" \
- "~/Library/Documentation/Help or install it in your application" \
- "bundle."
-
-.PHONY: devhelp
-devhelp:
- $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
- @echo
- @echo "Build finished."
- @echo "To view the help file:"
- @echo "# mkdir -p $$HOME/.local/share/devhelp/NFVBench"
- @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/NFVBench"
- @echo "# devhelp"
-
-.PHONY: epub
-epub:
- $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
- @echo
- @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
-
-.PHONY: epub3
-epub3:
- $(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3
- @echo
- @echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3."
-
-.PHONY: latex
-latex:
- $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
- @echo
- @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
- @echo "Run \`make' in that directory to run these through (pdf)latex" \
- "(use \`make latexpdf' here to do that automatically)."
-
-.PHONY: latexpdf
-latexpdf:
- $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
- @echo "Running LaTeX files through pdflatex..."
- $(MAKE) -C $(BUILDDIR)/latex all-pdf
- @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
-
-.PHONY: latexpdfja
-latexpdfja:
- $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
- @echo "Running LaTeX files through platex and dvipdfmx..."
- $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
- @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
-
-.PHONY: text
-text:
- $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
- @echo
- @echo "Build finished. The text files are in $(BUILDDIR)/text."
-
-.PHONY: man
-man:
- $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
- @echo
- @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
-
-.PHONY: texinfo
-texinfo:
- $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
- @echo
- @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
- @echo "Run \`make' in that directory to run these through makeinfo" \
- "(use \`make info' here to do that automatically)."
-
-.PHONY: info
-info:
- $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
- @echo "Running Texinfo files through makeinfo..."
- make -C $(BUILDDIR)/texinfo info
- @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
-
-.PHONY: gettext
-gettext:
- $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
- @echo
- @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
-
-.PHONY: changes
-changes:
- $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
- @echo
- @echo "The overview file is in $(BUILDDIR)/changes."
-
-.PHONY: linkcheck
-linkcheck:
- $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
- @echo
- @echo "Link check complete; look for any errors in the above output " \
- "or in $(BUILDDIR)/linkcheck/output.txt."
-
-.PHONY: doctest
-doctest:
- $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
- @echo "Testing of doctests in the sources finished, look at the " \
- "results in $(BUILDDIR)/doctest/output.txt."
-
-.PHONY: coverage
-coverage:
- $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
- @echo "Testing of coverage in the sources finished, look at the " \
- "results in $(BUILDDIR)/coverage/python.txt."
-
-.PHONY: xml
-xml:
- $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
- @echo
- @echo "Build finished. The XML files are in $(BUILDDIR)/xml."
+ @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
-.PHONY: pseudoxml
-pseudoxml:
- $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
- @echo
- @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
+.PHONY: help Makefile
-.PHONY: dummy
-dummy:
- $(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy
- @echo
- @echo "Build finished. Dummy builder generates no files."
+# Catch-all target: route all unknown targets to Sphinx using the new
+# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
+%: Makefile
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
diff --git a/docs/conf.py b/docs/conf.py
index eb12e74..cf53232 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -1 +1,68 @@
-from docs_conf.conf import * # noqa: F401,F403
+# Copyright 2016 - 2023, Cisco Systems, Inc. and the NFVbench project contributors
+# SPDX-License-Identifier: Apache-2.0
+
+# Configuration file for the Sphinx documentation builder.
+#
+# This file only contains a selection of the most common options. For a full
+# list see the documentation:
+# https://www.sphinx-doc.org/en/master/usage/configuration.html
+
+import pbr.version
+
+
+# -- Path setup --------------------------------------------------------------
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#
+# import os
+# import sys
+# sys.path.insert(0, os.path.abspath('.'))
+
+
+# -- Project information -----------------------------------------------------
+
+project = 'NFVbench'
+copyright = '2016 - 2023, Cisco Systems, Inc. and the NFVbench project contributors'
+author = 'Cisco Systems, Inc. and the NFVbench project contributors'
+
+# -- Project version ---------------------------------------------------------
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = pbr.version.VersionInfo(project).version_string()
+# The full version, including alpha/beta/rc tags.
+release = pbr.version.VersionInfo(project).version_string_with_vcs()
+
+# -- General configuration ---------------------------------------------------
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = [
+]
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+# This pattern also affects html_static_path and html_extra_path.
+exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
+
+
+# -- Options for HTML output -------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages. See the documentation for
+# a list of builtin themes.
+#
+html_theme = 'piccolo_theme'
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
diff --git a/docs/conf.yaml b/docs/conf.yaml
deleted file mode 100644
index 4e26a1c..0000000
--- a/docs/conf.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
----
-project_cfg: opnfv
-project: NFVBENCH
diff --git a/docs/developer/building.rst b/docs/developer/building.rst
new file mode 100644
index 0000000..00b8654
--- /dev/null
+++ b/docs/developer/building.rst
@@ -0,0 +1,77 @@
+
+.. This work is licensed under a Creative Commons Attribution 4.0 International
+.. License.
+.. http://creativecommons.org/licenses/by/4.0
+.. (c) Cisco Systems, Inc
+
+Building Containers and VM Images
+=================================
+
+NFVbench is delivered as Docker container which is built using the Dockerfile under the docker directory.
+This container includes the following parts:
+
+- TRex traffic generator
+- NFVbench orchestration
+- NFVbench test VM (qcow2)
+
+.. _nfvbench-artefact-versioning:
+
+Versioning
+----------
+These 3 parts are versioned independently and the Dockerfile will determine the combination of versions that
+are packaged in the container for the version associated to the Dockerfile.
+
+The NFVbench version is controlled by the git tag that conforms to the semver version (e.g. "3.3.0").
+This tag controls the version of the Dockerfile used for building the container.
+
+The TRex version is controlled by the TREX_VER variable in Dockerfile (e.g. ENV TREX_VER "v2.56").
+TRex is installed in container from https://github.com/cisco-system-traffic-generator/trex-core/releases
+
+The Test VM version is controlled by the VM_IMAGE_VER variable in Dockerfile (e.g. ENV VM_IMAGE_VER "0.8").
+The VM is extracted from google storage (http://artifacts.opnfv.org)
+
+Updating the VM image
+---------------------
+
+When the VM image is changed, its version must be increased in order to distinguish from previous image versions.
+The version strings to change are located in 2 files:
+
+- docker/Dockerfile
+- nfvbench/nfvbenchvm/dib/build-image.sh
+
+Building and uploading the VM image
+-----------------------------------
+The VM image is built on gerrit verify when the image is not present in google storage.
+It is not uploaded yet on google storage.
+
+The build + upload of the new VM image is done after the review is merged.
+
+For details on how this is done, refer to ./jjb/nfvbench/nfvbench.yaml in the opnfv releng repository.
+
+Building a new NFVbench container image
+---------------------------------------
+A new container image can be built and published to Dockerhub by CI/CD by applying a new semver tag to the
+nfvbench repository.
+
+
+Workflow summary
+----------------
+
+NFVbench code has changed:
+
+- commit with gerrit
+- apply a new semver tag to trigger the container image build/publication
+
+VM code has changed:
+
+- update VM version in the 2 locations
+- commit VM changes with gerrit to trigger VM build and publication to google storage
+- IMPORTANT! wait for the VM image to be pushed to google storage before going to the next step
+ (otherwise the container build will fail as it will not find the VM image)
+- apply a new semver tag to trigger the container image build/publication
+
+To increase the TRex version:
+
+- change the Trex version in Dockerfile
+- commit with gerrit
+- apply a new semver tag to trigger the container image build/publication
diff --git a/docs/development/design/design.rst b/docs/developer/design/design.rst
index 75b90f8..43011ad 100644
--- a/docs/development/design/design.rst
+++ b/docs/developer/design/design.rst
@@ -1,19 +1,15 @@
-
-
-.. contents::
- :depth: 3
- :local:
-
.. This work is licensed under a Creative Commons Attribution 4.0 International
.. License.
.. http://creativecommons.org/licenses/by/4.0
.. (c) Cisco Systems, Inc
-Introduction
-------------
+*******************
+NFVbench components
+*******************
NFVbench can be decomposed in the following components:
+
- Configuration
- Orchestration:
@@ -22,13 +18,14 @@ NFVbench can be decomposed in the following components:
- Results analysis
Configuration
--------------
+=============
This component is in charge of getting the configuration options from the user and consolidate them with
the default configuration into a running configuration.
default configuration + user configuration options = running configuration
User configuration can come from:
+
- CLI configuration shortcut arguments (e.g --frame-size)
- CLI configuration file (--config [file])
- CLI configuration string (--config [string])
@@ -36,6 +33,7 @@ User configuration can come from:
- custom platform pluging
The precedence order for configuration is (from highest precedence to lowest precedence)
+
- CLI configuration or REST configuration
- custom platform plugin
- default configuration
@@ -46,7 +44,7 @@ with default platform options which can be either hardcoded or calculated at run
A custom platform plugin class is a child of the parent class nfvbench.config_plugin.ConfigPlugin.
Orchestration
--------------
+=============
Once the configuration is settled, benchmark orchestration is managed by the ChainRunner class (nfvbench.chain_runner.ChainRunner).
The chain runner will take care of orchestrating the staging, traffic generation and results analysis.
@@ -63,6 +61,7 @@ Traffic Generation
------------------
The traffic generation component is in charge of contrilling the TRex traffic generator using its python API.
It includes tasks such as:
+
- traffic check end to end to make sure the packet path is clear in both directions before starting a benchmark
- programming the TRex traffic flows based on requested parameters
- fixed rate control
diff --git a/docs/development/design/index.rst b/docs/developer/design/index.rst
index 0500ca2..4c52f98 100644
--- a/docs/development/design/index.rst
+++ b/docs/developer/design/index.rst
@@ -3,13 +3,14 @@
.. http://creativecommons.org/licenses/by/4.0
.. (c) Cisco Systems, Inc
-===============================
-OPNFV NFVbench Euphrates Design
-===============================
+=====================
+NFVbench Design Notes
+=====================
.. toctree::
:maxdepth: 2
+ overview
design
versioning
traffic_desc
diff --git a/docs/development/design/ndrpdr.rst b/docs/developer/design/ndrpdr.rst
index dd769c0..dd769c0 100644
--- a/docs/development/design/ndrpdr.rst
+++ b/docs/developer/design/ndrpdr.rst
diff --git a/docs/development/overview/overview.rst b/docs/developer/design/overview.rst
index 26e19d1..9876d62 100644
--- a/docs/development/overview/overview.rst
+++ b/docs/developer/design/overview.rst
@@ -3,12 +3,9 @@
.. http://creativecommons.org/licenses/by/4.0
.. (c) Cisco Systems, Inc
-.. contents::
- :depth: 3
- :local:
+Overview
+--------
-Introduction
-----------------
NFVbench is a python application that is designed to run in a compact and portable format inside a container and on production pods.
As such it only uses open sourec software with minimal hardware requirements (just a NIC card that is DPDK compatible).
Traffic generation is handled by TRex on 2 physical ports (2x10G or higher) forming traffic loops up to VNF level and following
@@ -18,6 +15,7 @@ to VNF(s) and back.
Configuration of benchmarks is through a yaml configuraton file and command line arguments.
Results are available in different formats:
+
- text output with tabular results
- json result in file or in REST reply (most detailed)
diff --git a/docs/development/design/traffic_desc.rst b/docs/developer/design/traffic_desc.rst
index cd80a1c..d6bbb6b 100644
--- a/docs/development/design/traffic_desc.rst
+++ b/docs/developer/design/traffic_desc.rst
@@ -37,6 +37,7 @@ The destination MAC address is based on the configuration and can be:
or when using a loopback cable
- the dest MAC as specified by the configuration file (EXT chain no ARP)
- the dest MAC as discovered by ARP (EXT chain)
+- the router MAC as discovered from Neutron API (PVPL3 chain)
- the VM MAC as dicovered from Neutron API (PVP, PVVP chains)
NFVbench does not currently range on the MAC addresses.
@@ -60,6 +61,7 @@ size of the L2 header - including the VLAN tag if applicable.
IMIX Support
------------
In the case of IMIX, each direction is made of 4 streams:
+
- 1 latency stream
- 1 stream for each IMIX frame size
diff --git a/docs/development/design/versioning.rst b/docs/developer/design/versioning.rst
index 40e70f2..40e70f2 100644
--- a/docs/development/design/versioning.rst
+++ b/docs/developer/design/versioning.rst
diff --git a/docs/development/index.rst b/docs/developer/index.rst
index 1db91e7..d9bf844 100644
--- a/docs/development/index.rst
+++ b/docs/developer/index.rst
@@ -3,8 +3,14 @@
.. http://creativecommons.org/licenses/by/4.0
.. (c) Cisco Systems, Inc
+************************
+NFVbench Developer Guide
+************************
+
.. toctree::
:maxdepth: 3
- overview/index
+ building
+ nfvbenchvm
+ testing-nfvbench
design/index
diff --git a/docs/developer/nfvbenchvm.rst b/docs/developer/nfvbenchvm.rst
new file mode 100644
index 0000000..5d6166f
--- /dev/null
+++ b/docs/developer/nfvbenchvm.rst
@@ -0,0 +1,365 @@
+.. Copyright 2016 - 2023, Cisco Systems, Inc. and the NFVbench project contributors
+.. SPDX-License-Identifier: CC-BY-4.0
+
+NFVBENCH VM IMAGES FOR OPENSTACK
+++++++++++++++++++++++++++++++++
+
+This repo will build two centos 7 images with:
+ - testpmd and VPP installed for loop VM use case
+ - NFVbench and TRex installed for generator VM use case
+
+These VMs will come with a pre-canned user/password: nfvbench/nfvbench
+
+BUILD INSTRUCTIONS
+==================
+
+Pre-requisites
+--------------
+- must run on Linux
+- the following packages must be installed prior to using this script:
+ - python3 (+ python3-venv on Ubuntu)
+ - python3-pip
+ - git
+ - qemu-img (CentOs) or qemu-utils (Ubuntu)
+ - kpartx
+
+.. note:: The image build process is based on `diskimage-builder
+ <https://docs.openstack.org/diskimage-builder/latest/index.html>`_
+ that will be installed in a Python virtual environment by nfvbenchvm
+ build script build-image.sh.
+
+.. note:: build-image.sh uses the `gsutil <https://pypi.org/project/gsutil/>`_
+ tool to interact with Google cloud storage (to check if the images
+ exist and to upload the images). This is normally only needed in the
+ context of OPNFV build infrastructure, and build-image.sh can be used
+ without that tool in development environments.
+
+Build the image
+---------------
+- cd dib
+- update the version number for the image (if needed) by modifying __version__ in build-image.sh
+- setup your http_proxy if needed
+- run ``build-image.sh`` to build the images. A few examples:
+
+ - to build all the images and publish the code to Google cloud storage:
+ - ``bash build-image.sh``
+ - to build and publish only the loop VM:
+ - ``bash build-image.sh -l``
+ - to build and publish only the generator VM:
+ - ``bash build-image.sh -g``
+ - to build the generator VM without publishing it:
+ - ``bash build-image.sh -gv``
+
+.. note:: Run ``bash build-image.sh`` -h to see all options available.
+
+.. note:: By default, the generator VM image embeds the latest nfvbench code
+ found at the time of the build on the master branch of NFVbench Git
+ repository on OPNFV Gerrit instance (latest commit).
+
+ During development phases, it is also possible to build the image with
+ all the committed changes found in the current working copy of
+ nfvbench (local code). To do that, run the image build with the ``-s``
+ option, for instance: ``bash build-image.sh -gvs``.
+
+ In that case, the version of the generator VM image will be extended
+ with nfvbench development version number to be able to distinguish the
+ development images from the latest published image.
+
+LOOP VM IMAGE INSTANCE AND CONFIG
+=================================
+
+Interface Requirements
+----------------------
+The instance must be launched using OpenStack with 2 network interfaces.
+For best performance, it should use a flavor with:
+
+- 2 vCPU
+- 4 GB RAM
+- cpu pinning set to exclusive
+
+Auto-configuration
+------------------
+nfvbench VM will automatically find the two virtual interfaces to use, and use the forwarder specifed in the config file.
+
+In the case testpmd is used, testpmd will be launched with mac forwarding mode where the destination macs rewritten according to the config file.
+
+In the case VPP is used, VPP will set up a L3 router, and forwarding traffic from one port to the other.
+
+nfvbenchvm Config
+-----------------
+nfvbenchvm config file is located at ``/etc/nfvbenchvm.conf``.
+
+.. code-block:: bash
+
+ FORWARDER=testpmd
+ INTF_MAC1=FA:16:3E:A2:30:41
+ INTF_MAC2=FA:16:3E:10:DA:10
+ TG_MAC1=00:10:94:00:0A:00
+ TG_MAC2=00:11:94:00:0A:00
+ VNF_GATEWAY1_CIDR=1.1.0.2/8
+ VNF_GATEWAY2_CIDR=2.2.0.2/8
+ TG_NET1=10.0.0.0/8
+ TG_NET2=20.0.0.0/8
+ TG_GATEWAY1_IP=1.1.0.100
+ TG_GATEWAY2_IP=2.2.0.100
+
+
+Launching nfvbenchvm VM
+-----------------------
+
+Normally this image will be used together with NFVBench, and the required configurations will be automatically generated and pushed to VM by NFVBench. If launched manually, no forwarder will be run. Users will have the full control to run either testpmd or VPP via VNC console.
+
+To check if testpmd is running, you can run this command in VNC console:
+
+.. code-block:: bash
+
+ sudo screen -r testpmd
+
+To check if VPP is running, you can run this command in VNC console:
+
+.. code-block:: bash
+
+ service vpp status
+
+
+Hardcoded Username and Password
+--------------------------------
+- Username: nfvbench
+- Password: nfvbench
+
+
+GENERATOR IMAGE INSTANCE AND CONFIG
+===================================
+
+Pre-requisites
+--------------
+To use openstack APIs, NFVbench generator VM will use `clouds.yaml` file as openstack configuration.
+The OpenStack clouds configuration from clouds.yaml file to use.
+clouds.yaml file must be in one of the following paths:
+- ~/.config/openstack
+- /etc/openstack
+
+Example of `clouds.yaml`:
+
+.. code-block:: yaml
+
+ clouds:
+ devstack:
+ auth:
+ auth_url: http://192.168.122.10:35357/
+ project_name: demo
+ username: demo
+ password: 0penstack
+ region_name: RegionOne
+
+.. note:: Add `CLOUD_DETAIL` property with the accurate value for your openstack configuration (`devstack` in the above example) in ``/etc/nfvbenchvm.conf``
+
+Interface Requirements
+----------------------
+The instance must be launched using OpenStack with 2 network interfaces for dataplane traffic (using SR-IOV function) and 1 management interface to control nfvbench.
+For best performance, it should use network interfaces for dataplane traffic with a `vnic_type` to `direct-physical` (or `direct` if physical function is not possible)
+and a flavor with:
+
+- 6 vCPU
+- 8 GB RAM
+- cpu pinning set to exclusive
+
+.. note:: For the management interface: any interface type can be used. This interface required a routable IP (through floating IP or direct) and an access to the openstack APIs.
+.. note:: CPU pinning: 1 core dedicated for guest OS and NFVbench process, other provided cores are used by TRex
+
+Template of a genarator profile using CPU pinning:
+
+.. code-block:: bash
+
+ generator_profile:
+ - name: {{name}}
+ tool: {{tool}}
+ ip: {{ip}}
+ zmq_pub_port: {{zmq_pub_port}}
+ zmq_rpc_port: {{zmq_rpc_port}}
+ software_mode: {{software_mode}}
+ cores: {{CORES}}
+ platform:
+ master_thread_id: '0'
+ latency_thread_id: '1'
+ dual_if:
+ - socket: 0
+ threads: [{{CORE_THREADS}}]
+
+ interfaces:
+ - port: 0
+ pci: "{{PCI_ADDRESS_1}}"
+ switch:
+ - port: 1
+ pci: "{{PCI_ADDRESS_2}}"
+ switch:
+ intf_speed:
+
+.. note:: `CORE_THREADS` value is determined automatically based on the cores available on the VM starting from 2 to last worker core available.
+
+Auto-configuration
+------------------
+nfvbench VM will automatically find the two virtual interfaces to use for dataplane based on MAC addresses or openstack port name (see config part below).
+This applies to the management interface as well.
+
+nfvbenchvm Config
+-----------------
+nfvbenchvm config file is located at ``/etc/nfvbenchvm.conf``.
+
+Example of configuration:
+
+.. code-block:: bash
+
+ ACTION=e2e
+ LOOPBACK_INTF_MAC1=FA:16:3E:A2:30:41
+ LOOPBACK_INTF_MAC2=FA:16:3E:10:DA:10
+ E2E_INTF_MAC1=FA:16:3E:B0:E2:43
+ E2E_INTF_MAC2=FA:16:3E:D3:6A:FC
+
+.. note:: `ACTION` parameter is not mandatory but will permit to start NFVbench with the accurate ports (loopback or e2e).
+.. note:: Set of MAC parameters cannot be used in parallel as only one NFVbench/TRex process is running.
+.. note:: Switching from `loopback` to `e2e` action can be done manually using `/nfvbench/start-nfvbench.sh <action>` with the accurate keyword for `action` parameter. This script will restart NFVbench with the good set of MAC.
+
+nfvbenchvm config file with management interface:
+
+.. code-block:: bash
+
+ ACTION=e2e
+ LOOPBACK_INTF_MAC1=FA:16:3E:A2:30:41
+ LOOPBACK_INTF_MAC2=FA:16:3E:10:DA:10
+ INTF_MAC_MGMT=FA:16:3E:06:11:8A
+ INTF_MGMT_CIDR=172.20.56.228/2
+ INTF_MGMT_IP_GW=172.20.56.225
+ INTF_MGMT_MTU=1500
+
+.. note:: `INTF_MGMT_IP_GW` and `INTF_MGMT_CIDR` parameters are used by the VM to automatically configure virtual interface and route to allow an external access through SSH.
+
+.. note:: ``INTF_MGMT_MTU`` allows to specify the MTU of the management
+ interface in bytes.
+
+ If ``INTF_MGMT_MTU`` is not specified, the MTU will be configured to
+ the conservative value of 1500: this will reduce the risk to get an
+ unmanageable VM.
+
+ ``INTF_MGMT_MTU`` can also be set to the special value ``auto``: in
+ that case, the MTU will not be configured and it will keep the value
+ set by the hypervisor (default nfvbench behavior up to version
+ 5.0.3).
+
+Using pre-created direct-physical ports on openstack, mac addresses value are only known when VM is deployed. In this case, you can pass the port name in config:
+
+.. code-block:: bash
+
+ LOOPBACK_PORT_NAME1=nfvbench-pf1
+ LOOPBACK_PORT_NAME2=nfvbench-pf2
+ E2E_PORT_NAME1=nfvbench-pf1
+ E2E_PORT_NAME1=nfvbench-pf3
+ INTF_MAC_MGMT=FA:16:3E:06:11:8A
+ INTF_MGMT_CIDR=172.20.56.228/2
+ INTF_MGMT_IP_GW=172.20.56.225
+ DNS_SERVERS=8.8.8.8,dns.server.com
+
+.. note:: A management interface is required to automatically find the virtual interface to use according to the MAC address provided (see `INTF_MAC_MGMT` parameter).
+.. note:: NFVbench VM will call openstack API through the management interface to retrieve mac address for these ports
+.. note:: If openstack API required a host name resolution, add the parameter DNS_SERVERS to add IP or DNS server names (multiple servers can be added separated by a `,`)
+
+Control nfvbenchvm VM and run test
+----------------------------------
+
+By default, NFVbench will be started in server mode (`--server`) and will act as an API.
+
+NFVbench VM will be accessible through SSH or HTTP using the management interface IP.
+
+NFVbench API endpoint is : `http://<management_ip>:<port>`
+
+.. note:: by default port value is 7555
+
+Get NFVbench status
+^^^^^^^^^^^^^^^^^^^
+
+To check NFVbench is up and running use REST request:
+
+.. code-block:: bash
+
+ curl -XGET '<management_ip>:<port>/status'
+
+Example of answer:
+
+.. code-block:: bash
+
+ {
+ "error_message": "nfvbench run still pending",
+ "status": "PENDING"
+ }
+
+Start NFVbench test
+^^^^^^^^^^^^^^^^^^^
+
+To start a test run using NFVbench API use this type of REST request:
+
+.. code-block:: bash
+
+ curl -XPOST '<management_ip>:<port>/start_run' -H "Content-Type: application/json" -d @nfvbenchconfig.json
+
+Example of return when the submission is successful:
+
+.. code-block:: bash
+
+ {
+ "error_message": "NFVbench run still pending",
+ "request_id": "42cccb7effdc43caa47f722f0ca8ec96",
+ "status": "PENDING"
+ }
+
+
+Start NFVbench test using Xtesting
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+To start a test run using Xtesting python library and NFVbench API use this type of command on the VM:
+
+.. code-block:: bash
+
+ run_tests -t nfvbench-demo
+
+.. note:: `-t` option determine which test case to be runned by Xtesting
+ (see `xtesting/testcases.yaml` file content to see available list of test cases)
+
+
+Connect to the VM using SSH keypair
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+If a key is provided at VM creation you can use it to log on the VM using `cloud-user` username:
+
+.. code-block:: bash
+
+ ssh -i key.pem cloud-user@<management_ip>
+
+
+Connect to VM using SSH username/password
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+VM is accessible over SSH using the hardcoded username and password (see below):
+
+.. code-block:: bash
+
+ ssh nfvbench@<management_ip>
+
+
+Launching nfvbenchvm VM
+-----------------------
+
+Normally this image will be deployed using Ansible role, and the required configurations will be automatically generated and pushed to VM by Ansible.
+If launched manually, users will have the full control to configure and run NFVbench via VNC console.
+
+To check if NFVbench is running, you can run this command in VNC console:
+
+.. code-block:: bash
+
+ sudo screen -r nfvbench
+
+
+Hardcoded Username and Password
+--------------------------------
+- Username: nfvbench
+- Password: nfvbench
+
diff --git a/docs/developer/testing-nfvbench.rst b/docs/developer/testing-nfvbench.rst
new file mode 100644
index 0000000..fd6c6f7
--- /dev/null
+++ b/docs/developer/testing-nfvbench.rst
@@ -0,0 +1,91 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. SPDX-License-Identifier: CC-BY-4.0
+
+================
+Testing NFVbench
+================
+
+tox
+===
+
+NFVbench project uses `tox`_ to orchestrate the testing of the code base:
+
+* run unit tests
+* check code style
+* run linter
+* check links in the docs
+
+In addition to testing, tox is also used to generate the documentation in HTML
+format.
+
+What tox should do is specified in a ``tox.ini`` file located at the project root.
+
+tox is used in continuous integration: all the actions performed by tox must
+succeed before a patchset can be merged. As a developer, it is also useful to
+run tox locally to detect and fix the issues before pushing the code for review.
+
+.. _tox: https://tox.wiki/en/latest/
+
+
+
+Using tox on a developer's machine
+==================================
+
+Requirement: |python-version|
+-----------------------------
+
+.. |python-version| replace:: Python 3.8
+
+The current version of Python used by NFVbench is |python-version|. In
+particular, this means that |python-version| is used:
+
+* by tox in CI
+* in nfvbench Docker image
+* in nfvbench traffic generator VM image
+
+|python-version| is needed to be able to run tox locally. If it is not
+available through the package manager, it can be installed using `pyenv`_. In
+that case, it will also be necessary to install the `pyenv-virtualenv`_ plugin.
+Refer to the documentation of those projects for installation instructions.
+
+.. _pyenv: https://github.com/pyenv/pyenv
+.. _pyenv-virtualenv: https://github.com/pyenv/pyenv-virtualenv
+
+
+tox installation
+----------------
+
+Install tox with::
+
+ $ pip install tox==3.21.4
+
+.. note:: tox 3.21.4 is the version that comes with Ubuntu 22.04 and that can be
+ found on gerrit.opnfv.org build servers.
+
+
+Running tox
+-----------
+
+In nfvbench root directory, simply run tox with::
+
+ $ tox
+
+If all goes well, tox shows a green summary such as::
+
+ py38: commands succeeded
+ pep8: commands succeeded
+ lint: commands succeeded
+ docs: commands succeeded
+ docs-linkcheck: commands succeeded
+ congratulations :)
+
+It is possible to run only a subset of tox *environments* with the ``-e``
+command line option. For instance, to check the code style only, do::
+
+ $ tox -e pep8
+
+Each tox *environment* uses a dedicated python virtual environment. The
+``-r`` command line option can be used to force the recreation of the virtual
+environment(s). For instance::
+
+ $ tox -r
diff --git a/docs/development/overview/index.rst b/docs/development/overview/index.rst
deleted file mode 100644
index ce99621..0000000
--- a/docs/development/overview/index.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. This work is licensed under a Creative Commons Attribution 4.0 International
-.. License.
-.. http://creativecommons.org/licenses/by/4.0
-.. (c) Cisco Systems, Inc
-
-=============================================
-OPNFV NFVbench Euphrates Overview
-=============================================
-
-.. toctree::
- :maxdepth: 1
-
- overview
diff --git a/docs/index.rst b/docs/index.rst
index 720b670..1339a7f 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -3,9 +3,13 @@
.. http://creativecommons.org/licenses/by/4.0
.. (c) Cisco Systems, Inc
+
+NFVbench |release| Documentation
+================================
+
.. toctree::
- :maxdepth: 1
+ :maxdepth: 2
- development/index
- release/release-notes/index
- testing/index
+ release-notes/index
+ user/index
+ developer/index
diff --git a/docs/make.bat b/docs/make.bat
new file mode 100644
index 0000000..153be5e
--- /dev/null
+++ b/docs/make.bat
@@ -0,0 +1,35 @@
+@ECHO OFF
+
+pushd %~dp0
+
+REM Command file for Sphinx documentation
+
+if "%SPHINXBUILD%" == "" (
+ set SPHINXBUILD=sphinx-build
+)
+set SOURCEDIR=.
+set BUILDDIR=_build
+
+if "%1" == "" goto help
+
+%SPHINXBUILD% >NUL 2>NUL
+if errorlevel 9009 (
+ echo.
+ echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
+ echo.installed, then set the SPHINXBUILD environment variable to point
+ echo.to the full path of the 'sphinx-build' executable. Alternatively you
+ echo.may add the Sphinx directory to PATH.
+ echo.
+ echo.If you don't have Sphinx installed, grab it from
+ echo.https://www.sphinx-doc.org/
+ exit /b 1
+)
+
+%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
+goto end
+
+:help
+%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
+
+:end
+popd
diff --git a/docs/release/release-notes/index.rst b/docs/release-notes/index.rst
index 12acbab..827c674 100644
--- a/docs/release/release-notes/index.rst
+++ b/docs/release-notes/index.rst
@@ -3,11 +3,12 @@
.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
-**********************
-NFVbench Release Notes
-**********************
+*************
+Release Notes
+*************
.. toctree::
:maxdepth: 1
- release-notes
+ nfvbench-release-notes
+ nfvbenchvm-release-notes
diff --git a/docs/release/release-notes/release-notes.rst b/docs/release-notes/nfvbench-release-notes.rst
index 6feeffe..c1c52d4 100644
--- a/docs/release/release-notes/release-notes.rst
+++ b/docs/release-notes/nfvbench-release-notes.rst
@@ -2,8 +2,51 @@
.. http://creativecommons.org/licenses/by/4.0
.. (c) Cisco Systems, Inc
-RELEASE NOTES
-+++++++++++++
+NFVbench Release Notes
+++++++++++++++++++++++
+
+Release 3.6.2
+=============
+
+- NFVBENCH-152 Add service_mode method for debugging purpose
+- NFVBENCH-150 Add support for VXLAN latency
+- NFVBENCH-146 Add cache_size option
+- NFVBENCH-151 Allocate hugepages on two NUMAs in nfvbenchvm
+- NFVBENCH-149 Negative latency exception during NDR/PDR search
+- NFVBENCH-148 Increase the waiting time based on # of instances
+
+Release 3.5.1
+=============
+
+- NFVBENCH-147 Incorrect URL used for admin check in credentials
+- Release the validation check for VxLAN networks
+- NFVBENCH-145 Config file not found. No explicit error
+- NFVBENCH-144 Trex cannot take account NFVBench config (platform thread id 0)
+
+- NFVBENCH-140 Retrieve High Dynamic Range latency histograms with TRex v2.59
+- NFVBENCH-143 Trex cannot start due to invalid config (platform None)
+- NFVBENCH-141 Fix Openstack user admin role check
+- NFVBENCH-139 Fix master_thread_id and latency_thread_id property checking
+- NFVBENCH-95 Add HdrHistogram encodes returned by TRex to JSON results
+- NFVBENCH-138 Use yaml.safe_load() instead of unsafe yaml load
+- NFVBENCH-137 NFVbench generates wrong L4 checksums for VxLAN traffic
+
+Release 3.4.0
+=============
+
+- Add L3 traffic management with Neutron routers
+
+
+Release 3.3.0
+=============
+
+Major release highlights:
+
+- VxLAN support
+- test VM can now have idle interfaces
+- test VM can be launched with multiqueue enabled
+- upgrade to TRex v2.56
+
Release 2.0
===========
diff --git a/docs/release-notes/nfvbenchvm-release-notes.rst b/docs/release-notes/nfvbenchvm-release-notes.rst
new file mode 100644
index 0000000..234a086
--- /dev/null
+++ b/docs/release-notes/nfvbenchvm-release-notes.rst
@@ -0,0 +1,94 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+
+NFVbench Loop VM Image Release Notes
+++++++++++++++++++++++++++++++++++++
+
+As explained in :ref:`nfvbench-artefact-versioning`, NFVbench loop VM image has
+its own version numbering scheme. Starting from version 0.11, this page
+summarizes the news of each release.
+
+
+Release 0.16 (2022-11-15)
+=========================
+
+Fixes:
+
+- Increase wait for VPP service from 10 to 30 seconds (10s is not enough on some
+ setups) and poll every second instead of sleeping 10s.
+
+- Set the MTU of the management interface to 1500 by default (to reduce the risk
+ to get an unmanageable VM). A different value can be set using the
+ ``INTF_MGMT_MTU`` variable in ``/etc/nfvbenchvm.conf``.
+
+Changes for developers:
+
+- Add 2 debug features to ``build-image.sh``:
+
+ - The new option ``-t`` (enable debug traces) allows to show in the build log
+ the commands run in the shell scripts, including the commands defined in the
+ disk image builder elements.
+
+ - The new option ``-d`` (debug) instructs ``disk-image-create`` to drop the
+ developer in a shell inside the chroot in case an error occurs. This makes
+ troubleshooting of the image possible (inspect files, run commands, ...)
+
+- Abort build on error: make sure a VM image build fails if any step fails.
+ Else we can end up with a bad image not containing all that we want, and we
+ discover this later at run time.
+
+- Fix build with diskimage_builder (dib) 3.16.0.
+
+- Switch VPP package repository to packagecloud.io instead of nexus.fd.io. This
+ fixes intermittent access issues with nexus.fd.io and this will make it
+ possible to get vpp releases higher than 19.08.
+
+- Separate loop VM and generator VM version numbers (a first step towards using
+ nfvbench version number for the generator VM).
+
+
+Release 0.15 (2021-06-04)
+=========================
+
+- NFVBENCH-211 Fix VPP driver for loop VM (switch UIO driver for VPP forwarder:
+ use ``uio_pci_generic`` instead of ``igb_uio``).
+
+
+Release 0.14 (2021-05-21)
+=========================
+
+- NFVBENCH-209 Fix NFVbench loopvm build failed on testpmd step (includes switch
+ UIO driver for testmpd forwarder: use ``uio_pci_generic`` instead of
+ ``igb_uio``).
+
+
+Release 0.13 (2021-04-28)
+=========================
+
+- NFVBENCH-196: New NFVbench image for generator part (nfvbench and TRex codes inside VM)
+- Change Linux kernel boot-time configuration (kernel CLI parameters):
+
+ - Extend CPU isolation (``isolcpus=1-7`` instead of ``isolcpus=1``)
+ - Increase the number of 1GB huge pages (``hugepages=4`` instead of ``hugepages=2``)
+ - Enable IOMMU (``intel_iommu=on iommu=pt``)
+
+- Load the ``vfio-pci`` kernel module with the ``enable_unsafe_noiommu_mode=1`` option.
+
+
+Release 0.12 (2020-01-23)
+=========================
+
+- NFVBENCH-157 Add possibility to not use the ARP static configuration for VPP loop VM
+
+
+Release 0.11 (2019-11-26)
+=========================
+
+- NFVBENCH-156 Add management interface and ssh config in NFVBench image
+
+
+Earlier releases
+================
+
+See NFVbench commit history.
diff --git a/docs/requirements.txt b/docs/requirements.txt
index 9fde2df..4c9e064 100644
--- a/docs/requirements.txt
+++ b/docs/requirements.txt
@@ -1,2 +1,7 @@
-lfdocs-conf
-sphinx_opnfv_theme
+# Python dependencies needed to build and check nfvbench documentation
+
+sphinx # BSD
+piccolo_theme
+
+# Extract nfvbench version from git
+pbr
diff --git a/docs/testing/developer/devguide/index.rst b/docs/testing/developer/devguide/index.rst
deleted file mode 100644
index e219889..0000000
--- a/docs/testing/developer/devguide/index.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-.. _nfvbench-releasenotes:
-
-.. This work is licensed under a Creative Commons Attribution 4.0 International License.
-.. http://creativecommons.org/licenses/by/4.0
-
-***************
-Developer Guide
-***************
diff --git a/docs/testing/index.rst b/docs/testing/index.rst
deleted file mode 100644
index b795e6b..0000000
--- a/docs/testing/index.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-.. This work is licensed under a Creative Commons Attribution 4.0 International
-.. License.
-.. http://creativecommons.org/licenses/by/4.0
-.. (c) Cisco Systems, Inc
-
-.. toctree::
- :maxdepth: 2
-
- developer/devguide/index
- user/configguide/index
- user/userguide/index
diff --git a/docs/testing/user/configguide/configguide.rst b/docs/testing/user/configguide/configguide.rst
deleted file mode 100644
index f790d21..0000000
--- a/docs/testing/user/configguide/configguide.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-.. This work is licensed under a Creative Commons Attribution 4.0 International
-.. License.
-.. http://creativecommons.org/licenses/by/4.0
-.. (c) Cisco Systems, Inc
-
-*******************
-Configuration Guide
-*******************
diff --git a/docs/testing/user/configguide/index.rst b/docs/testing/user/configguide/index.rst
deleted file mode 100644
index ce3b778..0000000
--- a/docs/testing/user/configguide/index.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-.. This work is licensed under a Creative Commons Attribution 4.0 International
-.. License.
-.. http://creativecommons.org/licenses/by/4.0
-.. (c) Cisco Systems, Inc
-
-.. toctree::
- :maxdepth: 1
-
- configguide
diff --git a/docs/testing/user/userguide/_static/custom.css b/docs/testing/user/userguide/_static/custom.css
deleted file mode 100644
index 6cbfde3..0000000
--- a/docs/testing/user/userguide/_static/custom.css
+++ /dev/null
@@ -1,4 +0,0 @@
-.wy-nav-content {
- max-width: 1200px !important;
-}
-
diff --git a/docs/testing/user/userguide/_templates/layout.html b/docs/testing/user/userguide/_templates/layout.html
deleted file mode 100644
index f3387d5..0000000
--- a/docs/testing/user/userguide/_templates/layout.html
+++ /dev/null
@@ -1,5 +0,0 @@
-{% extends "!layout.html" %}
-{% block extrahead %}
- <link href="{{ pathto("_static/custom.css", True) }}" rel="stylesheet" type="text/css">
-{% endblock %}
-
diff --git a/docs/testing/user/userguide/advanced.rst b/docs/testing/user/userguide/advanced.rst
deleted file mode 100644
index 1d2ac36..0000000
--- a/docs/testing/user/userguide/advanced.rst
+++ /dev/null
@@ -1,336 +0,0 @@
-.. This work is licensed under a Creative Commons Attribution 4.0 International License.
-.. SPDX-License-Identifier: CC-BY-4.0
-.. (c) Cisco Systems, Inc
-
-==============
-Advanced Usage
-==============
-
-This section covers a few examples on how to run NFVbench with multiple different settings.
-Below are shown the most common and useful use-cases and explained some fields from a default config file.
-
-How to change any NFVbench run configuration (CLI)
---------------------------------------------------
-NFVbench always starts with a default configuration which can further be refined (overridden) by the user from the CLI or from REST requests.
-
-At first have a look at the default config:
-
-.. code-block:: bash
-
- nfvbench --show-default-config
-
-It is sometimes useful derive your own configuration from a copy of the default config:
-
-.. code-block:: bash
-
- nfvbench --show-default-config > nfvbench.cfg
-
-At this point you can edit the copy by:
-
-- removing any parameter that is not to be changed (since NFVbench will always load the default configuration, default values are not needed)
-- edit the parameters that are to be changed changed
-
-A run with the new confguration can then simply be requested using the -c option and by using the actual path of the configuration file
-as seen from inside the container (in this example, we assume the current directory is mapped to /tmp/nfvbench in the container):
-
-.. code-block:: bash
-
- nfvbench -c /tmp/nfvbench/nfvbench.cfg
-
-The same -c option also accepts any valid yaml or json string to override certain parameters without having to create a configuration file.
-
-NFVbench provides many configuration options as optional arguments. For example the number of flows can be specified using the --flow-count option.
-
-The flow count option can be specified in any of 3 ways:
-
-- by providing a confguration file that has the flow_count value to use (-c myconfig.yaml and myconfig.yaml contains 'flow_count: 100k')
-- by passing that yaml paremeter inline (-c "flow_count: 100k") or (-c "{flow_count: 100k}")
-- by using the flow count optional argument (--flow-count 100k)
-
-Showing the running configuration
----------------------------------
-
-Because configuration parameters can be overriden, it is sometimes useful to show the final configuration (after all oevrrides are done) by using the --show-config option.
-This final configuration is also called the "running" configuration.
-
-For example, this will only display the running configuration (without actually running anything):
-
-.. code-block:: bash
-
- nfvbench -c "{flow_count: 100k, debug: true}" --show-config
-
-
-Connectivity and Configuration Check
-------------------------------------
-
-NFVbench allows to test connectivity to devices used with the selected packet path.
-It runs the whole test, but without actually sending any traffic.
-It is also a good way to check if everything is configured properly in the configuration file and what versions of components are used.
-
-To verify everything works without sending any traffic, use the --no-traffic option:
-
-.. code-block:: bash
-
- nfvbench --no-traffic
-
-Used parameters:
-
-* ``--no-traffic`` or ``-0`` : sending traffic from traffic generator is skipped
-
-
-
-Fixed Rate Run
---------------
-
-Fixed rate run is the most basic type of NFVbench usage. It can be used to measure the drop rate with a fixed transmission rate of packets.
-
-This example shows how to run the PVP packet path (which is the default packet path) with multiple different settings:
-
-.. code-block:: bash
-
- nfvbench -c nfvbench.cfg --no-cleanup --rate 100000pps --duration 30 --interval 15 --json results.json
-
-Used parameters:
-
-* ``-c nfvbench.cfg`` : path to the config file
-* ``--no-cleanup`` : resources (networks, VMs, attached ports) are not deleted after test is finished
-* ``--rate 100000pps`` : defines rate of packets sent by traffic generator
-* ``--duration 30`` : specifies how long should traffic be running in seconds
-* ``--interval 15`` : stats are checked and shown periodically (in seconds) in this interval when traffic is flowing
-* ``--json results.json`` : collected data are stored in this file after run is finished
-
-.. note:: It is your responsibility to clean up resources if needed when ``--no-cleanup`` parameter is used. You can use the nfvbench_cleanup helper script for that purpose.
-
-The ``--json`` parameter makes it easy to store NFVbench results. The --show-summary (or -ss) option can be used to display the results in a json results file in a text tabular format:
-
-.. code-block:: bash
-
- nfvbench --show-summary results.json
-
-
-This example shows how to specify a different packet path:
-
-.. code-block:: bash
-
- nfvbench -c nfvbench.cfg --rate 1Mbps --inter-node --service-chain PVVP
-
-Used parameters:
-
-* ``-c nfvbench.cfg`` : path to the config file
-* ``--rate 1Mbps`` : defines rate of packets sent by traffic generator
-* ``--inter-node`` : VMs are created on different compute nodes, works only with PVVP flow
-* ``--service-chain PVVP`` or ``-sc PVVP`` : specifies the type of service chain (or packet path) to use
-
-.. note:: When parameter ``--inter-node`` is not used or there aren't enough compute nodes, VMs are on the same compute node.
-
-
-Rate Units
-^^^^^^^^^^
-
-Parameter ``--rate`` accepts different types of values:
-
-* packets per second (pps, kpps, mpps), e.g. ``1000pps`` or ``10kpps``
-* load percentage (%), e.g. ``50%``
-* bits per second (bps, kbps, Mbps, Gbps), e.g. ``1Gbps``, ``1000bps``
-* NDR/PDR (ndr, pdr, ndr_pdr), e.g. ``ndr_pdr``
-
-NDR/PDR is the default rate when not specified.
-
-NDR and PDR
------------
-
-The NDR and PDR test is used to determine the maximum throughput performance of the system under test
-following guidelines defined in RFC-2544:
-
-* NDR (No Drop Rate): maximum packet rate sent without dropping any packet
-* PDR (Partial Drop Rate): maximum packet rate sent while allowing a given maximum drop rate
-
-The NDR search can also be relaxed to allow some very small amount of drop rate (lower than the PDR maximum drop rate).
-NFVbench will measure the NDR and PDR values by driving the traffic generator through multiple iterations
-at different transmission rates using a binary search algorithm.
-
-The configuration file contains section where settings for NDR/PDR can be set.
-
-.. code-block:: bash
-
- # NDR/PDR configuration
- measurement:
- # Drop rates represent the ratio of dropped packet to the total number of packets sent.
- # Values provided here are percentages. A value of 0.01 means that at most 0.01% of all
- # packets sent are dropped (or 1 packet every 10,000 packets sent)
-
- # No Drop Rate; Default to 0.001%
- NDR: 0.001
- # Partial Drop Rate; NDR should always be less than PDR
- PDR: 0.1
- # The accuracy of NDR and PDR load percentiles; The actual load percentile that match NDR
- # or PDR should be within `load_epsilon` difference than the one calculated.
- load_epsilon: 0.1
-
-Because NDR/PDR is the default ``--rate`` value, it is possible to run NFVbench simply like this:
-
-.. code-block:: bash
-
- nfvbench -c nfvbench.cfg
-
-Other possible run options:
-
-.. code-block:: bash
-
- nfvbench -c nfvbench.cfg --duration 120 --json results.json
-
-Used parameters:
-
-* ``-c nfvbench.cfg`` : path to the config file
-* ``--duration 120`` : specifies how long should be traffic running in each iteration
-* ``--json results.json`` : collected data are stored in this file after run is finished
-
-
-Multichain
-----------
-
-NFVbench allows to run multiple chains at the same time. For example it is possible to stage the PVP service chain N-times,
-where N can be as much as your compute power can scale. With N = 10, NFVbench will spawn 10 VMs as a part of 10 simultaneous PVP chains.
-
-The number of chains is specified by ``--service-chain-count`` or ``-scc`` flag with a default value of 1.
-For example to run NFVbench with 3 PVP chains:
-
-.. code-block:: bash
-
- nfvbench -c nfvbench.cfg --rate 10000pps -scc 3
-
-It is not necessary to specify the service chain type (-sc) because PVP is set as default. The PVP service chains will have 3 VMs in 3 chains with this configuration.
-If ``-sc PVVP`` is specified instead, there would be 6 VMs in 3 chains as this service chain has 2 VMs per chain.
-Both **single run** or **NDR/PDR** can be run as multichain. Runnin multichain is a scenario closer to a real life situation than runs with a single chain.
-
-
-Multiflow
----------
-
-NFVbench always generates L3 packets from the traffic generator but allows the user to specify how many flows to generate.
-A flow is identified by a unique src/dest MAC IP and port tuple that is sent by the traffic generator. Flows are
-generated by ranging the IP adresses but using a small fixed number of MAC addresses.
-
-The number of flows will be spread roughly even between chains when more than 1 chain is being tested.
-For example, for 11 flows and 3 chains, number of flows that will run for each chain will be 3, 4, and 4 flows respectively.
-
-The number of flows is specified by ``--flow-count`` or ``-fc`` flag, the default value is 2 (1 flow in each direction).
-To run NFVbench with 3 chains and 100 flows, use the following command:
-
-.. code-block:: bash
-
- nfvbench -c nfvbench.cfg --rate 10000pps -scc 3 -fc 100
-
-Note that from a vswitch point of view, the
-number of flows seen will be higher as it will be at least 4 times the number of flows sent by the traffic generator
-(add flow to VM and flow from VM).
-
-IP addresses generated can be controlled with the following NFVbench configuration options:
-
-.. code-block:: bash
-
- ip_addrs: ['10.0.0.0/8', '20.0.0.0/8']
- ip_addrs_step: 0.0.0.1
- tg_gateway_ip_addrs: ['1.1.0.100', '2.2.0.100']
- tg_gateway_ip_addrs_step: 0.0.0.1
- gateway_ip_addrs: ['1.1.0.2', '2.2.0.2']
- gateway_ip_addrs_step: 0.0.0.1
-
-``ip_addrs`` are the start of the 2 ip address ranges used by the traffic generators as the packets source and destination packets
-where each range is associated to virtual devices simulated behind 1 physical interface of the traffic generator.
-These can also be written in CIDR notation to represent the subnet.
-
-``tg_gateway_ip_addrs`` are the traffic generator gateway (virtual) ip addresses, all traffic to/from the virtual devices go through them.
-
-``gateway_ip_addrs`` are the 2 gateway ip address ranges of the VMs used in the external chains. They are only used with external chains and must correspond to their public IP address.
-
-The corresponding ``step`` is used for ranging the IP addresses from the `ip_addrs``, ``tg_gateway_ip_addrs`` and ``gateway_ip_addrs`` base addresses.
-0.0.0.1 is the default step for all IP ranges. In ``ip_addrs``, 'random' can be configured which tells NFVBench to generate random src/dst IP pairs in the traffic stream.
-
-
-Traffic Configuration via CLI
------------------------------
-
-While traffic configuration can be modified using the configuration file, it can be inconvenient to have to change the configuration file everytime
-you need to change a traffic configuration option. Traffic configuration options can be overridden with a few CLI options.
-
-Here is an example of configuring traffic via CLI:
-
-.. code-block:: bash
-
- nfvbench --rate 10kpps --service-chain-count 2 -fs 64 -fs IMIX -fs 1518 --unidir
-
-This command will run NFVbench with a unidirectional flow for three packet sizes 64B, IMIX, and 1518B.
-
-Used parameters:
-
-* ``--rate 10kpps`` : defines rate of packets sent by traffic generator (total TX rate)
-* ``-scc 2`` or ``--service-chain-count 2`` : specifies number of parallel chains of given flow to run (default to 1)
-* ``-fs 64`` or ``--frame-size 64``: add the specified frame size to the list of frame sizes to run
-* ``--unidir`` : run traffic with unidirectional flow (default to bidirectional flow)
-
-
-MAC Addresses
--------------
-
-NFVbench will dicover the MAC addresses to use for generated frames using:
-- either OpenStack discovery (find the MAC of an existing VM) in the case of PVP and PVVP service chains
-- or using dynamic ARP discovery (find MAC from IP) in the case of external chains.
-
-Status and Cleanup of NFVbench Resources
-----------------------------------------
-
-The --status option will display the status of NFVbench and list any NFVbench resources. You need to pass the OpenStack RC
-file in order to connect to OpenStack.
-
-.. code-block:: none
-
- # nfvbench --status -r /tmp/nfvbench/openrc
- 2018-04-09 17:05:48,682 INFO Version: 1.3.2.dev1
- 2018-04-09 17:05:48,683 INFO Status: idle
- 2018-04-09 17:05:48,757 INFO Discovering instances nfvbench-loop-vm...
- 2018-04-09 17:05:49,252 INFO Discovering flavor nfvbench.medium...
- 2018-04-09 17:05:49,281 INFO Discovering networks...
- 2018-04-09 17:05:49,365 INFO No matching NFVbench resources found
- #
-
-The Status can be either "idle" or "busy (run pending)".
-
-The --cleanup option will first discover resources created by NFVbench and prompt if you want to proceed with cleaning them up.
-Example of run:
-
-.. code-block:: none
-
- # nfvbench --cleanup -r /tmp/nfvbench/openrc
- 2018-04-09 16:58:00,204 INFO Version: 1.3.2.dev1
- 2018-04-09 16:58:00,205 INFO Status: idle
- 2018-04-09 16:58:00,279 INFO Discovering instances nfvbench-loop-vm...
- 2018-04-09 16:58:00,829 INFO Discovering flavor nfvbench.medium...
- 2018-04-09 16:58:00,876 INFO Discovering networks...
- 2018-04-09 16:58:00,960 INFO Discovering ports...
- 2018-04-09 16:58:01,012 INFO Discovered 6 NFVbench resources:
- +----------+-------------------+--------------------------------------+
- | Type | Name | UUID |
- |----------+-------------------+--------------------------------------|
- | Instance | nfvbench-loop-vm0 | b039b858-777e-467e-99fb-362f856f4a94 |
- | Flavor | nfvbench.medium | a027003c-ad86-4f24-b676-2b05bb06adc0 |
- | Network | nfvbench-net0 | bca8d183-538e-4965-880e-fd92d48bfe0d |
- | Network | nfvbench-net1 | c582a201-8279-4309-8084-7edd6511092c |
- | Port | | 67740862-80ac-4371-b04e-58a0b0f05085 |
- | Port | | b5db95b9-e419-4725-951a-9a8f7841e66a |
- +----------+-------------------+--------------------------------------+
- 2018-04-09 16:58:01,013 INFO NFVbench will delete all resources shown...
- Are you sure? (y/n) y
- 2018-04-09 16:58:01,865 INFO Deleting instance nfvbench-loop-vm0...
- 2018-04-09 16:58:02,058 INFO Waiting for 1 instances to be fully deleted...
- 2018-04-09 16:58:02,182 INFO 1 yet to be deleted by Nova, retries left=6...
- 2018-04-09 16:58:04,506 INFO 1 yet to be deleted by Nova, retries left=5...
- 2018-04-09 16:58:06,636 INFO 1 yet to be deleted by Nova, retries left=4...
- 2018-04-09 16:58:08,701 INFO Deleting flavor nfvbench.medium...
- 2018-04-09 16:58:08,729 INFO Deleting port 67740862-80ac-4371-b04e-58a0b0f05085...
- 2018-04-09 16:58:09,102 INFO Deleting port b5db95b9-e419-4725-951a-9a8f7841e66a...
- 2018-04-09 16:58:09,620 INFO Deleting network nfvbench-net0...
- 2018-04-09 16:58:10,357 INFO Deleting network nfvbench-net1...
- #
-
-The --force-cleanup option will do the same but without prompting for confirmation.
diff --git a/docs/testing/user/userguide/conf.py b/docs/testing/user/userguide/conf.py
deleted file mode 100644
index 5846b00..0000000
--- a/docs/testing/user/userguide/conf.py
+++ /dev/null
@@ -1,358 +0,0 @@
-# Copyright 2017 Cisco Systems, Inc. All rights reserved.
-#
-# 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.
-#
-# NFVBench documentation build configuration file, created by
-# sphinx-quickstart on Thu Sep 29 14:25:18 2016.
-#
-# This file is execfile()d with the current directory set to its
-# containing dir.
-#
-# Note that not all possible configuration values are present in this
-# autogenerated file.
-#
-# All configuration values have a default; values that are commented out
-# serve to show the default.
-
-# If extensions (or modules to document with autodoc) are in another directory,
-# add these directories to sys.path here. If the directory is relative to the
-# documentation root, use os.path.abspath to make it absolute, like shown here.
-#
-
-
-
-# import os
-# import sys
-# sys.path.insert(0, os.path.abspath('.'))
-import os
-from pbr import version as pbr_ver
-import sys
-
-sys.path.insert(0, os.path.abspath('../..'))
-
-# -- General configuration ------------------------------------------------
-
-# If your documentation needs a minimal Sphinx version, state it here.
-#
-# needs_sphinx = '1.0'
-
-# Add any Sphinx extension module names here, as strings. They can be
-# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
-# ones.
-extensions = []
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
-
-# The suffix(es) of source filenames.
-# You can specify multiple suffix as a list of string:
-#
-# source_suffix = ['.rst', '.md']
-source_suffix = '.rst'
-
-# The encoding of source files.
-#
-# source_encoding = 'utf-8-sig'
-
-# The master toctree document.
-master_doc = 'index'
-
-# General information about the project.
-project = u'NFVBench'
-copyright = u'2016 Cisco Systems, Inc.'
-author = u'Cisco Systems, Inc.'
-
-# The version info for the project you're documenting, acts as replacement for
-# |version| and |release|, also used in various other places throughout the
-# built documents.
-#
-# The short X.Y version.
-version = pbr_ver.VersionInfo(project).version_string()
-# The full version, including alpha/beta/rc tags.
-release = pbr_ver.VersionInfo(project).version_string_with_vcs()
-
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-#
-# This is also used if you do content translation via gettext catalogs.
-# Usually you set "language" from the command line for these cases.
-language = None
-
-# There are two options for replacing |today|: either, you set today to some
-# non-false value, then it is used:
-#
-# today = ''
-#
-# Else, today_fmt is used as the format for a strftime call.
-#
-# today_fmt = '%B %d, %Y'
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-# This patterns also effect to html_static_path and html_extra_path
-exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
-
-# The reST default role (used for this markup: `text`) to use for all
-# documents.
-#
-# default_role = None
-
-# If true, '()' will be appended to :func: etc. cross-reference text.
-#
-# add_function_parentheses = True
-
-# If true, the current module name will be prepended to all description
-# unit titles (such as .. function::).
-#
-# add_module_names = True
-
-# If true, sectionauthor and moduleauthor directives will be shown in the
-# output. They are ignored by default.
-#
-# show_authors = False
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'sphinx'
-
-# A list of ignored prefixes for module index sorting.
-# modindex_common_prefix = []
-
-# If true, keep warnings as "system message" paragraphs in the built documents.
-# keep_warnings = False
-
-# If true, `todo` and `todoList` produce output, else they produce nothing.
-todo_include_todos = False
-
-# -- Options for HTML output ----------------------------------------------
-
-# The theme to use for HTML and HTML Help pages. See the documentation for
-# a list of builtin themes.
-#
-# html_theme = 'haiku'
-html_theme = 'sphinx_rtd_theme'
-
-# Theme options are theme-specific and customize the look and feel of a theme
-# further. For a list of options available for each theme, see the
-# documentation.
-#
-html_theme_options = {}
-
-# Add any paths that contain custom themes here, relative to this directory.
-# html_theme_path = []
-
-# The name for this set of Sphinx documents.
-# "<project> v<release> documentation" by default.
-#
-# html_title = u'NFVBench vdev117'
-
-# A shorter title for the navigation bar. Default is the same as html_title.
-#
-html_short_title = 'nfvbench'
-
-# The name of an image file (relative to this directory) to place at the topß
-# of the sidebar.
-#
-# html_logo = None
-
-# The name of an image file (relative to this directory) to use as a favicon of
-# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
-# pixels large.
-#
-# html_favicon = None
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ['_static']
-
-# Add any extra paths that contain custom files (such as robots.txt or
-# .htaccess) here, relative to this directory. These files are copied
-# directly to the root of the documentation.
-#
-# html_extra_path = []
-
-# If not None, a 'Last updated on:' timestamp is inserted at every page
-# bottom, using the given strftime format.
-# The empty string is equivalent to '%b %d, %Y'.
-#
-# html_last_updated_fmt = None
-
-# If true, SmartyPants will be used to convert quotes and dashes to
-# typographically correct entities.
-#
-html_use_smartypants = False
-
-# Custom sidebar templates, maps document names to template names.
-#
-# html_sidebars = {}
-
-# Additional templates that should be rendered to pages, maps page names to
-# template names.
-#
-# html_additional_pages = {}
-
-# If false, no module index is generated.
-#
-# html_domain_indices = True
-
-# If false, no index is generated.
-#
-# html_use_index = True
-
-# If true, the index is split into individual pages for each letter.
-#
-# html_split_index = False
-
-# If true, links to the reST sources are added to the pages.
-#
-# html_show_sourcelink = True
-
-# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
-#
-# html_show_sphinx = True
-
-# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
-#
-# html_show_copyright = True
-
-# If true, an OpenSearch description file will be output, and all pages will
-# contain a <link> tag referring to it. The value of this option must be the
-# base URL from which the finished HTML is served.
-#
-# html_use_opensearch = ''
-
-# This is the file name suffix for HTML files (e.g. ".xhtml").
-# html_file_suffix = None
-
-# Language to be used for generating the HTML full-text search index.
-# Sphinx supports the following languages:
-# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
-# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr', 'zh'
-#
-# html_search_language = 'en'
-
-# A dictionary with options for the search language support, empty by default.
-# 'ja' uses this config value.
-# 'zh' user can custom change `jieba` dictionary path.
-#
-# html_search_options = {'type': 'default'}
-
-# The name of a javascript file (relative to the configuration directory) that
-# implements a search results scorer. If empty, the default will be used.
-#
-# html_search_scorer = 'scorer.js'
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = 'NFVBenchdoc'
-
-# -- Options for LaTeX output ---------------------------------------------
-
-latex_elements = {
- # The paper size ('letterpaper' or 'a4paper').
- #
- # 'papersize': 'letterpaper',
-
- # The font size ('10pt', '11pt' or '12pt').
- #
- # 'pointsize': '10pt',
-
- # Additional stuff for the LaTeX preamble.
- #
- # 'preamble': '',
-
- # Latex figure (float) alignment
- #
- # 'figure_align': 'htbp',
-}
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title,
-# author, documentclass [howto, manual, or own class]).
-latex_documents = [
- (master_doc, 'NFVBench.tex', u'NFVBench Documentation',
- u'Alec Hothan, Stefano Suryanto, Jan Balaz', 'manual'),
-]
-
-# The name of an image file (relative to this directory) to place at the top of
-# the title page.
-#
-# latex_logo = None
-
-# For "manual" documents, if this is true, then toplevel headings are parts,
-# not chapters.
-#
-# latex_use_parts = False
-
-# If true, show page references after internal links.
-#
-# latex_show_pagerefs = False
-
-# If true, show URL addresses after external links.
-#
-# latex_show_urls = False
-
-# Documents to append as an appendix to all manuals.
-#
-# latex_appendices = []
-
-# It false, will not define \strong, \code, itleref, \crossref ... but only
-# \sphinxstrong, ..., \sphinxtitleref, ... To help avoid clash with user added
-# packages.
-#
-# latex_keep_old_macro_names = True
-
-# If false, no module index is generated.
-#
-# latex_domain_indices = True
-
-
-# -- Options for manual page output ---------------------------------------
-
-# One entry per manual page. List of tuples
-# (source start file, name, description, authors, manual section).
-man_pages = [
- (master_doc, 'nfvbench', u'NFVBench Documentation',
- [author], 1)
-]
-
-# If true, show URL addresses after external links.
-#
-# man_show_urls = False
-
-
-# -- Options for Texinfo output -------------------------------------------
-
-# Grouping the document tree into Texinfo files. List of tuples
-# (source start file, target name, title, author,
-# dir menu entry, description, category)
-texinfo_documents = [
- (master_doc, 'NFVBench', u'NFVBench Documentation',
- author, 'NFVBench', 'One line description of project.',
- 'Miscellaneous'),
-]
-
-# Documents to append as an appendix to all manuals.
-#
-# texinfo_appendices = []
-
-# If false, no module index is generated.
-#
-# texinfo_domain_indices = True
-
-# How to display URL addresses: 'footnote', 'no', or 'inline'.
-#
-# texinfo_show_urls = 'footnote'
-
-# If true, do not generate a @detailmenu in the "Top" node's menu.
-#
-# texinfo_no_detailmenu = False
diff --git a/docs/testing/user/userguide/faq.rst b/docs/testing/user/userguide/faq.rst
deleted file mode 100644
index 9da2e90..0000000
--- a/docs/testing/user/userguide/faq.rst
+++ /dev/null
@@ -1,49 +0,0 @@
-.. This work is licensed under a Creative Commons Attribution 4.0 International License.
-.. SPDX-License-Identifier: CC-BY-4.0
-.. (c) Cisco Systems, Inc
-
-Frequently Asked Questions
-**************************
-
-General Questions
-=================
-
-Can NFVbench be used without OpenStack
---------------------------------------
-Yes. This can be done using the EXT chain mode, with or without ARP
-(depending on whether your systen under test can do routing) and by setting the openrc_file
-property to empty in the NFVbench configuration.
-
-Can NFVbench be used with a different traffic generator than TRex?
-------------------------------------------------------------------
-This is possible but requires developing a new python class to manage the new traffic generator interface.
-
-Can I connect Trex directly to my compute node?
------------------------------------------------
-Yes.
-
-Can I drive NFVbench using a REST interface?
---------------------------------------------
-NFVbench can run in server mode and accept HTTP or WebSocket/SocketIO events to run any type of measurement (fixed rate run or NDR_PDR run)
-with any run configuration.
-
-Can I run NFVbench on a Cisco UCS-B series blade?
--------------------------------------------------
-Yes provided your UCS-B series server has a Cisco VIC 1340 (with a recent firmware version).
-TRex will require VIC firmware version 3.1(2) or higher for blade servers (which supports more filtering capabilities).
-In this setting, the 2 physical interfaces for data plane traffic are simply hooked to the UCS-B fabric interconnect (no need to connect to a switch).
-
-Troubleshooting
-===============
-
-TrafficClientException: End-to-end connectivity cannot be ensured
-------------------------------------------------------------------
-Prior to running a benchmark, NFVbench will make sure that traffic is passing in the service chain by sending a small flow of packets in each direction and verifying that they are received back at the other end.
-This exception means that NFVbench cannot pass any traffic in the service chain.
-
-The most common issues that prevent traffic from passing are:
-- incorrect wiring of the NFVbench/TRex interfaces
-- incorrect vlan_tagging setting in the NFVbench configuration, this needs to match how the NFVbench ports on the switch are configured (trunk or access port)
-
- - if the switch port is configured as access port, you must disable vlan_tagging in the NFVbench configuration
- - of the switch port is configured as trunk (recommended method), you must enable it
diff --git a/docs/testing/user/userguide/quickstart_docker.rst b/docs/testing/user/userguide/quickstart_docker.rst
deleted file mode 100644
index 6803bc3..0000000
--- a/docs/testing/user/userguide/quickstart_docker.rst
+++ /dev/null
@@ -1,243 +0,0 @@
-.. This work is licensed under a Creative Commons Attribution 4.0 International License.
-.. SPDX-License-Identifier: CC-BY-4.0
-.. (c) Cisco Systems, Inc
-
-===========================================
-NFVbench Installation and Quick Start Guide
-===========================================
-
-.. _docker_installation:
-
-Make sure you satisfy the `hardware and software requirements <requirements>` before you start .
-
-
-1. Container installation
--------------------------
-
-To pull the latest NFVbench container image:
-
-.. code-block:: bash
-
- docker pull opnfv/nfvbench
-
-2. Docker Container configuration
----------------------------------
-
-The NFVbench container requires the following Docker options to operate properly.
-
-+-------------------------------------------------------+-------------------------------------------------------+
-| Docker options | Description |
-+=======================================================+=======================================================+
-| -v /lib/modules/$(uname -r):/lib/modules/$(uname -r) | needed by kernel modules in the container |
-+-------------------------------------------------------+-------------------------------------------------------+
-| -v /usr/src/kernels:/usr/src/kernels | needed by TRex to build kernel modules when needed |
-+-------------------------------------------------------+-------------------------------------------------------+
-| -v /dev:/dev | needed by kernel modules in the container |
-+-------------------------------------------------------+-------------------------------------------------------+
-| -v $PWD:/tmp/nfvbench | optional but recommended to pass files between the |
-| | host and the docker space (see examples below) |
-| | Here we map the current directory on the host to the |
-| | /tmp/nfvbench director in the container but any |
-| | other similar mapping can work as well |
-+-------------------------------------------------------+-------------------------------------------------------+
-| --net=host | (optional) needed if you run the NFVbench |
-| | server in the container (or use any appropriate |
-| | docker network mode other than "host") |
-+-------------------------------------------------------+-------------------------------------------------------+
-| --privileged | (optional) required if SELinux is enabled on the host |
-+-------------------------------------------------------+-------------------------------------------------------+
-| -e HOST="127.0.0.1" | (optional) required if REST server is enabled |
-+-------------------------------------------------------+-------------------------------------------------------+
-| -e PORT=7556 | (optional) required if REST server is enabled |
-+-------------------------------------------------------+-------------------------------------------------------+
-| -e CONFIG_FILE="/root/nfvbenchconfig.json | (optional) required if REST server is enabled |
-+-------------------------------------------------------+-------------------------------------------------------+
-
-It can be convenient to write a shell script (or an alias) to automatically insert the necessary options.
-
-The minimal configuration file required must specify the PCI addresses of the 2 NIC ports to use.
-If OpenStack is used, the openrc_file property must be defined to point to a valid OpenStack rc file.
-
-
-Here is an example of mimimal configuration using OpenStack where:
-
-- the openrc file is located on the host current directory which is mapped under /tmp/nfvbench in the container (this is achieved using -v $PWD:/tmp/nfvbench)
-- the 2 NIC ports to use for generating traffic have the PCI addresses "04:00.0" and "04:00.1"
-
-.. code-block:: bash
-
- {
- "openrc_file": "/tmp/nfvbench/openrc",
- "traffic_generator": {
- "generator_profile": [
- {
- "interfaces": [
- {
- "pci": "04:00.0",
- "port": 0,
- },
- {
- "pci": "04:00.1",
- "port": 1,
- }
- ],
- "intf_speed": "",
- "ip": "127.0.0.1",
- "name": "trex-local",
- "software_mode": false,
- "tool": "TRex"
- }
- ]
- }
- }
-
-The other options in the minimal configuration must be present and must have the same values as above.
-
-3. Start the Docker container
------------------------------
-As for any Docker container, you can execute NFVbench measurement sessions using a temporary container ("docker run" - which exits after each NFVbench run)
-or you can decide to run the NFVbench container in the background then execute one or more NFVbench measurement sessions on that container ("docker exec").
-
-The former approach is simpler to manage (since each container is started and terminated after each command) but incurs a small delay at start time (several seconds).
-The second approach is more responsive as the delay is only incurred once when starting the container.
-
-We will take the second approach and start the NFVbench container in detached mode with the name "nfvbench" (this works with bash, prefix with "sudo" if you do not use the root login)
-
-First create a new working directory, and change the current working directory to there. A "nfvbench_ws" directory under your home directory is good place for that, and this is where the OpenStack RC file and NFVbench config file will sit.
-
-To run NFVBench without server mode
-
-.. code-block:: bash
-
- cd ~/nfvbench_ws
- docker run --detach --net=host --privileged -v $PWD:/tmp/nfvbench -v /dev:/dev -v /lib/modules/$(uname -r):/lib/modules/$(uname -r) -v /usr/src/kernels:/usr/src/kernels --name nfvbench opnfv/nfvbench
-
-To run NFVBench enabling REST server (mount the configuration json and the path for openrc)
-
-.. code-block:: bash
-
- cd ~/nfvbench_ws
- docker run --detach --net=host --privileged -e HOST="127.0.0.1" -e PORT=7556 -e CONFIG_FILE="/tmp/nfvbench/nfvbenchconfig.json -v $PWD:/tmp/nfvbench -v /dev:/dev -v /lib/modules/$(uname -r):/lib/modules/$(uname -r) -v /usr/src/kernels:/usr/src/kernels --name nfvbench opnfv/nfvbench start_rest_server
-
-
-The create an alias to make it easy to execute nfvbench commands directly from the host shell prompt:
-
-.. code-block:: bash
-
- alias nfvbench='docker exec -it nfvbench nfvbench'
-
-The next to last "nfvbench" refers to the name of the container while the last "nfvbench" refers to the NFVbench binary that is available to run in the container.
-
-To verify it is working:
-
-.. code-block:: bash
-
- nfvbench --version
- nfvbench --help
-
-
-4. NFVbench configuration
--------------------------
-
-Create a new file containing the minimal configuration for NFVbench, we can call it any name, for example "my_nfvbench.cfg" and paste the following yaml template in the file:
-
-.. code-block:: bash
-
- openrc_file:
- traffic_generator:
- generator_profile:
- - name: trex-local
- tool: TRex
- ip: 127.0.0.1
- cores: 3
- software_mode: false,
- interfaces:
- - port: 0
- pci:
- - port: 1
- pci:
- intf_speed:
-
-If OpenStack is used, NFVbench requires an ``openrc`` file to connect to OpenStack using the OpenStack API. This file can be downloaded from the OpenStack Horizon dashboard (refer to the OpenStack documentation on how to
-retrieve the openrc file). The file pathname in the container must be stored in the "openrc_file" property. If it is stored on the host in the current directory, its full pathname must start with /tmp/nfvbench (since the current directory is mapped to /tmp/nfvbench in the container).
-
-If OpenStack is not used, remove the openrc_file property.
-
-The PCI address of the 2 physical interfaces that will be used by the traffic generator must be configured.
-The PCI address can be obtained for example by using the "lspci" Linux command. For example:
-
-.. code-block:: bash
-
- [root@sjc04-pod6-build ~]# lspci | grep 710
- 0a:00.0 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 01)
- 0a:00.1 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 01)
- 0a:00.2 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 01)
- 0a:00.3 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 01)
-
-
-Example of edited configuration with an OpenStack RC file stored in the current directory with the "openrc" name, and
-PCI addresses "0a:00.0" and "0a:00.1" (first 2 ports of the quad port NIC):
-
-.. code-block:: bash
-
- openrc_file: /tmp/nfvbench/openrc
- traffic_generator:
- generator_profile:
- - name: trex-local
- tool: TRex
- ip: 127.0.0.1
- cores: 3
- software_mode: false,
- interfaces:
- - port: 0
- switch_port:
- pci: "0a:00.0"
- - port: 1
- switch_port:
- pci: "0a:00.1"
- intf_speed:
-
-.. warning::
-
- You have to put quotes around the pci addresses as shown in the above example, otherwise TRex will read it wrong.
-
-Alternatively, the full template with comments can be obtained using the --show-default-config option in yaml format:
-
-.. code-block:: bash
-
- nfvbench --show-default-config > my_nfvbench.cfg
-
-Edit the nfvbench.cfg file to only keep those properties that need to be modified (preserving the nesting).
-
-Make sure you have your nfvbench configuration file (my_nfvbench.cfg) and - if OpenStack is used - OpenStack RC file in your pre-created working directory.
-
-
-5. Run NFVbench
----------------
-
-To do a single run at 10,000pps bi-directional (or 5kpps in each direction) using the PVP packet path:
-
-.. code-block:: bash
-
- nfvbench -c /tmp/nfvbench/my_nfvbench.cfg --rate 10kpps
-
-NFVbench options used:
-
-* ``-c /tmp/nfvbench/my_nfvbench.cfg`` : specify the config file to use (this must reflect the file path from inside the container)
-* ``--rate 10kpps`` : specify rate of packets for test for both directions using the kpps unit (thousands of packets per second)
-
-This should produce a result similar to this (a simple run with the above options should take less than 5 minutes):
-
-.. code-block:: none
-
- [TBP]
-
-
-7. Terminating the NFVbench container
--------------------------------------
-When no longer needed, the container can be terminated using the usual docker commands:
-
-.. code-block:: bash
-
- docker kill nfvbench
- docker rm nfvbench
diff --git a/docs/user/advanced.rst b/docs/user/advanced.rst
new file mode 100644
index 0000000..7cd6250
--- /dev/null
+++ b/docs/user/advanced.rst
@@ -0,0 +1,897 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. SPDX-License-Identifier: CC-BY-4.0
+.. (c) Cisco Systems, Inc
+
+==============
+Advanced Usage
+==============
+
+This section covers a few examples on how to run NFVbench with multiple different settings.
+Below are shown the most common and useful use-cases and explained some fields from a default config file.
+
+How to change any NFVbench run configuration (CLI)
+--------------------------------------------------
+NFVbench always starts with a default configuration which can further be refined (overridden) by the user from the CLI or from REST requests.
+
+At first have a look at the default config:
+
+.. code-block:: bash
+
+ nfvbench --show-default-config
+
+It is sometimes useful derive your own configuration from a copy of the default config:
+
+.. code-block:: bash
+
+ nfvbench --show-default-config > nfvbench.cfg
+
+At this point you can edit the copy by:
+
+- removing any parameter that is not to be changed (since NFVbench will always load the default configuration, default values are not needed)
+- edit the parameters that are to be changed changed
+
+A run with the new confguration can then simply be requested using the -c option and by using the actual path of the configuration file
+as seen from inside the container (in this example, we assume the current directory is mapped to /tmp/nfvbench in the container):
+
+.. code-block:: bash
+
+ nfvbench -c /tmp/nfvbench/nfvbench.cfg
+
+The same -c option also accepts any valid yaml or json string to override certain parameters without having to create a configuration file.
+
+NFVbench provides many configuration options as optional arguments. For example the number of flows can be specified using the --flow-count option.
+
+The flow count option can be specified in any of 3 ways:
+
+- by providing a confguration file that has the flow_count value to use (-c myconfig.yaml and myconfig.yaml contains 'flow_count: 100k')
+- by passing that yaml paremeter inline (-c "flow_count: 100k") or (-c "{flow_count: 100k}")
+- by using the flow count optional argument (--flow-count 100k)
+
+Showing the running configuration
+---------------------------------
+
+Because configuration parameters can be overriden, it is sometimes useful to show the final configuration (after all oevrrides are done) by using the --show-config option.
+This final configuration is also called the "running" configuration.
+
+For example, this will only display the running configuration (without actually running anything):
+
+.. code-block:: bash
+
+ nfvbench -c "{flow_count: 100k, debug: true}" --show-config
+
+
+Connectivity and Configuration Check
+------------------------------------
+
+NFVbench allows to test connectivity to devices used with the selected packet path.
+It runs the whole test, but without actually sending any traffic.
+It is also a good way to check if everything is configured properly in the configuration file and what versions of components are used.
+
+To verify everything works without sending any traffic, use the --no-traffic option:
+
+.. code-block:: bash
+
+ nfvbench --no-traffic
+
+Used parameters:
+
+* ``--no-traffic`` or ``-0`` : sending traffic from traffic generator is skipped
+
+
+TRex force restart
+------------------
+
+NFVbench allows to restart TRex traffic generator between runs.
+It runs the whole test, but restart TRex instance before generating new traffic.
+
+To force restart, use the --restart option:
+
+.. code-block:: bash
+
+ nfvbench --restart
+
+Used parameters:
+
+* ``--restart`` : restart traffic generator (TRex)
+
+Rate Units
+^^^^^^^^^^
+
+Parameter ``--rate`` accepts different types of values:
+
+* packets per second (pps, kpps, mpps), e.g. ``1000pps`` or ``10kpps``
+* load percentage (%), e.g. ``50%``
+* bits per second (bps, kbps, Mbps, Gbps), e.g. ``1Gbps``, ``1000bps``
+* NDR/PDR (ndr, pdr, ndr_pdr), e.g. ``ndr_pdr``
+
+NDR/PDR is the default rate when not specified.
+
+Fixed Rate Run
+--------------
+
+Fixed rate run is the most basic type of NFVbench usage. It can be used to measure the drop rate with a fixed transmission rate of packets.
+
+This example shows how to run the PVP packet path (which is the default packet path) with multiple different settings:
+
+.. code-block:: bash
+
+ nfvbench -c nfvbench.cfg --no-cleanup --rate 100000pps --duration 30 --interval 15 --json results.json
+
+Used parameters:
+
+* ``-c nfvbench.cfg`` : path to the config file
+* ``--no-cleanup`` : resources (networks, VMs, attached ports) are not deleted after test is finished
+* ``--rate 100000pps`` : defines rate of packets sent by traffic generator
+* ``--duration 30`` : specifies how long should traffic be running in seconds
+* ``--interval 15`` : stats are checked and shown periodically (in seconds) in this interval when traffic is flowing
+* ``--json results.json`` : collected data are stored in this file after run is finished
+
+.. note:: It is your responsibility to clean up resources if needed when ``--no-cleanup`` parameter is used. You can use the nfvbench_cleanup helper script for that purpose.
+
+The ``--json`` parameter makes it easy to store NFVbench results. The --show-summary (or -ss) option can be used to display the results in a json results file in a text tabular format:
+
+.. code-block:: bash
+
+ nfvbench --show-summary results.json
+
+
+This example shows how to specify a different packet path:
+
+.. code-block:: bash
+
+ nfvbench -c nfvbench.cfg --rate 1Mbps --inter-node --service-chain PVVP
+
+Used parameters:
+
+* ``-c nfvbench.cfg`` : path to the config file
+* ``--rate 1Mbps`` : defines rate of packets sent by traffic generator
+* ``--inter-node`` : VMs are created on different compute nodes, works only with PVVP flow
+* ``--service-chain PVVP`` or ``-sc PVVP`` : specifies the type of service chain (or packet path) to use
+
+.. note:: When parameter ``--inter-node`` is not used or there aren't enough compute nodes, VMs are on the same compute node.
+
+A fixed rate run can also be used to check the running drop rate while traffic is being generated. In that case the --interval option can be used
+to specify the reporting interval in seconds (minimum is 1 second). This can be useful for example to see how packet drop rate
+evolves over time. One common use case is to see the drop rate when there is a network degradation (e.g. one of the 2 links in a bond
+goes down).
+The console output will show at every reporting interval the number of packets transmitted, received and estimated drop rate for the last reporting interval.
+The smaller is the interval the more precise is the drop rate.
+
+Example of output where the reporting interval is set to 1 (second):
+
+.. code-block:: bash
+
+ 2020-04-25 12:59:16,618 INFO TX: 1,878,719,266; RX: 1,666,641,890; (Est.) Dropped: 2; Drop rate: 0.0000%
+ 2020-04-25 12:59:17,625 INFO TX: 1,883,740,078; RX: 1,671,662,706; (Est.) Dropped: -4; Drop rate: -0.0001%
+ 2020-04-25 12:59:18,632 INFO TX: 1,888,764,404; RX: 1,676,686,993; (Est.) Dropped: 39; Drop rate: 0.0008%
+ 2020-04-25 12:59:19,639 INFO TX: 1,893,785,063; RX: 1,681,276,714; (Est.) Dropped: 430,938; Drop rate: 8.5833%
+ 2020-04-25 12:59:20,645 INFO TX: 1,898,805,769; RX: 1,683,782,636; (Est.) Dropped: 2,514,784; Drop rate: 50.0883%
+ 2020-04-25 12:59:21,652 INFO TX: 1,903,829,191; RX: 1,686,289,860; (Est.) Dropped: 2,516,198; Drop rate: 50.0893%
+ 2020-04-25 12:59:22,658 INFO TX: 1,908,850,478; RX: 1,691,283,008; (Est.) Dropped: 28,139; Drop rate: 0.5604%
+ 2020-04-25 12:59:23,665 INFO TX: 1,913,870,692; RX: 1,696,301,242; (Est.) Dropped: 1,980; Drop rate: 0.0394%
+ 2020-04-25 12:59:24,672 INFO TX: 1,918,889,696; RX: 1,698,806,224; (Est.) Dropped: 2,514,022; Drop rate: 50.0901%
+ 2020-04-25 12:59:25,680 INFO TX: 1,923,915,470; RX: 1,701,314,663; (Est.) Dropped: 2,517,335; Drop rate: 50.0885%
+ 2020-04-25 12:59:26,687 INFO TX: 1,928,944,879; RX: 1,705,886,869; (Est.) Dropped: 457,203; Drop rate: 9.0906%
+ 2020-04-25 12:59:27,696 INFO TX: 1,933,969,377; RX: 1,710,911,346; (Est.) Dropped: 21; Drop rate: 0.0004%
+ 2020-04-25 12:59:28,702 INFO TX: 1,938,998,536; RX: 1,713,843,740; (Est.) Dropped: 2,096,765; Drop rate: 41.6922%
+ 2020-04-25 12:59:29,710 INFO TX: 1,944,019,920; RX: 1,718,226,356; (Est.) Dropped: 638,768; Drop rate: 12.7210%
+ 2020-04-25 12:59:30,718 INFO TX: 1,949,050,206; RX: 1,723,256,639; (Est.) Dropped: 3; Drop rate: 0.0001%
+ 2020-04-25 12:59:31,725 INFO TX: 1,954,075,270; RX: 1,728,281,726; (Est.) Dropped: -23; Drop rate: -0.0005%
+ 2020-04-25 12:59:32,732 INFO TX: 1,959,094,908; RX: 1,733,301,290; (Est.) Dropped: 74; Drop rate: 0.0015%
+ 2020-04-25 12:59:33,739 INFO TX: 1,964,118,902; RX: 1,738,325,357; (Est.) Dropped: -73; Drop rate: -0.0015%
+ 2020-04-25 12:59:34,746 INFO TX: 1,969,143,790; RX: 1,743,350,230; (Est.) Dropped: 15; Drop rate: 0.0003%
+ 2020-04-25 12:59:35,753 INFO TX: 1,974,165,773; RX: 1,748,372,291; (Est.) Dropped: -78; Drop rate: -0.0016%
+ 2020-04-25 12:59:36,759 INFO TX: 1,979,188,496; RX: 1,753,394,957; (Est.) Dropped: 57; Drop rate: 0.0011%
+ 2020-04-25 12:59:37,767 INFO TX: 1,984,208,956; RX: 1,757,183,844; (Est.) Dropped: 1,231,573; Drop rate: 24.5311%
+ 2020-04-25 12:59:38,773 INFO TX: 1,989,233,595; RX: 1,761,729,705; (Est.) Dropped: 478,778; Drop rate: 9.5286%
+ 2020-04-25 12:59:39,780 INFO TX: 1,994,253,350; RX: 1,766,749,467; (Est.) Dropped: -7; Drop rate: -0.0001%
+ 2020-04-25 12:59:40,787 INFO TX: 1,999,276,622; RX: 1,771,772,738; (Est.) Dropped: 1; Drop rate: 0.0000%
+ 2020-04-25 12:59:41,794 INFO TX: 2,004,299,940; RX: 1,776,796,065; (Est.) Dropped: -9; Drop rate: -0.0002%
+ 2020-04-25 12:59:42,800 INFO TX: 2,009,320,453; RX: 1,781,816,583; (Est.) Dropped: -5; Drop rate: -0.0001%
+ 2020-04-25 12:59:43,807 INFO TX: 2,014,340,581; RX: 1,786,503,172; (Est.) Dropped: 333,539; Drop rate: 6.6440%
+ 2020-04-25 12:59:44,814 INFO TX: 2,019,362,996; RX: 1,789,009,857; (Est.) Dropped: 2,515,730; Drop rate: 50.0900%
+ 2020-04-25 12:59:45,821 INFO TX: 2,024,386,346; RX: 1,791,517,070; (Est.) Dropped: 2,516,137; Drop rate: 50.0888%
+
+
+How to read each line:
+
+.. code-block:: bash
+
+ 2020-04-25 10:46:41,276 INFO TX: 4,004,436; RX: 4,004,381; (Est.) Dropped: 55; Drop rate: 0.0014%
+
+At this poing in time, NFvbench has sent 4,004,436 and received 4,004,381 since the start of the run.
+There is deficit of 55 packets on reception which corresponds to 0.0014% of all packets sent during that reporting window interval (last 1 second)
+A negative value means that the RX count is higher than the tx count in that window – this is possible since the RX and TX reads are not atomic.
+
+
+NDR and PDR
+-----------
+
+The NDR and PDR test is used to determine the maximum throughput performance of the system under test
+following guidelines defined in RFC-2544:
+
+* NDR (No Drop Rate): maximum packet rate sent without dropping any packet
+* PDR (Partial Drop Rate): maximum packet rate sent while allowing a given maximum drop rate
+
+The NDR search can also be relaxed to allow some very small amount of drop rate (lower than the PDR maximum drop rate).
+NFVbench will measure the NDR and PDR values by driving the traffic generator through multiple iterations
+at different transmission rates using a binary search algorithm.
+
+The configuration file contains section where settings for NDR/PDR can be set.
+
+.. code-block:: bash
+
+ # NDR/PDR configuration
+ measurement:
+ # Drop rates represent the ratio of dropped packet to the total number of packets sent.
+ # Values provided here are percentages. A value of 0.01 means that at most 0.01% of all
+ # packets sent are dropped (or 1 packet every 10,000 packets sent)
+
+ # No Drop Rate; Default to 0.001%
+ NDR: 0.001
+ # Partial Drop Rate; NDR should always be less than PDR
+ PDR: 0.1
+ # The accuracy of NDR and PDR load percentiles; The actual load percentile that match NDR
+ # or PDR should be within `load_epsilon` difference than the one calculated.
+ load_epsilon: 0.1
+
+Because NDR/PDR is the default ``--rate`` value, it is possible to run NFVbench simply like this:
+
+.. code-block:: bash
+
+ nfvbench -c nfvbench.cfg
+
+Other possible run options:
+
+.. code-block:: bash
+
+ nfvbench -c nfvbench.cfg --duration 120 --json results.json
+
+Used parameters:
+
+* ``-c nfvbench.cfg`` : path to the config file
+* ``--duration 120`` : specifies how long should be traffic running in each iteration
+* ``--json results.json`` : collected data are stored in this file after run is finished
+
+
+Multichain
+----------
+
+NFVbench allows to run multiple chains at the same time. For example it is possible to stage the PVP service chain N-times,
+where N can be as much as your compute power can scale. With N = 10, NFVbench will spawn 10 VMs as a part of 10 simultaneous PVP chains.
+
+The number of chains is specified by ``--service-chain-count`` or ``-scc`` flag with a default value of 1.
+For example to run NFVbench with 3 PVP chains:
+
+.. code-block:: bash
+
+ nfvbench -c nfvbench.cfg --rate 10000pps -scc 3
+
+It is not necessary to specify the service chain type (-sc) because PVP is set as default. The PVP service chains will have 3 VMs in 3 chains with this configuration.
+If ``-sc PVVP`` is specified instead, there would be 6 VMs in 3 chains as this service chain has 2 VMs per chain.
+Both **single run** or **NDR/PDR** can be run as multichain. Running multichain is a scenario closer to a real life situation than runs with a single chain.
+
+
+Multiflow
+---------
+
+NFVbench always generates L3 packets from the traffic generator but allows the user to specify how many flows to generate.
+A flow is identified by a unique src/dest MAC IP and port tuple that is sent by the traffic generator. Flows are
+generated by ranging the IP adresses but using a small fixed number of MAC addresses.
+
+The number of flows will be spread roughly even between chains when more than 1 chain is being tested.
+For example, for 11 flows and 3 chains, number of flows that will run for each chain will be 3, 4, and 4 flows respectively.
+
+The number of flows is specified by ``--flow-count`` or ``-fc`` flag, the default value is 2 (1 flow in each direction).
+To run NFVbench with 3 chains and 100 flows, use the following command:
+
+.. code-block:: bash
+
+ nfvbench -c nfvbench.cfg --rate 10000pps -scc 3 -fc 100
+
+Note that from a vswitch point of view, the
+number of flows seen will be higher as it will be at least 4 times the number of flows sent by the traffic generator
+(add flow to VM and flow from VM).
+
+IP addresses generated can be controlled with the following NFVbench configuration options:
+
+.. code-block:: bash
+
+ ip_addrs: ['10.0.0.0/8', '20.0.0.0/8']
+ ip_addrs_step: 0.0.0.1
+ tg_gateway_ip_addrs: ['1.1.0.100', '2.2.0.100']
+ tg_gateway_ip_addrs_step: 0.0.0.1
+ gateway_ip_addrs: ['1.1.0.2', '2.2.0.2']
+ gateway_ip_addrs_step: 0.0.0.1
+
+``ip_addrs`` are the start of the 2 ip address ranges used by the traffic generators as the packets source and destination packets
+where each range is associated to virtual devices simulated behind 1 physical interface of the traffic generator.
+These can also be written in CIDR notation to represent the subnet.
+
+``tg_gateway_ip_addrs`` are the traffic generator gateway (virtual) ip addresses, all traffic to/from the virtual devices go through them.
+
+``gateway_ip_addrs`` are the 2 gateway ip address ranges of the VMs used in the external chains. They are only used with external chains and must correspond to their public IP address.
+
+The corresponding ``step`` is used for ranging the IP addresses from the `ip_addrs``, ``tg_gateway_ip_addrs`` and ``gateway_ip_addrs`` base addresses.
+0.0.0.1 is the default step for all IP ranges. In ``ip_addrs``, 'random' can be configured which tells NFVBench to generate random src/dst IP pairs in the traffic stream.
+
+UDP ports can be controlled with the following NFVbench configuration options:
+
+.. code-block:: bash
+
+ udp_src_port: ['1024', '65000']
+ udp_dst_port: 53
+ udp_port_step: '1'
+
+``udp_src_port`` and ``udp_dst_port`` are the UDP port value used by the traffic generators.
+These can be written for unique port or range ports for all flow.
+
+The corresponding ``udp_port_step`` is used for ranging the UDP port.
+1 is the default step for all UDP ranges, 'random' can be configured which tells NFVBench to generate random src/dst UDP pairs in the traffic stream.
+
+NB:
+ Use of UDP range will increase possible values of flows (based on ip src/dst and port src/dst tuple).
+ NFVBench will calculate the least common multiple for this tuple to adapt flows generation to ``flow_count`` parameter.
+
+Examples of multiflow
+^^^^^^^^^^^^^^^^^^^^^
+
+1. Source IP is static and one UDP port used (default configuration)
+
+NFVbench configuration options:
+
+.. code-block:: bash
+
+ ip_addrs: ['110.0.0.0/8', '120.0.0.0/8']
+ ip_addrs_step: 0.0.0.1
+ tg_gateway_ip_addrs: ['1.1.0.100', '2.2.0.100']
+ tg_gateway_ip_addrs_step: 0.0.0.1
+ gateway_ip_addrs: ['1.1.0.2', '2.2.0.2']
+ gateway_ip_addrs_step: 0.0.0.1
+
+To run NFVbench with 3 chains and 100 flows, use the following command:
+
+.. code-block:: bash
+
+ nfvbench -c nfvbench.cfg --rate 10000pps -scc 3 -fc 100
+
+The least common multiple for this configuration is lcm(16 777 216, 16 777 216, 1, 1) = 16 777 216.
+.. note:: LCM method used IP pools sizes and UDP source and destination range sizes
+
+Requested flow count is lower than configuration capacity. So, NFVbench will limit IP range to generate accurate flows:
+
+.. code-block:: bash
+
+ 2020-06-17 07:37:47,012 INFO Port 0, chain 0: IP src range [110.0.0.0,110.0.0.0]
+ 2020-06-17 07:37:47,012 INFO Port 0, chain 0: IP dst range [120.0.0.0,120.0.0.15]
+ 2020-06-17 07:37:47,012 INFO Port 0, chain 0: UDP src range [53,53]
+ 2020-06-17 07:37:47,012 INFO Port 0, chain 0: UDP dst range [53,53]
+ 2020-06-17 07:37:47,015 INFO Port 1, chain 0: IP src range [120.0.0.0,120.0.0.0]
+ 2020-06-17 07:37:47,015 INFO Port 1, chain 0: IP dst range [110.0.0.0,110.0.0.15]
+ 2020-06-17 07:37:47,015 INFO Port 1, chain 0: UDP src range [53,53]
+ 2020-06-17 07:37:47,015 INFO Port 1, chain 0: UDP dst range [53,53]
+
+ 2020-06-17 07:38:47,012 INFO Port 0, chain 1: IP src range [110.0.0.1,110.0.0.1]
+ 2020-06-17 07:38:47,012 INFO Port 0, chain 1: IP dst range [120.0.0.16,120.0.0.32]
+ 2020-06-17 07:38:47,012 INFO Port 0, chain 1: UDP src range [53,53]
+ 2020-06-17 07:38:47,012 INFO Port 0, chain 1: UDP dst range [53,53]
+ 2020-06-17 07:38:47,015 INFO Port 1, chain 1: IP src range [120.0.0.1,120.0.0.1]
+ 2020-06-17 07:38:47,015 INFO Port 1, chain 1: IP dst range [110.0.0.16,110.0.0.32]
+ 2020-06-17 07:38:47,015 INFO Port 1, chain 1: UDP src range [53,53]
+ 2020-06-17 07:38:47,015 INFO Port 1, chain 1: UDP dst range [53,53]
+
+ 2020-06-17 07:39:47,012 INFO Port 0, chain 2: IP src range [110.0.0.2,110.0.0.2]
+ 2020-06-17 07:39:47,012 INFO Port 0, chain 2: IP dst range [120.0.0.33,120.0.0.49]
+ 2020-06-17 07:39:47,012 INFO Port 0, chain 2: UDP src range [53,53]
+ 2020-06-17 07:39:47,012 INFO Port 0, chain 2: UDP dst range [53,53]
+ 2020-06-17 07:39:47,015 INFO Port 1, chain 2: IP src range [120.0.0.2,120.0.0.2]
+ 2020-06-17 07:39:47,015 INFO Port 1, chain 2: IP dst range [110.0.0.33,110.0.0.49]
+ 2020-06-17 07:39:47,015 INFO Port 1, chain 2: UDP src range [53,53]
+ 2020-06-17 07:39:47,015 INFO Port 1, chain 2: UDP dst range [53,53]
+
+
+2. Source IP is static, IP step is random and one UDP port used
+
+NFVbench configuration options:
+
+.. code-block:: bash
+
+ ip_addrs: ['110.0.0.0/8', '120.0.0.0/8']
+ ip_addrs_step: 'random'
+ tg_gateway_ip_addrs: ['1.1.0.100', '2.2.0.100']
+ tg_gateway_ip_addrs_step: 0.0.0.1
+ gateway_ip_addrs: ['1.1.0.2', '2.2.0.2']
+ gateway_ip_addrs_step: 0.0.0.1
+
+To run NFVbench with 3 chains and 100 flows, use the following command:
+
+.. code-block:: bash
+
+ nfvbench -c nfvbench.cfg --rate 10000pps -scc 3 -fc 100
+
+The least common multiple for this configuration is lcm(16 777 216, 16 777 216, 1, 1) = 16 777 216.
+.. note:: LCM method used IP pools sizes and UDP source and destination range sizes
+
+Requested flow count is lower than configuration capacity. So, NFVbench will limit IP range to generate accurate flows:
+
+.. code-block:: bash
+
+ 2020-06-17 07:37:47,012 INFO Port 0, chain 0: IP src range [110.0.0.0,110.0.0.0]
+ 2020-06-17 07:37:47,012 INFO Port 0, chain 0: IP dst range [120.0.0.0,120.0.0.15]
+ 2020-06-17 07:37:47,012 INFO Port 0, chain 0: UDP src range [53,53]
+ 2020-06-17 07:37:47,012 INFO Port 0, chain 0: UDP dst range [53,53]
+ 2020-06-17 07:37:47,015 INFO Port 1, chain 0: IP src range [120.0.0.0,120.0.0.0]
+ 2020-06-17 07:37:47,015 INFO Port 1, chain 0: IP dst range [110.0.0.0,110.0.0.15]
+ 2020-06-17 07:37:47,015 INFO Port 1, chain 0: UDP src range [53,53]
+ 2020-06-17 07:37:47,015 INFO Port 1, chain 0: UDP dst range [53,53]
+
+ 2020-06-17 07:38:47,012 INFO Port 0, chain 1: IP src range [110.0.0.1,110.0.0.1]
+ 2020-06-17 07:38:47,012 INFO Port 0, chain 1: IP dst range [120.0.0.16,120.0.0.32]
+ 2020-06-17 07:38:47,012 INFO Port 0, chain 1: UDP src range [53,53]
+ 2020-06-17 07:38:47,012 INFO Port 0, chain 1: UDP dst range [53,53]
+ 2020-06-17 07:38:47,015 INFO Port 1, chain 1: IP src range [120.0.0.1,120.0.0.1]
+ 2020-06-17 07:38:47,015 INFO Port 1, chain 1: IP dst range [110.0.0.16,110.0.0.32]
+ 2020-06-17 07:38:47,015 INFO Port 1, chain 1: UDP src range [53,53]
+ 2020-06-17 07:38:47,015 INFO Port 1, chain 1: UDP dst range [53,53]
+
+ 2020-06-17 07:39:47,012 INFO Port 0, chain 2: IP src range [110.0.0.2,110.0.0.2]
+ 2020-06-17 07:39:47,012 INFO Port 0, chain 2: IP dst range [120.0.0.33,120.0.0.49]
+ 2020-06-17 07:39:47,012 INFO Port 0, chain 2: UDP src range [53,53]
+ 2020-06-17 07:39:47,012 INFO Port 0, chain 2: UDP dst range [53,53]
+ 2020-06-17 07:39:47,015 INFO Port 1, chain 2: IP src range [120.0.0.2,120.0.0.2]
+ 2020-06-17 07:39:47,015 INFO Port 1, chain 2: IP dst range [110.0.0.33,110.0.0.49]
+ 2020-06-17 07:39:47,015 INFO Port 1, chain 2: UDP src range [53,53]
+ 2020-06-17 07:39:47,015 INFO Port 1, chain 2: UDP dst range [53,53]
+ 2020-06-17 07:39:47,015 WARNING Using random step, the number of flows can be less than the requested number of flows due to repeatable multivariate random generation which can reproduce the same pattern of values
+
+By using a random step the number of generated flows may be less than the number of requested flows. This is due to the probability of drawing the same value several times (Bernouillian drawing) from the IP range used and thus generating the same flow sequence.
+By using a high range of UDP ports couple with ``udp_port_step='random'`` the probability to reach the requested flow counts is greater.
+As latency stream is a separate stream than data one and have his own random draw, NFVbench will use only one packet signature (same IP and ports used for all latency packets) to avoid flow count overflow.
+So in some cases, generated flow count can be equal to the requested flow count + 1 (latency stream).
+
+**For deterministic flow count we recommend to use a step different from random.**
+
+
+3. Source IP is static, IP step is 5 and one UDP port used
+
+NFVbench configuration options:
+
+.. code-block:: bash
+
+ ip_addrs: ['110.0.0.0/8', '120.0.0.0/8']
+ ip_addrs_step: '0.0.0.5'
+ tg_gateway_ip_addrs: ['1.1.0.100', '2.2.0.100']
+ tg_gateway_ip_addrs_step: 0.0.0.1
+ gateway_ip_addrs: ['1.1.0.2', '2.2.0.2']
+ gateway_ip_addrs_step: 0.0.0.1
+
+To run NFVbench with 3 chains and 100 flows, use the following command:
+
+.. code-block:: bash
+
+ nfvbench -c nfvbench.cfg --rate 10000pps -scc 3 -fc 100
+
+The least common multiple for this configuration is lcm(16 777 216, 16 777 216, 1, 1) = 16 777 216.
+.. note:: LCM method used IP pools sizes and UDP source and destination range sizes
+
+Requested flow count is lower than configuration capacity. So, NFVbench will limit IP range to generate accurate flows:
+
+.. code-block:: bash
+
+ 2020-06-17 07:37:47,012 INFO Port 0, chain 0: IP src range [110.0.0.0,110.0.0.0]
+ 2020-06-17 07:37:47,012 INFO Port 0, chain 0: IP dst range [120.0.0.0,120.0.0.75]
+ 2020-06-17 07:37:47,012 INFO Port 0, chain 0: UDP src range [53,53]
+ 2020-06-17 07:37:47,012 INFO Port 0, chain 0: UDP dst range [53,53]
+ 2020-06-17 07:37:47,015 INFO Port 1, chain 0: IP src range [120.0.0.0,120.0.0.0]
+ 2020-06-17 07:37:47,015 INFO Port 1, chain 0: IP dst range [110.0.0.0,110.0.0.75]
+ 2020-06-17 07:37:47,015 INFO Port 1, chain 0: UDP src range [53,53]
+ 2020-06-17 07:37:47,015 INFO Port 1, chain 0: UDP dst range [53,53]
+
+ 2020-06-17 07:38:47,012 INFO Port 0, chain 1: IP src range [110.0.0.5,110.0.0.5]
+ 2020-06-17 07:38:47,012 INFO Port 0, chain 1: IP dst range [120.0.0.80,120.0.0.160]
+ 2020-06-17 07:38:47,012 INFO Port 0, chain 1: UDP src range [53,53]
+ 2020-06-17 07:38:47,012 INFO Port 0, chain 1: UDP dst range [53,53]
+ 2020-06-17 07:38:47,015 INFO Port 1, chain 1: IP src range [120.0.0.5,120.0.0.5]
+ 2020-06-17 07:38:47,015 INFO Port 1, chain 1: IP dst range [110.0.0.80,110.0.0.160]
+ 2020-06-17 07:38:47,015 INFO Port 1, chain 1: UDP src range [53,53]
+ 2020-06-17 07:38:47,015 INFO Port 1, chain 1: UDP dst range [53,53]
+
+ 2020-06-17 07:39:47,012 INFO Port 0, chain 2: IP src range [110.0.0.10,110.0.0.10]
+ 2020-06-17 07:39:47,012 INFO Port 0, chain 2: IP dst range [120.0.0.165,120.0.0.245]
+ 2020-06-17 07:39:47,012 INFO Port 0, chain 2: UDP src range [53,53]
+ 2020-06-17 07:39:47,012 INFO Port 0, chain 2: UDP dst range [53,53]
+ 2020-06-17 07:39:47,015 INFO Port 1, chain 2: IP src range [120.0.0.10,120.0.0.10]
+ 2020-06-17 07:39:47,015 INFO Port 1, chain 2: IP dst range [110.0.0.165,110.0.0.245]
+ 2020-06-17 07:39:47,015 INFO Port 1, chain 2: UDP src range [53,53]
+ 2020-06-17 07:39:47,015 INFO Port 1, chain 2: UDP dst range [53,53]
+
+4. Source IP is static, IP and UDP ranges sizes greater than requested flow count, UDP step is random
+
+NFVbench configuration options:
+
+.. code-block:: bash
+
+ ip_addrs: ['110.0.0.0/29', '120.0.0.0/30']
+ tg_gateway_ip_addrs: ['1.1.0.100', '2.2.0.100']
+ tg_gateway_ip_addrs_step: 0.0.0.1
+ gateway_ip_addrs: ['1.1.0.2', '2.2.0.2']
+ gateway_ip_addrs_step: 0.0.0.1
+ udp_src_port: ['10', '14']
+ udp_dst_port: ['20', '25']
+ udp_port_step: 'random'
+
+To run NFVbench with 3 chains and 100 flows, use the following command:
+
+.. code-block:: bash
+
+ nfvbench -c nfvbench.cfg --rate 10000pps -scc 3 -fc 100
+
+The least common multiple for this configuration is lcm(8, 4, 5, 6) = 120.
+.. note:: LCM method used IP pools sizes and UDP source and destination range sizes
+
+Requested flow count is higher than IP range (8 and 4 IP addresses available) and UDP (5 and 6 ports available) configuration capacity.
+As the combination of ranges does not permit to obtain an accurate flow count, NFVbench will override the `udp_port_step` property to '1' (was 'random') to allow flows creation.
+A warning log will appear to inform NFVbench user that step properties will be overriden
+So, NFVbench will determine each pool size to generate accurate flows:
+
+.. code-block:: bash
+
+ 2020-06-17 07:37:47,010 WARNING Current values of ip_addrs_step and/or udp_port_step properties do not allow to control an accurate flow count. Values will be overridden as follows:
+ 2020-06-17 07:37:47,011 INFO udp_port_step='1' (previous value: udp_port_step='random')
+ 2020-06-17 07:37:47,012 INFO Port 0, chain 0: IP src range [110.0.0.0,110.0.0.0]
+ 2020-06-17 07:37:47,012 INFO Port 0, chain 0: IP dst range [120.0.0.0,120.0.0.0]
+ 2020-06-17 07:37:47,012 INFO Port 0, chain 0: UDP src range [10,14]
+ 2020-06-17 07:37:47,012 INFO Port 0, chain 0: UDP dst range [20,25]
+ 2020-06-17 07:37:47,013 WARNING Current values of ip_addrs_step and/or udp_port_step properties do not allow to control an accurate flow count. Values will be overridden as follows:
+ 2020-06-17 07:37:47,013 INFO udp_port_step='1' (previous value: udp_port_step='random'
+ 2020-06-17 07:37:47,015 INFO Port 1, chain 0: IP src range [120.0.0.0,120.0.0.0]
+ 2020-06-17 07:37:47,015 INFO Port 1, chain 0: IP dst range [110.0.0.0,110.0.0.0]
+ 2020-06-17 07:37:47,015 INFO Port 1, chain 0: UDP src range [10,14]
+ 2020-06-17 07:37:47,015 INFO Port 1, chain 0: UDP dst range [20,25]
+
+ 2020-06-17 07:38:47,010 WARNING Current values of ip_addrs_step and/or udp_port_step properties do not allow to control an accurate flow count. Values will be overridden as follows:
+ 2020-06-17 07:38:47,011 INFO udp_port_step='1' (previous value: udp_port_step='random'
+ 2020-06-17 07:38:47,012 INFO Port 0, chain 1: IP src range [110.0.0.1,110.0.0.1]
+ 2020-06-17 07:38:47,012 INFO Port 0, chain 1: IP dst range [120.0.0.1,120.0.0.1]
+ 2020-06-17 07:38:47,012 INFO Port 0, chain 1: UDP src range [10,14]
+ 2020-06-17 07:38:47,012 INFO Port 0, chain 1: UDP dst range [20,25]
+ 2020-06-17 07:38:47,013 WARNING Current values of ip_addrs_step and/or udp_port_step properties do not allow to control an accurate flow count. Values will be overridden as follows:
+ 2020-06-17 07:38:47,013 INFO udp_port_step='1' (previous value: udp_port_step='random'
+ 2020-06-17 07:38:47,015 INFO Port 1, chain 1: IP src range [120.0.0.1,120.0.0.1]
+ 2020-06-17 07:38:47,015 INFO Port 1, chain 1: IP dst range [110.0.0.1,110.0.0.1]
+ 2020-06-17 07:38:47,015 INFO Port 1, chain 1: UDP src range [10,14]
+ 2020-06-17 07:38:47,015 INFO Port 1, chain 1: UDP dst range [20,25]
+
+ 2020-06-17 07:39:47,010 WARNING Current values of ip_addrs_step and/or udp_port_step properties do not allow to control an accurate flow count. Values will be overridden as follows:
+ 2020-06-17 07:39:47,011 INFO udp_port_step='1' (previous value: udp_port_step='random'
+ 2020-06-17 07:39:47,012 INFO Port 0, chain 2: IP src range [110.0.0.2,110.0.0.2]
+ 2020-06-17 07:39:47,012 INFO Port 0, chain 2: IP dst range [120.0.0.2,120.0.0.2]
+ 2020-06-17 07:39:47,012 INFO Port 0, chain 2: UDP src range [10,14]
+ 2020-06-17 07:39:47,012 INFO Port 0, chain 2: UDP dst range [20,25]
+ 2020-06-17 07:39:47,013 WARNING Current values of ip_addrs_step and/or udp_port_step properties do not allow to control an accurate flow count. Values will be overridden as follows:
+ 2020-06-17 07:39:47,013 INFO udp_port_step='1' (previous value: udp_port_step='random'
+ 2020-06-17 07:39:47,015 INFO Port 1, chain 2: IP src range [120.0.0.2,120.0.0.2]
+ 2020-06-17 07:39:47,015 INFO Port 1, chain 2: IP dst range [110.0.0.2,110.0.0.2]
+ 2020-06-17 07:39:47,015 INFO Port 1, chain 2: UDP src range [10,14]
+ 2020-06-17 07:39:47,015 INFO Port 1, chain 2: UDP dst range [20,25]
+
+
+Traffic Configuration via CLI
+-----------------------------
+
+While traffic configuration can be modified using the configuration file, it can be inconvenient to have to change the configuration file everytime
+you need to change a traffic configuration option. Traffic configuration options can be overridden with a few CLI options.
+
+Here is an example of configuring traffic via CLI:
+
+.. code-block:: bash
+
+ nfvbench --rate 10kpps --service-chain-count 2 -fs 64 -fs IMIX -fs 1518 --unidir
+
+This command will run NFVbench with a unidirectional flow for three packet sizes 64B, IMIX, and 1518B.
+
+Used parameters:
+
+* ``--rate 10kpps`` : defines rate of packets sent by traffic generator (total TX rate)
+* ``-scc 2`` or ``--service-chain-count 2`` : specifies number of parallel chains of given flow to run (default to 1)
+* ``-fs 64`` or ``--frame-size 64``: add the specified frame size to the list of frame sizes to run
+* ``--unidir`` : run traffic with unidirectional flow (default to bidirectional flow)
+
+
+.. _adv-l2l-cli:
+
+L2 loopback test via CLI
+------------------------
+
+The CLI allows running a pure L2 loopback benchmark with the ``--l2-loopback`` option.
+Enabling this mode overrides any service chain type selected in the config file.
+The usual argument would be a single VLAN ID but the syntax has been extended.
+
+Examples of runs:
+
+* specify the vlan ID
+
+ .. code-block:: bash
+
+ nfvbench -c nfvbench.cfg --frame-size=64 --rate=100% --duration=10 --l2-loopback=123
+
+* specify a list of vlan IDs
+
+ Several service chains are created, the count is adjusted to the list size.
+
+ .. code-block:: bash
+
+ nfvbench -c nfvbench.cfg -fs=64 --rate=100% --duration=10 --l2-loopback=123,124,125
+
+* enable the mode without VLAN tagging
+
+ In this case the service chain count is forced to 1.
+
+ .. code-block:: bash
+
+ nfvbench -c nfvbench.cfg -fs=64 --rate=100% --duration=10 --l2-loopback=no-tag
+
+* use different VLAN tags for left & right side ports
+
+ .. code-block:: bash
+
+ nfvbench -c nfvbench.cfg -fs=64 --rate=100% --duration=10 --l2-loopback=111_211
+ nfvbench -c nfvbench.cfg -fs=64 --rate=100% --duration=10 --l2-loopback=111,112_211,212
+
+ .. note::
+ It may look bizarre to specify mismatched VLAN tags for left & right sides,
+ however no assumption is made about the loop implementation.
+ This could help testing some exotic L2 layer configuration comprising a VLAN rewriting.
+
+* enable the mode, starting from current settings (prepared in the cfg file)
+
+ In this case the service chain count is not adjusted.
+
+ .. code-block:: bash
+
+ nfvbench -c nfvbench.cfg -fs=64 --rate=100% --duration=10 --l2-loopback=true
+
+* disable the mode (possibly enabled in the cfg file)
+
+ .. code-block:: bash
+
+ nfvbench -c nfvbench.cfg --l2-loopback=false
+
+
+MAC Addresses
+-------------
+
+NFVbench will dicover the MAC addresses to use for generated frames using:
+- either OpenStack discovery (find the MAC of an existing VM) in the case of PVP and PVVP service chains
+- or using dynamic ARP discovery (find MAC from IP) in the case of external chains.
+- In case of L3 chain with SDN-GW or router between traffic generator and loop VM ARP is needed to discover SDN-GW mac addresses, use ``--loop-vm-arp`` flag or ``loop_vm_arp: true`` in config file.
+
+Status and Cleanup of NFVbench Resources
+----------------------------------------
+
+The --status option will display the status of NFVbench and list any NFVbench resources. You need to pass the OpenStack RC
+file in order to connect to OpenStack.
+
+.. code-block:: none
+
+ # nfvbench --status -r /tmp/nfvbench/openrc
+ 2018-04-09 17:05:48,682 INFO Version: 1.3.2.dev1
+ 2018-04-09 17:05:48,683 INFO Status: idle
+ 2018-04-09 17:05:48,757 INFO Discovering instances nfvbench-loop-vm...
+ 2018-04-09 17:05:49,252 INFO Discovering flavor nfvbench.medium...
+ 2018-04-09 17:05:49,281 INFO Discovering networks...
+ 2018-04-09 17:05:49,365 INFO No matching NFVbench resources found
+ #
+
+The Status can be either "idle" or "busy (run pending)".
+
+The --cleanup option will first discover resources created by NFVbench and prompt if you want to proceed with cleaning them up.
+Example of run:
+
+.. code-block:: none
+
+ # nfvbench --cleanup -r /tmp/nfvbench/openrc
+ 2018-04-09 16:58:00,204 INFO Version: 1.3.2.dev1
+ 2018-04-09 16:58:00,205 INFO Status: idle
+ 2018-04-09 16:58:00,279 INFO Discovering instances nfvbench-loop-vm...
+ 2018-04-09 16:58:00,829 INFO Discovering flavor nfvbench.medium...
+ 2018-04-09 16:58:00,876 INFO Discovering networks...
+ 2018-04-09 16:58:00,960 INFO Discovering ports...
+ 2018-04-09 16:58:01,012 INFO Discovered 6 NFVbench resources:
+ +----------+-------------------+--------------------------------------+
+ | Type | Name | UUID |
+ |----------+-------------------+--------------------------------------|
+ | Instance | nfvbench-loop-vm0 | b039b858-777e-467e-99fb-362f856f4a94 |
+ | Flavor | nfvbench.medium | a027003c-ad86-4f24-b676-2b05bb06adc0 |
+ | Network | nfvbench-net0 | bca8d183-538e-4965-880e-fd92d48bfe0d |
+ | Network | nfvbench-net1 | c582a201-8279-4309-8084-7edd6511092c |
+ | Port | | 67740862-80ac-4371-b04e-58a0b0f05085 |
+ | Port | | b5db95b9-e419-4725-951a-9a8f7841e66a |
+ +----------+-------------------+--------------------------------------+
+ 2018-04-09 16:58:01,013 INFO NFVbench will delete all resources shown...
+ Are you sure? (y/n) y
+ 2018-04-09 16:58:01,865 INFO Deleting instance nfvbench-loop-vm0...
+ 2018-04-09 16:58:02,058 INFO Waiting for 1 instances to be fully deleted...
+ 2018-04-09 16:58:02,182 INFO 1 yet to be deleted by Nova, retries left=6...
+ 2018-04-09 16:58:04,506 INFO 1 yet to be deleted by Nova, retries left=5...
+ 2018-04-09 16:58:06,636 INFO 1 yet to be deleted by Nova, retries left=4...
+ 2018-04-09 16:58:08,701 INFO Deleting flavor nfvbench.medium...
+ 2018-04-09 16:58:08,729 INFO Deleting port 67740862-80ac-4371-b04e-58a0b0f05085...
+ 2018-04-09 16:58:09,102 INFO Deleting port b5db95b9-e419-4725-951a-9a8f7841e66a...
+ 2018-04-09 16:58:09,620 INFO Deleting network nfvbench-net0...
+ 2018-04-09 16:58:10,357 INFO Deleting network nfvbench-net1...
+ #
+
+The --force-cleanup option will do the same but without prompting for confirmation.
+
+Service mode for TRex
+---------------------
+
+The ``--service-mode`` option allows you to capture traffic on a TRex window during the NFVBench test. Thus, you will be
+able to capture packets generated by TRex to observe many information on it.
+
+Example of use :
+
+.. code-block:: bash
+
+ nfvbench ``--service-mode``
+
+.. note:: It is preferable to define the minimum rate (2002 pps) to have a better capture
+
+In another bash window, you should connect to the TRex console doing:
+
+.. code-block:: bash
+
+ cd /opt/trex/vX.XX/ # use completion here to find your corresponding TRex version
+ ./trex-console --python3 -r
+ # capture on port number 0
+ capture monitor start --rx 0 -v
+
+ # to stop capture
+ capture monitor stop
+
+Start this capture once you have started the NFVBench test, and you will observe packets on the TRex console:
+
+.. code-block:: bash
+
+ #26342 Port: 0 ◀── RX
+
+ trex(read-only)>
+
+ Type: UDP, Size: 66 B, TS: 26.30 [sec]
+
+ trex(read-only)>
+ ###[ Ethernet ]###
+ dst = a0:36:9f:7a:58:8e
+ src = fa:16:3e:57:8f:df
+ type = 0x8100
+ ###[ 802.1Q ]###
+ prio = 0
+ id = 0
+ vlan = 1093
+ type = 0x800
+ ###[ IP ]###
+ version = 4
+ ihl = 5
+ tos = 0x1
+ len = 46
+ id = 65535
+ flags =
+ frag = 0
+ ttl = 63
+ proto = udp
+ chksum = 0x8425
+ src = 120.0.0.0
+ dst = 110.0.17.153
+ \options \
+ ###[ UDP ]###
+ sport = 53
+ dport = 53
+ len = 26
+ chksum = 0xfd83
+ ###[ Raw ]###
+ load = "xx\xab'\x01\x00?s\x00\x00\xbci\xf0_{U~\x00"
+ ###[ Padding ]###
+ load = '6\x85'
+
+Check on the NFVBench window that the following log appears just before the testing phase:
+
+.. code-block:: bash
+
+ 2019-10-21 09:38:51,532 INFO Starting to generate traffic...
+ 2019-10-21 09:38:51,532 INFO Running traffic generator
+ 2019-10-21 09:38:51,541 INFO ``Service mode is enabled``
+ 2019-10-21 09:38:52,552 INFO TX: 2004; RX: 2003; Est. Dropped: 1; Est. Drop rate: 0.0499%
+ 2019-10-21 09:38:53,559 INFO TX: 4013; RX: 4011; Est. Dropped: 2; Est. Drop rate: 0.0498%
+
+Recording packet using service mode for TRex
+--------------------------------------------
+
+Check on the NFVBench window that the following log appears just before the testing phase:
+
+.. code-block:: bash
+
+ 2019-10-21 09:38:51,532 INFO Starting to generate traffic...
+ 2019-10-21 09:38:51,532 INFO Running traffic generator
+ 2019-10-21 09:38:51,541 INFO ``Service mode is enabled``
+ 2019-10-21 09:38:52,552 INFO TX: 2004; RX: 2003; Est. Dropped: 1; Est. Drop rate: 0.0499%
+
+In another bash window, you should connect to the TRex console doing :
+
+.. code-block:: bash
+
+ cd /opt/trex/vX.XX/ #use completion here to find your corresponding TRex version
+ ./trex-console -r
+ capture record start --rx [port number] --limit 10000
+.. note::Start this capture once traffic generation is started (after ``Service mode is enabled`` log)
+
+Check on the TRex window that the following log appears just after capture is started:
+
+.. code-block:: bash
+
+ Starting packet capturing up to 10000 packets [SUCCESS]
+ *** Capturing ID is set to '8' ***
+ *** Please call 'capture record stop --id 8 -o <out.pcap>' when done ***
+
+Then **before end of traffic generation**, stop capture and save it as a PCAP file:
+
+.. code-block:: bash
+
+ capture record stop --id 8 -o /tmp/nfvb/record.pcap
+.. note:: Provide a shared path with between NFVbench container and your host to retrieve pcap file
+
+Check on the TRex window that the following log appears just after capture is started:
+
+.. code-block:: bash
+
+ Stopping packet capture 8 [SUCCESS]
+ Writing up to 10000 packets to '/tmp/nfvb/record.pcap' [SUCCESS]
+ Removing PCAP capture 8 from server [SUCCESS]
+
+.. _user-info:
+
+User info data
+--------------
+
+The ``--user-info`` option allows you to pass custom information as a JSON string.
+This information will be available through JSON output and also exported to ``fluentd`` and can be used in results post-processing.
+
+Example of use :
+
+.. code-block:: bash
+
+ nfvbench ``--user-info='{"status":"explore","description":{"target":"lab","ok":true,"version":2020}'``
+
+.. note:: only JSON string is allowed
+
+``--user-info`` can be used for determining theoretical max rate. In some cases, an overhead encapsulation exists between NFVbench and SUT so NFVbench will not reach line rate inside SUT due to this extra encapsulation.
+To calculate this theoretical line rate inside SUT, NFVbench will use a reserved key: ``extra_encapsulation_bytes`` in ``--user-info`` property.
+
+.. code-block:: bash
+
+ nfvbench ``--user-info='{"extra_encapsulation_bytes": 28}'``
+
+
+As a result, NFVbench will return two values ``theoretical_tx_rate_bps`` and ``theoretical_tx_rate_pps``:
+
+.. code-block:: bash
+
+ "ndr": {
+ "duration_sec": 2.0,
+ "initial_rate_type": "rate_percent",
+ "l2frame_size": "64",
+ "load_percent_per_direction": 100.0,
+ "rate_bps": 20000000000.0,
+ "rate_percent": 200.0,
+ "rate_pps": 29761904,
+ "stats": {
+ ...
+ "offered_tx_rate_bps": 15000000000.0,
+ ...
+ "theoretical_tx_rate_bps": 15000000000.0,
+ "theoretical_tx_rate_pps": 22321428.57142857,
+ "total_tx_rate": 22321428
+ },
+
+In the above example, line rate is 20Gbps but NFVbench is outside SUT and a SDN gateway add an extra encapsulation of 28 bytes.
+Overall, theoretical line rate inside SUT is only 15 Gbps for 64 bytes packet size and it will be this max capacity treated by the target compute node.
diff --git a/docs/testing/user/userguide/examples.rst b/docs/user/examples.rst
index fd6be5c..fd6be5c 100644
--- a/docs/testing/user/userguide/examples.rst
+++ b/docs/user/examples.rst
diff --git a/docs/testing/user/userguide/extchains.rst b/docs/user/extchains.rst
index f7c0e51..f7c0e51 100644
--- a/docs/testing/user/userguide/extchains.rst
+++ b/docs/user/extchains.rst
diff --git a/docs/user/faq.rst b/docs/user/faq.rst
new file mode 100644
index 0000000..014a1ab
--- /dev/null
+++ b/docs/user/faq.rst
@@ -0,0 +1,95 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. SPDX-License-Identifier: CC-BY-4.0
+.. (c) Cisco Systems, Inc
+
+Frequently Asked Questions
+**************************
+
+General Questions
+=================
+
+Can NFVbench be used without OpenStack
+--------------------------------------
+Yes. This can be done using the EXT chain mode, with or without ARP
+(depending on whether your systen under test can do routing) and by setting the openrc_file
+property to empty in the NFVbench configuration.
+
+Can NFVbench be used with a different traffic generator than TRex?
+------------------------------------------------------------------
+This is possible but requires developing a new python class to manage the new traffic generator interface.
+
+Can I connect Trex directly to my compute node?
+-----------------------------------------------
+Yes.
+
+Can I drive NFVbench using a REST interface?
+--------------------------------------------
+NFVbench can run in server mode and accept HTTP requests to run any type of measurement (fixed rate run or NDR_PDR run)
+with any run configuration.
+
+Can I run NFVbench on a Cisco UCS-B series blade?
+-------------------------------------------------
+Yes provided your UCS-B series server has a Cisco VIC 1340 (with a recent firmware version).
+TRex will require VIC firmware version 3.1(2) or higher for blade servers (which supports more filtering capabilities).
+In this setting, the 2 physical interfaces for data plane traffic are simply hooked to the UCS-B fabric interconnect (no need to connect to a switch).
+
+Troubleshooting
+===============
+
+TrafficClientException: End-to-end connectivity cannot be ensured
+------------------------------------------------------------------
+Prior to running a benchmark, NFVbench will make sure that traffic is passing in the service chain by sending a small flow of packets in each direction and verifying that they are received back at the other end.
+This exception means that NFVbench cannot pass any traffic in the service chain.
+
+The most common issues that prevent traffic from passing are:
+- incorrect wiring of the NFVbench/TRex interfaces
+- incorrect vlan_tagging setting in the NFVbench configuration, this needs to match how the NFVbench ports on the switch are configured (trunk or access port)
+
+ - if the switch port is configured as access port, you must disable vlan_tagging in the NFVbench configuration
+ - if the switch port is configured as trunk (recommended method), you must enable it
+
+Issues with high performances at a high line rate
+-------------------------------------------------
+
+Flow statistics and/or latency stream can cause performance issue when testing high line rate.
+
+Flow statistics implies CPU usage to analyse packets and retrieve statistics. CPU can reach 100% usage when high throughput is tested because only one CPU is used for packet reception in TRex.
+The ``--no-flow-stats`` option allows you to disable TRex statistics aggregation during the NFVBench test.
+This, will permit to save CPU capabilities used for packet reception.
+
+Example of use :
+
+.. code-block:: bash
+
+ nfvbench ``--no-flow-stats``
+
+ 2019-10-28 10:26:52,099 INFO End-to-end connectivity established
+ 2019-10-28 10:26:52,127 INFO Cleared all existing streams
+ 2019-10-28 10:26:52,129 INFO Traffic flow statistics are disabled.
+
+
+Latency streams implies also CPU usage to analyse packets and retrieve latency values. CPU can reach 100% usage when high throughput is tested because only one CPU is used for packet reception in TRex.
+The ``--no-latency-streams`` option allows you to disable latency streams during the NFVBench test.
+This, will permit to save CPU capabilities used for packet reception but no latency information will be return (to be used only if latency value has no meaning for your test).
+
+Example of use :
+
+.. code-block:: bash
+
+ nfvbench ``--no-latency-streams``
+ 2019-10-28 10:30:03,955 INFO End-to-end connectivity established
+ 2019-10-28 10:30:03,982 INFO Cleared all existing streams
+ 2019-10-28 10:30:03,982 INFO Latency streams are disabled
+
+
+Latency flow statistics implies CPU usage to analyse packets and retrieve statistics. CPU can reach 100% usage when high throughput is tested because only one CPU is used for packet reception in TRex.
+The ``--no-latency-stats`` option allows you to disable TRex statistics aggregation for latency packets during the NFVBench test.
+This, will permit to save CPU capabilities used for packet reception.
+
+Example of use :
+
+.. code-block:: bash
+
+ nfvbench ``--no-latency-stats``
+ 2019-10-28 10:28:21,559 INFO Cleared all existing streams
+ 2019-10-28 10:28:21,567 INFO Latency flow statistics are disabled.
diff --git a/docs/testing/user/userguide/fluentd.rst b/docs/user/fluentd.rst
index e1ff37f..7332458 100644
--- a/docs/testing/user/userguide/fluentd.rst
+++ b/docs/user/fluentd.rst
@@ -192,3 +192,4 @@ And the results of this command obtained from fluentd by elasticsearch:
1508264203755
]
}
+
diff --git a/docs/testing/user/userguide/hw_requirements.rst b/docs/user/hw_requirements.rst
index 4fc6e21..44ab549 100644
--- a/docs/testing/user/userguide/hw_requirements.rst
+++ b/docs/user/hw_requirements.rst
@@ -14,7 +14,8 @@ To run NFVbench you need the following hardware:
- a DPDK compatible NIC with at least 2 ports (preferably 10Gbps or higher)
- 2 ethernet cables between the NIC and the OpenStack pod under test (usually through a top of rack switch)
-The DPDK-compliant NIC must be one supported by the TRex traffic generator (such as Intel X710, refer to the `Trex Installation Guide <https://trex-tgn.cisco.com/trex/doc/trex_manual.html#_download_and_installation>`_ for a complete list of supported NIC)
+The DPDK-compliant NIC must be one supported by the TRex traffic generator (such as Intel X710,
+refer to the Trex Installation Guide for a complete list of supported NIC)
To run the TRex traffic generator (that is bundled with NFVbench) you will need to wire 2 physical interfaces of the NIC to the TOR switch(es):
- if you have only 1 TOR, wire both interfaces to that same TOR
@@ -67,4 +68,4 @@ Finally, the correct iommu options and huge pages to be configured on the Linux
- enable intel_iommu and iommu pass through: "intel_iommu=on iommu=pt"
- for Trex, pre-allocate 1024 huge pages of 2MB each (for a total of 2GB): "hugepagesz=2M hugepages=1024"
-More detailed instructions can be found in the DPDK documentation (https://media.readthedocs.org/pdf/dpdk/latest/dpdk.pdf).
+More detailed instructions can be found in the DPDK documentation (https://buildmedia.readthedocs.org/media/pdf/dpdk/latest/dpdk.pdf).
diff --git a/docs/testing/user/userguide/images/extchain-config.png b/docs/user/images/extchain-config.png
index 2fd39ba..2fd39ba 100644
--- a/docs/testing/user/userguide/images/extchain-config.png
+++ b/docs/user/images/extchain-config.png
Binary files differ
diff --git a/docs/testing/user/userguide/images/nfvbench-all-sriov-pvvp.png b/docs/user/images/nfvbench-all-sriov-pvvp.png
index d7b1cbb..d7b1cbb 100644
--- a/docs/testing/user/userguide/images/nfvbench-all-sriov-pvvp.png
+++ b/docs/user/images/nfvbench-all-sriov-pvvp.png
Binary files differ
diff --git a/docs/testing/user/userguide/images/nfvbench-all-sriov-pvvp2.png b/docs/user/images/nfvbench-all-sriov-pvvp2.png
index 3d161cd..3d161cd 100644
--- a/docs/testing/user/userguide/images/nfvbench-all-sriov-pvvp2.png
+++ b/docs/user/images/nfvbench-all-sriov-pvvp2.png
Binary files differ
diff --git a/docs/testing/user/userguide/images/nfvbench-ext-multi-vlans.png b/docs/user/images/nfvbench-ext-multi-vlans.png
index 2ef2300..2ef2300 100644
--- a/docs/testing/user/userguide/images/nfvbench-ext-multi-vlans.png
+++ b/docs/user/images/nfvbench-ext-multi-vlans.png
Binary files differ
diff --git a/docs/testing/user/userguide/images/nfvbench-ext-shared.png b/docs/user/images/nfvbench-ext-shared.png
index efe1c71..efe1c71 100644
--- a/docs/testing/user/userguide/images/nfvbench-ext-shared.png
+++ b/docs/user/images/nfvbench-ext-shared.png
Binary files differ
diff --git a/docs/user/images/nfvbench-kibana-filter-kql.png b/docs/user/images/nfvbench-kibana-filter-kql.png
new file mode 100644
index 0000000..f5c7b2d
--- /dev/null
+++ b/docs/user/images/nfvbench-kibana-filter-kql.png
Binary files differ
diff --git a/docs/user/images/nfvbench-kibana-filter.png b/docs/user/images/nfvbench-kibana-filter.png
new file mode 100644
index 0000000..18a6dc5
--- /dev/null
+++ b/docs/user/images/nfvbench-kibana-filter.png
Binary files differ
diff --git a/docs/user/images/nfvbench-kibana-gbps-line.png b/docs/user/images/nfvbench-kibana-gbps-line.png
new file mode 100644
index 0000000..1947412
--- /dev/null
+++ b/docs/user/images/nfvbench-kibana-gbps-line.png
Binary files differ
diff --git a/docs/user/images/nfvbench-kibana-pps-scatter.png b/docs/user/images/nfvbench-kibana-pps-scatter.png
new file mode 100644
index 0000000..89a8e47
--- /dev/null
+++ b/docs/user/images/nfvbench-kibana-pps-scatter.png
Binary files differ
diff --git a/docs/user/images/nfvbench-kibana-pps-theoretical.png b/docs/user/images/nfvbench-kibana-pps-theoretical.png
new file mode 100644
index 0000000..da7dc7a
--- /dev/null
+++ b/docs/user/images/nfvbench-kibana-pps-theoretical.png
Binary files differ
diff --git a/docs/user/images/nfvbench-kibana-zoom-selection.png b/docs/user/images/nfvbench-kibana-zoom-selection.png
new file mode 100644
index 0000000..6af64ea
--- /dev/null
+++ b/docs/user/images/nfvbench-kibana-zoom-selection.png
Binary files differ
diff --git a/docs/user/images/nfvbench-kibana.png b/docs/user/images/nfvbench-kibana.png
new file mode 100644
index 0000000..d185fa0
--- /dev/null
+++ b/docs/user/images/nfvbench-kibana.png
Binary files differ
diff --git a/docs/testing/user/userguide/images/nfvbench-npvp.png b/docs/user/images/nfvbench-npvp.png
index 53d7b00..53d7b00 100644
--- a/docs/testing/user/userguide/images/nfvbench-npvp.png
+++ b/docs/user/images/nfvbench-npvp.png
Binary files differ
diff --git a/docs/testing/user/userguide/images/nfvbench-pvp.png b/docs/user/images/nfvbench-pvp.png
index b460beb..b460beb 100644
--- a/docs/testing/user/userguide/images/nfvbench-pvp.png
+++ b/docs/user/images/nfvbench-pvp.png
Binary files differ
diff --git a/docs/user/images/nfvbench-pvpl3.png b/docs/user/images/nfvbench-pvpl3.png
new file mode 100644
index 0000000..d583724
--- /dev/null
+++ b/docs/user/images/nfvbench-pvpl3.png
Binary files differ
diff --git a/docs/testing/user/userguide/images/nfvbench-pvvp.png b/docs/user/images/nfvbench-pvvp.png
index d412b20..d412b20 100644
--- a/docs/testing/user/userguide/images/nfvbench-pvvp.png
+++ b/docs/user/images/nfvbench-pvvp.png
Binary files differ
diff --git a/docs/testing/user/userguide/images/nfvbench-pvvp2.png b/docs/user/images/nfvbench-pvvp2.png
index 94f84de..94f84de 100644
--- a/docs/testing/user/userguide/images/nfvbench-pvvp2.png
+++ b/docs/user/images/nfvbench-pvvp2.png
Binary files differ
diff --git a/docs/testing/user/userguide/images/nfvbench-sriov-pvp.png b/docs/user/images/nfvbench-sriov-pvp.png
index 7faec17..7faec17 100644
--- a/docs/testing/user/userguide/images/nfvbench-sriov-pvp.png
+++ b/docs/user/images/nfvbench-sriov-pvp.png
Binary files differ
diff --git a/docs/testing/user/userguide/images/nfvbench-sriov-pvvp.png b/docs/user/images/nfvbench-sriov-pvvp.png
index 5faf8b2..5faf8b2 100644
--- a/docs/testing/user/userguide/images/nfvbench-sriov-pvvp.png
+++ b/docs/user/images/nfvbench-sriov-pvvp.png
Binary files differ
diff --git a/docs/testing/user/userguide/images/nfvbench-sriov-pvvp2.png b/docs/user/images/nfvbench-sriov-pvvp2.png
index f0c1e93..f0c1e93 100644
--- a/docs/testing/user/userguide/images/nfvbench-sriov-pvvp2.png
+++ b/docs/user/images/nfvbench-sriov-pvvp2.png
Binary files differ
diff --git a/docs/testing/user/userguide/images/nfvbench-trex-setup.png b/docs/user/images/nfvbench-trex-setup.png
index 6268068..6268068 100644
--- a/docs/testing/user/userguide/images/nfvbench-trex-setup.png
+++ b/docs/user/images/nfvbench-trex-setup.png
Binary files differ
diff --git a/docs/user/images/nfvbench-xtesting.png b/docs/user/images/nfvbench-xtesting.png
new file mode 100644
index 0000000..d5dca8d
--- /dev/null
+++ b/docs/user/images/nfvbench-xtesting.png
Binary files differ
diff --git a/docs/testing/user/userguide/index.rst b/docs/user/index.rst
index e83912f..65b6c2a 100644
--- a/docs/testing/user/userguide/index.rst
+++ b/docs/user/index.rst
@@ -15,8 +15,8 @@ The NFVbench tool provides an automated way to measure the network performance f
It is designed to be easy to install and easy to use by non experts (no need to be an expert in traffic generators and data plane performance testing).
-Table of Content
-----------------
+Table of Contents
+
.. toctree::
:maxdepth: 3
@@ -24,8 +24,12 @@ Table of Content
installation
examples
advanced
+ pvpl3
+ xtesting
+ mpls
extchains
fluentd
+ kibana
sriov
server
faq
diff --git a/docs/testing/user/userguide/installation.rst b/docs/user/installation.rst
index 8a0511a..8a0511a 100644
--- a/docs/testing/user/userguide/installation.rst
+++ b/docs/user/installation.rst
diff --git a/docs/user/kibana.rst b/docs/user/kibana.rst
new file mode 100644
index 0000000..5fb41f7
--- /dev/null
+++ b/docs/user/kibana.rst
@@ -0,0 +1,96 @@
+.. Copyright 2016 - 2023, Cisco Systems, Inc. and the NFVbench project contributors
+.. SPDX-License-Identifier: CC-BY-4.0
+
+NFVbench Kibana visualization: overview
+=======================================
+
+The fluentd integration offers the possibility to use elasticsearch and kibana as a visualization chain.
+
+Chain overview:
+
+.. image:: images/nfvbench-kibana.png
+
+Example of NFVbench visualizations
+----------------------------------
+
+Kibana offers a lot of visualization type (line and bar charts, pie, time series chart, data table ...) and also provide a plugin to develop graph using Vega.
+In the below examples, visualizations are based on an NDR result and are developed using `Vega-lite <https://vega.github.io/vega-lite-v2>`_.
+Data are aggregated using ``user_label`` and ``flow_count`` properties.
+
+In ``kibana/visualizations/`` pre-created graphs are available into json files.
+
+For NDR capacity in Gbps using line chart, the offered load in Gbps (``offered_tx_rate_bps``) is used and only the maximum value of the aggregation is kept.
+For NDR capacity in Mpps using line chart, the actual TX rate is used (``rate_pps``) and only the maximum value of the aggregation is kept.
+
+Scatter plot graphs use the same values but keep all values instead of keeping maximum.
+
+Example of a line chart:
+
+.. image:: images/nfvbench-kibana-gbps-line.png
+
+Example of a scatter plot chart:
+
+.. image:: images/nfvbench-kibana-pps-scatter.png
+
+Vega offers the possibility to add another graph as a new layer of current graph.
+This solution is used to combine NFVbench results and theoretical line rate.
+Using ``extra_encapsulation_bytes`` in --user-info property (see :ref:`user-info`),
+the theoretical max value (for bps and pps) will be calculated and can be used in graph through ``theoretical_tx_rate_bps`` and ``theoretical_tx_rate_pps`` properties.
+
+Example of chart with theoretical value (red line):
+
+.. image:: images/nfvbench-kibana-pps-theoretical.png
+
+Each Vega graph can be moved, zoomed (using mouse scroll) and one set of data can be selected.
+
+Example:
+
+.. image:: images/nfvbench-kibana-zoom-selection.png
+
+These visualizations are included into Kibana dashboard for a synthesis of one set of result (i.e. same ``user_label`` value) or for comparison (i.e. a selection of ``user_label`` values).
+See :ref:`filterkibana` for more details about ``user_label`` selection.
+
+All these visualizations and dashboards are saved into the ``export.ndjson`` file and can be imported in an existing Kibana. See :ref:`importkibana`.
+
+.. _importkibana:
+
+Import Kibana dashboards and visualization
+------------------------------------------
+
+To import Kibana dashboard and visualization:
+
+.. code-block:: bash
+
+ curl -X POST localhost:5601/api/saved_objects/_import -H "kbn-xsrf: true" --form file=@export.ndjson
+
+.. note:: ``.kibana`` index must exists in elasticsearch.
+.. note:: ``.kibana`` index is created automatically after a first deployment and configuration of Kibana.
+
+.. _filterkibana:
+
+Kibana user guide: Filter dashboards and visualizations
+=======================================================
+
+Filter Kibana dashboard or visualization using Kibana query language (KQL)
+--------------------------------------------------------------------------
+
+.. code-block:: bash
+
+ user_label:*demo* and (flow_count: 128 or flow_count:130000 or flow_count:1000000)
+
+.. note:: This query will filter all user label which contains ``demo`` in the value and filter 3 flow count (128, 130k, 1M).
+.. note:: ``flow_count`` is a number so KQL query can not contain formatted string.
+
+Example:
+
+.. image:: images/nfvbench-kibana-filter-kql.png
+
+
+Filter Kibana dashboard or visualization using Kibana filters
+-------------------------------------------------------------
+
+Kibana offers the possibility to add filter by selecting field and operator (is, is not, is one of, is not one of, exists, does not exist).
+
+Example:
+
+.. image:: images/nfvbench-kibana-filter.png
diff --git a/docs/user/mpls.rst b/docs/user/mpls.rst
new file mode 100644
index 0000000..4a0621b
--- /dev/null
+++ b/docs/user/mpls.rst
@@ -0,0 +1,96 @@
+.. Copyright 2016 - 2023, Cisco Systems, Inc. and the NFVbench project contributors
+.. SPDX-License-Identifier: CC-BY-4.0
+
+==========================
+MPLS encapsulation feature
+==========================
+
+This feature allows to generate packets with standard MPLS L2VPN double stack MPLS labels, where the outer label is transport and the inner label is VPN.
+The top layer of a packets encapsulated inside MPLS L2VPN seems to be an Ethernet layer with the rest of the IP stack inside.
+Please refer to RFC-3031 for more details.
+The whole MPLS packet structure looks like the following:
+
+###[ Ethernet ]###
+ dst = ['00:8a:96:bb:14:28']
+ src = 3c:fd:fe:a3:48:7c
+ type = 0x8847
+###[ MPLS ]### <-------------- Outer Label
+ label = 16303
+ cos = 1
+ s = 0
+ ttl = 255
+###[ MPLS ]### <-------------- Inner Label
+ label = 5010
+ cos = 1
+ s = 1
+ ttl = 255
+###[ Ethernet ]###
+ dst = fa:16:3e:bd:02:b5
+ src = 3c:fd:fe:a3:48:7c
+ type = 0x800
+###[ IP ]###
+ version = 4
+ ihl = None
+ tos = 0x0
+ len = None
+ id = 1
+ flags =
+ frag = 0
+ ttl = 64
+ proto = udp
+ chksum = None
+ src = 16.0.0.1
+ dst = 48.0.0.1
+ \options \
+###[ UDP ]###
+ sport = 53
+ dport = 53
+ len = None
+ chksum = None
+
+Example: nfvbench generates mpls traffic port A ----> port B. This example assumes openstack is at the other end of the mpls tunnels.
+Packets generated and sent to port B are delivered to the MPLS domain infrastructure which will transport that packet to the other end
+of the MPLS transport tunnel using the outer label. At that point, the outer label is decapsulated and the inner label is used to
+select the destination openstack network. After decapsulation of the inner label, the resulting L2 frame is then forwarded to the
+destination VM corresponding to the destination MAC. When the VM receives the packet, it is sent back to far end port of the traffic
+generator (port B) using either L2 forwarding or L3 routing though the peer virtual interface. The return packet is then encapsulated
+with the inner label first then outer label to reach nfvbench on port B.
+
+Only 2 MPLS labels stack is supported. If more than two labels stack is required then these operations should be handled by MPLS transport
+domain where nfvbench is attached next-hop mpls router and rest of the mpls domain should be configured accordingly to be able
+pop/swap/push labels and deliver packet to the proper destination based on an initial transport label injected by nfvbench, VPN label
+should stay unchanged until its delivered to PE (compute node).
+Set nfvbench 'mpls' parameter to 'true' to enable MPLS encapsulation.
+When this option is enabled internal networks 'network type' parameter value should be 'mpls'
+MPLS and VxLAN encapsulations are mutual exclusive features if 'mpls' is 'true' then 'vxlan' should be set to 'false' and vise versa.
+no_flow_stats, no_latency_stats, no_latency_streams parameters should be set to 'true' because these features are not supported at the moment.
+In future when these features will be supported they will require special NIC hardware.
+
+Example of 1-chain MPLS configuration:
+ internal_networks:
+ left:
+ network_type: mpls
+ segmentation_id: 5010
+ mpls_transport_labels: 16303
+ physical_network: phys_sriov0
+ right:
+ network_type: mpls
+ segmentation_id: 5011
+ mpls_transport_labels: 16303
+ physical_network: phys_sriov1
+
+Example of 2-chain MPLS configuration:
+ internal_networks:
+ left:
+ network_type: mpls
+ segmentation_id: [5010, 5020]
+ mpls_transport_labels: [16303, 16304]
+ physical_network: phys_sriov0
+ right:
+ network_type: mpls
+ segmentation_id: [5011, 5021]
+ mpls_transport_labels: [16303, 16304]
+ physical_network: phys_sriov1
+
+Example of how to run:
+nfvbench --rate 50000pps --duration 30 --mpls
diff --git a/docs/user/pvpl3.rst b/docs/user/pvpl3.rst
new file mode 100644
index 0000000..1b242ca
--- /dev/null
+++ b/docs/user/pvpl3.rst
@@ -0,0 +1,69 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. SPDX-License-Identifier: CC-BY-4.0
+.. (c) Cisco Systems, Inc
+
+
+PVP L3 Router Internal Chain
+----------------------------
+
+NFVbench can measure the performance of 1 L3 service chain that are setup by NFVbench (VMs, routers and networks).
+
+PVP L3 router chain is made of 1 VNF (in vpp mode) and has exactly 2 end network interfaces (left and right internal network interfaces) that are connected to 2 neutron routers with 2 edge networks (left and right edge networks).
+The PVP L3 router service chain can route L3 packets properly between the left and right networks.
+
+To run NFVbench on such PVP L3 router service chain:
+
+- explicitly tell NFVbench to use PVP service chain with L3 router option by adding ``-l3`` or ``--l3-router`` to NFVbench CLI options or ``l3_router: true`` in config
+- explicitly tell NFVbench to use VPP forwarder with ``vm_forwarder: vpp`` in config
+- specify the 2 end point networks (networks between NFVBench and neutron routers) of your environment in ``internal_networks`` inside the config file.
+ - The two networks specified will be created if not existing in Neutron and will be used as the end point networks by NFVbench ('lyon' and 'bordeaux' in the diagram below)
+- specify the 2 edge networks (networks between neutron routers and loopback VM) of your environment in ``edge_networks`` inside the config file.
+ - The two networks specified will be created if not existing in Neutron and will be used as the router gateway networks by NFVbench ('paris' and 'marseille' in the diagram below)
+- specify the router gateway IPs for the PVPL3 router service chain (1.2.0.1 and 2.2.0.1)
+- specify the traffic generator gateway IPs for the PVPL3 router service chain (1.2.0.254 and 2.2.0.254 in diagram below)
+- specify the packet source and destination IPs for the virtual devices that are simulated (10.0.0.0/8 and 20.0.0.0/8)
+
+
+.. image:: images/nfvbench-pvpl3.png
+
+nfvbench configuration file:
+
+.. code-block:: bash
+
+ vm_forwarder: vpp
+
+ traffic_generator:
+ ip_addrs: ['10.0.0.0/8', '20.0.0.0/8']
+ tg_gateway_ip_addrs: ['1.2.0.254', '2.2.0.254']
+ gateway_ip_addrs: ['1.2.0.1', '2.2.0.1']
+
+ internal_networks:
+ left:
+ name: 'lyon'
+ cidr: '1.2.0.0/24'
+ gateway: '1.2.0.1'
+ right:
+ name: 'bordeaux'
+ cidr: '2.2.0.0/24'
+ gateway: '2.2.0.1'
+
+ edge_networks:
+ left:
+ name: 'paris'
+ cidr: '1.1.0.0/24'
+ gateway: '1.1.0.1'
+ right:
+ name: 'marseille'
+ cidr: '2.1.0.0/24'
+ gateway: '2.1.0.1'
+
+Upon start, NFVbench will:
+- first retrieve the properties of the left and right networks using Neutron APIs,
+- extract the underlying network ID (typically VLAN segmentation ID),
+- generate packets with the proper VLAN ID and measure traffic.
+
+
+Please note: ``l3_router`` option is also compatible with external routers. In this case NFVBench will use ``EXT`` chain.
+
+.. note:: Using a long NFVbench run test, end-to-end connectivity can be lost depending on ARP stale time SUT configuration.
+ To avoid this issue, activate Gratuitous ARP stream using ``--gratuitous-arp`` or ``-garp`` option.
diff --git a/docs/user/quickstart_docker.rst b/docs/user/quickstart_docker.rst
new file mode 100644
index 0000000..ae277de
--- /dev/null
+++ b/docs/user/quickstart_docker.rst
@@ -0,0 +1,333 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. SPDX-License-Identifier: CC-BY-4.0
+.. (c) Cisco Systems, Inc
+
+===========================================
+NFVbench Installation and Quick Start Guide
+===========================================
+
+.. _docker_installation:
+
+Make sure you satisfy the `hardware and software requirements <requirements>` before you start .
+
+
+NFVbench can be used in CLI mode or in REST server mode.
+The CLI mode allows to run NFVbench benchmarks from the CLI. The REST server mode allows to run NFVbench benchmarks through a REST interface.
+
+1. Container installation
+-------------------------
+
+To pull the latest NFVbench container image:
+
+.. code-block:: bash
+
+ docker pull opnfv/nfvbench
+
+2. NFVbench configuration file
+------------------------------
+
+Create a directory under $HOME called nfvbench to store the minimal configuration file:
+
+.. code-block:: bash
+
+ mkdir $HOME/nfvbench
+
+Create a new file containing the minimal configuration for NFVbench, we can call it any name, for example "nfvbench.cfg" and paste the following yaml template in the file:
+
+.. code-block:: bash
+
+ openrc_file: /tmp/nfvbench/openrc
+ traffic_generator:
+ generator_profile:
+ - name: trex-local
+ tool: TRex
+ ip: 127.0.0.1
+ cores: 3
+ software_mode: false
+ interfaces:
+ - port: 0
+ pci: "0a:00.0"
+ - port: 1
+ pci: "0a:00.1"
+ intf_speed:
+
+If OpenStack is not used, the openrc_file property can be removed.
+
+If OpenStack is used, the openrc_file property must contain a valid container pathname of the OpenStack ``openrc`` file to connect to OpenStack using the OpenStack API.
+This file can be downloaded from the OpenStack Horizon dashboard (refer to the OpenStack documentation on how to
+retrieve the openrc file). This property must point to a valid pathname in the container (/tmp/nfvbench/openrc).
+We will map the host $HOME/nfvbench directory to the container /tmp/nfvbench directory and name the file "openrc".
+The file name viewed from the container will be "/tmp/nfvbench/openrc" (see container file pathname mapping in the next sections).
+
+The PCI address of the 2 physical interfaces that will be used by the traffic generator must be configured.
+The PCI address can be obtained for example by using the "lspci" Linux command. For example:
+
+.. code-block:: bash
+
+ [root@sjc04-pod6-build ~]# lspci | grep 710
+ 0a:00.0 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 01)
+ 0a:00.1 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 01)
+ 0a:00.2 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 01)
+ 0a:00.3 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 01)
+
+In the above example, the PCI addresses "0a:00.0" and "0a:00.1" (first 2 ports of the quad port NIC) are used.
+
+.. warning::
+
+ You have to put quotes around the pci addresses as shown in the above example, otherwise TRex will read it wrong.
+ The other fields in the minimal configuration must be present and must have the same values as above.
+
+
+3. Starting NFVbench in CLI mode
+--------------------------------
+
+In this mode, the NFVbench code will reside in a container running in the background. This container will not run anything in the background.
+An alias is then used to invoke a new NFVbench benchmark run using docker exec.
+The $HOME/nfvbench directory on the host is mapped on the /tmp/nfvbench in the container to facilitate file sharing between the 2 environments.
+
+Start NFVbench container
+~~~~~~~~~~~~~~~~~~~~~~~~
+The NFVbench container can be started using docker run command or using docker compose.
+
+To run NFVBench in CLI mode using docker run:
+
+.. code-block:: bash
+
+ docker run --name nfvbench --detach --privileged -v /lib/modules/$(uname -r):/lib/modules/$(uname -r) -v /usr/src/kernels:/usr/src/kernels -v /dev:/dev -v $HOME/nfvbench:/tmp/nfvbench opnfv/nfvbench
+
++-------------------------------------------------------+-------------------------------------------------------+
+| Docker options | Description |
++=======================================================+=======================================================+
+| --name nfvbench | container name is "nfvbench" |
++-------------------------------------------------------+-------------------------------------------------------+
+| --detach | run container in background |
++-------------------------------------------------------+-------------------------------------------------------+
+| --privileged | (optional) required if SELinux is enabled on the host |
++-------------------------------------------------------+-------------------------------------------------------+
+| -v /lib/modules:/lib/modules | needed by kernel modules in the container |
++-------------------------------------------------------+-------------------------------------------------------+
+| -v /usr/src/kernels:/usr/src/kernels | needed by TRex to build kernel modules when needed |
++-------------------------------------------------------+-------------------------------------------------------+
+| -v /dev:/dev | needed by kernel modules in the container |
++-------------------------------------------------------+-------------------------------------------------------+
+| -v $HOME/nfvbench:/tmp/nfvbench | folder mapping to pass files between the |
+| | host and the docker space (see examples below) |
+| | Here we map the $HOME/nfvbench directory on the host |
+| | to the /tmp/nfvbench director in the container. |
+| | Any other mapping can work as well |
++-------------------------------------------------------+-------------------------------------------------------+
+| opnfv/nfvbench | container image name |
++-------------------------------------------------------+-------------------------------------------------------+
+
+To run NFVbench using docker compose, create the docker-compose.yml file and paste the following content:
+
+.. code-block:: bash
+
+ version: '3'
+ services:
+ nfvbench:
+ image: "opnfv/nfvbench"
+ container_name: "nfvbench"
+ volumes:
+ - /dev:/dev
+ - /usr/src/kernels:/usr/src/kernels
+ - /lib/modules:/lib/modules
+ - ${HOME}/nfvbench:/tmp/nfvbench
+ network_mode: "host"
+ privileged: true
+
+Then start the container in detached mode:
+
+.. code-block:: bash
+
+ docker-compose up -d
+
+Requesting an NFVbench benchmark run
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Create an alias to make it easy to execute nfvbench commands directly from the host shell prompt:
+
+.. code-block:: bash
+
+ alias nfvbench='docker exec -it nfvbench nfvbench'
+
+The next to last "nfvbench" refers to the name of the container while the last "nfvbench" refers to the NFVbench binary that is available to run inside the container.
+
+Once the alias is set, NFVbench runs can simply be requested from teh command line using "nfvbench <options>".
+
+To verify it is working:
+
+.. code-block:: bash
+
+ nfvbench --version
+ nfvbench --help
+
+Example of run
+~~~~~~~~~~~~~~
+
+To do a single run at 10,000pps bi-directional (or 5kpps in each direction) using the PVP packet path:
+
+.. code-block:: bash
+
+ nfvbench -c /tmp/nfvbench/nfvbench.cfg --rate 10kpps
+
+NFVbench options used:
+
+* ``-c /tmp/nfvbench/nfvbench.cfg`` : specify the config file to use
+* ``--rate 10kpps`` : specify rate of packets for test for both directions using the kpps unit (thousands of packets per second)
+
+
+Retrieve complete configuration file as template
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The full configuration file template with comments (yaml format) can be obtained using the --show-default-config option in order to use more advanced configuration options:
+
+.. code-block:: bash
+
+ nfvbench --show-default-config > $HOME/nfvbench/full_nfvbench.cfg
+
+Edit the full_nfvbench.cfg file to only keep those properties that need to be modified (preserving the nesting).
+
+
+4. Start NFVbench in REST server mode
+-------------------------------------
+In this mode, the NFVbench REST server will run in the container.
+The $HOME/nfvbench directory on the host is mapped on the /tmp/nfvbench in the container to facilitate file sharing between the 2 environments.
+
+Start NFVbench container
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+To start the NFVbench container with REST server using docker run cli:
+
+.. code-block:: bash
+
+ docker run --name nfvbench --detach --privileged --net=host -e CONFIG_FILE="/tmp/nfvbench/nfvbench.cfg" -v /lib/modules/$(uname -r):/lib/modules/$(uname -r) -v /usr/src/kernels:/usr/src/kernels -v /dev:/dev -v $HOME/nfvbench:/tmp/nfvbench opnfv/nfvbench start_rest_server
+
+REST mode requires the same arguments as CLI mode and adds the following options:
++-------------------------------------------------------+-------------------------------------------------------+
+| Docker options | Description |
++=======================================================+=======================================================+
+| --net=host | use "host" docker networking mode |
+| | Other modes (such as NAT) could be used if required |
+| | with proper adjustment of the port to use for REST |
++-------------------------------------------------------+-------------------------------------------------------+
+| -e CONFIG_FILE="/tmp/nfvbench/nfvbench.cfg" | (optional) |
+| | specify the initial NFVbench config file to use. |
+| | defaults to none |
++-------------------------------------------------------+-------------------------------------------------------+
+| start_rest_server | to request a REST server to run in background in the |
+| | container |
++-------------------------------------------------------+-------------------------------------------------------+
+| -e HOST="127.0.0.1" | (optional) |
+| | specify the IP address to listen to. |
+| | defaults to 127.0.0.1 |
++-------------------------------------------------------+-------------------------------------------------------+
+| -e PORT=7555 | (optional) |
+| | specify the port address to listen to. |
+| | defaults to 7555 |
++-------------------------------------------------------+-------------------------------------------------------+
+
+
+The initial configuration file is optional but is handy to define mandatory deployment parameters that are common to all subsequent REST requests.
+If this initial configuration file is not passed at container start time, it must be included in every REST request.
+
+To start the NFVbench container with REST server using docker compose, use the following compose file:
+
+.. code-block:: bash
+
+ version: '3'
+ services:
+ nfvbench:
+ image: "opnfv/nfvbench"
+ container_name: "nfvbench_server"
+ command: start_rest_server
+ volumes:
+ - /dev:/dev
+ - /usr/src/kernels:/usr/src/kernels
+ - /lib/modules:/lib/modules
+ - ${HOME}/nfvbench:/tmp/nfvbench
+ network_mode: "host"
+ environment:
+ - HOST="127.0.0.1"
+ - PORT=7555
+ privileged: true
+
+Requesting an NFVbench benchmark run
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+To request a benchmark run, you must create a JSON document that describes the benchmark and send it to the NFVbench server in the body of a POST request.
+
+
+Examples of REST requests
+~~~~~~~~~~~~~~~~~~~~~~~~~
+In this example, we will use curl to interact with the NFVbench REST server.
+
+Query the NFVbench version:
+
+.. code-block:: bash
+
+ [root@sjc04-pod3-mgmt ~]# curl -G http://127.0.0.1:7555/version
+ 3.1.1
+
+This is the JSON for a fixed rate run at 10,000pps bi-directional (or 5kpps in each direction) using the PVP packet path:
+
+.. code-block:: bash
+
+ {"rate": "10kpps"}
+
+This is the curl request to send this benchmark request to the NFVbench server:
+
+.. code-block:: bash
+
+ [root@sjc04-pod3-mgmt ~]# curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"rate": "10kpps"}' http://127.0.0.1:7555/start_run
+ {
+ "error_message": "nfvbench run still pending",
+ "status": "PENDING"
+ }
+ [root@sjc04-pod3-mgmt ~]#
+
+This request will return immediately with status set to "PENDING" if the request was started successfully.
+
+The status can be polled until the run completes. Here the poll returns a "PENDING" status, indicating the run is still not completed:
+
+.. code-block:: bash
+
+ [root@sjc04-pod3-mgmt ~]# curl -G http://127.0.0.1:7555/status
+ {
+ "error_message": "nfvbench run still pending",
+ "status": "PENDING"
+ }
+ [root@sjc04-pod3-mgmt ~]#
+
+Finally, the status request returns a "OK" status along with the full results (truncated here):
+
+.. code-block:: bash
+
+ [root@sjc04-pod3-mgmt ~]# curl -G http://127.0.0.1:7555/status
+ {
+ "result": {
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "bidirectional": true,
+
+ ...
+
+ "status": "OK"
+ }
+ [root@sjc04-pod3-mgmt ~]#
+
+
+Retrieve complete configuration file as template
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+7. Terminating the NFVbench container
+-------------------------------------
+When no longer needed, the container can be terminated using the usual docker commands:
+
+.. code-block:: bash
+
+ docker kill nfvbench
+ docker rm nfvbench
diff --git a/docs/testing/user/userguide/readme.rst b/docs/user/readme.rst
index acd4763..f6cc153 100644
--- a/docs/testing/user/userguide/readme.rst
+++ b/docs/user/readme.rst
@@ -2,8 +2,33 @@
.. SPDX-License-Identifier: CC-BY-4.0
.. (c) Cisco Systems, Inc
-Features
-********
+NFVbench: A Network Performance Benchmarking Tool for NFVi Full Stacks
+**********************************************************************
+
+The NFVbench tool provides an automated way to measure the network performance for the most common data plane packet flows
+on any NFVi system viewed as a black box (NFVi Full Stack).
+An NFVi full stack exposes the following interfaces:
+- an OpenStack API for those NFVi platforms based on OpenStack
+- an interface to send and receive packets on the data plane (typically through top of rack switches while simpler direct wiring to a looping device would also work)
+
+The NFVi full stack can be any functional OpenStack system that provides the above interfaces.
+NFVbench can also be used without OpenStack on any networking device that can handle L2 forwarding or L3 routing.
+
+NFVbench can be installed standalone (in the form of a single Docker container) and is fully functional without
+the need to install any other OPNFV tool.
+
+It is designed to be easy to install and easy to use by non experts (no need to be an expert in traffic generators and data plane
+performance benchmarking). NFVbench integrates with the open source traffic generator TRex and provides the following benefits when compared
+to using a traffic generator directly:
+
+- yaml configuration driven benchmark runs
+- CLI or REST front end
+- finds highest throughput based on drop rate requirement using an optimized binary search with very fast convergence time
+- supports multi-chaining or dense VNF throughput measurement (e.g. find the throughput of a compute node running 20 loopback VNFs)
+- detailed stats itemized per VNF chain in text or JSON format
+- takes care of configuring packet flows and streams (often hard to use and specific to each gtraffic generator)
+- takes care of bring up loopback VNFs/chains using Nova/Neutron/Glance OpenStack APIs
+- saves you the hassle of searching what to measure, how to measure and how to interpret resuls
Data Plane Performance Measurement Features
-------------------------------------------
@@ -20,13 +45,12 @@ NFVbench supports the following main measurement capabilities:
- configurable traffic direction (single or bi-directional)
- can support optional VLAN tagging (dot1q) or VxLAN overlays
-
NDR is the highest throughput achieved without dropping packets.
PDR is the highest throughput achieved without dropping more than a pre-set limit (called PDR threshold or allowance, expressed in %).
Results of each run include the following data:
-- Aggregated achieved throughput in bps
+- Aggregated achieved bit rate throughput in bps
- Aggregated achieved packet rate in pps (or fps)
- Actual drop rate in %
- Latency in usec (min, max, average in the current version)
@@ -54,21 +78,28 @@ NFVbench supports settings that involve externally staged packet paths with or w
Direct L2 Loopback (Switch or wire loopback)
--------------------------------------------
-NFVbench supports benchmarking of pure L2 loopbacks (see "--l2-loopback vlan" option)
+NFVbench supports benchmarking of pure L2 loopbacks
- Switch level loopback
- Port to port wire loopback
-In this mode, NFVbench will take a vlan ID and send packets from each port to the other port
-(dest MAC set to the other port MAC) using the same VLAN ID on both ports.
+In this mode, NFVbench will send packets from each port to the other port
+(the destination MAC address is set to the other port MAC address).
This can be useful for example to verify that the connectivity to the switch is working properly.
+Such a test can be quickly run using the CLI ``--l2-loopback`` :ref:`option <adv-l2l-cli>`.
+
+For a typical test, packets will be VLAN tagged with the same ID on both ports.
+However, multiple L2 vlan tagged service chains are also allowed,
+which permits testing various configurations and the behavior of the bench itself.
+
+
Traffic Generation
------------------
NFVbench currently integrates with the open source TRex traffic generator:
-- `TRex <https://trex-tgn.cisco.com>`_ (pre-built into the NFVbench container)
+- `TRex <https://github.com/cisco-system-traffic-generator/trex-core>`_ (pre-built into the NFVbench container)
Supported Packet Paths
@@ -101,6 +132,16 @@ In the case of VPP, VPP will act as a real L3 router, and the packets are routed
Which forwarder and what Nova flavor to use can be selected in the NFVbench configuration. Be default the DPDK testpmd forwarder is used with 2 vCPU per VM.
The configuration of these forwarders (such as MAC rewrite configuration or static route configuration) is managed by NFVbench.
+Importance of Dense VNF Measurement
+-----------------------------------
+Production deployments of NFVi stacks can require to run a large number of VMs per compute node in order to fully utilize all the
+hardware resources available in each of these compute nodes.
+Given that optimization of a compute node can be very different based on the number of VMs, it is therefore critical
+to do performance benchmarking at scale.
+NFVbench has been the first benchmarking tool to recognize this and to provide dense VNF dataplane benchmarking
+by staging multipe chains using OpenStack and configuring the traffic generator to split the traffic
+across all configured chains. This kind of measurement is very time consuming to do directly with traffic generators
+as it requires understanding how traffic is shaped in order to cover all chains in a balanced way.
PVP Packet Path
^^^^^^^^^^^^^^^
@@ -119,8 +160,8 @@ The 2 VNFs will only run on the same compute node (PVVP intra-node):
.. image:: images/nfvbench-pvvp.png
-Multi-Chaining (N*PVP or N*PVVP)
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Dense VNF or Multi-Chaining (N*PVP or N*PVVP)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Multiple service chains can be setup by NFVbench without any limit on the concurrency (other than limits imposed by available resources on compute nodes).
In the case of multiple service chains, NFVbench will instruct the traffic generator to use multiple L3 packet streams (frames directed to each path will
@@ -153,20 +194,12 @@ The PVVP packet path will use SR-IOV for the left and right networks and the vir
.. image:: images/nfvbench-sriov-pvvp.png
-Or in the case of inter-node:
-
-.. image:: images/nfvbench-sriov-pvvp2.png
-
This packet path is a good way to approximate VM to VM (V2V) performance (middle network) given the high efficiency of the left and right networks. The V2V throughput will likely be very close to the PVVP throughput while its latency will be very close to the difference between the SR-IOV PVVP latency and the SR-IOV PVP latency.
It is possible to also force the middle network to use SR-IOV (in this version, the middle network is limited to use the same SR-IOV phys net):
.. image:: images/nfvbench-all-sriov-pvvp.png
-The chain can also span across 2 nodes with the use of 2 SR-IOV ports in each node:
-
-.. image:: images/nfvbench-all-sriov-pvvp2.png
-
Other Misc Packet Paths
^^^^^^^^^^^^^^^^^^^^^^^
@@ -175,6 +208,8 @@ P2P (Physical interface to Physical interface - no VM) can be supported using th
V2V (VM to VM) is not supported but PVVP provides a more complete (and more realistic) alternative.
+PVP chain with L3 routers in the path can be supported using PVP chain with L3 forwarding mode (l3_router option). See PVP L3 Router Internal Chain section for more details.
+
Supported Neutron Network Plugins and vswitches
-----------------------------------------------
@@ -189,7 +224,7 @@ NFVbench is agnostic of the virtual switch implementation and has been tested wi
- ML2/ODL/VPP (OPNFV Fast Data Stack)
-
Limitations
***********
-VxLAN: latency measurement and per chain stats is not available in the first VxLAN release
+VxLAN: latency measurement is not available in the current VxLAN release
+PVVP Inter-node (where the 2 VMs are running on diofferent compute nodes) is no longer supported
diff --git a/docs/testing/user/userguide/server.rst b/docs/user/server.rst
index 921e3bc..52645ad 100644
--- a/docs/testing/user/userguide/server.rst
+++ b/docs/user/server.rst
@@ -5,36 +5,6 @@
NFVbench Server mode and NFVbench client API
============================================
-NFVbench can run as an HTTP server to:
-
-- optionally provide access to any arbitrary HTLM files (HTTP server function) - this is optional
-- service fully parameterized aynchronous run requests using the HTTP protocol (REST/json with polling)
-- service fully parameterized run requests with interval stats reporting using the WebSocket/SocketIO protocol.
-
-Start the NFVbench server
--------------------------
-To run in server mode, simply use the --server <http_root_path> and optionally the listen address to use (--host <ip>, default is 0.0.0.0) and listening port to use (--port <port>, default is 7555).
-
-
-If HTTP files are to be serviced, they must be stored right under the http root path.
-This root path must contain a static folder to hold static files (css, js) and a templates folder with at least an index.html file to hold the template of the index.html file to be used.
-This mode is convenient when you do not already have a WEB server hosting the UI front end.
-If HTTP files servicing is not needed (REST only or WebSocket/SocketIO mode), the root path can point to any dummy folder.
-
-Once started, the NFVbench server will be ready to service HTTP or WebSocket/SocketIO requests at the advertised URL.
-
-Example of NFVbench server start in a container:
-
-.. code-block:: bash
-
- # get to the container shell (assume the container name is "nfvbench")
- docker exec -it nfvbench bash
- # from the container shell start the NFVbench server in the background
- nfvbench -c /tmp/nfvbench/nfvbench.cfg --server /tmp &
- # exit container
- exit
-
-
HTTP Interface
--------------
@@ -48,7 +18,7 @@ Example request:
.. code-block:: bash
- curl -XGET '127.0.0.1:7556/echo' -H "Content-Type: application/json" -d '{"nfvbench": "test"}'
+ curl -XGET '127.0.0.1:7555/echo' -H "Content-Type: application/json" -d '{"nfvbench": "test"}'
Response:
{
"nfvbench": "test"
@@ -114,44 +84,6 @@ If there is already an NFVBench running then it will return:
"status": "ERROR"
}
-WebSocket/SocketIO events
--------------------------
-
-List of SocketIO events supported:
-
-Client to Server
-^^^^^^^^^^^^^^^^
-
-start_run:
-
- sent by client to start a new run with the configuration passed in argument (JSON).
- The configuration can be any valid NFVbench configuration passed as a JSON document (see "NFVbench configuration JSON parameter" below)
-
-Server to Client
-^^^^^^^^^^^^^^^^
-
-run_interval_stats:
-
- sent by server to report statistics during a run
- the message contains the statistics {'time_ms': time_ms, 'tx_pps': tx_pps, 'rx_pps': rx_pps, 'drop_pct': drop_pct}
-
-ndr_found:
-
- (during NDR-PDR search)
- sent by server when the NDR rate is found
- the message contains the NDR value {'rate_pps': ndr_pps}
-
-ndr_found:
-
- (during NDR-PDR search)
- sent by server when the PDR rate is found
- the message contains the PDR value {'rate_pps': pdr_pps}
-
-
-run_end:
-
- sent by server to report the end of a run
- the message contains the complete results in JSON format
NFVbench configuration JSON parameter
-------------------------------------
@@ -341,6 +273,15 @@ A short run of 5 seconds at a fixed rate of 1Mpps (and everything else same as t
"rate": "1Mpps"
}
+Use the default configuration but force TRex restart:
+
+.. code-block:: bash
+
+ {
+ "restart": true
+ }
+
+
Example of interaction with the NFVbench server using HTTP and curl
-------------------------------------------------------------------
HTTP requests can be sent directly to the NFVbench server from CLI using curl from any host that can connect to the server (here we run it from the local host).
@@ -406,7 +347,7 @@ Finally, the status request returns a "OK" status along with the full results (t
Example of interaction with the NFVbench server using a python CLI app (nfvbench_client)
----------------------------------------------------------------------------------------
-The module client/client.py contains an example of python class that can be used to control the NFVbench server from a python app using HTTP or WebSocket/SocketIO.
+The module client/client.py contains an example of python class that can be used to control the NFVbench server from a python app using HTTP.
The module client/nfvbench_client.py has a simple main application to control the NFVbench server from CLI.
The "nfvbench_client" wrapper script can be used to invoke the client front end (this wrapper is pre-installed in the NFVbench container)
@@ -428,11 +369,3 @@ use the default NFVbench configuration but do not generate traffic (no_traffic p
...
[root@sjc04-pod3-mgmt ~]#
-
-The http interface is used unless --use-socketio is defined.
-
-Example of invocation using Websocket/SocketIO, execute NFVbench using the default configuration but with a duration of 5 seconds and a fixed rate run of 5kpps.
-
-.. code-block:: bash
-
- [root@sjc04-pod3-mgmt ~]# docker exec -it nfvbench nfvbench_client -c '{"duration":5,"rate":"5kpps"}' --use-socketio http://127.0.0.1:7555 >results.json
diff --git a/docs/testing/user/userguide/sriov.rst b/docs/user/sriov.rst
index f5cc7d2..f5cc7d2 100644
--- a/docs/testing/user/userguide/sriov.rst
+++ b/docs/user/sriov.rst
diff --git a/docs/user/xtesting.rst b/docs/user/xtesting.rst
new file mode 100644
index 0000000..96d1d19
--- /dev/null
+++ b/docs/user/xtesting.rst
@@ -0,0 +1,252 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. SPDX-License-Identifier: CC-BY-4.0
+
+
+NFVbench Xtesting test cases and Xtesting CI integration
+--------------------------------------------------------
+
+NFVbench can leverages on `Xtesting CI <https://galaxy.ansible.com/collivier/xtesting>`_ and the common test case execution proposed by `Xtesting <https://xtesting.readthedocs.io/en/latest/>`_.
+Thanks to a simple test case list, this tool deploys anywhere plug-and-play `CI/CD toolchains in a few commands <https://github.com/collivier/ansible-role-xtesting/blob/master/README.md>`_.
+In addition, it supports multiple components such as Jenkins and Gitlab CI (test schedulers) and multiple deployment models such as all-in-one or centralized services.
+
+NFVbench using Xtesting and Xtesting CI will permit:
+
+- smoothly assemble multiple heterogeneous test cases
+- generate the Jenkins jobs
+- deploy local CI/CD toolchains everywhere
+- dump all test case results and logs for third-party conformance review
+
+Xtesting CI only requires GNU/Linux as Operating System and asks for a few dependencies as described in Deploy your own Xtesting CI/CD toolchains:
+
+- python-virtualenv
+- docker.io
+- git
+
+Please note the next two points depending on the GNU/Linux distributions and the network settings:
+
+- SELinux: you may have to add --system-site-packages when creating the virtualenv ("Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!")
+- Proxy: you may set your proxy in env for Ansible and in systemd for Docker https://docs.docker.com/config/daemon/systemd/#httphttps-proxy
+
+Here is the default NFVbench tree on the host running nfvbench container as
+proposed in ``xtesting/ansible/host_vars/127.0.0.1`` file:
+
+- ``/home/opnfv/nfvbench/config``: contains nfvbench config files including
+ ``nfvbench.cfg``, the default config file used by xtesting test cases
+- ``/home/opnfv/nfvbench/results``: top directory to write nfvbench results and log files
+
+File content:
+
+.. code-block:: yaml
+
+ docker_args:
+ env: {}
+ params:
+ net: host
+ privileged: true
+ volumes:
+ - /lib/modules/$(uname -r):/lib/modules/$(uname -r)
+ - /usr/src/kernels:/usr/src/kernels -v /dev:/dev
+ - /home/opnfv/nfvbench/config:/etc/nfvbench
+ - /home/opnfv/nfvbench/results:/var/lib/xtesting/results
+
+Please note: if you want to use a different directory structure on the host,
+replace ``/home/opnfv/nfvbench/*`` paths with appropriate paths to permit
+NFVbench container to access config file and results directory. The config and
+results paths do not need to share the same root directory.
+
+To deploy your own CI toolchain running NFVbench:
+
+.. code-block:: bash
+
+ virtualenv nfvbench
+ . nfvbench/bin/activate
+ pip install ansible
+ ansible-galaxy install collivier.xtesting
+ git clone https://gerrit.opnfv.org/gerrit/nfvbench nfvbench
+ ansible-playbook nfvbench/xtesting/ansible/site.yml
+
+
+NFVbench Xtesting test cases and existing CI chain
+--------------------------------------------------
+
+For test automation purpose, Xtesting framework can be used as an executor of NFVbench test cases and called by a CI chain (Jenkins, Gitlab CI ...).
+Xtesting use a testcases.yaml file to list and run test case. One basic testcases.yaml is provided by NFVbench natively but can be override.
+
+Example of CI scenario:
+
+.. image:: images/nfvbench-xtesting.png
+
+1. Run NFVbench container using Xtesting python library
+
+The NFVbench container can be started using docker run command.
+
+To run NFVbench using docker run:
+
+.. code-block:: bash
+
+ docker run --rm \
+ -e S3_ENDPOINT_URL=http://127.0.0.1:9000 \
+ -e S3_DST_URL=s3://xtesting/$BUILD_TAG/$JOB_NAME-$BUILD_ID \
+ -e HTTP_DST_URL=http://127.0.0.1:8181/$BUILD_TAG/$JOB_NAME-$BUILD_ID \
+ -e AWS_ACCESS_KEY_ID=xtesting \
+ -e AWS_SECRET_ACCESS_KEY=xtesting \
+ -e TEST_DB_URL=http://127.0.0.1:8000/api/v1/results \
+ -e NODE_NAME=nfvbench \
+ -e BUILD_TAG=$BUILD_TAG \
+ --privileged \
+ -v /lib/modules/$(uname -r):/lib/modules/$(uname -r) \
+ -v /usr/src/kernels:/usr/src/kernels -v /dev:/dev \
+ -v $HOME/nfvbench/config:/etc/nfvbench \
+ -v $HOME/workspace/$JOB_NAME/results:/var/lib/xtesting/results \
+ opnfv/nfvbench run_tests -t 10kpps-pvp-run -r -p
+
++---------------------------------------------------------------+----------------------------------------------------------------------------+
+| Docker options | Description |
++===============================================================+============================================================================+
+| --rm | clean up container after execution |
++---------------------------------------------------------------+----------------------------------------------------------------------------+
+| -e S3_ENDPOINT_URL | (Xtesting) Environnement variable used to store NFVbench artifacts to Minio|
++---------------------------------------------------------------+----------------------------------------------------------------------------+
+| -e S3_DST_URL | (Xtesting) Environnement variable used for S3 storage destination |
++---------------------------------------------------------------+----------------------------------------------------------------------------+
+| -e HTTP_DST_URL | (Xtesting) Environnement variable used for S3www service |
++---------------------------------------------------------------+----------------------------------------------------------------------------+
+| -e AWS_ACCESS_KEY_ID | (Xtesting) Environnement variable used for S3 access key |
++---------------------------------------------------------------+----------------------------------------------------------------------------+
+| -e AWS_SECRET_ACCESS_KEY | (Xtesting) Environnement variable used for S3 access secret |
++---------------------------------------------------------------+----------------------------------------------------------------------------+
+| -e TEST_DB_URL | (Xtesting) Environnement variable used to export NFVbench results in DB |
++---------------------------------------------------------------+----------------------------------------------------------------------------+
+| -e NODE_NAME | (Xtesting) Environnement variable used as result key identifier in DB |
++---------------------------------------------------------------+----------------------------------------------------------------------------+
+| -e BUILD_TAG | (Xtesting) Environnement variable used as result key identifier in DB |
++---------------------------------------------------------------+----------------------------------------------------------------------------+
+| --privileged | (optional) required if SELinux is enabled on the host |
++---------------------------------------------------------------+----------------------------------------------------------------------------+
+| -v /lib/modules:/lib/modules | needed by kernel modules in the container |
++---------------------------------------------------------------+----------------------------------------------------------------------------+
+| -v /usr/src/kernels:/usr/src/kernels | needed by TRex to build kernel modules when needed |
++---------------------------------------------------------------+----------------------------------------------------------------------------+
+| -v /dev:/dev | needed by kernel modules in the container |
++---------------------------------------------------------------+----------------------------------------------------------------------------+
+| -v $HOME/nfvbench/config:/etc/nfvbench | folder mapping to pass config files between the |
+| | host and the docker space (see examples below) |
+| | Here we map the $HOME/nfvbench/config directory on the host |
+| | to the /etc/nfvbench directory in the container. |
+| | Any other mapping can work as well |
++---------------------------------------------------------------+----------------------------------------------------------------------------+
+| -v $HOME/workspace/$JOB_NAME/results:/var/lib/xtesting/results| (Xtesting) folder mapping to pass files between the |
+| | CI chain workspace and the docker space to store Xtesting result files |
+| | in orchestrator (Jenkins, Gitlab ...) |
++---------------------------------------------------------------+----------------------------------------------------------------------------+
+| opnfv/nfvbench | container image name |
++---------------------------------------------------------------+----------------------------------------------------------------------------+
+| run_tests | (Xtesting) Xtesting command to run test cases |
++---------------------------------------------------------------+----------------------------------------------------------------------------+
+| -t 10kpps-pvp-run | (Xtesting) Xtesting parameter: Test case or tier (group of tests) |
+| | to be executed. It will run all the test if not specified. |
++---------------------------------------------------------------+----------------------------------------------------------------------------+
+| -r | (Xtesting) Xtesting parameter: publish result to database |
++---------------------------------------------------------------+----------------------------------------------------------------------------+
+| -p | (Xtesting) Xtesting parameter: publish artifacts to a S3 service |
++---------------------------------------------------------------+----------------------------------------------------------------------------+
+
+2. Run Xtesting test cases
+
+Executed directly by NFVbench docker entrypoint after docker start.
+
+3. Perform NFVbench test
+
+Xtesting call NFVbench python script to execute test case scenario and wait for run to be terminated.
+
+4. Export NFVbench result
+
+If ``-r`` option is used, results are pushed to a DB through Xtesting.
+If ``-p`` option is used, results are pushed to a S3 service through Xtesting.
+
+
+Override testcases.yaml file
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+To replace existing testcases.yaml file, using Xtesting CI add the volume mapping in ``xtesting/ansible/host_vars/127.0.0.1`` file:
+
+.. code-block:: yaml
+
+ docker_args:
+ env: {}
+ volumes:
+ - /lib/modules/$(uname -r):/lib/modules/$(uname -r)
+ - /usr/src/kernels:/usr/src/kernels -v /dev:/dev
+ - /home/opnfv/nfvbench/config:/etc/nfvbench
+ - /home/opnfv/nfvbench/results:/var/lib/xtesting/results
+ - /home/opnfv/nfvbench/xtesting/testcases.yaml:/usr/local/lib/python3.8/dist-packages/xtesting/ci/testcases.yaml
+
+* ``/home/opnfv/nfvbench/xtesting/testcases.yaml:/usr/local/lib/python3.8/dist-packages/xtesting/ci/testcases.yaml`` : volume mapping to pass testcases.yaml file between the host and the docker space. Host path required testcases.yaml file inside.
+
+
+To replace existing testcases.yaml file, using NFVbench container:
+
+.. code-block:: bash
+
+ docker run --name nfvbench --detach --privileged \
+ -v /lib/modules/$(uname -r):/lib/modules/$(uname -r) \
+ -v /usr/src/kernels:/usr/src/kernels \
+ -v /dev:/dev \
+ -v $HOME/nfvbench/config:/etc/nfvbench \
+ -v $HOME/nfvbench/results:/var/lib/xtesting/results \
+ -v $HOME/nfvbench/xtesting/testcases.yaml:/usr/local/lib/python3.8/dist-packages/xtesting/ci/testcases.yaml \
+ opnfv/nfvbench
+
+* ``$HOME/nfvbench/xtesting/testcases.yaml:/usr/local/lib/python3.8/dist-packages/xtesting/ci/testcases.yaml`` : volume mapping to pass testcases.yaml file between the host and the docker space. Host path required testcases.yaml file inside.
+
+
+Example of Xtesting test case
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. code-block:: yaml
+
+ ---
+ tiers:
+ -
+ name: nfvbench
+ order: 1
+ description: 'Data Plane Performance Testing'
+ testcases:
+ -
+ case_name: 10kpps-pvp-run
+ project_name: nfvbench
+ criteria: 100
+ blocking: true
+ clean_flag: false
+ description: ''
+ run:
+ name: 'bashfeature'
+ args:
+ cmd:
+ - nfvbench -c /etc/nfvbench/nfvbench.cfg --rate 10kpps
+
+
+Examples of manual run
+~~~~~~~~~~~~~~~~~~~~~~
+
+If NFVbench container is already started in CLI mode (see Starting NFVbench in CLI mode dedicated chapter).
+To do a single run at 10,000pps bi-directional (or 5kpps in each direction) using the PVP packet path:
+
+.. code-block:: bash
+
+ docker exec -it nfvbench run_tests -t 10kpps-pvp-run
+
+Xtesting option used:
+
+* ``-t 10kpps-pvp-run`` : specify the test case to run
+
+To pass all test cases:
+
+.. code-block:: bash
+
+ docker exec -it nfvbench run_tests -t all
+
+Xtesting option used:
+
+* ``-t all`` : select all test cases existing in testcases.yaml file
+
diff --git a/kibana/visualizations/export.ndjson b/kibana/visualizations/export.ndjson
new file mode 100644
index 0000000..de72cb4
--- /dev/null
+++ b/kibana/visualizations/export.ndjson
@@ -0,0 +1,25 @@
+{"attributes":{"fieldFormatMap":"{\"frame_size_int\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://172.20.73.203:5651\",\"pathname\":\"/app/kibana\",\"basePath\":\"\"},\"pattern\":\"0,0\"}},\"rate_pps\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://172.20.73.203:5651\",\"pathname\":\"/app/kibana\",\"basePath\":\"\"},\"pattern\":\"0,0.[000]a\"}},\"rate_bps\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://172.20.73.203:5651\",\"pathname\":\"/app/kibana\",\"basePath\":\"\"},\"pattern\":\"0,0.[0] bd\"}},\"forward_orig_rate_bps\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://172.20.73.203:5651\",\"pathname\":\"/app/kibana\",\"basePath\":\"\"},\"pattern\":\"0,0.[0] bd\"}},\"forward_rx_rate_bps\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://172.20.73.203:5651\",\"pathname\":\"/app/kibana\",\"basePath\":\"\"},\"pattern\":\"0,0.[0] bd\"}},\"forward_tx_rate_bps\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://172.20.73.203:5651\",\"pathname\":\"/app/kibana\",\"basePath\":\"\"},\"pattern\":\"0,0.[0] bd\"}},\"reverse_orig_rate_bps\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://172.20.73.203:5651\",\"pathname\":\"/app/kibana\",\"basePath\":\"\"},\"pattern\":\"0,0.[0] bd\"}},\"reverse_rx_rate_bps\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://172.20.73.203:5651\",\"pathname\":\"/app/kibana\",\"basePath\":\"\"},\"pattern\":\"0,0.[0] bd\"}},\"reverse_tx_rate_bps\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://172.20.73.203:5651\",\"pathname\":\"/app/kibana\",\"basePath\":\"\"},\"pattern\":\"0,0.[0] bd\"}},\"total_orig_rate_bps\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://172.20.73.203:5651\",\"pathname\":\"/app/kibana\",\"basePath\":\"\"},\"pattern\":\"0,0.[0] bd\"}},\"total_rx_rate_bps\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://172.20.73.203:5651\",\"pathname\":\"/app/kibana\",\"basePath\":\"\"},\"pattern\":\"0,0.[0] bd\"}},\"total_tx_rate_bps\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://172.20.73.203:5651\",\"pathname\":\"/app/kibana\",\"basePath\":\"\"},\"pattern\":\"0,0.[0] bd\"}},\"forward_orig_rate_pps\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://172.20.73.203:5651\",\"pathname\":\"/app/kibana\",\"basePath\":\"\"},\"pattern\":\"0,0.[000]a\"}},\"forward_rx_rate_pps\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://172.20.73.203:5651\",\"pathname\":\"/app/kibana\",\"basePath\":\"\"},\"pattern\":\"0,0.[000]a\"}},\"forward_tx_rate_pps\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://172.20.73.203:5651\",\"pathname\":\"/app/kibana\",\"basePath\":\"\"},\"pattern\":\"0,0.[000]a\"}},\"reverse_orig_rate_pps\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://172.20.73.203:5651\",\"pathname\":\"/app/kibana\",\"basePath\":\"\"},\"pattern\":\"0,0.[000]a\"}},\"reverse_rx_rate_pps\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://172.20.73.203:5651\",\"pathname\":\"/app/kibana\",\"basePath\":\"\"},\"pattern\":\"0,0.[000]a\"}},\"reverse_tx_rate_pps\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://172.20.73.203:5651\",\"pathname\":\"/app/kibana\",\"basePath\":\"\"},\"pattern\":\"0,0.[000]a\"}},\"total_orig_rate_pps\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://172.20.73.203:5651\",\"pathname\":\"/app/kibana\",\"basePath\":\"\"},\"pattern\":\"0,0.[000]a\"}},\"total_rx_rate_pps\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://172.20.73.203:5651\",\"pathname\":\"/app/kibana\",\"basePath\":\"\"},\"pattern\":\"0,0.[000]a\"}},\"total_tx_rate_pps\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://172.20.73.203:5651\",\"pathname\":\"/app/kibana\",\"basePath\":\"\"},\"pattern\":\"0,0.[000]a\"}},\"theoretical_tx_rate_bps\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://172.20.73.203:5651\",\"pathname\":\"/app/kibana\",\"basePath\":\"\"},\"pattern\":\"0,0.[0] bd\"}},\"theoretical_tx_rate_pps\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://172.20.73.203:5651\",\"pathname\":\"/app/kibana\",\"basePath\":\"\"},\"pattern\":\"0,0.[000]a\"}}}","fields":"[{\"name\":\"@timestamp\",\"type\":\"date\",\"esTypes\":[\"date\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"Encapsulation\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"Encapsulation.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"Encapsulation\"}}},{\"name\":\"_id\",\"type\":\"string\",\"esTypes\":[\"_id\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_index\",\"type\":\"string\",\"esTypes\":[\"_index\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_source\",\"type\":\"_source\",\"esTypes\":[\"_source\"],\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_type\",\"type\":\"string\",\"esTypes\":[\"_type\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"avg_delay_usec\",\"type\":\"number\",\"esTypes\":[\"float\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"bidirectional\",\"type\":\"boolean\",\"esTypes\":[\"boolean\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"drop_limit\",\"type\":\"number\",\"esTypes\":[\"float\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"drop_percentage\",\"type\":\"number\",\"esTypes\":[\"float\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"drop_rate_percent\",\"type\":\"number\",\"esTypes\":[\"float\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"flow_count\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"forward_orig_rate_bps\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"forward_orig_rate_pps\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"forward_rx_rate_bps\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"forward_rx_rate_pps\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"forward_tx_rate_bps\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"forward_tx_rate_pps\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"frame_size\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"frame_size.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"frame_size\"}}},{\"name\":\"lat_percentile_25\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"lat_percentile_75\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"lat_percentile_99\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"max_delay_usec\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"min_delay_usec\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ndr_search_duration\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ndr_search_duration.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ndr_search_duration\"}}},{\"name\":\"offered_tx_rate_bps\",\"type\":\"number\",\"esTypes\":[\"float\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"profile\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"profile.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"profile\"}}},{\"name\":\"rate_bps\",\"type\":\"number\",\"esTypes\":[\"float\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"rate_pps\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"reverse_orig_rate_bps\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"reverse_orig_rate_pps\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"reverse_rx_rate_bps\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"reverse_rx_rate_pps\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"reverse_tx_rate_bps\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"reverse_tx_rate_pps\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"runlogdate\",\"type\":\"date\",\"esTypes\":[\"date\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"sc_count\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"service_chain\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"service_chain.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"service_chain\"}}},{\"name\":\"theoretical_tx_rate_bps\",\"type\":\"number\",\"esTypes\":[\"float\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"theoretical_tx_rate_pps\",\"type\":\"number\",\"esTypes\":[\"float\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"total_orig_rate_bps\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"total_orig_rate_pps\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"total_rx_rate_bps\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"total_rx_rate_pps\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"total_tx_rate_bps\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"total_tx_rate_pps\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"type\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"type.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"type\"}}},{\"name\":\"user_label\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"user_label.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"user_label\"}}},{\"name\":\"vSwitch\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"vSwitch.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"vSwitch\"}}},{\"name\":\"version\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"version.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"version\"}}},{\"name\":\"frame_size_int\",\"type\":\"number\",\"count\":0,\"scripted\":true,\"script\":\"if (doc['frame_size.keyword'] != null) {\\n if (doc['frame_size.keyword'].value != \\\"IMIX\\\") {\\n return Integer.parseInt(doc['frame_size.keyword'].value) \\n }\\n else { \\n return 362 \\n } \\n}\",\"lang\":\"painless\",\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false}]","timeFieldName":"@timestamp","title":"resu*"},"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","migrationVersion":{"index-pattern":"7.6.0"},"references":[],"type":"index-pattern","updated_at":"2020-10-06T12:53:31.024Z","version":"WzE2NTYsMTJd"}
+{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"type.keyword\",\"negate\":true,\"params\":{\"query\":\"single_run\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"type.keyword\":\"single_run\"}}}]}"},"title":"Synthesis - one label","uiStateJSON":"{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}","version":1,"visState":"{\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"rate_bps\",\"customLabel\":\"Offered bps\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"rate_pps\",\"customLabel\":\"Offered pps\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"std_dev\",\"schema\":\"metric\",\"params\":{\"field\":\"total_orig_rate_bps\",\"customLabel\":\"std max bps\"}},{\"id\":\"4\",\"enabled\":true,\"type\":\"avg\",\"schema\":\"metric\",\"params\":{\"field\":\"avg_delay_usec\",\"customLabel\":\"latency avg\"}},{\"id\":\"6\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"split\",\"params\":{\"field\":\"flow_count\",\"orderBy\":\"_key\",\"order\":\"asc\",\"size\":50,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"flow count\"}},{\"id\":\"8\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"frame_size_int\",\"orderBy\":\"_key\",\"order\":\"asc\",\"size\":50,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"frame size (bytes)\"}}],\"params\":{\"perPage\":10,\"percentageCol\":\"\",\"row\":false,\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showTotal\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"totalFunc\":\"sum\"},\"title\":\"Synthesis - one label\"}"},"id":"0d2c4070-e6e3-11ea-a933-05dd8fc4d76f","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"},{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index","type":"index-pattern"}],"type":"visualization","updated_at":"2020-09-03T13:55:18.628Z","version":"WzExMTcsNV0="}
+{"attributes":{"description":"NDR / PDR line chart - in Mpps","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"type.keyword\",\"negate\":true,\"params\":{\"query\":\"single_run\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"type.keyword\":\"single_run\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"frame_size\",\"negate\":true,\"params\":{\"query\":\"IMIX\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\"},\"query\":{\"match_phrase\":{\"frame_size\":\"IMIX\"}}}]}"},"title":"[NDR] Capacity in Mpps - Line chart","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"vega\",\"aggs\":[],\"params\":{\"spec\":\"{\\n $schema: https: //vega.github.io/schema/vega-lite/v2.json\\n title: \\\"Capacity in Mpps - 0,001% loss ratio\\\"\\n data: {\\n url: {\\n %context%: true\\n %timefield%: \\\"@timestamp\\\"\\n index: resu*\\n body: {\\n _source: [\\\"@timestamp\\\", \\\"_source\\\", \\\"rate_pps\\\", \\\"flow_count\\\", \\\"frame_size\\\", \\\"user_label\\\", \\\"type\\\"]\\n },\\n size: 10000\\n },\\n format: { property: \\\"hits.hits\\\" }\\n },\\n\\n transform: [\\n { calculate: \\\"datum._source['rate_pps'] / 1000000\\\" as: \\\"offered_load_pps\\\"},\\n { calculate: \\\"datum._source['flow_count']\\\" as: \\\"flow_count\\\"},\\n { calculate: \\\"isNaN(toNumber(datum._source['frame_size'])) ? 362 : toNumber(datum._source['frame_size'])\\\" as: \\\"frame_size\\\"},\\n { calculate: \\\"datum._source['user_label'] + '-' + datum._source['flow_count']\\\" as: \\\"label\\\"}\\n { aggregate: [{op: \\\"max\\\", field: \\\"offered_load_pps\\\", as: \\\"max_offered_load_pps\\\"}], groupby: [\\\"frame_size\\\", \\\"label\\\",\\\"flow_count\\\"]}\\n \\n ],\\n center: true,\\n hconcat: [\\n {\\n width:10,\\n selection: {\\n legendSel: {\\n type: \\\"multi\\\",\\n encodings: [ \\\"color\\\", \\\"shape\\\" ],\\n toggle: \\\"event.shiftKey\\\"\\n }\\n },\\n encoding: {\\n y: {\\n field: \\\"label\\\",\\n type: \\\"nominal\\\",\\n axis: {\\n title: \\\"\\\",\\n domain: false,\\n ticks: false,\\n offset: 10\\n },\\n },\\n color: {\\n condition: {\\n selection: \\\"legendSel\\\",\\n field: \\\"label\\\",\\n type: \\\"nominal\\\",\\n legend: null\\n },\\n value: \\\"lightgrey\\\"\\n }\\n },\\n mark: {\\n type: \\\"square\\\",\\n size: 120,\\n opacity: 1\\n }\\n },\\n {\\n width:500,\\n height:280,\\n transform: [\\n {filter: { selection: \\\"legendSel\\\"}}\\n \\n ],\\n mark: {\\n type: \\\"line\\\",\\n tooltip: true,\\n point: true\\n },\\n selection: {\\n grid: {\\n type: \\\"interval\\\",\\n resolve: \\\"global\\\",\\n bind: \\\"scales\\\",\\n translate: \\\"[mousedown[!event.shiftKey], window:mouseup] > window:mousemove!\\\",\\n zoom: \\\"wheel![!event.shiftKey]\\\"\\n },\\n pts: {\\n type: \\\"single\\\",\\n fields: [\\\"Label\\\"]\\n }\\n },\\n encoding: {\\n x: { field: \\\"frame_size\\\", type: \\\"quantitative\\\", title: \\\"Frame size (bytes)\\\", axis: {offset: 10} }\\n y: { field: \\\"max_offered_load_pps\\\", type: \\\"quantitative\\\", title: \\\"Offered load (Mpps)\\\" , axis: {offset: 10} }\\n color: {field: \\\"label\\\", \\\"type\\\": \\\"nominal\\\",\\n \\\"legend\\\": null}\\n tooltip: {\\\"field\\\": \\\"max_offered_load_pps\\\", \\\"type\\\": \\\"quantitative\\\"},\\n shape: {field: \\\"flow_count\\\", type: \\\"nominal\\\"}\\n }\\n } \\n ]\\n}\"},\"title\":\"[NDR] Capacity in Mpps - Line chart\"}"},"id":"1b471fa0-e6b0-11ea-bdc0-1fe1db0b9cb6","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index","type":"index-pattern"},{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index","type":"index-pattern"}],"type":"visualization","updated_at":"2020-10-06T12:39:19.799Z","version":"WzE2MDgsMTJd"}
+{"attributes":{"description":"NDR / PDR line chart - in Gbps","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"type.keyword\",\"negate\":true,\"params\":{\"query\":\"single_run\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"type.keyword\":\"single_run\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"frame_size\",\"negate\":true,\"params\":{\"query\":\"IMIX\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\"},\"query\":{\"match_phrase\":{\"frame_size\":\"IMIX\"}}},{\"$state\":{\"store\":\"appState\"},\"exists\":{\"field\":\"offered_tx_rate_bps\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"offered_tx_rate_bps\",\"negate\":false,\"type\":\"exists\",\"value\":\"exists\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[2].meta.index\"}}]}"},"title":"[NDR] Capacity in Gbps - Line chart","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"vega\",\"aggs\":[],\"params\":{\"spec\":\"{\\n $schema: https: //vega.github.io/schema/vega-lite/v2.json\\n title: \\\"Capacity in Gbps - 0,001% loss ratio\\\"\\n data: {\\n url: {\\n %context%: true\\n %timefield%: \\\"@timestamp\\\"\\n index: resu*\\n body: {\\n _source: [\\\"@timestamp\\\", \\\"_source\\\", \\\"offered_tx_rate_bps\\\", \\\"flow_count\\\", \\\"frame_size\\\", \\\"user_label\\\"]\\n },\\n size: 10000\\n },\\n format: { property: \\\"hits.hits\\\" }\\n },\\n transform: [\\n { calculate: \\\"datum._source['offered_tx_rate_bps'] / 1000000000\\\" as: \\\"offered_load_gbps\\\"},\\n { calculate: \\\"datum._source['flow_count']\\\" as: \\\"flow_count\\\"},\\n { calculate: \\\"isNaN(toNumber(datum._source['frame_size'])) ? 362 : toNumber(datum._source['frame_size'])\\\" as: \\\"frame_size\\\"},\\n { calculate: \\\"datum._source['user_label'] + '-' + datum._source['flow_count']\\\" as: \\\"label\\\"}\\n { aggregate: [{op: \\\"max\\\", field: \\\"offered_load_gbps\\\", as: \\\"max_offered_load_gbps\\\"}], groupby: [\\\"frame_size\\\", \\\"label\\\",\\\"flow_count\\\"]}\\n ],\\n center: true,\\n hconcat: [\\n {\\n width:10,\\n selection: {\\n legendSel: {\\n type: \\\"multi\\\",\\n encodings: [ \\\"color\\\", \\\"shape\\\" ],\\n toggle: \\\"event.shiftKey\\\"\\n }\\n },\\n encoding: {\\n y: {\\n field: \\\"label\\\",\\n type: \\\"nominal\\\",\\n axis: {\\n title: \\\"\\\",\\n domain: false,\\n ticks: false,\\n offset: 10\\n },\\n },\\n color: {\\n condition: {\\n selection: \\\"legendSel\\\",\\n field: \\\"label\\\",\\n type: \\\"nominal\\\",\\n legend: null\\n },\\n value: \\\"lightgrey\\\"\\n }\\n },\\n mark: {\\n type: \\\"square\\\",\\n size: 120,\\n opacity: 1\\n }\\n },\\n {\\n width:500,\\n height:280,\\n transform: [\\n {filter: { selection: \\\"legendSel\\\"}}\\n ],\\n mark: {\\n type: \\\"line\\\",\\n tooltip: true,\\n point: true\\n },\\n selection: {\\n grid: {\\n type: \\\"interval\\\",\\n resolve: \\\"global\\\",\\n bind: \\\"scales\\\",\\n translate: \\\"[mousedown[!event.shiftKey], window:mouseup] > window:mousemove!\\\",\\n zoom: \\\"wheel![!event.shiftKey]\\\"\\n },\\n pts: {\\n type: \\\"single\\\",\\n fields: [\\\"Label\\\"]\\n }\\n },\\n encoding: {\\n x: { field: \\\"frame_size\\\", type: \\\"quantitative\\\", title: \\\"Frame size (bytes)\\\", axis: {offset: 10} }\\n y: { field: \\\"max_offered_load_gbps\\\", type: \\\"quantitative\\\", title: \\\"Offered load (Gbps)\\\" , axis: {offset: 10} }\\n color: {field: \\\"label\\\", \\\"type\\\": \\\"nominal\\\",\\n \\\"legend\\\": null}\\n shape: {field: \\\"flow_count\\\", type: \\\"nominal\\\"}\\n tooltip: {\\\"field\\\": \\\"max_offered_load_gbps\\\", \\\"type\\\": \\\"quantitative\\\"}\\n }\\n }\\n ]\\n}\"},\"title\":\"[NDR] Capacity in Gbps - Line chart\"}"},"id":"23b0eb40-e60a-11ea-bdc0-1fe1db0b9cb6","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index","type":"index-pattern"},{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index","type":"index-pattern"},{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[2].meta.index","type":"index-pattern"}],"type":"visualization","updated_at":"2020-10-06T12:41:52.380Z","version":"WzE2MTUsMTJd"}
+{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"type.keyword\",\"negate\":true,\"params\":{\"query\":\"single_run\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"type.keyword\":\"single_run\"}}}]}"},"title":"Synthesis - multiple labels","uiStateJSON":"{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}","version":1,"visState":"{\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"rate_bps\",\"customLabel\":\"Offered bps\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"rate_pps\",\"customLabel\":\"Offered pps\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"std_dev\",\"schema\":\"metric\",\"params\":{\"field\":\"total_orig_rate_bps\",\"customLabel\":\"std max bps\"}},{\"id\":\"4\",\"enabled\":true,\"type\":\"avg\",\"schema\":\"metric\",\"params\":{\"field\":\"avg_delay_usec\",\"customLabel\":\"latency avg\"}},{\"id\":\"6\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"split\",\"params\":{\"field\":\"flow_count\",\"orderBy\":\"_key\",\"order\":\"asc\",\"size\":50,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"flow count\"}},{\"id\":\"9\",\"enabled\":true,\"type\":\"significant_terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"user_label.keyword\",\"size\":10,\"customLabel\":\"label\"}},{\"id\":\"8\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"frame_size_int\",\"orderBy\":\"_key\",\"order\":\"asc\",\"size\":50,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"frame size (bytes)\"}}],\"params\":{\"perPage\":10,\"percentageCol\":\"\",\"row\":false,\"showMetricsAtAllLevels\":false,\"showPartialRows\":false,\"showTotal\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"totalFunc\":\"sum\"},\"title\":\"Synthesis - multiple labels\"}"},"id":"38cecb10-eded-11ea-a706-3fce679b2102","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"},{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index","type":"index-pattern"}],"type":"visualization","updated_at":"2020-09-03T13:56:10.433Z","version":"WzExMTksNV0="}
+{"attributes":{"description":"NDR / PDR scatter plot - in Gbps","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"type.keyword\",\"negate\":true,\"params\":{\"query\":\"single_run\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"type.keyword\":\"single_run\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"frame_size\",\"negate\":true,\"params\":{\"query\":\"IMIX\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\"},\"query\":{\"match_phrase\":{\"frame_size\":\"IMIX\"}}},{\"$state\":{\"store\":\"appState\"},\"exists\":{\"field\":\"offered_tx_rate_bps\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"offered_tx_rate_bps\",\"negate\":false,\"type\":\"exists\",\"value\":\"exists\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[2].meta.index\"}}]}"},"title":"[NDR] Capacity in Gbps - Scatter plot","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"vega\",\"aggs\":[],\"params\":{\"spec\":\"{\\n $schema: \\\"https://vega.github.io/schema/vega-lite/v2.json\\\"\\n title: \\\"Capacity in Gbps - 0.001% loss ratio\\\"\\n data: {\\n url: {\\n %context%: true\\n %timefield%: \\\"@timestamp\\\"\\n index: resu*\\n body: {\\n _source: [\\\"@timestamp\\\", \\\"_source\\\", \\\"offered_tx_rate_bps\\\", \\\"flow_count\\\", \\\"frame_size\\\", \\\"user_label\\\"]\\n },\\n size: 10000\\n },\\n format: { property: \\\"hits.hits\\\" }\\n },\\n transform: [\\n { calculate: \\\"datum._source['offered_tx_rate_bps'] / 1000000000\\\" as: \\\"Offered load (Gbps)\\\"},\\n { calculate: \\\"datum._source['flow_count']\\\" as: \\\"Flow count\\\"},\\n { calculate: \\\"isNaN(toNumber(datum._source['frame_size'])) ? 362 : toNumber(datum._source['frame_size'])\\\" as: \\\"Frame size (bytes)\\\"}\\n { calculate: \\\"datum._source['user_label'] + '-' + datum._source['flow_count']\\\" as: \\\"label\\\"}\\n ],\\n center: true,\\n hconcat: [\\n {\\n width:10,\\n selection: {\\n legendSel: {\\n type: \\\"multi\\\",\\n encodings: [ \\\"color\\\", \\\"shape\\\" ],\\n toggle: \\\"event.shiftKey\\\"\\n }\\n },\\n encoding: {\\n y: {\\n field: \\\"label\\\",\\n type: \\\"nominal\\\",\\n axis: {\\n title: \\\"\\\",\\n domain: false,\\n ticks: false,\\n offset: 10\\n },\\n },\\n color: {\\n condition: {\\n selection: \\\"legendSel\\\",\\n field: \\\"label\\\",\\n type: \\\"nominal\\\",\\n legend: null\\n },\\n value: \\\"lightgrey\\\"\\n }\\n },\\n mark: {\\n type: \\\"square\\\",\\n size: 120,\\n opacity: 1\\n }\\n },\\n {\\n width:500,\\n height:280,\\n transform: [\\n {filter: { selection: \\\"legendSel\\\"}}\\n \\n ],\\n mark: {\\n \\\"type\\\": \\\"point\\\",\\n \\\"tooltip\\\": true\\n },\\n selection: {\\n grid: {\\n type: \\\"interval\\\",\\n resolve: \\\"global\\\",\\n bind: \\\"scales\\\",\\n translate: \\\"[mousedown[!event.shiftKey], window:mouseup] > window:mousemove!\\\",\\n zoom: \\\"wheel![!event.shiftKey]\\\"\\n },\\n pts: {\\n type: \\\"single\\\",\\n fields: [\\\"label\\\"]\\n }\\n },\\n encoding: {\\n x: {\\n field: \\\"Frame size (bytes)\\\",\\n type: \\\"quantitative\\\"\\n }\\n y: {\\n field: \\\"Offered load (Gbps)\\\",\\n type: \\\"quantitative\\\"\\n }\\n color: {\\n field: \\\"label\\\", \\\"type\\\": \\\"nominal\\\",\\n \\\"legend\\\": null\\n }\\n shape: {\\n field: \\\"Flow count\\\",\\n type: \\\"nominal\\\"\\n }\\n tooltip: {\\n \\\"field\\\": \\\"Offered load (Gbps)\\\",\\n \\\"type\\\": \\\"quantitative\\\"\\n }\\n }\\n }\\n ]\\n}\"},\"title\":\"[NDR] Capacity in Gbps - Scatter plot\"}"},"id":"82fc8690-e77c-11ea-bb67-9b8ce9c25c00","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index","type":"index-pattern"},{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index","type":"index-pattern"},{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[2].meta.index","type":"index-pattern"}],"type":"visualization","updated_at":"2020-10-06T12:43:07.344Z","version":"WzE2MjAsMTJd"}
+{"attributes":{"description":"NDR / PDR scatter plot - in Mpps","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"type.keyword\",\"negate\":true,\"params\":{\"query\":\"single_run\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"type.keyword\":\"single_run\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"frame_size\",\"negate\":true,\"params\":{\"query\":\"IMIX\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\"},\"query\":{\"match_phrase\":{\"frame_size\":\"IMIX\"}}}]}"},"title":"[NDR] Capacity in Mpps - Scatter plot","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"vega\",\"aggs\":[],\"params\":{\"spec\":\"{\\n $schema: \\\"https://vega.github.io/schema/vega-lite/v2.json\\\"\\n title: \\\"Capacity in Mpps - 0,001% loss ratio\\\"\\n data: {\\n url: {\\n %context%: true\\n %timefield%: \\\"@timestamp\\\"\\n index: resu*\\n body: {\\n _source: [\\\"@timestamp\\\", \\\"_source\\\", \\\"rate_pps\\\", \\\"flow_count\\\", \\\"frame_size\\\", \\\"user_label\\\"]\\n },\\n size: 10000\\n },\\n format: { property: \\\"hits.hits\\\" }\\n },\\n transform: [\\n { calculate: \\\"datum._source['rate_pps'] / 1000000\\\" as: \\\"Offered load (Mpps)\\\"},\\n { calculate: \\\"datum._source['flow_count']\\\" as: \\\"Flow count\\\"},\\n { calculate: \\\"isNaN(toNumber(datum._source['frame_size'])) ? 362 : toNumber(datum._source['frame_size'])\\\" as: \\\"Frame size (bytes)\\\"}\\n { calculate: \\\"datum._source['user_label'] + '-' + datum._source['flow_count']\\\" as: \\\"label\\\"}\\n ],\\n center: true,\\n hconcat: [\\n {\\n width:10,\\n selection: {\\n legendSel: {\\n type: \\\"multi\\\",\\n encodings: [ \\\"color\\\", \\\"shape\\\" ],\\n toggle: \\\"event.shiftKey\\\"\\n }\\n },\\n encoding: {\\n y: {\\n field: \\\"label\\\",\\n type: \\\"nominal\\\",\\n axis: {\\n title: \\\"\\\",\\n domain: false,\\n ticks: false,\\n offset: 10\\n },\\n },\\n color: {\\n condition: {\\n selection: \\\"legendSel\\\",\\n field: \\\"label\\\",\\n type: \\\"nominal\\\",\\n legend: null\\n },\\n value: \\\"lightgrey\\\"\\n }\\n },\\n mark: {\\n type: \\\"square\\\",\\n size: 120,\\n opacity: 1\\n }\\n },\\n {\\n width:500,\\n height:280,\\n transform: [\\n {filter: { selection: \\\"legendSel\\\"}}\\n \\n ],\\n mark: {\\n \\\"type\\\": \\\"point\\\",\\n \\\"tooltip\\\": true\\n },\\n selection: {\\n grid: {\\n type: \\\"interval\\\",\\n resolve: \\\"global\\\",\\n bind: \\\"scales\\\",\\n translate: \\\"[mousedown[!event.shiftKey], window:mouseup] > window:mousemove!\\\",\\n zoom: \\\"wheel![!event.shiftKey]\\\"\\n },\\n pts: {\\n type: \\\"single\\\",\\n fields: [\\\"label\\\"]\\n }\\n },\\n encoding: {\\n x: {\\n field: \\\"Frame size (bytes)\\\",\\n type: \\\"quantitative\\\"\\n }\\n y: {\\n field: \\\"Offered load (Mpps)\\\",\\n type: \\\"quantitative\\\"\\n }\\n color: {\\n field: \\\"label\\\", \\\"type\\\": \\\"nominal\\\",\\n \\\"legend\\\": null\\n }\\n shape: {\\n field: \\\"Flow count\\\",\\n type: \\\"nominal\\\"\\n }\\n tooltip: {\\n \\\"field\\\": \\\"Offered load (Mpps)\\\",\\n \\\"type\\\": \\\"quantitative\\\"\\n }\\n }\\n }\\n ]\\n}\"},\"title\":\"[NDR] Capacity in Mpps - Scatter plot\"}"},"id":"51110c20-e879-11ea-9fcb-3bb6d0d175f6","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index","type":"index-pattern"},{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index","type":"index-pattern"}],"type":"visualization","updated_at":"2020-10-06T12:44:30.320Z","version":"WzE2MjIsMTJd"}
+{"attributes":{"description":"","hits":0,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}"},"optionsJSON":"{\"hidePanelTitles\":false,\"useMargins\":true}","panelsJSON":"[{\"embeddableConfig\":{\"title\":\"Max value over 3 measurements\"},\"gridData\":{\"h\":15,\"i\":\"e9186fd0-d3a5-47ae-88c5-20cf0e44dc30\",\"w\":24,\"x\":0,\"y\":0},\"panelIndex\":\"e9186fd0-d3a5-47ae-88c5-20cf0e44dc30\",\"title\":\"Max value over 3 measurements\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_0\"},{\"embeddableConfig\":{\"title\":\"Scatter plot\"},\"gridData\":{\"h\":15,\"i\":\"89f92958-de63-4244-af53-9ef60958de41\",\"w\":24,\"x\":24,\"y\":0},\"panelIndex\":\"89f92958-de63-4244-af53-9ef60958de41\",\"title\":\"Scatter plot\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_1\"},{\"embeddableConfig\":{\"title\":\"Max value over 3 measurements\"},\"gridData\":{\"h\":15,\"i\":\"87ec5dff-5c9b-4c88-b079-cbc63b4275ad\",\"w\":24,\"x\":0,\"y\":15},\"panelIndex\":\"87ec5dff-5c9b-4c88-b079-cbc63b4275ad\",\"title\":\"Max value over 3 measurements\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_2\"},{\"embeddableConfig\":{\"title\":\"Scatter plot\"},\"gridData\":{\"h\":15,\"i\":\"813ff050-1ec7-48f4-82db-b63ab98e40c6\",\"w\":24,\"x\":24,\"y\":15},\"panelIndex\":\"813ff050-1ec7-48f4-82db-b63ab98e40c6\",\"title\":\"Scatter plot\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_3\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":10,\"i\":\"d806469f-2ea3-4b45-99d8-acc7f09ee8f5\",\"w\":48,\"x\":0,\"y\":30},\"panelIndex\":\"d806469f-2ea3-4b45-99d8-acc7f09ee8f5\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_4\"}]","timeRestore":false,"title":"Synthesis Max Throughput - NDR (0.001% loss ratio)","version":1},"id":"46874a00-e2b9-11ea-bdc0-1fe1db0b9cb6","migrationVersion":{"dashboard":"7.3.0"},"references":[{"id":"23b0eb40-e60a-11ea-bdc0-1fe1db0b9cb6","name":"panel_0","type":"visualization"},{"id":"82fc8690-e77c-11ea-bb67-9b8ce9c25c00","name":"panel_1","type":"visualization"},{"id":"1b471fa0-e6b0-11ea-bdc0-1fe1db0b9cb6","name":"panel_2","type":"visualization"},{"id":"51110c20-e879-11ea-9fcb-3bb6d0d175f6","name":"panel_3","type":"visualization"},{"id":"0d2c4070-e6e3-11ea-a933-05dd8fc4d76f","name":"panel_4","type":"visualization"}],"type":"dashboard","updated_at":"2020-10-06T12:46:24.279Z","version":"WzE2MzEsMTJd"}
+{"attributes":{"buildNum":16588,"defaultIndex":"39955f20-78ac-11ea-ae77-8339e5fd808c"},"id":"6.2.2","references":[],"type":"config","updated_at":"2020-07-21T08:47:10.197Z","version":"WzYsMV0="}
+{"attributes":{"buildNum":20352,"defaultIndex":"39955f20-78ac-11ea-ae77-8339e5fd808c"},"id":"6.8.0","references":[],"type":"config","updated_at":"2020-07-30T15:12:33.985Z","version":"WzE4LDFd"}
+{"attributes":{"buildNum":31997,"defaultIndex":"e0939790-e78f-11ea-8ca2-35af0cc4217c"},"id":"7.8.0","references":[],"type":"config","updated_at":"2020-08-27T09:31:50.697Z","version":"Wzc5MCw0XQ=="}
+{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"$state\":{\"store\":\"appState\"},\"exists\":{\"field\":\"theoretical_tx_rate_bps\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"theoretical_tx_rate_bps\",\"negate\":false,\"type\":\"exists\",\"value\":\"exists\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"}}]}"},"title":"[NDR] Capacity in Gbps with theoretical max rate - Line chart","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"vega\",\"aggs\":[],\"params\":{\"spec\":\"{\\n $schema: https: //vega.github.io/schema/vega-lite/v2.json\\n title: \\\"Capacity in Gbps - 0,001% loss ratio\\\"\\n data: {\\n url: {\\n %context%: true\\n %timefield%: \\\"@timestamp\\\"\\n index: resu*\\n body: {\\n _source: [\\\"@timestamp\\\", \\\"_source\\\", \\\"offered_tx_rate_bps\\\", \\\"theoretical_tx_rate_bps\\\", \\\"flow_count\\\", \\\"frame_size\\\", \\\"user_label\\\"]\\n },\\n size: 10000\\n },\\n format: { property: \\\"hits.hits\\\" }\\n },\\n transform: [\\n { calculate: \\\"datum._source['offered_tx_rate_bps'] / 1000000000\\\" as: \\\"offered_load_gbps\\\"},\\n { calculate: \\\"datum._source['theoretical_tx_rate_bps'] / 1000000000\\\" as: \\\"theoretical_tx_rate_bps\\\"},\\n { calculate: \\\"datum._source['flow_count']\\\" as: \\\"flow_count\\\"},\\n { calculate: \\\"isNaN(toNumber(datum._source['frame_size'])) ? 362 : toNumber(datum._source['frame_size'])\\\" as: \\\"frame_size\\\"},\\n { calculate: \\\"datum._source['user_label'] + '-' + datum._source['flow_count']\\\" as: \\\"label\\\"}\\n { aggregate: [{op: \\\"max\\\", field: \\\"offered_load_gbps\\\", as: \\\"max_offered_load_gbps\\\"}, {op: \\\"max\\\", field: \\\"theoretical_tx_rate_bps\\\", as: \\\"theoretical_tx_rate_bps\\\"}], groupby: [\\\"frame_size\\\", \\\"label\\\",\\\"flow_count\\\"]}\\n ],\\n center: true,\\n hconcat: [\\n {\\n width:10,\\n selection: {\\n legendSel: {\\n type: \\\"multi\\\",\\n encodings: [ \\\"color\\\", \\\"shape\\\" ],\\n toggle: \\\"event.shiftKey\\\"\\n }\\n },\\n encoding: {\\n y: {\\n field: \\\"label\\\",\\n type: \\\"nominal\\\",\\n axis: {\\n title: \\\"\\\",\\n domain: false,\\n ticks: false,\\n offset: 10\\n },\\n },\\n color: {\\n condition: {\\n selection: \\\"legendSel\\\",\\n field: \\\"label\\\",\\n type: \\\"nominal\\\",\\n legend: null\\n },\\n value: \\\"lightgrey\\\"\\n }\\n },\\n mark: {\\n type: \\\"square\\\",\\n size: 120,\\n opacity: 1\\n }\\n },\\n {\\n layer: [\\n {\\n mark: {\\n type: \\\"line\\\",\\n tooltip: true,\\n point: true\\n },\\n encoding: {\\n x: { field: \\\"frame_size\\\", type: \\\"quantitative\\\", title: \\\"Frame size (bytes)\\\", axis: {offset: 10} }\\n y: { field: \\\"theoretical_tx_rate_bps\\\", type: \\\"quantitative\\\", title: \\\"Theoretical rate (Gbps)\\\" , axis: {offset: 10} }\\n strokeDash: {\\\"field\\\": \\\"theoretical_tx_rate_bps\\\", \\\"type\\\": \\\"nominal\\\"}\\n tooltip: [{\\\"field\\\": \\\"theoretical_tx_rate_bps\\\", \\\"type\\\": \\\"quantitative\\\", title: \\\"theoretical max capacity\\\"}],\\n color: { \\\"value\\\": \\\"red\\\"}\\n }\\n },\\n {\\n width:500,\\n height:280,\\n transform: [\\n {filter: { selection: \\\"legendSel\\\"}}\\n ],\\n mark: {\\n type: \\\"line\\\",\\n tooltip: true,\\n point: true\\n },\\n selection: {\\n grid: {\\n type: \\\"interval\\\",\\n resolve: \\\"global\\\",\\n bind: \\\"scales\\\",\\n translate: \\\"[mousedown[!event.shiftKey], window:mouseup] > window:mousemove!\\\",\\n zoom: \\\"wheel![!event.shiftKey]\\\"\\n },\\n pts: {\\n type: \\\"single\\\",\\n fields: [\\\"Label\\\"]\\n }\\n },\\n encoding: {\\n x: { field: \\\"frame_size\\\", type: \\\"quantitative\\\", title: \\\"Frame size (bytes)\\\", axis: {offset: 10} }\\n y: { field: \\\"max_offered_load_gbps\\\", type: \\\"quantitative\\\", title: \\\"Offered load (Gbps)\\\" , axis: {offset: 10} }\\n color: {field: \\\"label\\\", \\\"type\\\": \\\"nominal\\\",\\n \\\"legend\\\": null}\\n shape: {field: \\\"flow_count\\\", type: \\\"nominal\\\"}\\n tooltip: {\\\"field\\\": \\\"max_offered_load_gbps\\\", \\\"type\\\": \\\"quantitative\\\"}\\n }\\n }\\n ]\\n }\\n ]\\n}\"},\"title\":\"[NDR] Capacity in Gbps with theoretical max rate - Line chart\"}"},"id":"966a5990-0712-11eb-92f0-3518df6b43ff","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index","type":"index-pattern"}],"type":"visualization","updated_at":"2020-10-06T12:34:38.736Z","version":"WzE1OTIsMTJd"}
+{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"type.keyword\",\"negate\":true,\"params\":{\"query\":\"single_run\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"type.keyword\":\"single_run\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"frame_size\",\"negate\":true,\"params\":{\"query\":\"IMIX\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\"},\"query\":{\"match_phrase\":{\"frame_size\":\"IMIX\"}}}]}"},"title":"[NDR] Capacity in Gbps - bar chart","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"histogram\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"rate_bps\",\"customLabel\":\"Offered load (Gbps)\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"frame_size_int\",\"orderBy\":\"_key\",\"order\":\"asc\",\"size\":50,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Frame size (bytes)\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"significant_terms\",\"schema\":\"group\",\"params\":{\"field\":\"user_label.keyword\",\"size\":10,\"customLabel\":\"Label\"}},{\"id\":\"4\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"flow_count\",\"orderBy\":\"_key\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}],\"params\":{\"type\":\"histogram\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100,\"rotate\":0},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\",\"setYExtents\":false},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Offered load (Gbps)\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Offered load (Gbps)\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"showCircles\":true}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"labels\":{\"show\":false},\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"}},\"title\":\"[NDR] Capacity in Gbps - bar chart\"}"},"id":"8c87f800-edeb-11ea-a706-3fce679b2102","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"},{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index","type":"index-pattern"},{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index","type":"index-pattern"}],"type":"visualization","updated_at":"2020-09-10T12:50:59.005Z","version":"WzEzNjIsOF0="}
+{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"type.keyword\",\"negate\":true,\"params\":{\"query\":\"single_run\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"type.keyword\":\"single_run\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"frame_size\",\"negate\":true,\"params\":{\"query\":\"IMIX\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\"},\"query\":{\"match_phrase\":{\"frame_size\":\"IMIX\"}}}]}"},"title":"[NDR] Capacity in Mpps - bar chart","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"histogram\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"rate_pps\",\"customLabel\":\"Offered load (Mpps)\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"frame_size_int\",\"orderBy\":\"_key\",\"order\":\"asc\",\"size\":50,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Frame size (bytes)\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"significant_terms\",\"schema\":\"group\",\"params\":{\"field\":\"user_label.keyword\",\"size\":10,\"customLabel\":\"Label\"}},{\"id\":\"4\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"flow_count\",\"orderBy\":\"_key\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}],\"params\":{\"type\":\"histogram\",\"grid\":{\"categoryLines\":true,\"valueAxis\":\"ValueAxis-1\"},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100,\"rotate\":0},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\",\"setYExtents\":false},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Offered load (Mpps)\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Offered load (Mpps)\",\"id\":\"1\"},\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"showCircles\":true}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"labels\":{\"show\":false},\"thresholdLine\":{\"show\":false,\"value\":20,\"width\":1,\"style\":\"full\",\"color\":\"#E7664C\"}},\"title\":\"[NDR] Capacity in Mpps - bar chart\"}"},"id":"8c14a8b0-e6d8-11ea-a933-05dd8fc4d76f","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"},{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index","type":"index-pattern"},{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index","type":"index-pattern"}],"type":"visualization","updated_at":"2020-09-10T12:51:33.492Z","version":"WzEzNjQsOF0="}
+{"attributes":{"description":"NDR / PDR line chart - in Mpps","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"type.keyword\",\"negate\":true,\"params\":{\"query\":\"single_run\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"type.keyword\":\"single_run\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"frame_size\",\"negate\":true,\"params\":{\"query\":\"IMIX\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\"},\"query\":{\"match_phrase\":{\"frame_size\":\"IMIX\"}}},{\"$state\":{\"store\":\"appState\"},\"exists\":{\"field\":\"theoretical_tx_rate_pps\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"theoretical_tx_rate_pps\",\"negate\":false,\"type\":\"exists\",\"value\":\"exists\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[2].meta.index\"}}]}"},"title":"[NDR] Capacity in Mpps with theoretical max rate - Line chart","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"vega\",\"aggs\":[],\"params\":{\"spec\":\"{\\n $schema: https: //vega.github.io/schema/vega-lite/v2.json\\n title: \\\"Capacity in Mpps - 0,001% loss ratio\\\"\\n data: {\\n url: {\\n %context%: true\\n %timefield%: \\\"@timestamp\\\"\\n index: resu*\\n body: {\\n _source: [\\\"@timestamp\\\", \\\"_source\\\", \\\"theoretical_tx_rate_pps\\\", \\\"rate_pps\\\", \\\"flow_count\\\", \\\"frame_size\\\", \\\"user_label\\\", \\\"type\\\"]\\n },\\n size: 10000\\n },\\n format: { property: \\\"hits.hits\\\" }\\n },\\n\\n transform: [\\n { calculate: \\\"datum._source['rate_pps'] / 1000000\\\" as: \\\"offered_load_pps\\\"},\\n { calculate: \\\"datum._source['theoretical_tx_rate_pps'] / 1000000\\\" as: \\\"theoretical_tx_rate_pps\\\"},\\n { calculate: \\\"datum._source['flow_count']\\\" as: \\\"flow_count\\\"},\\n { calculate: \\\"isNaN(toNumber(datum._source['frame_size'])) ? 362 : toNumber(datum._source['frame_size'])\\\" as: \\\"frame_size\\\"},\\n { calculate: \\\"datum._source['user_label'] + '-' + datum._source['flow_count']\\\" as: \\\"label\\\"}\\n { aggregate: [{op: \\\"max\\\", field: \\\"offered_load_pps\\\", as: \\\"max_offered_load_pps\\\"}, {op: \\\"max\\\", field: \\\"theoretical_tx_rate_pps\\\", as: \\\"theoretical_tx_rate_pps\\\"}], groupby: [\\\"frame_size\\\", \\\"label\\\",\\\"flow_count\\\"]}\\n \\n ],\\n center: true,\\n hconcat: [\\n {\\n width:10,\\n selection: {\\n legendSel: {\\n type: \\\"multi\\\",\\n encodings: [ \\\"color\\\", \\\"shape\\\" ],\\n toggle: \\\"event.shiftKey\\\"\\n }\\n },\\n encoding: {\\n y: {\\n field: \\\"label\\\",\\n type: \\\"nominal\\\",\\n axis: {\\n title: \\\"\\\",\\n domain: false,\\n ticks: false,\\n offset: 10\\n },\\n },\\n color: {\\n condition: {\\n selection: \\\"legendSel\\\",\\n field: \\\"label\\\",\\n type: \\\"nominal\\\",\\n legend: null\\n },\\n value: \\\"lightgrey\\\"\\n }\\n },\\n mark: {\\n type: \\\"square\\\",\\n size: 120,\\n opacity: 1\\n }\\n },\\n {\\n layer: [{\\n mark: {\\n type: \\\"line\\\",\\n tooltip: true,\\n point: true\\n },\\n encoding: {\\n x: { field: \\\"frame_size\\\", type: \\\"quantitative\\\", title: \\\"Frame size (bytes)\\\", axis: {offset: 10} }\\n y: { field: \\\"theoretical_tx_rate_pps\\\", type: \\\"quantitative\\\", title: \\\"Offered load (Mpps)\\\" , axis: {offset: 10} }\\n strokeDash: {\\\"field\\\": \\\"theoretical_tx_rate_pps\\\", \\\"type\\\": \\\"nominal\\\"}\\n tooltip: [{\\\"field\\\": \\\"theoretical_tx_rate_pps\\\", \\\"type\\\": \\\"quantitative\\\", title: \\\"theoretical max capacity\\\"}],\\n color: { \\\"value\\\": \\\"red\\\"}\\n }\\n },{\\n width:500,\\n height:280,\\n transform: [\\n {filter: { selection: \\\"legendSel\\\"}}\\n \\n ],mark: {\\n type: \\\"line\\\",\\n tooltip: true,\\n point: true\\n },\\n selection: {\\n grid: {\\n type: \\\"interval\\\",\\n resolve: \\\"global\\\",\\n bind: \\\"scales\\\",\\n translate: \\\"[mousedown[!event.shiftKey], window:mouseup] > window:mousemove!\\\",\\n zoom: \\\"wheel![!event.shiftKey]\\\"\\n },\\n pts: {\\n type: \\\"single\\\",\\n fields: [\\\"Label\\\"]\\n }\\n },\\n encoding: {\\n x: { field: \\\"frame_size\\\", type: \\\"quantitative\\\", title: \\\"Frame size (bytes)\\\", axis: {offset: 10} }\\n y: { field: \\\"max_offered_load_pps\\\", type: \\\"quantitative\\\", title: \\\"Offered load (Mpps)\\\" , axis: {offset: 10} }\\n color: {field: \\\"label\\\", \\\"type\\\": \\\"nominal\\\",\\n \\\"legend\\\": null}\\n tooltip: {\\\"field\\\": \\\"max_offered_load_pps\\\", \\\"type\\\": \\\"quantitative\\\"},\\n shape: {field: \\\"flow_count\\\", type: \\\"nominal\\\"}\\n }\\n }\\n ]\\n }\\n \\n ]\\n}\"},\"title\":\"[NDR] Capacity in Mpps with theoretical max rate - Line chart\"}"},"id":"a523c930-07d0-11eb-92f0-3518df6b43ff","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index","type":"index-pattern"},{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index","type":"index-pattern"},{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[2].meta.index","type":"index-pattern"}],"type":"visualization","updated_at":"2020-10-06T12:37:07.011Z","version":"WzE1OTgsMTJd"}
+{"attributes":{"description":"","hits":0,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}"},"optionsJSON":"{\"hidePanelTitles\":false,\"useMargins\":true}","panelsJSON":"[{\"version\":\"7.8.0\",\"gridData\":{\"h\":15,\"i\":\"c6f77fa7-0493-4ef6-b995-9250039f26e0\",\"w\":24,\"x\":0,\"y\":0},\"panelIndex\":\"c6f77fa7-0493-4ef6-b995-9250039f26e0\",\"embeddableConfig\":{},\"panelRefName\":\"panel_0\"},{\"version\":\"7.8.0\",\"gridData\":{\"h\":15,\"i\":\"0b349901-c6f5-4a35-ad44-5331d75ceb8c\",\"w\":24,\"x\":24,\"y\":0},\"panelIndex\":\"0b349901-c6f5-4a35-ad44-5331d75ceb8c\",\"embeddableConfig\":{},\"panelRefName\":\"panel_1\"},{\"version\":\"7.8.0\",\"gridData\":{\"h\":15,\"i\":\"e7f9f670-3866-4795-a83e-3b208990262d\",\"w\":24,\"x\":24,\"y\":15},\"panelIndex\":\"e7f9f670-3866-4795-a83e-3b208990262d\",\"embeddableConfig\":{},\"panelRefName\":\"panel_2\"},{\"version\":\"7.8.0\",\"gridData\":{\"h\":16,\"i\":\"7ad18ce1-1916-4d5b-abe8-340571feb151\",\"w\":48,\"x\":0,\"y\":30},\"panelIndex\":\"7ad18ce1-1916-4d5b-abe8-340571feb151\",\"embeddableConfig\":{},\"panelRefName\":\"panel_3\"},{\"version\":\"7.8.0\",\"gridData\":{\"x\":0,\"y\":15,\"w\":24,\"h\":15,\"i\":\"29117e66-cb29-43fc-ba6f-5f61d356a236\"},\"panelIndex\":\"29117e66-cb29-43fc-ba6f-5f61d356a236\",\"embeddableConfig\":{},\"panelRefName\":\"panel_4\"}]","timeRestore":false,"title":"Comparison synthesis dashboard with max theoretical value","version":1},"id":"81cf0e70-070a-11eb-92f0-3518df6b43ff","migrationVersion":{"dashboard":"7.3.0"},"references":[{"id":"966a5990-0712-11eb-92f0-3518df6b43ff","name":"panel_0","type":"visualization"},{"id":"8c87f800-edeb-11ea-a706-3fce679b2102","name":"panel_1","type":"visualization"},{"id":"8c14a8b0-e6d8-11ea-a933-05dd8fc4d76f","name":"panel_2","type":"visualization"},{"id":"38cecb10-eded-11ea-a706-3fce679b2102","name":"panel_3","type":"visualization"},{"id":"a523c930-07d0-11eb-92f0-3518df6b43ff","name":"panel_4","type":"visualization"}],"type":"dashboard","updated_at":"2020-10-06T12:37:58.211Z","version":"WzE2MDIsMTJd"}
+{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"type.keyword\",\"negate\":true,\"params\":{\"query\":\"single_run\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"type.keyword\":\"single_run\"}}}]}"},"title":"IMIX KPI","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metric\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"rate_bps\",\"customLabel\":\"IMIX Offered load (Mbps)\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"significant_terms\",\"schema\":\"group\",\"params\":{\"field\":\"user_label.keyword\",\"size\":10,\"customLabel\":\"label\"}}],\"params\":{\"addTooltip\":true,\"addLegend\":false,\"type\":\"metric\",\"metric\":{\"percentageMode\":false,\"useRanges\":false,\"colorSchema\":\"Green to Red\",\"metricColorMode\":\"None\",\"colorsRange\":[{\"from\":0,\"to\":10000}],\"labels\":{\"show\":true},\"invertColors\":false,\"style\":{\"bgFill\":\"#000\",\"bgColor\":false,\"labelColor\":false,\"subText\":\"\",\"fontSize\":60}}},\"title\":\"IMIX KPI\"}"},"id":"83434d80-e882-11ea-9fcb-3bb6d0d175f6","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"},{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index","type":"index-pattern"}],"type":"visualization","updated_at":"2020-08-27T16:29:43.383Z","version":"Wzk4Miw0XQ=="}
+{"attributes":{"description":"NDR / PDR scatter plot - in Mpps","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"type.keyword\",\"negate\":true,\"params\":{\"query\":\"single_run\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"type.keyword\":\"single_run\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"frame_size\",\"negate\":true,\"params\":{\"query\":\"IMIX\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\"},\"query\":{\"match_phrase\":{\"frame_size\":\"IMIX\"}}},{\"$state\":{\"store\":\"appState\"},\"exists\":{\"field\":\"theoretical_tx_rate_pps\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"theoretical_tx_rate_pps\",\"negate\":false,\"type\":\"exists\",\"value\":\"exists\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[2].meta.index\"}}]}"},"title":"[NDR] Capacity in Mpps with theoretical max rate - Scatter plot","uiStateJSON":"{}","version":1,"visState":"{\"aggs\":[],\"params\":{\"spec\":\"{\\n $schema: \\\"https://vega.github.io/schema/vega-lite/v2.json\\\"\\n title: \\\"Capacity in Mpps - 0,001% loss ratio\\\"\\n data: {\\n url: {\\n %context%: true\\n %timefield%: \\\"@timestamp\\\"\\n index: resu*\\n body: {\\n _source: [\\\"@timestamp\\\", \\\"_source\\\", \\\"rate_pps\\\", \\\"theoretical_tx_rate_pps\\\", \\\"flow_count\\\", \\\"frame_size\\\", \\\"user_label\\\"]\\n },\\n size: 10000\\n },\\n format: { property: \\\"hits.hits\\\" }\\n },\\n transform: [\\n { calculate: \\\"datum._source['rate_pps'] / 1000000\\\" as: \\\"rate_pps\\\"},\\n { calculate: \\\"datum._source['theoretical_tx_rate_pps'] / 1000000\\\" as: \\\"theoretical_tx_rate_pps\\\"},\\n { calculate: \\\"datum._source['flow_count']\\\" as: \\\"flow_count\\\"},\\n { calculate: \\\"isNaN(toNumber(datum._source['frame_size'])) ? 362 : toNumber(datum._source['frame_size'])\\\" as: \\\"frame_size\\\"}\\n { calculate: \\\"datum._source['user_label'] + '-' + datum._source['flow_count']\\\" as: \\\"label\\\"}\\n ],\\n center: true,\\n hconcat: [\\n {\\n width:10,\\n selection: {\\n legendSel: {\\n type: \\\"multi\\\",\\n encodings: [ \\\"color\\\", \\\"shape\\\" ],\\n toggle: \\\"event.shiftKey\\\"\\n }\\n },\\n encoding: {\\n y: {\\n field: \\\"label\\\",\\n type: \\\"nominal\\\",\\n axis: {\\n title: \\\"\\\",\\n domain: false,\\n ticks: false,\\n offset: 10\\n },\\n },\\n color: {\\n condition: {\\n selection: \\\"legendSel\\\",\\n field: \\\"label\\\",\\n type: \\\"nominal\\\",\\n legend: null\\n },\\n value: \\\"lightgrey\\\"\\n }\\n },\\n mark: {\\n type: \\\"square\\\",\\n size: 120,\\n opacity: 1\\n }\\n },\\n {\\n layer: [\\n {\\n mark: {\\n type: \\\"line\\\",\\n tooltip: true\\n },\\n encoding: {\\n x: { field: \\\"frame_size\\\", type: \\\"quantitative\\\", title: \\\"Frame size (bytes)\\\", axis: {offset: 10} }\\n y: { field: \\\"theoretical_tx_rate_pps\\\", type: \\\"quantitative\\\", title: \\\"Offered load (Mpps)\\\" , axis: {offset: 10} }\\n strokeDash: {\\\"field\\\": \\\"theoretical_tx_rate_pps\\\", \\\"type\\\": \\\"nominal\\\"}\\n tooltip: [{\\\"field\\\": \\\"theoretical_tx_rate_pps\\\", \\\"type\\\": \\\"quantitative\\\", title: \\\"theoretical max capacity\\\"}],\\n color: { \\\"value\\\": \\\"red\\\"}\\n }\\n },\\n {\\n width:500,\\n height:280,\\n transform: [\\n {filter: { selection: \\\"legendSel\\\"}}\\n ],\\n mark: {\\n \\\"type\\\": \\\"point\\\",\\n \\\"tooltip\\\": true\\n },\\n selection: {\\n grid: {\\n type: \\\"interval\\\",\\n resolve: \\\"global\\\",\\n bind: \\\"scales\\\",\\n translate: \\\"[mousedown[!event.shiftKey], window:mouseup] > window:mousemove!\\\",\\n zoom: \\\"wheel![!event.shiftKey]\\\"\\n },\\n pts: {\\n type: \\\"single\\\",\\n fields: [\\\"label\\\"]\\n }\\n },\\n encoding: {\\n x: {\\n field: \\\"frame_size\\\",\\n title: \\\"Frame size (bytes)\\\",\\n type: \\\"quantitative\\\"\\n }\\n y: {\\n field: \\\"rate_pps\\\",\\n title: \\\"Offered load (Mpps)\\\",\\n type: \\\"quantitative\\\"\\n }\\n color: {\\n field: \\\"label\\\", \\\"type\\\": \\\"nominal\\\",\\n \\\"legend\\\": null\\n }\\n shape: {\\n field: \\\"flow_count\\\",\\n type: \\\"nominal\\\"\\n }\\n tooltip: {\\n \\\"field\\\": \\\"rate_pps\\\",\\n \\\"title\\\": \\\"Offered load (Mpps)\\\",\\n \\\"type\\\": \\\"quantitative\\\"\\n }\\n }\\n }\\n ]\\n }\\n ]\\n}\"},\"title\":\"[NDR] Capacity in Mpps with theoretical max rate - Scatter plot\",\"type\":\"vega\"}"},"id":"8eb9cd00-07d2-11eb-92f0-3518df6b43ff","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index","type":"index-pattern"},{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index","type":"index-pattern"},{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[2].meta.index","type":"index-pattern"}],"type":"visualization","updated_at":"2020-10-06T12:50:53.215Z","version":"WzE2NDksMTJd"}
+{"attributes":{"description":"","filters":[],"query":{"language":"kuery","query":"flow_count:128 or flow_count:2"},"title":"KQL - flow count"},"id":"KQL - flow count","references":[],"type":"query","updated_at":"2020-09-03T14:05:36.549Z","version":"WzExMjcsNV0="}
+{"attributes":{"description":"","hits":0,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}"},"optionsJSON":"{\"hidePanelTitles\":false,\"useMargins\":true}","panelsJSON":"[{\"version\":\"7.8.0\",\"gridData\":{\"h\":15,\"i\":\"885a2773-bf7e-4c93-a746-dd400ad3b25f\",\"w\":24,\"x\":0,\"y\":0},\"panelIndex\":\"885a2773-bf7e-4c93-a746-dd400ad3b25f\",\"embeddableConfig\":{},\"panelRefName\":\"panel_0\"},{\"version\":\"7.8.0\",\"gridData\":{\"h\":15,\"i\":\"e7f9f670-3866-4795-a83e-3b208990262d\",\"w\":24,\"x\":24,\"y\":15},\"panelIndex\":\"e7f9f670-3866-4795-a83e-3b208990262d\",\"embeddableConfig\":{},\"panelRefName\":\"panel_1\"},{\"version\":\"7.8.0\",\"gridData\":{\"h\":15,\"i\":\"0b349901-c6f5-4a35-ad44-5331d75ceb8c\",\"w\":24,\"x\":24,\"y\":0},\"panelIndex\":\"0b349901-c6f5-4a35-ad44-5331d75ceb8c\",\"embeddableConfig\":{},\"panelRefName\":\"panel_2\"},{\"version\":\"7.8.0\",\"gridData\":{\"x\":0,\"y\":30,\"w\":48,\"h\":16,\"i\":\"7ad18ce1-1916-4d5b-abe8-340571feb151\"},\"panelIndex\":\"7ad18ce1-1916-4d5b-abe8-340571feb151\",\"embeddableConfig\":{},\"panelRefName\":\"panel_3\"},{\"version\":\"7.8.0\",\"gridData\":{\"x\":0,\"y\":15,\"w\":24,\"h\":15,\"i\":\"631f6738-69c3-4637-b9cb-82d2a8cc1fae\"},\"panelIndex\":\"631f6738-69c3-4637-b9cb-82d2a8cc1fae\",\"embeddableConfig\":{},\"panelRefName\":\"panel_4\"}]","timeRestore":false,"title":"Comparison synthesis dashboard","version":1},"id":"c24f4c50-e778-11ea-bb67-9b8ce9c25c00","migrationVersion":{"dashboard":"7.3.0"},"references":[{"id":"23b0eb40-e60a-11ea-bdc0-1fe1db0b9cb6","name":"panel_0","type":"visualization"},{"id":"8c14a8b0-e6d8-11ea-a933-05dd8fc4d76f","name":"panel_1","type":"visualization"},{"id":"8c87f800-edeb-11ea-a706-3fce679b2102","name":"panel_2","type":"visualization"},{"id":"38cecb10-eded-11ea-a706-3fce679b2102","name":"panel_3","type":"visualization"},{"id":"1b471fa0-e6b0-11ea-bdc0-1fe1db0b9cb6","name":"panel_4","type":"visualization"}],"type":"dashboard","updated_at":"2020-09-03T15:32:16.951Z","version":"WzExODYsNV0="}
+{"attributes":{"description":"NDR / PDR scatter plot - in Gbps","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"type.keyword\",\"negate\":true,\"params\":{\"query\":\"single_run\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"type.keyword\":\"single_run\"}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"frame_size\",\"negate\":true,\"params\":{\"query\":\"IMIX\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index\"},\"query\":{\"match_phrase\":{\"frame_size\":\"IMIX\"}}},{\"$state\":{\"store\":\"appState\"},\"exists\":{\"field\":\"theoretical_tx_rate_bps\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"theoretical_tx_rate_bps\",\"negate\":false,\"type\":\"exists\",\"value\":\"exists\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[2].meta.index\"}}]}"},"title":"[NDR] Capacity in Gbps with theoretical max value - Scatter plot","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"vega\",\"aggs\":[],\"params\":{\"spec\":\"{\\n $schema: \\\"https://vega.github.io/schema/vega-lite/v2.json\\\"\\n title: \\\"Capacity in Gbps - 0,001% loss ratio\\\"\\n data: {\\n url: {\\n %context%: true\\n %timefield%: \\\"@timestamp\\\"\\n index: resu*\\n body: {\\n _source: [\\\"@timestamp\\\", \\\"_source\\\", \\\"offered_tx_rate_bps\\\", \\\"theoretical_tx_rate_bps\\\", \\\"flow_count\\\", \\\"frame_size\\\", \\\"user_label\\\"]\\n },\\n size: 10000\\n },\\n format: { property: \\\"hits.hits\\\" }\\n },\\n transform: [\\n { calculate: \\\"datum._source['offered_tx_rate_bps'] / 1000000000\\\" as: \\\"offered_tx_rate_bps\\\"},\\n { calculate: \\\"datum._source['theoretical_tx_rate_bps'] / 1000000000\\\" as: \\\"theoretical_tx_rate_bps\\\"},\\n { calculate: \\\"datum._source['flow_count']\\\" as: \\\"flow_count\\\"},\\n { calculate: \\\"isNaN(toNumber(datum._source['frame_size'])) ? 362 : toNumber(datum._source['frame_size'])\\\" as: \\\"frame_size\\\"}\\n { calculate: \\\"datum._source['user_label'] + '-' + datum._source['flow_count']\\\" as: \\\"label\\\"}\\n ],\\n center: true,\\n hconcat: [\\n {\\n width:10,\\n selection: {\\n legendSel: {\\n type: \\\"multi\\\",\\n encodings: [ \\\"color\\\", \\\"shape\\\" ],\\n toggle: \\\"event.shiftKey\\\"\\n }\\n },\\n encoding: {\\n y: {\\n field: \\\"label\\\",\\n type: \\\"nominal\\\",\\n axis: {\\n title: \\\"\\\",\\n domain: false,\\n ticks: false,\\n offset: 10\\n },\\n },\\n color: {\\n condition: {\\n selection: \\\"legendSel\\\",\\n field: \\\"label\\\",\\n type: \\\"nominal\\\",\\n legend: null\\n },\\n value: \\\"lightgrey\\\"\\n }\\n },\\n mark: {\\n type: \\\"square\\\",\\n size: 120,\\n opacity: 1\\n }\\n },\\n {\\n layer: [\\n {\\n mark: {\\n type: \\\"line\\\",\\n tooltip: true\\n },\\n encoding: {\\n x: { field: \\\"frame_size\\\", type: \\\"quantitative\\\", title: \\\"Frame size (bytes)\\\", axis: {offset: 10} }\\n y: { field: \\\"theoretical_tx_rate_bps\\\", type: \\\"quantitative\\\", title: \\\"Offered load (Gbps)\\\" , axis: {offset: 10} }\\n strokeDash: {\\\"field\\\": \\\"theoretical_tx_rate_bps\\\", \\\"type\\\": \\\"nominal\\\"}\\n tooltip: [{\\\"field\\\": \\\"theoretical_tx_rate_bps\\\", \\\"type\\\": \\\"quantitative\\\", title: \\\"theoretical max capacity\\\"}],\\n color: { \\\"value\\\": \\\"red\\\"}\\n }\\n },\\n {\\n width:500,\\n height:280,\\n transform: [\\n {filter: { selection: \\\"legendSel\\\"}}\\n ],\\n mark: {\\n \\\"type\\\": \\\"point\\\",\\n \\\"tooltip\\\": true\\n },\\n selection: {\\n grid: {\\n type: \\\"interval\\\",\\n resolve: \\\"global\\\",\\n bind: \\\"scales\\\",\\n translate: \\\"[mousedown[!event.shiftKey], window:mouseup] > window:mousemove!\\\",\\n zoom: \\\"wheel![!event.shiftKey]\\\"\\n },\\n pts: {\\n type: \\\"single\\\",\\n fields: [\\\"label\\\"]\\n }\\n },\\n encoding: {\\n x: {\\n field: \\\"frame_size\\\",\\n title: \\\"Frame size (bytes)\\\",\\n type: \\\"quantitative\\\"\\n }\\n y: {\\n field: \\\"offered_tx_rate_bps\\\",\\n title: \\\"Offered load (Gbps)\\\",\\n type: \\\"quantitative\\\"\\n }\\n color: {\\n field: \\\"label\\\", \\\"type\\\": \\\"nominal\\\",\\n \\\"legend\\\": null\\n }\\n shape: {\\n field: \\\"flow_count\\\",\\n type: \\\"nominal\\\"\\n }\\n tooltip: {\\n \\\"field\\\": \\\"offered_tx_rate_bps\\\",\\n \\\"title\\\": \\\"Offered load (Gbps)\\\",\\n \\\"type\\\": \\\"quantitative\\\"\\n }\\n }\\n }\\n ]\\n }\\n ]\\n}\"},\"title\":\"[NDR] Capacity in Gbps with theoretical max value - Scatter plot\"}"},"id":"eea11370-f82a-11ea-8203-0fee5ecd414e","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index","type":"index-pattern"},{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[1].meta.index","type":"index-pattern"},{"id":"e0939790-e78f-11ea-8ca2-35af0cc4217c","name":"kibanaSavedObjectMeta.searchSourceJSON.filter[2].meta.index","type":"index-pattern"}],"type":"visualization","updated_at":"2020-10-06T12:49:41.894Z","version":"WzE2NDcsMTJd"}
+{"attributes":{"description":"","hits":0,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}"},"optionsJSON":"{\"hidePanelTitles\":false,\"useMargins\":true}","panelsJSON":"[{\"version\":\"7.8.0\",\"gridData\":{\"h\":10,\"i\":\"d806469f-2ea3-4b45-99d8-acc7f09ee8f5\",\"w\":48,\"x\":0,\"y\":30},\"panelIndex\":\"d806469f-2ea3-4b45-99d8-acc7f09ee8f5\",\"embeddableConfig\":{},\"panelRefName\":\"panel_0\"},{\"version\":\"7.8.0\",\"gridData\":{\"x\":0,\"y\":0,\"w\":24,\"h\":15,\"i\":\"dfc3abc1-8fcf-486f-8b8e-fa8956a4299b\"},\"panelIndex\":\"dfc3abc1-8fcf-486f-8b8e-fa8956a4299b\",\"embeddableConfig\":{},\"panelRefName\":\"panel_1\"},{\"version\":\"7.8.0\",\"gridData\":{\"x\":24,\"y\":0,\"w\":24,\"h\":15,\"i\":\"82bcc455-a312-49dc-b9b7-7414d53cfdd5\"},\"panelIndex\":\"82bcc455-a312-49dc-b9b7-7414d53cfdd5\",\"embeddableConfig\":{},\"panelRefName\":\"panel_2\"},{\"version\":\"7.8.0\",\"gridData\":{\"x\":0,\"y\":15,\"w\":24,\"h\":15,\"i\":\"eb3a0dcc-e55a-4f0b-87e7-70b15f864bf2\"},\"panelIndex\":\"eb3a0dcc-e55a-4f0b-87e7-70b15f864bf2\",\"embeddableConfig\":{},\"panelRefName\":\"panel_3\"},{\"version\":\"7.8.0\",\"gridData\":{\"x\":24,\"y\":15,\"w\":24,\"h\":15,\"i\":\"e6c3eeb1-5a7e-4a3e-89d1-c61193f31ccf\"},\"panelIndex\":\"e6c3eeb1-5a7e-4a3e-89d1-c61193f31ccf\",\"embeddableConfig\":{},\"panelRefName\":\"panel_4\"}]","timeRestore":false,"title":"Synthesis Max Throughput - NDR (0.001% loss ratio) with max theoretical value","version":1},"id":"c61120f0-07d2-11eb-92f0-3518df6b43ff","migrationVersion":{"dashboard":"7.3.0"},"references":[{"id":"0d2c4070-e6e3-11ea-a933-05dd8fc4d76f","name":"panel_0","type":"visualization"},{"id":"966a5990-0712-11eb-92f0-3518df6b43ff","name":"panel_1","type":"visualization"},{"id":"eea11370-f82a-11ea-8203-0fee5ecd414e","name":"panel_2","type":"visualization"},{"id":"a523c930-07d0-11eb-92f0-3518df6b43ff","name":"panel_3","type":"visualization"},{"id":"8eb9cd00-07d2-11eb-92f0-3518df6b43ff","name":"panel_4","type":"visualization"}],"type":"dashboard","updated_at":"2020-10-06T12:52:55.971Z","version":"WzE2NTUsMTJd"}
+{"attributes":{"description":"","filters":[{"$state":{"store":"appState"},"meta":{"alias":null,"disabled":false,"index":"39955f20-78ac-11ea-ae77-8339e5fd808c","key":"flow_count","negate":false,"params":{"query":"2"},"type":"phrase"},"query":{"match_phrase":{"flow_count":"2"}}}],"query":{"language":"kuery","query":""},"title":"flow count 2"},"id":"flow count 2","references":[],"type":"query","updated_at":"2020-08-26T09:25:58.265Z","version":"WzY0Miw0XQ=="}
+{"attributes":{"description":"","filters":[{"$state":{"store":"appState"},"meta":{"alias":null,"disabled":false,"index":"39955f20-78ac-11ea-ae77-8339e5fd808c","key":"user_label.keyword","negate":false,"params":["oslodu_oiaas_g4r1_ovsdpdk_tc20_ndr4latency","icnfvbench_none_none_loopback_tc3"],"type":"phrases","value":"oslodu_oiaas_g4r1_ovsdpdk_tc20_ndr4latency, icnfvbench_none_none_loopback_tc3"},"query":{"bool":{"minimum_should_match":1,"should":[{"match_phrase":{"user_label.keyword":"oslodu_oiaas_g4r1_ovsdpdk_tc20_ndr4latency"}},{"match_phrase":{"user_label.keyword":"icnfvbench_none_none_loopback_tc3"}}]}}},{"$state":{"store":"appState"},"meta":{"alias":null,"disabled":false,"index":"39955f20-78ac-11ea-ae77-8339e5fd808c","key":"flow_count","negate":false,"params":["2","128"],"type":"phrases","value":"2, 128"},"query":{"bool":{"minimum_should_match":1,"should":[{"match_phrase":{"flow_count":"2"}},{"match_phrase":{"flow_count":"128"}}]}}}],"query":{"language":"kuery","query":""},"title":"test filter"},"id":"test filter","references":[],"type":"query","updated_at":"2020-08-26T13:13:10.130Z","version":"WzY3MSw0XQ=="}
+{"exportedCount":24,"missingRefCount":0,"missingReferences":[]} \ No newline at end of file
diff --git a/kibana/visualizations/ndr_capacity_gbps_line_chart.json b/kibana/visualizations/ndr_capacity_gbps_line_chart.json
new file mode 100644
index 0000000..cb696ba
--- /dev/null
+++ b/kibana/visualizations/ndr_capacity_gbps_line_chart.json
@@ -0,0 +1,95 @@
+{
+ $schema: https: //vega.github.io/schema/vega-lite/v2.json
+ title: "Capacity in Gbps - 0,001% loss ratio"
+ data: {
+ url: {
+ %context%: true
+ %timefield%: "@timestamp"
+ index: resu*
+ body: {
+ _source: ["@timestamp", "_source", "offered_tx_rate_bps", "flow_count", "frame_size", "user_label"]
+ },
+ size: 10000
+ },
+ format: { property: "hits.hits" }
+ },
+ transform: [
+ { calculate: "datum._source['offered_tx_rate_bps'] / 1000000000" as: "offered_load_gbps"},
+ { calculate: "datum._source['flow_count']" as: "flow_count"},
+ { calculate: "isNaN(toNumber(datum._source['frame_size'])) ? 362 : toNumber(datum._source['frame_size'])" as: "frame_size"},
+ { calculate: "datum._source['user_label'] + '-' + datum._source['flow_count']" as: "label"}
+ { aggregate: [{op: "max", field: "offered_load_gbps", as: "max_offered_load_gbps"}], groupby: ["frame_size", "label","flow_count"]}
+ ],
+ center: true,
+ hconcat: [
+ {
+ width:10,
+ selection: {
+ legendSel: {
+ type: "multi",
+ encodings: [ "color", "shape" ],
+ toggle: "event.shiftKey"
+ }
+ },
+ encoding: {
+ y: {
+ field: "label",
+ type: "nominal",
+ axis: {
+ title: "",
+ domain: false,
+ ticks: false,
+ offset: 10
+ },
+ },
+ color: {
+ condition: {
+ selection: "legendSel",
+ field: "label",
+ type: "nominal",
+ legend: null
+ },
+ value: "lightgrey"
+ }
+ },
+ mark: {
+ type: "square",
+ size: 120,
+ opacity: 1
+ }
+ },
+ {
+ width:500,
+ height:280,
+ transform: [
+ {filter: { selection: "legendSel"}}
+ ],
+ mark: {
+ type: "line",
+ tooltip: true,
+ point: true
+ },
+ selection: {
+ grid: {
+ type: "interval",
+ resolve: "global",
+ bind: "scales",
+ translate: "[mousedown[!event.shiftKey], window:mouseup] > window:mousemove!",
+ zoom: "wheel![!event.shiftKey]"
+ },
+ pts: {
+ type: "single",
+ fields: ["label"]
+ }
+ },
+ encoding: {
+ x: { field: "frame_size", type: "quantitative", title: "Frame size (bytes)", axis: {offset: 10} }
+ y: { field: "max_offered_load_gbps", type: "quantitative", title: "Offered load (Gbps)" , axis: {offset: 10} }
+ color: {field: "label", "type": "nominal",
+ "legend": null}
+ shape: {field: "flow_count", type: "nominal"}
+ tooltip: {"field": "max_offered_load_gbps", "type": "quantitative"}
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/kibana/visualizations/ndr_capacity_gbps_scatter_plot.json b/kibana/visualizations/ndr_capacity_gbps_scatter_plot.json
new file mode 100644
index 0000000..9908e9d
--- /dev/null
+++ b/kibana/visualizations/ndr_capacity_gbps_scatter_plot.json
@@ -0,0 +1,108 @@
+{
+ $schema: "https://vega.github.io/schema/vega-lite/v2.json"
+ title: "Capacity in Gbps - 0.001% loss ratio"
+ data: {
+ url: {
+ %context%: true
+ %timefield%: "@timestamp"
+ index: resu*
+ body: {
+ _source: ["@timestamp", "_source", "offered_tx_rate_bps", "flow_count", "frame_size", "user_label"]
+ },
+ size: 10000
+ },
+ format: { property: "hits.hits" }
+ },
+ transform: [
+ { calculate: "datum._source['offered_tx_rate_bps'] / 1000000000" as: "Offered load (Gbps)"},
+ { calculate: "datum._source['flow_count']" as: "Flow count"},
+ { calculate: "isNaN(toNumber(datum._source['frame_size'])) ? 362 : toNumber(datum._source['frame_size'])" as: "Frame size (bytes)"}
+ { calculate: "datum._source['user_label'] + '-' + datum._source['flow_count']" as: "label"}
+ ],
+ center: true,
+ hconcat: [
+ {
+ width:10,
+ selection: {
+ legendSel: {
+ type: "multi",
+ encodings: [ "color", "shape" ],
+ toggle: "event.shiftKey"
+ }
+ },
+ encoding: {
+ y: {
+ field: "label",
+ type: "nominal",
+ axis: {
+ title: "",
+ domain: false,
+ ticks: false,
+ offset: 10
+ },
+ },
+ color: {
+ condition: {
+ selection: "legendSel",
+ field: "label",
+ type: "nominal",
+ legend: null
+ },
+ value: "lightgrey"
+ }
+ },
+ mark: {
+ type: "square",
+ size: 120,
+ opacity: 1
+ }
+ },
+ {
+ width:500,
+ height:280,
+ transform: [
+ {filter: { selection: "legendSel"}}
+
+ ],
+ mark: {
+ "type": "point",
+ "tooltip": true
+ },
+ selection: {
+ grid: {
+ type: "interval",
+ resolve: "global",
+ bind: "scales",
+ translate: "[mousedown[!event.shiftKey], window:mouseup] > window:mousemove!",
+ zoom: "wheel![!event.shiftKey]"
+ },
+ pts: {
+ type: "single",
+ fields: ["label"]
+ }
+ },
+ encoding: {
+ x: {
+ field: "Frame size (bytes)",
+ type: "quantitative"
+ }
+ y: {
+ field: "Offered load (Gbps)",
+ type: "quantitative"
+ }
+ color: {
+ field: "label", "type": "nominal",
+ "legend": null
+ }
+ shape: {
+ field: "Flow count",
+ type: "nominal"
+ }
+ tooltip: {
+ "field": "Offered load (Gbps)",
+ "type": "quantitative"
+ }
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/kibana/visualizations/ndr_capacity_gbps_theoretical_line_chart.json b/kibana/visualizations/ndr_capacity_gbps_theoretical_line_chart.json
new file mode 100644
index 0000000..1ff4d23
--- /dev/null
+++ b/kibana/visualizations/ndr_capacity_gbps_theoretical_line_chart.json
@@ -0,0 +1,114 @@
+{
+ $schema: https: //vega.github.io/schema/vega-lite/v2.json
+ title: "Capacity in Gbps - 0,001% loss ratio"
+ data: {
+ url: {
+ %context%: true
+ %timefield%: "@timestamp"
+ index: resu*
+ body: {
+ _source: ["@timestamp", "_source", "offered_tx_rate_bps", "theoretical_tx_rate_bps", "flow_count", "frame_size", "user_label"]
+ },
+ size: 10000
+ },
+ format: { property: "hits.hits" }
+ },
+ transform: [
+ { calculate: "datum._source['offered_tx_rate_bps'] / 1000000000" as: "offered_load_gbps"},
+ { calculate: "datum._source['theoretical_tx_rate_bps'] / 1000000000" as: "theoretical_tx_rate_bps"},
+ { calculate: "datum._source['flow_count']" as: "flow_count"},
+ { calculate: "isNaN(toNumber(datum._source['frame_size'])) ? 362 : toNumber(datum._source['frame_size'])" as: "frame_size"},
+ { calculate: "datum._source['user_label'] + '-' + datum._source['flow_count']" as: "label"}
+ { aggregate: [{op: "max", field: "offered_load_gbps", as: "max_offered_load_gbps"}, {op: "max", field: "theoretical_tx_rate_bps", as: "theoretical_tx_rate_bps"}], groupby: ["frame_size", "label","flow_count"]}
+ ],
+ center: true,
+ hconcat: [
+ {
+ width:10,
+ selection: {
+ legendSel: {
+ type: "multi",
+ encodings: [ "color", "shape" ],
+ toggle: "event.shiftKey"
+ }
+ },
+ encoding: {
+ y: {
+ field: "label",
+ type: "nominal",
+ axis: {
+ title: "",
+ domain: false,
+ ticks: false,
+ offset: 10
+ },
+ },
+ color: {
+ condition: {
+ selection: "legendSel",
+ field: "label",
+ type: "nominal",
+ legend: null
+ },
+ value: "lightgrey"
+ }
+ },
+ mark: {
+ type: "square",
+ size: 120,
+ opacity: 1
+ }
+ },
+ {
+ layer: [
+ {
+ mark: {
+ type: "line",
+ tooltip: true,
+ point: true
+ },
+ encoding: {
+ x: { field: "frame_size", type: "quantitative", title: "Frame size (bytes)", axis: {offset: 10} }
+ y: { field: "theoretical_tx_rate_bps", type: "quantitative", title: "Theoretical rate (Gbps)" , axis: {offset: 10} }
+ strokeDash: {"field": "theoretical_tx_rate_bps", "type": "nominal"}
+ tooltip: [{"field": "theoretical_tx_rate_bps", "type": "quantitative", title: "theoretical max capacity"}],
+ color: { "value": "red"}
+ }
+ },
+ {
+ width:500,
+ height:280,
+ transform: [
+ {filter: { selection: "legendSel"}}
+ ],
+ mark: {
+ type: "line",
+ tooltip: true,
+ point: true
+ },
+ selection: {
+ grid: {
+ type: "interval",
+ resolve: "global",
+ bind: "scales",
+ translate: "[mousedown[!event.shiftKey], window:mouseup] > window:mousemove!",
+ zoom: "wheel![!event.shiftKey]"
+ },
+ pts: {
+ type: "single",
+ fields: ["Label"]
+ }
+ },
+ encoding: {
+ x: { field: "frame_size", type: "quantitative", title: "Frame size (bytes)", axis: {offset: 10} }
+ y: { field: "max_offered_load_gbps", type: "quantitative", title: "Offered load (Gbps)" , axis: {offset: 10} }
+ color: {field: "label", "type": "nominal",
+ "legend": null}
+ shape: {field: "flow_count", type: "nominal"}
+ tooltip: {"field": "max_offered_load_gbps", "type": "quantitative"}
+ }
+ }
+ ]
+ }
+ ]
+} \ No newline at end of file
diff --git a/kibana/visualizations/ndr_capacity_gbps_theoretical_scatter_plot.json b/kibana/visualizations/ndr_capacity_gbps_theoretical_scatter_plot.json
new file mode 100644
index 0000000..55a48ff
--- /dev/null
+++ b/kibana/visualizations/ndr_capacity_gbps_theoretical_scatter_plot.json
@@ -0,0 +1,128 @@
+{
+ $schema: "https://vega.github.io/schema/vega-lite/v2.json"
+ title: "Capacity in Gbps - 0,001% loss ratio"
+ data: {
+ url: {
+ %context%: true
+ %timefield%: "@timestamp"
+ index: resu*
+ body: {
+ _source: ["@timestamp", "_source", "offered_tx_rate_bps", "theoretical_tx_rate_bps", "flow_count", "frame_size", "user_label"]
+ },
+ size: 10000
+ },
+ format: { property: "hits.hits" }
+ },
+ transform: [
+ { calculate: "datum._source['offered_tx_rate_bps'] / 1000000000" as: "offered_tx_rate_bps"},
+ { calculate: "datum._source['theoretical_tx_rate_bps'] / 1000000000" as: "theoretical_tx_rate_bps"},
+ { calculate: "datum._source['flow_count']" as: "flow_count"},
+ { calculate: "isNaN(toNumber(datum._source['frame_size'])) ? 362 : toNumber(datum._source['frame_size'])" as: "frame_size"}
+ { calculate: "datum._source['user_label'] + '-' + datum._source['flow_count']" as: "label"}
+ ],
+ center: true,
+ hconcat: [
+ {
+ width:10,
+ selection: {
+ legendSel: {
+ type: "multi",
+ encodings: [ "color", "shape" ],
+ toggle: "event.shiftKey"
+ }
+ },
+ encoding: {
+ y: {
+ field: "label",
+ type: "nominal",
+ axis: {
+ title: "",
+ domain: false,
+ ticks: false,
+ offset: 10
+ },
+ },
+ color: {
+ condition: {
+ selection: "legendSel",
+ field: "label",
+ type: "nominal",
+ legend: null
+ },
+ value: "lightgrey"
+ }
+ },
+ mark: {
+ type: "square",
+ size: 120,
+ opacity: 1
+ }
+ },
+ {
+ layer: [
+ {
+ mark: {
+ type: "line",
+ tooltip: true
+ },
+ encoding: {
+ x: { field: "frame_size", type: "quantitative", title: "Frame size (bytes)", axis: {offset: 10} }
+ y: { field: "theoretical_tx_rate_bps", type: "quantitative", title: "Offered load (Gbps)" , axis: {offset: 10} }
+ strokeDash: {"field": "theoretical_tx_rate_bps", "type": "nominal"}
+ tooltip: [{"field": "theoretical_tx_rate_bps", "type": "quantitative", title: "theoretical max capacity"}],
+ color: { "value": "red"}
+ }
+ },
+ {
+ width:500,
+ height:280,
+ transform: [
+ {filter: { selection: "legendSel"}}
+ ],
+ mark: {
+ "type": "point",
+ "tooltip": true
+ },
+ selection: {
+ grid: {
+ type: "interval",
+ resolve: "global",
+ bind: "scales",
+ translate: "[mousedown[!event.shiftKey], window:mouseup] > window:mousemove!",
+ zoom: "wheel![!event.shiftKey]"
+ },
+ pts: {
+ type: "single",
+ fields: ["label"]
+ }
+ },
+ encoding: {
+ x: {
+ field: "frame_size",
+ title: "Frame size (bytes)",
+ type: "quantitative"
+ }
+ y: {
+ field: "offered_tx_rate_bps",
+ title: "Offered load (Gbps)",
+ type: "quantitative"
+ }
+ color: {
+ field: "label", "type": "nominal",
+ "legend": null
+ }
+ shape: {
+ field: "flow_count",
+ type: "nominal"
+ }
+ tooltip: {
+ "field": "offered_tx_rate_bps",
+ "title": "Offered load (Gbps)",
+ "type": "quantitative"
+ }
+ }
+ }
+ ]
+ }
+ ]
+} \ No newline at end of file
diff --git a/kibana/visualizations/ndr_capacity_pps_line_chart.json b/kibana/visualizations/ndr_capacity_pps_line_chart.json
new file mode 100644
index 0000000..ad79caa
--- /dev/null
+++ b/kibana/visualizations/ndr_capacity_pps_line_chart.json
@@ -0,0 +1,98 @@
+{
+ $schema: https: //vega.github.io/schema/vega-lite/v2.json
+ title: "Capacity in Mpps - 0,001% loss ratio"
+ data: {
+ url: {
+ %context%: true
+ %timefield%: "@timestamp"
+ index: resu*
+ body: {
+ _source: ["@timestamp", "_source", "rate_pps", "flow_count", "frame_size", "user_label", "type"]
+ },
+ size: 10000
+ },
+ format: { property: "hits.hits" }
+ },
+
+ transform: [
+ { calculate: "datum._source['rate_pps'] / 1000000" as: "offered_load_pps"},
+ { calculate: "datum._source['flow_count']" as: "flow_count"},
+ { calculate: "isNaN(toNumber(datum._source['frame_size'])) ? 362 : toNumber(datum._source['frame_size'])" as: "frame_size"},
+ { calculate: "datum._source['user_label'] + '-' + datum._source['flow_count']" as: "label"}
+ { aggregate: [{op: "max", field: "offered_load_pps", as: "max_offered_load_pps"}], groupby: ["frame_size", "label","flow_count"]}
+
+ ],
+ center: true,
+ hconcat: [
+ {
+ width:10,
+ selection: {
+ legendSel: {
+ type: "multi",
+ encodings: [ "color", "shape" ],
+ toggle: "event.shiftKey"
+ }
+ },
+ encoding: {
+ y: {
+ field: "label",
+ type: "nominal",
+ axis: {
+ title: "",
+ domain: false,
+ ticks: false,
+ offset: 10
+ },
+ },
+ color: {
+ condition: {
+ selection: "legendSel",
+ field: "label",
+ type: "nominal",
+ legend: null
+ },
+ value: "lightgrey"
+ }
+ },
+ mark: {
+ type: "square",
+ size: 120,
+ opacity: 1
+ }
+ },
+ {
+ width:500,
+ height:280,
+ transform: [
+ {filter: { selection: "legendSel"}}
+
+ ],
+ mark: {
+ type: "line",
+ tooltip: true,
+ point: true
+ },
+ selection: {
+ grid: {
+ type: "interval",
+ resolve: "global",
+ bind: "scales",
+ translate: "[mousedown[!event.shiftKey], window:mouseup] > window:mousemove!",
+ zoom: "wheel![!event.shiftKey]"
+ },
+ pts: {
+ type: "single",
+ fields: ["Label"]
+ }
+ },
+ encoding: {
+ x: { field: "frame_size", type: "quantitative", title: "Frame size (bytes)", axis: {offset: 10} }
+ y: { field: "max_offered_load_pps", type: "quantitative", title: "Offered load (Mpps)" , axis: {offset: 10} }
+ color: {field: "label", "type": "nominal",
+ "legend": null}
+ tooltip: {"field": "max_offered_load_pps", "type": "quantitative"},
+ shape: {field: "flow_count", type: "nominal"}
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/kibana/visualizations/ndr_capacity_pps_scatter_plot.json b/kibana/visualizations/ndr_capacity_pps_scatter_plot.json
new file mode 100644
index 0000000..0bb8f2f
--- /dev/null
+++ b/kibana/visualizations/ndr_capacity_pps_scatter_plot.json
@@ -0,0 +1,108 @@
+{
+ $schema: "https://vega.github.io/schema/vega-lite/v2.json"
+ title: "Capacity in Mpps - 0,001% loss ratio"
+ data: {
+ url: {
+ %context%: true
+ %timefield%: "@timestamp"
+ index: resu*
+ body: {
+ _source: ["@timestamp", "_source", "rate_pps", "flow_count", "frame_size", "user_label"]
+ },
+ size: 10000
+ },
+ format: { property: "hits.hits" }
+ },
+ transform: [
+ { calculate: "datum._source['rate_pps'] / 1000000" as: "Offered load (Mpps)"},
+ { calculate: "datum._source['flow_count']" as: "Flow count"},
+ { calculate: "isNaN(toNumber(datum._source['frame_size'])) ? 362 : toNumber(datum._source['frame_size'])" as: "Frame size (bytes)"}
+ { calculate: "datum._source['user_label'] + '-' + datum._source['flow_count']" as: "label"}
+ ],
+ center: true,
+ hconcat: [
+ {
+ width:10,
+ selection: {
+ legendSel: {
+ type: "multi",
+ encodings: [ "color", "shape" ],
+ toggle: "event.shiftKey"
+ }
+ },
+ encoding: {
+ y: {
+ field: "label",
+ type: "nominal",
+ axis: {
+ title: "",
+ domain: false,
+ ticks: false,
+ offset: 10
+ },
+ },
+ color: {
+ condition: {
+ selection: "legendSel",
+ field: "label",
+ type: "nominal",
+ legend: null
+ },
+ value: "lightgrey"
+ }
+ },
+ mark: {
+ type: "square",
+ size: 120,
+ opacity: 1
+ }
+ },
+ {
+ width:500,
+ height:280,
+ transform: [
+ {filter: { selection: "legendSel"}}
+
+ ],
+ mark: {
+ "type": "point",
+ "tooltip": true
+ },
+ selection: {
+ grid: {
+ type: "interval",
+ resolve: "global",
+ bind: "scales",
+ translate: "[mousedown[!event.shiftKey], window:mouseup] > window:mousemove!",
+ zoom: "wheel![!event.shiftKey]"
+ },
+ pts: {
+ type: "single",
+ fields: ["label"]
+ }
+ },
+ encoding: {
+ x: {
+ field: "Frame size (bytes)",
+ type: "quantitative"
+ }
+ y: {
+ field: "Offered load (Mpps)",
+ type: "quantitative"
+ }
+ color: {
+ field: "label", "type": "nominal",
+ "legend": null
+ }
+ shape: {
+ field: "Flow count",
+ type: "nominal"
+ }
+ tooltip: {
+ "field": "Offered load (Mpps)",
+ "type": "quantitative"
+ }
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/kibana/visualizations/ndr_capacity_pps_theoretical_line_chart.json b/kibana/visualizations/ndr_capacity_pps_theoretical_line_chart.json
new file mode 100644
index 0000000..00b9765
--- /dev/null
+++ b/kibana/visualizations/ndr_capacity_pps_theoretical_line_chart.json
@@ -0,0 +1,115 @@
+{
+ $schema: https: //vega.github.io/schema/vega-lite/v2.json
+ title: "Capacity in Mpps - 0,001% loss ratio"
+ data: {
+ url: {
+ %context%: true
+ %timefield%: "@timestamp"
+ index: resu*
+ body: {
+ _source: ["@timestamp", "_source", "theoretical_tx_rate_pps", "rate_pps", "flow_count", "frame_size", "user_label", "type"]
+ },
+ size: 10000
+ },
+ format: { property: "hits.hits" }
+ },
+
+ transform: [
+ { calculate: "datum._source['rate_pps'] / 1000000" as: "offered_load_pps"},
+ { calculate: "datum._source['theoretical_tx_rate_pps'] / 1000000" as: "theoretical_tx_rate_pps"},
+ { calculate: "datum._source['flow_count']" as: "flow_count"},
+ { calculate: "isNaN(toNumber(datum._source['frame_size'])) ? 362 : toNumber(datum._source['frame_size'])" as: "frame_size"},
+ { calculate: "datum._source['user_label'] + '-' + datum._source['flow_count']" as: "label"}
+ { aggregate: [{op: "max", field: "offered_load_pps", as: "max_offered_load_pps"}, {op: "max", field: "theoretical_tx_rate_pps", as: "theoretical_tx_rate_pps"}], groupby: ["frame_size", "label","flow_count"]}
+
+ ],
+ center: true,
+ hconcat: [
+ {
+ width:10,
+ selection: {
+ legendSel: {
+ type: "multi",
+ encodings: [ "color", "shape" ],
+ toggle: "event.shiftKey"
+ }
+ },
+ encoding: {
+ y: {
+ field: "label",
+ type: "nominal",
+ axis: {
+ title: "",
+ domain: false,
+ ticks: false,
+ offset: 10
+ },
+ },
+ color: {
+ condition: {
+ selection: "legendSel",
+ field: "label",
+ type: "nominal",
+ legend: null
+ },
+ value: "lightgrey"
+ }
+ },
+ mark: {
+ type: "square",
+ size: 120,
+ opacity: 1
+ }
+ },
+ {
+ layer: [{
+ mark: {
+ type: "line",
+ tooltip: true,
+ point: true
+ },
+ encoding: {
+ x: { field: "frame_size", type: "quantitative", title: "Frame size (bytes)", axis: {offset: 10} }
+ y: { field: "theoretical_tx_rate_pps", type: "quantitative", title: "Offered load (Mpps)" , axis: {offset: 10} }
+ strokeDash: {"field": "theoretical_tx_rate_pps", "type": "nominal"}
+ tooltip: [{"field": "theoretical_tx_rate_pps", "type": "quantitative", title: "theoretical max capacity"}],
+ color: { "value": "red"}
+ }
+ },{
+ width:500,
+ height:280,
+ transform: [
+ {filter: { selection: "legendSel"}}
+
+ ],mark: {
+ type: "line",
+ tooltip: true,
+ point: true
+ },
+ selection: {
+ grid: {
+ type: "interval",
+ resolve: "global",
+ bind: "scales",
+ translate: "[mousedown[!event.shiftKey], window:mouseup] > window:mousemove!",
+ zoom: "wheel![!event.shiftKey]"
+ },
+ pts: {
+ type: "single",
+ fields: ["Label"]
+ }
+ },
+ encoding: {
+ x: { field: "frame_size", type: "quantitative", title: "Frame size (bytes)", axis: {offset: 10} }
+ y: { field: "max_offered_load_pps", type: "quantitative", title: "Offered load (Mpps)" , axis: {offset: 10} }
+ color: {field: "label", "type": "nominal",
+ "legend": null}
+ tooltip: {"field": "max_offered_load_pps", "type": "quantitative"},
+ shape: {field: "flow_count", type: "nominal"}
+ }
+ }
+ ]
+ }
+
+ ]
+} \ No newline at end of file
diff --git a/kibana/visualizations/ndr_capacity_pps_theoretical_scatter_plot.json b/kibana/visualizations/ndr_capacity_pps_theoretical_scatter_plot.json
new file mode 100644
index 0000000..984a7f4
--- /dev/null
+++ b/kibana/visualizations/ndr_capacity_pps_theoretical_scatter_plot.json
@@ -0,0 +1,128 @@
+{
+ $schema: "https://vega.github.io/schema/vega-lite/v2.json"
+ title: "Capacity in Mpps - 0,001% loss ratio"
+ data: {
+ url: {
+ %context%: true
+ %timefield%: "@timestamp"
+ index: resu*
+ body: {
+ _source: ["@timestamp", "_source", "rate_pps", "theoretical_tx_rate_pps", "flow_count", "frame_size", "user_label"]
+ },
+ size: 10000
+ },
+ format: { property: "hits.hits" }
+ },
+ transform: [
+ { calculate: "datum._source['rate_pps'] / 1000000" as: "rate_pps"},
+ { calculate: "datum._source['theoretical_tx_rate_pps'] / 1000000" as: "theoretical_tx_rate_pps"},
+ { calculate: "datum._source['flow_count']" as: "flow_count"},
+ { calculate: "isNaN(toNumber(datum._source['frame_size'])) ? 362 : toNumber(datum._source['frame_size'])" as: "frame_size"}
+ { calculate: "datum._source['user_label'] + '-' + datum._source['flow_count']" as: "label"}
+ ],
+ center: true,
+ hconcat: [
+ {
+ width:10,
+ selection: {
+ legendSel: {
+ type: "multi",
+ encodings: [ "color", "shape" ],
+ toggle: "event.shiftKey"
+ }
+ },
+ encoding: {
+ y: {
+ field: "label",
+ type: "nominal",
+ axis: {
+ title: "",
+ domain: false,
+ ticks: false,
+ offset: 10
+ },
+ },
+ color: {
+ condition: {
+ selection: "legendSel",
+ field: "label",
+ type: "nominal",
+ legend: null
+ },
+ value: "lightgrey"
+ }
+ },
+ mark: {
+ type: "square",
+ size: 120,
+ opacity: 1
+ }
+ },
+ {
+ layer: [
+ {
+ mark: {
+ type: "line",
+ tooltip: true
+ },
+ encoding: {
+ x: { field: "frame_size", type: "quantitative", title: "Frame size (bytes)", axis: {offset: 10} }
+ y: { field: "theoretical_tx_rate_pps", type: "quantitative", title: "Offered load (Mpps)" , axis: {offset: 10} }
+ strokeDash: {"field": "theoretical_tx_rate_pps", "type": "nominal"}
+ tooltip: [{"field": "theoretical_tx_rate_pps", "type": "quantitative", title: "theoretical max capacity"}],
+ color: { "value": "red"}
+ }
+ },
+ {
+ width:500,
+ height:280,
+ transform: [
+ {filter: { selection: "legendSel"}}
+ ],
+ mark: {
+ "type": "point",
+ "tooltip": true
+ },
+ selection: {
+ grid: {
+ type: "interval",
+ resolve: "global",
+ bind: "scales",
+ translate: "[mousedown[!event.shiftKey], window:mouseup] > window:mousemove!",
+ zoom: "wheel![!event.shiftKey]"
+ },
+ pts: {
+ type: "single",
+ fields: ["label"]
+ }
+ },
+ encoding: {
+ x: {
+ field: "frame_size",
+ title: "Frame size (bytes)",
+ type: "quantitative"
+ }
+ y: {
+ field: "rate_pps",
+ title: "Offered load (Mpps)",
+ type: "quantitative"
+ }
+ color: {
+ field: "label", "type": "nominal",
+ "legend": null
+ }
+ shape: {
+ field: "flow_count",
+ type: "nominal"
+ }
+ tooltip: {
+ "field": "rate_pps",
+ "title": "Offered load (Mpps)",
+ "type": "quantitative"
+ }
+ }
+ }
+ ]
+ }
+ ]
+} \ No newline at end of file
diff --git a/nfvbench/cfg.default.yaml b/nfvbench/cfg.default.yaml
index fa3d807..c76e738 100755..100644
--- a/nfvbench/cfg.default.yaml
+++ b/nfvbench/cfg.default.yaml
@@ -25,8 +25,30 @@
# The only case where this field can be empty is when measuring a system that does not run
# OpenStack or when OpenStack APIs are not accessible or OpenStack APis use is not
# desirable. In that case the EXT service chain must be used.
+#
+# If openrc is not admin some parameters are mandatory and must be filled with valid values in config file such as :
+# - availability_zone
+# - hypervisor_hostname
+# - vlans
+# WARNING: Not used if clouds_detail is sets
openrc_file:
+# The OpenStack clouds configuration from clouds.yaml file to use.
+# clouds.yaml file must be in one of the following paths:
+# - ~/.config/openstack
+# - /etc/openstack
+# Note: If running in a container, this path must be valid in the container.
+# The only case where this field can be empty is when measuring a system that does not run
+# OpenStack or when OpenStack APIs are not accessible or OpenStack APis use is not
+# desirable. In that case the EXT service chain must be used.
+#
+# If user is not admin some parameters are mandatory and must be filled with valid values in config file such as :
+# - availability_zone
+# - hypervisor_hostname
+# - vlans
+# If a value is sets, this parameter disable the use of openrc file
+clouds_detail:
+
# Forwarder to use in nfvbenchvm image. Available options: ['vpp', 'testpmd']
vm_forwarder: testpmd
@@ -46,16 +68,16 @@ vm_image_file:
# Otherwise, a new flavor will be created with attributes listed below.
flavor_type: 'nfvbench.medium'
-# Custom flavor attributes
+# Custom flavor attributes for the test VM
flavor:
- # Number of vCPUs for the flavor
+ # Number of vCPUs for the flavor, must be at least 2!
vcpus: 2
# Memory for the flavor in MB
ram: 4096
# Size of local disk in GB
disk: 0
# metadata are supported and can be added if needed, optional
- # note that if your openstack does not have NUMA optimization
+ # note that if your OpenStack does not have NUMA optimization
# (cpu pinning and huge pages)
# you must comment out extra_specs completely otherwise
# loopback VM creation will fail
@@ -63,14 +85,38 @@ flavor:
"hw:cpu_policy": dedicated
"hw:mem_page_size": large
+# Enable multiqueue for all test VM interfaces (PVP and PVVP only).
+# When enabled, the test VM image will get added the property to enable
+# multiqueue (hw_vif_multiqueue_enabled='true').
+# The number of queues per interace will be set to the number of vCPUs configured for
+# the VM.
+# By default there is only 1 queue per interface
+# The max allowed queue per interface is 8.
+# The valid range for this parameter is [1..min(8, vcpu_count)]
+# When multiqueue is used the recommended setting is to set it to same value as the
+# number of vCPU used - up to a max of 8 queues.
+# Setting to a lower value than vCPU should also work. For example if using 4 vCPU and
+# vif_multiqueue_size is set to 2, OpenStack will create 4 queues per interface but the
+# test VM will only use the first 2 queues.
+vif_multiqueue_size: 1
+
+# Increase number of buffers allocated for VPP VM forwarder. May be needed in scenarios with large
+# number of interfaces and worker threads, or a lot of physical interfaces with multiple RSS queues.
+# Value is per CPU socket. Default is 16384.
+num_mbufs: 16384
+
# Name of the availability zone to use for the test VMs
# Must be one of the zones listed by 'nova availability-zone-list'
# availability_zone: 'nova'
+# If openrc is not admin set a valid value
availability_zone:
# To force placement on a given hypervisor, set the name here
# (if multiple names are provided, the first will be used)
-# Leave empty to let openstack pick the hypervisor
+# Leave empty to let OpenStack pick the hypervisor
compute_nodes:
+# If openrc is not admin set a valid value for hypervisor hostname
+# Example of value: hypervisor_hostname: "server1"
+hypervisor_hostname:
# Type of service chain to run, possible options are PVP, PVVP and EXT
# PVP - port to VM to port
@@ -99,10 +145,16 @@ flow_count: 10000
sriov: false
# Perform port to port loopback (direct or through switch)
-# Should be used with EXT service chain and no ARP (no_arp: true)
-# When enabled, the vlans property must contain the same VLAN id for all chains.
-# Can be overriden by --l2-loopback
+# e.g. for unitary testing of the switch or the bench itself.
+# When selected, this mode forces EXT service chain and no ARP mode
+# Destination MAC for each port is set to the other (peer) port MAC.
+# VLAN tagging is defined by 'vlans' & 'vlan_tagging' properties.
+# Can be overriden by --l2-loopback (including vlan tagging spec).
l2_loopback: false
+# No assumption is made about the loop implementation.
+# Multiple L2 vlan tagged service chains are allowed,
+# the vlan ID lists' size must be at least service_chain_count.
+# If not vlan tagging, the service chain count is forced to 1.
# Resources created by NFVbench will not be removed
# Can be overriden by --no-cleanup
@@ -134,10 +186,17 @@ traffic_generator:
# `ip_addrs_step`: step for generating IP sequence. Use "random" for random patterns, default is 0.0.0.1.
ip_addrs: ['10.0.0.0/8', '20.0.0.0/8']
ip_addrs_step: 0.0.0.1
+
+ #'ip_src_static': an attribute to precise the state of source IP during the generation of traffic, It indicates whether
+ # the IP source variate or remain constant. Use True for constant IP and False for varying IPs.
+ # default value is True
+ ip_src_static: True
+
# `tg_gateway_ip_addrs` base IP for traffic generator ports in the left and right networks to the VNFs
# chain count consecutive IP addresses spaced by tg_gateway_ip_addrs_step will be used
# `tg_gateway_ip_addrs__step`: step for generating traffic generator gateway sequences. default is 0.0.0.1
- tg_gateway_ip_addrs: ['1.1.0.100', '2.2.0.100']
+ tg_gateway_ip_addrs: ['192.168.1.100', '192.168.2.100']
+ tg_gateway_ip_cidrs: ['192.168.1.0/24','192.168.2.0/24']
tg_gateway_ip_addrs_step: 0.0.0.1
# `gateway_ip_addrs`: base IPs of VNF router gateways (left and right), quantity used depends on chain count
# must correspond to the public IP on the left and right networks
@@ -145,23 +204,43 @@ traffic_generator:
# must be the same subnet but not same IP as tg_gateway_ip_addrs.
# chain count consecutive IP addresses spaced by gateway_ip_addrs_step will be used
# `gateway_ip_addrs_step`: step for generating router gateway sequences. default is 0.0.0.1
- gateway_ip_addrs: ['1.1.0.2', '2.2.0.2']
+ gateway_ip_addrs: ['192.168.1.1', '192.168.2.1']
gateway_ip_addrs_step: 0.0.0.1
+
+ # UDP DEFINED VARIABLES
+ # TRex pick default UDP port (53) but the range of UDP source and destination ports are also
+ # defined from configuration file by using the following attributes:
+ #
# `udp_src_port`: the source port for sending UDP traffic, default is picked by TRex (53)
# `udp_dst_port`: the destination port for sending UDP traffic, default is picked by TRex (53)
+ # `udp_src_port` and `udp_dst_port` can be defined by a single port or a range. Example:
+ # udp_src_port: 80
+ # udp_dst_port: ['1024','65000']
+ # `udp_port_step`: the step between two generated ports, default is equal to '1'
+ #
+ # NOTICE:
+ # Following TRex functionalities, incrementation and decrementation of source port and destination
+ # port values occur simultaneously.
+ # So, in order to reach the highest possible number of packets, it's recommended that the range of source ports
+ # minus the range of destination ports should be different of 1
+ # i.e: |range[source_port] - range[destination_port]| = 1
udp_src_port:
udp_dst_port:
+ udp_port_step: '1'
# VxLAN only: optionally specify what VLAN tag to use for the VxLAN overlay
# This is used if the vxlan tunnels are running on a specific VLAN.
# Leave empty if there is no VLAN tagging required, or specify the VLAN id to use
# for all VxLAN tunneled traffic
vtep_vlan:
- # VxLAN only: local/source vteps IP addresses for port 0 and 1 ['10.1.1.230', '10.1.1.231']
+ # VxLAN and MPLS only: local/source vteps IP addresses for port 0 and 1 ['10.1.1.230', '10.1.1.231']
src_vteps:
# VxLAN only: remote IP address of the remote VTEPs that terminate all tunnels originating from local VTEPs
dst_vtep:
-
+ # The encapsulated L3/MPLS packet needs to traverse L3 or MPLS fabric to reach to its final dst_vtep.
+ # This parameter is required to resolve first next-hop MAC address if it next-hop is not its final dst_vtep.
+ # This parameter is mandatory for MPLS only
+ vtep_gateway_ips:
# L2 ADDRESSING OF UDP PACKETS
# Lists of dest MAC addresses to use on each traffic generator port (one dest MAC per chain)
# Leave empty for PVP, PVVP, EXT with ARP
@@ -192,7 +271,7 @@ traffic_generator:
#
# Generator profiles are listed in the following format:
# `name`: Traffic generator profile name (use a unique name, no space or special character)
- # DFo not change this field
+ # Do not change this field
# `tool`: Traffic generator tool to be used (currently supported is `TRex`).
# Do not change this field
# `ip`: IP address of the traffic generator.
@@ -205,6 +284,13 @@ traffic_generator:
# software mode, therefore the performance of TRex will be significantly
# lower. ONLY applies to trex-local.
# Recommended to leave the default value (false)
+ # `limit_memory`: Specify the memory reserved for running the TRex traffic generator (in MB). Limit the amount
+ # of packet memory used. (Passed to dpdk as -m arg)
+ # ONLY applies to trex-local.
+ # `zmq_pub_port`: Specify the ZMQ pub port number for the TRex traffic generator instance (default value is 4500).
+ # ONLY applies to trex-local.
+ # `zmq_rpc_port`: Specify the ZMQ rpc port for the TRex traffic generator instance (default value is 4501).
+ # ONLY applies to trex-local.
# `interfaces`: Configuration of traffic generator interfaces.
# `interfaces.port`: The port of the traffic generator to be used (leave as 0 and 1 resp.)
# `interfaces.switch_port`: Leave empty (deprecated)
@@ -218,12 +304,33 @@ traffic_generator:
# Do not use unless you want to override the speed discovered by the
# traffic generator. Expected format: 10Gbps
#
+ # `platform`: Optional. Used to tune the performance and allocate the cores to the right NUMA.
+ # See https://trex-tgn.cisco.com/trex/doc/trex_manual.html (6.2.3. Platform section configuration)
+ # for more details
+ # `platform.master_thread_id`: Hardware thread_id for control thread. (Valid value is mandatory if platform property is set)
+ # `platform.latency_thread_id`: Hardware thread_id for RX thread. (Valid value is mandatory if platform property is set)
+ # `platform.dual_if`: Section defines info for interface pairs (according to the order in “interfaces” list). (Valid value is mandatory if platform property is set)
+ # Each section, starting with “- socket” defines info for different interface pair. (Valid value is mandatory if platform property is set)
+ # `platform.dual_if.socket`: The NUMA node from which memory will be allocated for use by the interface pair. (Valid value is mandatory if platform property is set)
+ # `platform.dual_if.threads`: Hardware threads to be used for sending packets for the interface pair. (Valid value is mandatory if platform property is set)
+ # Threads are pinned to cores, so specifying threads actually determines the hardware cores.
+ # Example of values:
+ # platform:
+ # master_thread_id: 0
+ # latency_thread_id: 2
+ # dual_if:
+ # - socket: 0
+ # threads: [1]
+ #
generator_profile:
- name: trex-local
tool: TRex
ip: 127.0.0.1
cores: 4
software_mode: false
+ limit_memory: 1024
+ zmq_pub_port: 4500
+ zmq_rpc_port: 4501
interfaces:
- port: 0
pci:
@@ -232,14 +339,78 @@ traffic_generator:
pci:
switch_port:
intf_speed:
+ platform:
+ master_thread_id:
+ latency_thread_id:
+ dual_if:
+ - socket:
+ threads:
+
+# Use 'true' to force restart of local TRex server before next run
+# TRex local server will be restarted even if restart property is false in case of generator config changes between runs
+restart: false
# Simpler override for trex core count and mbuf multilier factor
# if empty defaults to the one specified in generator_profile.cores
cores:
+# Simpler override for the interface speed
+# if empty, the current generator_profile.intf_speed parameter applies
+# if value = 'auto' the auto-detection is forced
+intf_speed:
+
+# 'cores' and 'intf_speed' parameters can be overriden themselves
+# by respective options --cores and --intf-speed on the command-line.
+
+# By default, the real ports line rate is detected and used as
+# the reference for computing the theoretical maximum traffic load (100%).
+# Note that specifying 'intf_speed' allows to artificially lower this
+# reference while not modifying the actual transmission bit rate.
+
+# The values of the following parameters are ignored on entry
+# they are defined here in order to appear in the reported configuration.
+# They will reflect the value active at run-time (after overriding or detection)
+cores_used:
+intf_speed_used:
+intf_speed_detected:
+
+# A cache size value is passed to the TRex field engine (FE) at packet generation.
+# Can be overridden by --cache-size
+# More information for TRex performance:
+# https://trex-tgn.cisco.com/trex/doc/trex_stateless.html#_tutorial_field_engine_significantly_improve_performance
+# If cache_size = 0 (or empty): no cache will be used by TRex (default)
+# If cache_size < 0: cache_size will be set to flow count value
+cache_size: 0
+# The cache size is actually limited by the number of 64B mbufs configured in the trex platform configuration (see Trex manual 6.2.2. Memory section configuration)
+# Note that the resulting value is finally capped to 10000, whatever the requested size is (by design limitation).
+
+# Specification of the TRex behaviour dealing with the i40e network card driver issue: Trex-528
+# see https://trex-tgn.cisco.com/youtrack/issue/trex-528
+# This issue states that if other ports, in the same card,
+# are in kernel mode, they could impair traffic counting.
+# Can be overridden by --i40e-mixed
+# Values can be:
+# ignore - don't consider the case (default)
+# exit - should the case arise, exit (TRex default behaviour)
+# unbind - unbind kernel bound ports (the former NFVbench behaviour)
+# The 'ignore' option might be OK as soon as the issue has been fixed in the driver.
+# The 'unbind' option should not be used! who knows the current use of other ports?
+i40e_mixed:
+
+# Trex will use 1 x 64B mbuf per pre-built cached packet, assuming 1 pre-built cached packet per flow, it means for very large number of flows, the number of configured mbuf_64 will need to be set accordingly.
+mbuf_64:
+
# mbuffer ratio to use for TRex (see TRex documentation for more details)
mbuf_factor: 0.2
+# A switch to disable hdrh
+# hdrh is enabled by default and requires TRex v2.58 or higher
+disable_hdrh: false
+
+# List of latency percentiles values returned using hdrh
+# elements should be int or float between 0.0 and 100.0
+lat_percentiles: [25, 75, 99]
+
# -----------------------------------------------------------------------------
# These variables are not likely to be changed
@@ -255,7 +426,7 @@ generic_poll_sec: 2
# name of the loop VM
loop_vm_name: 'nfvbench-loop-vm'
-# Default names, subnets and CIDRs for PVP/PVVP networks (openstack only)
+# Default names, subnets and CIDRs for PVP/PVVP networks (OpenStack only)
#
# If a network with given name already exists it will be reused.
# - PVP only uses left and right
@@ -287,7 +458,7 @@ loop_vm_name: 'nfvbench-loop-vm'
# segmentation_id: 2001
# physical_network: phys_sriov1
#
-# For multi-chaining and non shared network mode (VLAN, SRIOV, VxLAN):
+# For multi-chaining and non shared network mode (VLAN, SRIOV, VxLAN, MPLS):
# - the segmentation_id field if provided must be a list of values (as many as chains)
# - segmentation_id auto-indexing:
# the segmentation_id field can also be a single value that represents the base value from which
@@ -297,23 +468,42 @@ loop_vm_name: 'nfvbench-loop-vm'
# - the physical_network can be a single name (all VFs to be allocated on same physnet)
# of a list of physnet names to use different PFs
#
-# Example of 2-chain configuration:
-# internal_networks:
-# left:
-# segmentation_id: [2000, 2001]
-# physical_network: phys_sriov0
-# right:
-# segmentation_id: [2010, 2011]
-# physical_network: phys_sriov1
+# Example of 2-chain VLAN configuration:
+# internal_networks:
+# left:
+# segmentation_id: [2000, 2001]
+# physical_network: phys_sriov0
+# right:
+# segmentation_id: [2010, 2011]
+# physical_network: phys_sriov1
+# Equivalent to (using auto-indexing):
+# internal_networks:
+# left:
+# segmentation_id: 2000
+# physical_network: phys_sriov0
+# right:
+# segmentation_id: 2010
+# physical_network: phys_sriov1
#
-# Equivalent to (using auto-indexing):
-# internal_networks:
-# left:
-# segmentation_id: 2000
-# physical_network: phys_sriov0
-# right:
-# segmentation_id: 2010
-# physical_network: phys_sriov1
+# - mpls_transport_labels is used only when MPLS encapsulation is enabled (mpls: true)
+# this parameter doesn't support auto-indexing because this is not a typical scenario
+# expected the list of values in a range 256-1048575, one value per chain is expected
+#
+# In the bellow configuration example 'segmentation_id; contains the inner MPLS label for each chain
+# and 'mpls_transport_labels' contains the outer transport MPLS label for each chain
+# Example of 2-chain MPLS configuration:
+# internal_networks:
+# left:
+# network_type: mpls
+# segmentation_id: [2000, 2001]
+# mpls_transport_labels: [10000, 10000]
+# physical_network: phys_sriov0
+# right:
+# network_type: mpls
+# segmentation_id: [2010, 2011]
+# mpls_transport_labels: [11000, 11000]
+# physical_network: phys_sriov1
+
internal_networks:
left:
@@ -323,6 +513,7 @@ internal_networks:
network_type: 'vlan'
segmentation_id:
physical_network:
+ mpls_transport_labels:
right:
name: 'nfvbench-rnet'
subnet: 'nfvbench-rsubnet'
@@ -330,6 +521,7 @@ internal_networks:
network_type: 'vlan'
segmentation_id:
physical_network:
+ mpls_transport_labels:
middle:
name: 'nfvbench-mnet'
subnet: 'nfvbench-msubnet'
@@ -337,51 +529,201 @@ internal_networks:
network_type: 'vlan'
segmentation_id:
physical_network:
+ mpls_transport_labels:
+
+# IDLE INTERFACES: PVP, PVVP and non shared net only.
+# By default each test VM will have 2 virtual interfaces for looping traffic.
+# If service_chain_shared_net is false, additional virtual interfaces can be
+# added at VM creation time, these interfaces will not carry any traffic and
+# can be used to test the impact of idle interfaces in the overall performance.
+# All these idle interfaces will use normal ports (not direct).
+# Number of idle interfaces per VM (none by default)
+idle_interfaces_per_vm: 0
+
+# A new network is created for each idle interface.
+# If service_chain_shared_net is true, the options below will be ignored
+# and no idle interfaces will be added.
+idle_networks:
+ # Prefix for all idle networks, the final name will append the chain ID and idle index
+ # e.g. "nfvbench-idle-net.0.4" chain 0 idle index 4
+ name: 'nfvbench-idle-net'
+ # Subnet name to use for all idle subnetworks
+ subnet: 'nfvbench-idle-subnet'
+ # CIDR to use for all idle networks (value should not matter)
+ cidr: '192.169.1.0/24'
+ # Type of network associated to the idle virtual interfaces (vlan or vxlan)
+ network_type: 'vlan'
+ # segmentation ID to use for the network attached to the idle virtual interfaces
+ # vlan: leave empty to let neutron pick the segmentation ID
+ # vxlan: must specify the starting VNI value to be used (cannot be empty)
+ # Note that NFVbench will use as many consecutive segmentation IDs as needed.
+ # For example, for 4 PVP chains and 8 idle
+ # interfaces per VM, NFVbench will use 32 consecutive values of segmentation ID
+ # starting from the value provided.
+ segmentation_id:
+ # physnet name to use for all idle interfaces
+ physical_network:
+
+# MANAGEMENT INTERFACE
+# By default each test VM will have 2 virtual interfaces for looping traffic.
+# If use_management_port is true, additional virtual interface can be
+# added at VM creation time, this interface will be used for VM management over SSH.
+# This will be helpful for debug (forwarder config, capture traffic...)
+# or to emulate VNF with management interface
+use_management_port: false
+
+# If a network with given name already exists it will be reused.
+# Otherwise a new network is created for management interface.
+# If use_management_port is false, the options below will be ignored
+# and no management interface will be added.
+management_network:
+ name: 'nfvbench-management-net'
+ # Subnet name to use for management subnetwork
+ subnet: 'nfvbench-management-subnet'
+ # CIDR to use for management network
+ cidr: '192.168.0.0/24'
+ gateway: '192.168.0.254'
+ # Type of network associated to the management virtual interface (vlan or vxlan)
+ network_type: 'vlan'
+ # segmentation ID to use for the network attached to the management virtual interface
+ # vlan: leave empty to let neutron pick the segmentation ID
+ # vxlan: must specify the starting VNI value to be used (cannot be empty)
+ segmentation_id:
+ # physnet name to use for all idle interfaces
+ physical_network:
+
+# Floating IP for management interface
+# If use_floating_ip is true, floating IP will be set on management interface port
+# One floating IP by loop VM will be used (floating ips are often limited,
+# use them on limited context mainly for debug). If there are 10 PVP chains, this will require 10
+# floating IPs. If 10 PVVP chains, it will require 20 floating IPs
+use_floating_ip: false
+
+# If a network with given name already exists it will be reused.
+# Set same name as management_network if you want to use a floating IP from this network
+# Otherwise set name, subnet and CIDR information from your floating IP pool network
+# Floating network used to set floating IP on management port.
+# Only 1 floating network will be used for all VMs and chains (shared network).
+# If use_floating_ip is false, the options below will be ignored
+# and no floating IP will be added.
+floating_network:
+ name: 'nfvbench-floating-net'
+ # Subnet name to use for floating subnetwork
+ subnet: 'nfvbench-floating-subnet'
+ # CIDR to use for floating network
+ cidr: '192.168.0.0/24'
+ # Type of network associated to the management virtual interface (vlan or vxlan)
+ network_type: 'vlan'
+ # segmentation ID to use for the network attached to the management virtual interface
+ # vlan: leave empty to let neutron pick the segmentation ID
+ # vxlan: must specify the starting VNI value to be used (cannot be empty)
+ segmentation_id:
+ # physnet name to use for all idle interfaces
+ physical_network:
# In the scenario of PVVP + SRIOV, there is choice of how the traffic will be
# handled in the middle network. The default (false) will use vswitch, while
# SRIOV can be used by toggling below setting.
use_sriov_middle_net: false
-# EXT chain only. Prefix names of edge networks which will be used to send traffic via traffic generator.
+# EXT chain only. Prefix names of edge networks or list of edge network names
+# used to send traffic via traffic generator.
#
# If service_chain_shared_net is true, the left and right networks must pre-exist and match exactly by name.
#
# If service_chain_shared_net is false, each chain must have its own pre-existing left and right networks.
-# An index will be appended to each network name to form the final name:
+# left and right can take either a string prefix or a list of arbitrary network names
+# If a string prefix is passed, an index will be appended to each network name to form the final name.
+# Example:
+# external_networks:
+# left: 'ext-lnet'
+# right: 'ext-rnet'
# ext-lnet0 ext-rnet0 for chain #0
# ext-lnet1 ext-rnet1 for chain #1
# etc...
+# If a list of strings is passed, each string in the list must be the name of the network used for the
+# chain indexed by the entry position in the list.
+# The list must have at least as many entries as there are chains
+# Example:
+# external_networks:
+# left: ['ext-lnet', 'ext-lnet2']
+# right: ['ext-rnet', 'ext-rnet2']
+#
external_networks:
- left: 'ext-lnet'
- right: 'ext-rnet'
+ left:
+ right:
+
+# PVP with L3 router in the packet path only.
+# Only use when l3_router option is True (see l3_router)
+# Prefix names of edge networks which will be used to send traffic via traffic generator.
+# If a network with given name already exists it will be reused.
+# Otherwise a new edge network will be created with that name, subnet and CIDR.
+#
+# gateway can be set in case of L3 traffic with edge networks - refer to edge_networks
+#
+# segmentation_id can be set to enforce a specific VLAN id - by default (empty) the VLAN id
+# will be assigned by Neutron.
+# Must be unique for each network
+# physical_network can be set to pick a specific phsyical network - by default (empty) the
+# default physical network will be picked
+#
+edge_networks:
+ left:
+ name: 'nfvbench-net2'
+ router_name: 'router_left'
+ subnet: 'nfvbench-subnet2'
+ cidr: '192.168.3.0/24'
+ gateway:
+ network_type:
+ segmentation_id:
+ physical_network:
+ right:
+ name: 'nfvbench-net3'
+ router_name: 'router_right'
+ subnet: 'nfvbench-subnet3'
+ cidr: '192.168.4.0/24'
+ gateway:
+ network_type:
+ segmentation_id:
+ physical_network:
# Use 'true' to enable VXLAN encapsulation support and sent by the traffic generator
# When this option enabled internal networks 'network type' parameter value should be 'vxlan'
+# VxLAN and MPLS encapsulations are mutual exclusive if 'vxlan' is true then 'mpls' should be false
+# and vise versa
vxlan: false
-
+# Use 'true' to enable MPLS encapsulation support and sent by the traffic generator
+# When this option enabled internal networks 'network type' parameter value should be 'mpls'
+# MPLS and VxLAN encapsulations are mutual exclusive if 'mpls' is 'true' then 'vxlan' should be set to 'false'
+# and vise versa. no_flow_stats, no_latency_stats, no_latency_streams should be set to 'true' because these
+# features are not supported at the moment. In future when these features will be supported they will require
+# special NIC hardware. Only 2 label stack supported at the moment where one label is transport and another
+# is VPN for more details please refer to 'mpls_transport_labels' and 'segmentation_id' in networks configuration
+mpls: false
# Use 'true' to enable VLAN tagging of packets generated and sent by the traffic generator
# Leave empty or set to false if you do not want the traffic generator to insert the VLAN tag (this is
# needed for example if VLAN tagging is enabled on switch (access mode) or if you want to hook
# directly to a NIC).
# By default is set to true (which is the nominal use case with TOR and trunk mode to Trex ports)
-# If VxLAN is enabled, this option should be set to false (vlan tagging for encapsulated packets
+# If VxLAN or MPLS are enabled, this option should be set to false (vlan tagging for encapsulated packets
# is not supported). Use the vtep_vlan option to enable vlan tagging for the VxLAN overlay network.
vlan_tagging: true
-# Used only in the case of EXT chain and no openstack to specify the VLAN IDs to use.
-# This property is ignored when OpenStakc is used or in the case of l2-loopback.
+# Used only in the case of EXT chain and no OpenStack or not admin access to specify the VLAN IDs to use.
+# This property is ignored when OpenStack is used or when 'vlan_tagging' is disabled.
# If OpenStack is used leave the list empty, VLAN IDs are retrieved from OpenStack networks using Neutron API.
# If networks are shared across all chains (service_chain_shared_net=true), the list should have exactly 2 values
# If networks are not shared across chains (service_chain_shared_net=false), the list should have
# 2 list of vlan IDs
-# In the special case of l2-loopback the list should have the same VLAN id for all chains
# Examples:
# [1998, 1999] left network uses vlan 1998 right network uses vlan 1999
# [[1,2],[3,4]] chain 0 left vlan 1, right vlan 2 - chain 1 left vlan 3 right vlan 4
-# [1010, 1010] same VLAN id with l2-loopback enabled
-#
+# [1010, 1010] same vlan ID on both sides, for a typical l2-loopback test (*)
+# The vlan lists may be oversized, compared to the actual service chain count
+# (lowest indexes are used) but an exception is raised if they are too short.
vlans: []
+# (*) actually there is no restriction, left/right IDs may differ
+# for some exotic purpose - see also the l2_loopback parameter.
# ARP is used to discover the MAC address of VNFs that run L3 routing.
# Used only with EXT chain.
@@ -390,6 +732,11 @@ vlans: []
# (see mac_addrs_left and mac_addrs_right)
no_arp: false
+# Loop VM (VPP forwarder) can use ARP to discover next hop mac address
+# False (default): do not send ARP but use static config devices macs instead (TRex gratuitous ARP are not interpreted by VPP)
+# True: ARP requests are sent to find out next hop MAC addresses (for instance SDN-GW)
+loop_vm_arp: false
+
# Traffic Profiles
# You can add here more profiles as needed
# `l2frame_size` can be specified in any none zero integer value to represent the size in bytes
@@ -416,6 +763,19 @@ traffic:
# Can be overriden by --no-traffic
no_traffic: false
+# Use an L3 router in the packet path. This option if set will create or reuse an OpenStack neutron
+# router (PVP, PVVP) or reuse an existing L3 router (EXT) to route traffic to the destination VM.
+# Can be overriden by --l3-router
+l3_router: false
+
+# If l3_router is true and depending on ARP stale time SUT configuration
+# Gratuitous ARP (GARP) from TG port to the router is needed to keep traffic up
+# Default value: 1 packet per second
+# This value needs to be defined inferior to SUT ARP stale time to avoid GARP packets drop
+# in case of high load traffic
+periodic_gratuitous_arp: false
+gratuitous_arp_pps: 1
+
# Test configuration
# The rate pps for traffic going in reverse direction in case of unidirectional flow. Default to 1.
@@ -482,6 +842,26 @@ debug: false
# Defaults to disabled
log_file:
+# One can specify a user ID for changing ownership of output log/json files
+# - empty: depends on file existency
+# . yes? replacement, owner is unchanged
+# . no ? creation with root as user
+# - 0: this is the root user ID
+# - other: will corresponds (or not) to an existing user/group in the host
+# (the current user ID can be obtained with the command 'id -u')
+# Can be overriden by --user-id
+# Consider also that the default value below is overridable by a USER_ID env variable,
+# if nfvbench is run into a container, this information can be passed at its creation.
+# The overall precedence rule is: 'default_config (this) < env < config < command_line'
+user_id:
+
+# Similarly, the group ID is defined
+# Can be overriden by --group-id
+# Default may be set through env GROUP_ID
+# Caveat: user and group with a same name may have different numerical IDs
+# (the current group ID can be obtained with the command 'id -g')
+group_id:
+
# When enabled, all results and/or logs will be sent to a fluentd servers at the requested IPs and ports
# A list of one or more fluentd servers identified by their IPs and port numbers should be given.
# For each recipient it is possible to enable both sending logs and performance
@@ -517,10 +897,57 @@ factory_class: 'BasicFactory'
# Can be overriden by --user-label
user_label:
+# Custom information to be passed to results post-processing,
+# they will be included as is in the json report 'config' branch.
+# Useful for documenting or automating further treatments.
+# The value is any yaml object (=> open usage) - example:
+# |user_info:
+# | status: explore
+# | description:
+# | generator: VM
+# | attachment: direct
+# | target: lab-pf
+# | switch: qfx3500
+# Keys may be merged/overriden using the --user-info command line option
+# (the command-line parameter value is expressed as a json object string)
+user_info:
-# THESE FIELDS SHOULD BE USED VERY RARELY
+
+# THESE FIELDS SHOULD BE USED VERY RARELY OR ON PURPOSE
# Skip vswitch configuration and retrieving of stats
# Can be overriden by --no-vswitch-access
# Should be left to the default value (false)
no_vswitch_access: false
+
+# Enable service mode for trafic capture from TRex console (for debugging purpose)
+# Can be overriden by --service-mode
+# Should be left to the default value (false)
+service_mode: false
+
+# Disable extra flow stats (on high load traffic)
+# Can be overriden by --no-flow-stats
+# Should be left to the default value (false)
+no_flow_stats: false
+
+# Disable flow stats for latency traffic
+# Can be overriden by --no-latency-stats
+# Should be left to the default value (false)
+no_latency_stats: false
+
+# Disable latency measurements (no streams)
+# Can be overriden by --no-latency-streams
+# Should be left to the default value (false)
+no_latency_streams: false
+
+# Skip "end to end" connectivity check on traffic setup
+# Can be overriden by --no-e2e-check
+# Should be left to the default value (false)
+# This flag is usable for traffic generation only
+no_e2e_check: false
+
+# General purpose register (debugging flags)
+# Can be overriden by --debug-mask
+# Designed for development needs
+# The hexadecimal notation (0x...) is accepted.
+debug_mask: 0x00000000
diff --git a/nfvbench/chain_router.py b/nfvbench/chain_router.py
new file mode 100644
index 0000000..99114e0
--- /dev/null
+++ b/nfvbench/chain_router.py
@@ -0,0 +1,190 @@
+#!/usr/bin/env python
+# Copyright 2018 Cisco Systems, Inc. All rights reserved.
+#
+# 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.
+#
+
+# This module takes care of chaining routers
+#
+"""NFVBENCH CHAIN DISCOVERY/STAGING.
+
+This module takes care of staging/discovering resources that are participating in a
+L3 benchmarking session: routers, networks, ports, routes.
+If a resource is discovered with the same name, it will be reused.
+Otherwise it will be created.
+
+Once created/discovered, instances are checked to be in the active state (ready to pass traffic)
+Configuration parameters that will influence how these resources are staged/related:
+- openstack or no openstack
+- chain type
+- number of chains
+- number of VNF in each chain (PVP, PVVP)
+- SRIOV and middle port SRIOV for port types
+- whether networks are shared across chains or not
+
+There is not traffic generation involved in this module.
+"""
+import time
+
+from netaddr import IPAddress
+from netaddr import IPNetwork
+
+from .log import LOG
+
+
+class ChainException(Exception):
+ """Exception while operating the chains."""
+
+class ChainRouter(object):
+ """Could be a shared router across all chains or a chain private router."""
+
+ def __init__(self, manager, name, subnets, routes):
+ """Create a router for given chain."""
+ self.manager = manager
+ self.subnets = subnets
+ self.routes = routes
+ self.name = name
+ self.ports = [None, None]
+ self.reuse = False
+ self.router = None
+ try:
+ self._setup()
+ except Exception:
+ LOG.error("Error creating router %s", self.name)
+ self.delete()
+ raise
+
+ def _setup(self):
+ # Lookup if there is a matching router with same name
+ routers = self.manager.neutron_client.list_routers(name=self.name)
+
+ if routers['routers']:
+ router = routers['routers'][0]
+ # a router of same name already exists, we need to verify it has the same
+ # characteristics
+ if self.subnets:
+ for subnet in self.subnets:
+ if not self.get_router_interface(router['id'], subnet.network['subnets'][0]):
+ raise ChainException("Mismatch of 'subnet_id' for reused "
+ "router '{router}'.Router has no subnet id '{sub_id}'."
+ .format(router=self.name,
+ sub_id=subnet.network['subnets'][0]))
+ interfaces = self.manager.neutron_client.list_ports(device_id=router['id'])['ports']
+ # This string filters nfvbench networks in case when some other specific networks
+ # created and attached to the test nfvebnch router manually or automatically
+ # like in case of HA when neutron router virtually present on several network nodes
+ interfaces = [x for x in interfaces if x['fixed_ips'][0]['subnet_id'] in
+ [s.network['subnets'][0] for s in self.subnets]]
+ for interface in interfaces:
+ if self.is_ip_in_network(
+ interface['fixed_ips'][0]['ip_address'],
+ self.manager.config.traffic_generator.tg_gateway_ip_cidrs[0]) \
+ or self.is_ip_in_network(
+ interface['fixed_ips'][0]['ip_address'],
+ self.manager.config.traffic_generator.tg_gateway_ip_cidrs[1]):
+ self.ports[0] = interface
+ else:
+ self.ports[1] = interface
+ if self.routes:
+ for route in self.routes:
+ if route not in router['routes']:
+ LOG.info("Mismatch of 'router' for reused router '%s'."
+ "Router has no existing route destination '%s', "
+ "and nexthop '%s'.", self.name,
+ route['destination'],
+ route['nexthop'])
+ LOG.info("New route added to router %s for reused ", self.name)
+ body = {
+ 'router': {
+ 'routes': self.routes
+ }
+ }
+ self.manager.neutron_client.update_router(router['id'], body)
+
+ LOG.info('Reusing existing router: %s', self.name)
+ self.reuse = True
+ self.router = router
+ return
+
+ body = {
+ 'router': {
+ 'name': self.name,
+ 'admin_state_up': True
+ }
+ }
+ router = self.manager.neutron_client.create_router(body)['router']
+ router_id = router['id']
+
+ if self.subnets:
+ for subnet in self.subnets:
+ router_interface = {'subnet_id': subnet.network['subnets'][0]}
+ self.manager.neutron_client.add_interface_router(router_id, router_interface)
+ interfaces = self.manager.neutron_client.list_ports(device_id=router_id)['ports']
+ interfaces = [x for x in interfaces if x['fixed_ips'][0]['subnet_id'] in
+ [s.network['subnets'][0] for s in self.subnets]]
+ for interface in interfaces:
+ itf = interface['fixed_ips'][0]['ip_address']
+ cidr0 = self.manager.config.traffic_generator.tg_gateway_ip_cidrs[0]
+ cidr1 = self.manager.config.traffic_generator.tg_gateway_ip_cidrs[1]
+ if self.is_ip_in_network(itf, cidr0) or self.is_ip_in_network(itf, cidr1):
+ self.ports[0] = interface
+ else:
+ self.ports[1] = interface
+
+ if self.routes:
+ body = {
+ 'router': {
+ 'routes': self.routes
+ }
+ }
+ self.manager.neutron_client.update_router(router_id, body)
+
+ LOG.info('Created router: %s.', self.name)
+ self.router = self.manager.neutron_client.show_router(router_id)
+
+ def get_uuid(self):
+ """
+ Extract UUID of this router.
+
+ :return: UUID of this router
+ """
+ return self.router['id']
+
+ def get_router_interface(self, router_id, subnet_id):
+ interfaces = self.manager.neutron_client.list_ports(device_id=router_id)['ports']
+ matching_interface = None
+ for interface in interfaces:
+ if interface['fixed_ips'][0]['subnet_id'] == subnet_id:
+ matching_interface = interface
+ return matching_interface
+
+ def is_ip_in_network(self, interface_ip, cidr):
+ return IPAddress(interface_ip) in IPNetwork(cidr)
+
+ def delete(self):
+ """Delete this router."""
+ if not self.reuse and self.router:
+ retry = 0
+ while retry < self.manager.config.generic_retry_count:
+ try:
+ self.manager.neutron_client.delete_router(self.router['id'])
+ LOG.info("Deleted router: %s", self.name)
+ return
+ except Exception:
+ retry += 1
+ LOG.info('Error deleting router %s (retry %d/%d)...',
+ self.name,
+ retry,
+ self.manager.config.generic_retry_count)
+ time.sleep(self.manager.config.generic_poll_sec)
+ LOG.error('Unable to delete router: %s', self.name)
diff --git a/nfvbench/chain_runner.py b/nfvbench/chain_runner.py
index a4e461d..f045528 100644
--- a/nfvbench/chain_runner.py
+++ b/nfvbench/chain_runner.py
@@ -23,11 +23,11 @@ The ChainRunner class is in charge of coordinating:
from collections import OrderedDict
-from chaining import ChainManager
-from log import LOG
-from specs import ChainType
-from stats_manager import StatsManager
-from traffic_client import TrafficClient
+from .chaining import ChainManager
+from .log import LOG
+from .specs import ChainType
+from .stats_manager import StatsManager
+from .traffic_client import TrafficClient
class ChainRunner(object):
@@ -71,11 +71,16 @@ class ChainRunner(object):
# VLAN is discovered from the networks
gen_config.set_vlans(0, self.chain_manager.get_chain_vlans(0))
gen_config.set_vlans(1, self.chain_manager.get_chain_vlans(1))
+ else:
+ LOG.info("Ports: untagged")
# the only case we do not need to set the dest MAC is in the case of
# l2-loopback (because the traffic gen will default to use the peer MAC)
- # or EXT+ARP (because dest MAC will be discovered by TRex ARP)
- if not config.l2_loopback and (config.service_chain != ChainType.EXT or config.no_arp):
+ # or EXT+ARP+VLAN (because dest MAC will be discovered by TRex ARP)
+ # Note that in the case of EXT+ARP+VxLAN, the dest MACs need to be loaded
+ # because ARP only operates on the dest VTEP IP not on the VM dest MAC
+ if not config.l2_loopback and \
+ (config.service_chain != ChainType.EXT or config.no_arp or config.vxlan):
gen_config.set_dest_macs(0, self.chain_manager.get_dest_macs(0))
gen_config.set_dest_macs(1, self.chain_manager.get_dest_macs(1))
@@ -93,16 +98,37 @@ class ChainRunner(object):
gen_config.set_vxlan_endpoints(1, src_vteps[1], dst_vtep)
self.config['vxlan_gen_config'] = gen_config
+ if config.mpls:
+ # MPLS VPN is discovered from the networks
+ src_vteps = gen_config.gen_config.src_vteps
+ vtep_gateway_ips = gen_config.gen_config.vtep_gateway_ips
+ gen_config.set_mpls_inner_labels(0, self.chain_manager.get_chain_mpls_inner_labels(0))
+ gen_config.set_mpls_inner_labels(1, self.chain_manager.get_chain_mpls_inner_labels(1))
+ outer_mpls_labels_left = self.config.internal_networks.left.mpls_transport_labels
+ outer_mpls_labels_right = self.config.internal_networks.right.mpls_transport_labels
+ if outer_mpls_labels_left or outer_mpls_labels_right:
+ gen_config.set_mpls_outer_labels(0, outer_mpls_labels_left)
+ gen_config.set_mpls_outer_labels(1, outer_mpls_labels_right)
+ # Configuring source an remote VTEPs on TREx interfaces
+ gen_config.set_mpls_peers(0, src_vteps[0], vtep_gateway_ips[0])
+ gen_config.set_mpls_peers(1, src_vteps[1], vtep_gateway_ips[1])
+ self.config['mpls_gen_config'] = gen_config
+
# get an instance of the stats manager
self.stats_manager = StatsManager(self)
LOG.info('ChainRunner initialized')
def __setup_traffic(self):
+ # possibly skip connectivity check
+ if self.config.no_e2e_check:
+ LOG.info('Skipping end to end connectivity check')
+ return
self.traffic_client.setup()
if not self.config.no_traffic:
- # ARP is needed for EXT chain or VxLAN overlay unless disabled explicitly
- if (self.config.service_chain == ChainType.EXT or self.config.vxlan) and \
- not self.config.no_arp:
+ # ARP is needed for EXT chain or VxLAN overlay or MPLS unless disabled explicitly
+ if (self.config.service_chain == ChainType.EXT or self.config.mpls or
+ self.config.vxlan or self.config.l3_router or self.config.loop_vm_arp)\
+ and not self.config.no_arp:
self.traffic_client.ensure_arp_successful()
self.traffic_client.ensure_end_to_end()
@@ -129,7 +155,10 @@ class ChainRunner(object):
if self.config.single_run:
result['run_config'] = self.traffic_client.get_run_config(result)
required = result['run_config']['direction-total']['orig']['rate_pps']
- actual = result['stats']['total_tx_rate']
+ if self.config.periodic_gratuitous_arp:
+ actual = result['stats']['total_tx_rate'] + self.config.gratuitous_arp_pps
+ else:
+ actual = result['stats']['total_tx_rate']
warning = self.traffic_client.compare_tx_rates(required, actual)
if warning is not None:
result['run_config']['warning'] = warning
@@ -163,10 +192,9 @@ class ChainRunner(object):
LOG.info('Starting %dx%s benchmark...', self.config.service_chain_count, self.chain_name)
self.stats_manager.create_worker()
- if self.config.vxlan:
- # Configure vxlan tunnels
+ if self.config.vxlan or self.config.mpls:
+ # Configure vxlan or mpls tunnels
self.stats_manager.worker.config_interfaces()
-
self.__setup_traffic()
results[self.chain_name] = {'result': self.__get_chain_result()}
@@ -185,8 +213,8 @@ class ChainRunner(object):
LOG.info('Clean up skipped.')
try:
self.traffic_client.close()
- except Exception:
- LOG.exception()
+ except Exception as exc:
+ LOG.exception(exc)
if self.stats_manager:
self.stats_manager.close()
except Exception:
diff --git a/nfvbench/chain_workers.py b/nfvbench/chain_workers.py
index 0ed2648..e332d7b 100644
--- a/nfvbench/chain_workers.py
+++ b/nfvbench/chain_workers.py
@@ -43,7 +43,6 @@ class BasicWorker(object):
Specialized workers can insert their own interface stats inside each existing packet path
stats for every chain.
"""
- pass
def update_interface_stats(self, diff=False):
"""Update all interface stats.
@@ -53,4 +52,3 @@ class BasicWorker(object):
Make sure that the interface stats inserted in insert_interface_stats() are updated
with proper values
"""
- pass
diff --git a/nfvbench/chaining.py b/nfvbench/chaining.py
index a97cd0b..d6f67f9 100644
--- a/nfvbench/chaining.py
+++ b/nfvbench/chaining.py
@@ -49,18 +49,21 @@ import os
import re
import time
-from glanceclient.v2 import client as glanceclient
+import glanceclient
from neutronclient.neutron import client as neutronclient
from novaclient.client import Client
from attrdict import AttrDict
-import compute
-from log import LOG
-from specs import ChainType
-
+from .chain_router import ChainRouter
+from . import compute
+from .log import LOG
+from .specs import ChainType
# Left and right index for network and port lists
LEFT = 0
RIGHT = 1
+# L3 traffic edge networks are at the end of networks list
+EDGE_LEFT = -2
+EDGE_RIGHT = -1
# Name of the VM config file
NFVBENCH_CFG_FILENAME = 'nfvbenchvm.conf'
# full pathame of the VM config in the VM
@@ -74,8 +77,6 @@ BOOT_SCRIPT_PATHNAME = os.path.join(os.path.dirname(os.path.abspath(__file__)),
class ChainException(Exception):
"""Exception while operating the chains."""
- pass
-
class NetworkEncaps(object):
"""Network encapsulation."""
@@ -131,6 +132,7 @@ class ChainVnfPort(object):
self.manager = vnf.manager
self.reuse = False
self.port = None
+ self.floating_ip = None
if vnf.instance:
# VNF instance is reused, we need to find an existing port that matches this instance
# and network
@@ -156,6 +158,10 @@ class ChainVnfPort(object):
'binding:vnic_type': vnic_type
}
}
+ subnet_id = chain_network.get_subnet_uuid()
+ if subnet_id:
+ body['port']['fixed_ips'] = [{'subnet_id': subnet_id}]
+
port = self.manager.neutron_client.create_port(body)
self.port = port['port']
LOG.info('Created port %s', name)
@@ -174,18 +180,39 @@ class ChainVnfPort(object):
"""Get the MAC address for this port."""
return self.port['mac_address']
+ def get_ip(self):
+ """Get the IP address for this port."""
+ return self.port['fixed_ips'][0]['ip_address']
+
+ def set_floating_ip(self, chain_network):
+ # create and add floating ip to port
+ try:
+ self.floating_ip = self.manager.neutron_client.create_floatingip({
+ 'floatingip': {
+ 'floating_network_id': chain_network.get_uuid(),
+ 'port_id': self.port['id'],
+ 'description': 'nfvbench floating ip for port:' + self.port['name'],
+ }})['floatingip']
+ LOG.info('Floating IP %s created and associated on port %s',
+ self.floating_ip['floating_ip_address'], self.name)
+ return self.floating_ip['floating_ip_address']
+ except Exception:
+ LOG.info('Failed to created and associated floating ip on port %s (ignored)', self.name)
+ return self.port['fixed_ips'][0]['ip_address']
+
def delete(self):
"""Delete this port instance."""
if self.reuse or not self.port:
return
- retry = 0
- while retry < self.manager.config.generic_retry_count:
+ for _ in range(0, self.manager.config.generic_retry_count):
try:
self.manager.neutron_client.delete_port(self.port['id'])
LOG.info("Deleted port %s", self.name)
+ if self.floating_ip:
+ self.manager.neutron_client.delete_floatingip(self.floating_ip['id'])
+ LOG.info("Deleted floating IP %s", self.floating_ip['description'])
return
except Exception:
- retry += 1
time.sleep(self.manager.config.generic_poll_sec)
LOG.error('Unable to delete port: %s', self.name)
@@ -193,24 +220,39 @@ class ChainVnfPort(object):
class ChainNetwork(object):
"""Could be a shared network across all chains or a chain private network."""
- def __init__(self, manager, network_config, chain_id=None, lookup_only=False):
+ def __init__(self, manager, network_config, chain_id=None, lookup_only=False,
+ suffix=None):
"""Create a network for given chain.
network_config: a dict containing the network properties
- (segmentation_id and physical_network)
+ (name, segmentation_id and physical_network)
chain_id: to which chain the networks belong.
a None value will mean that these networks are shared by all chains
+ suffix: a suffix to add to the network name (if not None)
"""
self.manager = manager
- self.name = network_config.name
+ if chain_id is None:
+ self.name = network_config.name
+ else:
+ # the name itself can be either a string or a list of names indexed by chain ID
+ if isinstance(network_config.name, tuple):
+ self.name = network_config.name[chain_id]
+ else:
+ # network_config.name is a prefix string
+ self.name = network_config.name + str(chain_id)
+ if suffix:
+ self.name = self.name + suffix
self.segmentation_id = self._get_item(network_config.segmentation_id,
chain_id, auto_index=True)
+ self.subnet_name = self._get_item(network_config.subnet, chain_id)
self.physical_network = self._get_item(network_config.physical_network, chain_id)
- if chain_id is not None:
- self.name += str(chain_id)
+
self.reuse = False
self.network = None
self.vlan = None
+ self.router_name = None
+ if manager.config.l3_router and hasattr(network_config, 'router_name'):
+ self.router_name = network_config.router_name
try:
self._setup(network_config, lookup_only)
except Exception:
@@ -242,7 +284,7 @@ class ChainNetwork(object):
return item_field[index]
except IndexError:
raise ChainException("List %s is too short for chain index %d" %
- (str(item_field), index))
+ (str(item_field), index)) from IndexError
# single value is configured
if auto_index:
return item_field + index
@@ -283,7 +325,7 @@ class ChainNetwork(object):
'network': {
'name': self.name,
'admin_state_up': True
- }
+ }
}
if network_config.network_type:
body['network']['provider:network_type'] = network_config.network_type
@@ -292,6 +334,8 @@ class ChainNetwork(object):
if self.physical_network:
body['network']['provider:physical_network'] = self.physical_network
self.network = self.manager.neutron_client.create_network(body)['network']
+ # create associated subnet, all subnets have the same name (which is ok since
+ # we do not need to address them directly by name)
body = {
'subnet': {'name': network_config.subnet,
'cidr': network_config.cidr,
@@ -313,6 +357,18 @@ class ChainNetwork(object):
"""
return self.network['id']
+ def get_subnet_uuid(self):
+ """
+ Extract UUID of this subnet network.
+
+ :return: UUID of this subnet network
+ """
+ for subnet in self.network['subnets']:
+ if self.subnet_name == self.manager.neutron_client \
+ .show_subnet(subnet)['subnet']['name']:
+ return subnet
+ return None
+
def get_vlan(self):
"""
Extract vlan for this network.
@@ -329,24 +385,30 @@ class ChainNetwork(object):
:return: VNI ID for this network
"""
- if 'vxlan' not in self.network['provider:network_type']:
- raise ChainException('Trying to retrieve VNI for non VXLAN network')
+
+ return self.network['provider:segmentation_id']
+
+ def get_mpls_inner_label(self):
+ """
+ Extract MPLS VPN Label for this network.
+
+ :return: MPLS VPN Label for this network
+ """
+
return self.network['provider:segmentation_id']
def delete(self):
"""Delete this network."""
if not self.reuse and self.network:
- retry = 0
- while retry < self.manager.config.generic_retry_count:
+ for retry in range(0, self.manager.config.generic_retry_count):
try:
self.manager.neutron_client.delete_network(self.network['id'])
LOG.info("Deleted network: %s", self.name)
return
except Exception:
- retry += 1
LOG.info('Error deleting network %s (retry %d/%d)...',
self.name,
- retry,
+ retry + 1,
self.manager.config.generic_retry_count)
time.sleep(self.manager.config.generic_poll_sec)
LOG.error('Unable to delete network: %s', self.name)
@@ -369,15 +431,27 @@ class ChainVnf(object):
if len(networks) > 2:
# we will have more than 1 VM in each chain
self.name += '-' + str(vnf_id)
+ # A list of ports for this chain
+ # There are normally 2 ports carrying traffic (index 0, and index 1) and
+ # potentially multiple idle ports not carrying traffic (index 2 and up)
+ # For example if 7 idle interfaces are requested, the corresp. ports will be
+ # at index 2 to 8
self.ports = []
+ self.management_port = None
+ self.routers = []
self.status = None
self.instance = None
self.reuse = False
self.host_ip = None
+ self.idle_networks = []
+ self.idle_ports = []
try:
# the vnf_id is conveniently also the starting index in networks
# for the left and right networks associated to this VNF
- self._setup(networks[vnf_id:vnf_id + 2])
+ if self.manager.config.l3_router:
+ self._setup(networks[vnf_id:vnf_id + 4])
+ else:
+ self._setup(networks[vnf_id:vnf_id + 2])
except Exception:
LOG.error("Error creating VNF %s", self.name)
self.delete()
@@ -386,29 +460,85 @@ class ChainVnf(object):
def _get_vm_config(self, remote_mac_pair):
config = self.manager.config
devices = self.manager.generator_config.devices
- with open(BOOT_SCRIPT_PATHNAME, 'r') as boot_script:
+
+ if config.l3_router:
+ tg_gateway1_ip = self.routers[LEFT].ports[1]['fixed_ips'][0][
+ 'ip_address'] # router edge ip left
+ tg_gateway2_ip = self.routers[RIGHT].ports[1]['fixed_ips'][0][
+ 'ip_address'] # router edge ip right
+ tg_mac1 = self.routers[LEFT].ports[1]['mac_address'] # router edge mac left
+ tg_mac2 = self.routers[RIGHT].ports[1]['mac_address'] # router edge mac right
+ # edge cidr mask left
+ vnf_gateway1_cidr = \
+ self.ports[LEFT].get_ip() + self.__get_network_mask(
+ self.manager.config.edge_networks.left.cidr)
+ # edge cidr mask right
+ vnf_gateway2_cidr = \
+ self.ports[RIGHT].get_ip() + self.__get_network_mask(
+ self.manager.config.edge_networks.right.cidr)
+ if config.vm_forwarder != 'vpp':
+ raise ChainException(
+ 'L3 router mode imply to set VPP as VM forwarder.'
+ 'Please update your config file with: vm_forwarder: vpp')
+ else:
+ tg_gateway1_ip = devices[LEFT].tg_gateway_ip_addrs
+ tg_gateway2_ip = devices[RIGHT].tg_gateway_ip_addrs
+ if not config.loop_vm_arp:
+ tg_mac1 = remote_mac_pair[0]
+ tg_mac2 = remote_mac_pair[1]
+ else:
+ tg_mac1 = ""
+ tg_mac2 = ""
+
+ g1cidr = devices[LEFT].get_gw_ip(
+ self.chain.chain_id) + self.__get_network_mask(
+ self.manager.config.internal_networks.left.cidr)
+ g2cidr = devices[RIGHT].get_gw_ip(
+ self.chain.chain_id) + self.__get_network_mask(
+ self.manager.config.internal_networks.right.cidr)
+
+ vnf_gateway1_cidr = g1cidr
+ vnf_gateway2_cidr = g2cidr
+
+ with open(BOOT_SCRIPT_PATHNAME, 'r', encoding="utf-8") as boot_script:
content = boot_script.read()
- g1cidr = devices[LEFT].get_gw_ip(self.chain.chain_id) + '/8'
- g2cidr = devices[RIGHT].get_gw_ip(self.chain.chain_id) + '/8'
vm_config = {
'forwarder': config.vm_forwarder,
'intf_mac1': self.ports[LEFT].get_mac(),
'intf_mac2': self.ports[RIGHT].get_mac(),
- 'tg_gateway1_ip': devices[LEFT].tg_gateway_ip_addrs,
- 'tg_gateway2_ip': devices[RIGHT].tg_gateway_ip_addrs,
+ 'tg_gateway1_ip': tg_gateway1_ip,
+ 'tg_gateway2_ip': tg_gateway2_ip,
'tg_net1': devices[LEFT].ip_addrs,
'tg_net2': devices[RIGHT].ip_addrs,
- 'vnf_gateway1_cidr': g1cidr,
- 'vnf_gateway2_cidr': g2cidr,
- 'tg_mac1': remote_mac_pair[0],
- 'tg_mac2': remote_mac_pair[1]
+ 'vnf_gateway1_cidr': vnf_gateway1_cidr,
+ 'vnf_gateway2_cidr': vnf_gateway2_cidr,
+ 'tg_mac1': tg_mac1,
+ 'tg_mac2': tg_mac2,
+ 'vif_mq_size': config.vif_multiqueue_size,
+ 'num_mbufs': config.num_mbufs
}
+ if self.manager.config.use_management_port:
+ mgmt_ip = self.management_port.port['fixed_ips'][0]['ip_address']
+ mgmt_mask = self.__get_network_mask(self.manager.config.management_network.cidr)
+ vm_config['intf_mgmt_cidr'] = mgmt_ip + mgmt_mask
+ vm_config['intf_mgmt_ip_gw'] = self.manager.config.management_network.gateway
+ vm_config['intf_mac_mgmt'] = self.management_port.port['mac_address']
+ else:
+ # Interface management config left empty to avoid error in VM spawn
+ # if nfvbench config has values for management network but use_management_port=false
+ vm_config['intf_mgmt_cidr'] = ''
+ vm_config['intf_mgmt_ip_gw'] = ''
+ vm_config['intf_mac_mgmt'] = ''
return content.format(**vm_config)
+ @staticmethod
+ def __get_network_mask(network):
+ return '/' + network.split('/')[1]
+
def _get_vnic_type(self, port_index):
"""Get the right vnic type for given port indexself.
- If SR-IOV is speficied, middle ports in multi-VNF chains
+ If SR-IOV is specified, middle ports in multi-VNF chains
can use vswitch or SR-IOV based on config.use_sriov_middle_net
"""
if self.manager.config.sriov:
@@ -423,45 +553,164 @@ class ChainVnf(object):
return 'direct'
return 'normal'
+ def _get_idle_networks_ports(self):
+ """Get the idle networks for PVP or PVVP chain (non shared net only)
+
+ For EXT packet path or shared net, returns empty list.
+ For PVP, PVVP these networks will be created if they do not exist.
+ chain_id: to which chain the networks belong.
+ a None value will mean that these networks are shared by all chains
+ """
+ networks = []
+ ports = []
+ config = self.manager.config
+ chain_id = self.chain.chain_id
+ idle_interfaces_per_vm = config.idle_interfaces_per_vm
+ if config.service_chain == ChainType.EXT or chain_id is None or \
+ idle_interfaces_per_vm == 0:
+ return
+
+ # Make a copy of the idle networks dict as we may have to modify the
+ # segmentation ID
+ idle_network_cfg = AttrDict(config.idle_networks)
+ if idle_network_cfg.segmentation_id:
+ segmentation_id = idle_network_cfg.segmentation_id + \
+ chain_id * idle_interfaces_per_vm
+ else:
+ segmentation_id = None
+ try:
+ # create as many idle networks and ports as requested
+ for idle_index in range(idle_interfaces_per_vm):
+ if config.service_chain == ChainType.PVP:
+ suffix = '.%d' % (idle_index)
+ else:
+ suffix = '.%d.%d' % (self.vnf_id, idle_index)
+ port_name = self.name + '-idle' + str(idle_index)
+ # update the segmentation id based on chain id and idle index
+ if segmentation_id:
+ idle_network_cfg.segmentation_id = segmentation_id + idle_index
+ port_name = port_name + "." + str(segmentation_id)
+
+ networks.append(ChainNetwork(self.manager,
+ idle_network_cfg,
+ chain_id,
+ suffix=suffix))
+ ports.append(ChainVnfPort(port_name,
+ self,
+ networks[idle_index],
+ 'normal'))
+ except Exception:
+ # need to cleanup all successful networks
+ for net in networks:
+ net.delete()
+ for port in ports:
+ port.delete()
+ raise
+ self.idle_networks = networks
+ self.idle_ports = ports
+
def _setup(self, networks):
flavor_id = self.manager.flavor.flavor.id
# Check if we can reuse an instance with same name
for instance in self.manager.existing_instances:
if instance.name == self.name:
+ instance_left = LEFT
+ instance_right = RIGHT
+ # In case of L3 traffic instance use edge networks
+ if self.manager.config.l3_router:
+ instance_left = EDGE_LEFT
+ instance_right = EDGE_RIGHT
# Verify that other instance characteristics match
if instance.flavor['id'] != flavor_id:
self._reuse_exception('Flavor mismatch')
if instance.status != "ACTIVE":
self._reuse_exception('Matching instance is not in ACTIVE state')
# The 2 networks for this instance must also be reused
- if not networks[LEFT].reuse:
- self._reuse_exception('network %s is new' % networks[LEFT].name)
- if not networks[RIGHT].reuse:
- self._reuse_exception('network %s is new' % networks[RIGHT].name)
+ if not networks[instance_left].reuse:
+ self._reuse_exception('network %s is new' % networks[instance_left].name)
+ if not networks[instance_right].reuse:
+ self._reuse_exception('network %s is new' % networks[instance_right].name)
# instance.networks have the network names as keys:
# {'nfvbench-rnet0': ['192.168.2.10'], 'nfvbench-lnet0': ['192.168.1.8']}
- if networks[LEFT].name not in instance.networks:
+ if networks[instance_left].name not in instance.networks:
self._reuse_exception('Left network mismatch')
- if networks[RIGHT].name not in instance.networks:
+ if networks[instance_right].name not in instance.networks:
self._reuse_exception('Right network mismatch')
self.reuse = True
self.instance = instance
LOG.info('Reusing existing instance %s on %s',
self.name, self.get_hypervisor_name())
+ # create management port if needed
+ if self.manager.config.use_management_port:
+ self.management_port = ChainVnfPort(self.name + '-mgmt', self,
+ self.manager.management_network, 'normal')
+ ip = self.management_port.port['fixed_ips'][0]['ip_address']
+ if self.manager.config.use_floating_ip:
+ ip = self.management_port.set_floating_ip(self.manager.floating_ip_network)
+ LOG.info("Management interface will be active using IP: %s, "
+ "and you can connect over SSH with login: nfvbench and password: nfvbench", ip)
# create or reuse/discover 2 ports per instance
- self.ports = [ChainVnfPort(self.name + '-' + str(index),
- self,
- networks[index],
- self._get_vnic_type(index)) for index in [0, 1]]
+ if self.manager.config.l3_router:
+ for index in [0, 1]:
+ self.ports.append(ChainVnfPort(self.name + '-' + str(index),
+ self,
+ networks[index + 2],
+ self._get_vnic_type(index)))
+ else:
+ for index in [0, 1]:
+ self.ports.append(ChainVnfPort(self.name + '-' + str(index),
+ self,
+ networks[index],
+ self._get_vnic_type(index)))
+
+ # create idle networks and ports only if instance is not reused
+ # if reused, we do not care about idle networks/ports
+ if not self.reuse:
+ self._get_idle_networks_ports()
+
+ # Create neutron routers for L3 traffic use case
+ if self.manager.config.l3_router and self.manager.openstack:
+ internal_nets = networks[:2]
+ if self.manager.config.service_chain == ChainType.PVP:
+ edge_nets = networks[2:]
+ else:
+ edge_nets = networks[3:]
+ subnets_left = [internal_nets[0], edge_nets[0]]
+ routes_left = [{'destination': self.manager.config.traffic_generator.ip_addrs[0],
+ 'nexthop': self.manager.config.traffic_generator.tg_gateway_ip_addrs[
+ 0]},
+ {'destination': self.manager.config.traffic_generator.ip_addrs[1],
+ 'nexthop': self.ports[0].get_ip()}]
+ self.routers.append(
+ ChainRouter(self.manager, edge_nets[0].router_name, subnets_left, routes_left))
+ subnets_right = [internal_nets[1], edge_nets[1]]
+ routes_right = [{'destination': self.manager.config.traffic_generator.ip_addrs[0],
+ 'nexthop': self.ports[1].get_ip()},
+ {'destination': self.manager.config.traffic_generator.ip_addrs[1],
+ 'nexthop': self.manager.config.traffic_generator.tg_gateway_ip_addrs[
+ 1]}]
+ self.routers.append(
+ ChainRouter(self.manager, edge_nets[1].router_name, subnets_right, routes_right))
+ # Overload gateway_ips property with router ip address for ARP and traffic calls
+ self.manager.generator_config.devices[LEFT].set_gw_ip(
+ self.routers[LEFT].ports[0]['fixed_ips'][0]['ip_address']) # router edge ip left)
+ self.manager.generator_config.devices[RIGHT].set_gw_ip(
+ self.routers[RIGHT].ports[0]['fixed_ips'][0]['ip_address']) # router edge ip right)
+
# if no reuse, actual vm creation is deferred after all ports in the chain are created
# since we need to know the next mac in a multi-vnf chain
def create_vnf(self, remote_mac_pair):
"""Create the VNF instance if it does not already exist."""
if self.instance is None:
- port_ids = [{'port-id': vnf_port.port['id']}
- for vnf_port in self.ports]
+ port_ids = []
+ if self.manager.config.use_management_port:
+ port_ids.append({'port-id': self.management_port.port['id']})
+ port_ids.extend([{'port-id': vnf_port.port['id']} for vnf_port in self.ports])
+ # add idle ports
+ for idle_port in self.idle_ports:
+ port_ids.append({'port-id': idle_port.port['id']})
vm_config = self._get_vm_config(remote_mac_pair)
az = self.manager.placer.get_required_az()
server = self.manager.comp.create_server(self.name,
@@ -485,8 +734,8 @@ class ChainVnf(object):
# here we MUST wait until this instance is resolved otherwise subsequent
# VNF creation can be placed in other hypervisors!
config = self.manager.config
- max_retries = (config.check_traffic_time_sec +
- config.generic_poll_sec - 1) / config.generic_poll_sec
+ max_retries = int((config.check_traffic_time_sec +
+ config.generic_poll_sec - 1) / config.generic_poll_sec)
retry = 0
for retry in range(max_retries):
status = self.get_status()
@@ -522,7 +771,13 @@ class ChainVnf(object):
def get_hostname(self):
"""Get the hypervisor host name running this VNF instance."""
- return getattr(self.instance, 'OS-EXT-SRV-ATTR:hypervisor_hostname')
+ if self.manager.is_admin:
+ hypervisor_hostname = getattr(self.instance, 'OS-EXT-SRV-ATTR:hypervisor_hostname')
+ else:
+ hypervisor_hostname = self.manager.config.hypervisor_hostname
+ if not hypervisor_hostname:
+ raise ChainException('Hypervisor hostname parameter is mandatory')
+ return hypervisor_hostname
def get_host_ip(self):
"""Get the IP address of the host where this instance runs.
@@ -536,7 +791,12 @@ class ChainVnf(object):
def get_hypervisor_name(self):
"""Get hypervisor name (az:hostname) for this VNF instance."""
if self.instance:
- az = getattr(self.instance, 'OS-EXT-AZ:availability_zone')
+ if self.manager.is_admin:
+ az = getattr(self.instance, 'OS-EXT-AZ:availability_zone')
+ else:
+ az = self.manager.config.availability_zone
+ if not az:
+ raise ChainException('Availability zone parameter is mandatory')
hostname = self.get_hostname()
if az:
return az + ':' + hostname
@@ -555,8 +815,15 @@ class ChainVnf(object):
if self.instance:
self.manager.comp.delete_server(self.instance)
LOG.info("Deleted instance %s", self.name)
+ if self.manager.config.use_management_port:
+ self.management_port.delete()
for port in self.ports:
port.delete()
+ for port in self.idle_ports:
+ port.delete()
+ for network in self.idle_networks:
+ network.delete()
+
class Chain(object):
"""A class to manage a single chain.
@@ -619,7 +886,8 @@ class Chain(object):
def get_length(self):
"""Get the number of VNF in the chain."""
- return len(self.networks) - 1
+ # Take into account 2 edge networks for routers
+ return len(self.networks) - 3 if self.manager.config.l3_router else len(self.networks) - 1
def _get_remote_mac_pairs(self):
"""Get the list of remote mac pairs for every VNF in the chain.
@@ -674,7 +942,10 @@ class Chain(object):
if port_index:
# this will pick the last item in array
port_index = -1
- return self.networks[port_index].get_vlan()
+ # This string filters networks connected to TG, in case of
+ # l3-router feature we have 4 networks instead of 2
+ networks = [x for x in self.networks if not x.router_name]
+ return networks[port_index].get_vlan()
def get_vxlan(self, port_index):
"""Get the VXLAN id on a given port.
@@ -690,6 +961,20 @@ class Chain(object):
port_index = -1
return self.networks[port_index].get_vxlan()
+ def get_mpls_inner_label(self, port_index):
+ """Get the MPLS VPN Label on a given port.
+
+ port_index: left port is 0, right port is 1
+ return: the mpls_label_id or None if there is no mpls
+ """
+ # for port 1 we need to return the MPLS Label of the last network in the chain
+ # The networks array contains 2 networks for PVP [left, right]
+ # and 3 networks in the case of PVVP [left.middle,right]
+ if port_index:
+ # this will pick the last item in array
+ port_index = -1
+ return self.networks[port_index].get_mpls_inner_label()
+
def get_dest_mac(self, port_index):
"""Get the dest MAC on a given port.
@@ -851,6 +1136,7 @@ class ChainManager(object):
if self.openstack:
# openstack only
session = chain_runner.cred.get_session()
+ self.is_admin = chain_runner.cred.is_admin
self.nova_client = Client(2, session=session)
self.neutron_client = neutronclient.Client('2.0', session=session)
self.glance_client = glanceclient.Client('2', session=session)
@@ -864,6 +1150,22 @@ class ChainManager(object):
self.flavor = ChainFlavor(config.flavor_type, config.flavor, self.comp)
# Get list of all existing instances to check if some instances can be reused
self.existing_instances = self.comp.get_server_list()
+ # If management port is requested for VMs, create management network (shared)
+ if self.config.use_management_port:
+ self.management_network = ChainNetwork(self, self.config.management_network,
+ None, False)
+ # If floating IP is used for management, create and share
+ # across chains the floating network
+ if self.config.use_floating_ip:
+ self.floating_ip_network = ChainNetwork(self,
+ self.config.floating_network,
+ None, False)
+ else:
+ # For EXT chains, the external_networks left and right fields in the config
+ # must be either a prefix string or a list of at least chain-count strings
+ self._check_extnet('left', config.external_networks.left)
+ self._check_extnet('right', config.external_networks.right)
+
# If networks are shared across chains, get the list of networks
if config.service_chain_shared_net:
self.networks = self.get_networks()
@@ -871,18 +1173,20 @@ class ChainManager(object):
for chain_id in range(self.chain_count):
self.chains.append(Chain(chain_id, self))
if config.service_chain == ChainType.EXT:
- # if EXT and no ARP we need to read dest MACs from config
- if config.no_arp:
+ # if EXT and no ARP or VxLAN we need to read dest MACs from config
+ if config.no_arp or config.vxlan:
self._get_dest_macs_from_config()
else:
# Make sure all instances are active before proceeding
self._ensure_instances_active()
+ # network API call do not show VLANS ID if not admin read from config
+ if not self.is_admin and config.vlan_tagging:
+ self._get_config_vlans()
except Exception:
self.delete()
raise
else:
# no openstack, no need to create chains
-
if not config.l2_loopback and config.no_arp:
self._get_dest_macs_from_config()
if config.vlan_tagging:
@@ -890,12 +1194,27 @@ class ChainManager(object):
if len(config.vlans) != 2:
raise ChainException('The config vlans property must be a list '
'with 2 lists of VLAN IDs')
- re_vlan = "[0-9]*$"
- self.vlans = [self._check_list('vlans[0]', config.vlans[0], re_vlan),
- self._check_list('vlans[1]', config.vlans[1], re_vlan)]
+ self._get_config_vlans()
if config.vxlan:
raise ChainException('VxLAN is only supported with OpenStack')
+ def _check_extnet(self, side, name):
+ if not name:
+ raise ChainException('external_networks.%s must contain a valid network'
+ ' name prefix or a list of network names' % side)
+ if isinstance(name, tuple) and len(name) < self.chain_count:
+ raise ChainException('external_networks.%s %s'
+ ' must have at least %d names' % (side, name, self.chain_count))
+
+ def _get_config_vlans(self):
+ re_vlan = "[0-9]*$"
+ try:
+ self.vlans = [self._check_list('vlans[0]', self.config.vlans[0], re_vlan),
+ self._check_list('vlans[1]', self.config.vlans[1], re_vlan)]
+ except IndexError:
+ raise ChainException(
+ 'vlans parameter is mandatory. Set valid value in config file') from IndexError
+
def _get_dest_macs_from_config(self):
re_mac = "[0-9a-fA-F]{2}([-:])[0-9a-fA-F]{2}(\\1[0-9a-fA-F]{2}){4}$"
tg_config = self.config.traffic_generator
@@ -908,6 +1227,8 @@ class ChainManager(object):
# if it is a single int or mac, make it a list of 1 int
if isinstance(ll, (int, str)):
ll = [ll]
+ else:
+ ll = list(ll)
for item in ll:
if not re.match(pattern, str(item)):
raise ChainException("Invalid format '{item}' specified in {fname}"
@@ -965,12 +1286,16 @@ class ChainManager(object):
LOG.info('Image %s successfully uploaded.', self.image_name)
self.image_instance = self.comp.find_image(self.image_name)
+ # image multiqueue property must be set according to the vif_multiqueue_size
+ # config value (defaults to 1 or disabled)
+ self.comp.image_set_multiqueue(self.image_instance, self.config.vif_multiqueue_size > 1)
+
def _ensure_instances_active(self):
instances = []
for chain in self.chains:
instances.extend(chain.get_instances())
initial_instance_count = len(instances)
- max_retries = (self.config.check_traffic_time_sec +
+ max_retries = (self.config.check_traffic_time_sec + (initial_instance_count - 1) * 10 +
self.config.generic_poll_sec - 1) / self.config.generic_poll_sec
retry = 0
while instances:
@@ -1016,6 +1341,7 @@ class ChainManager(object):
lookup_only = True
ext_net = self.config.external_networks
net_cfg = [AttrDict({'name': name,
+ 'subnet': None,
'segmentation_id': None,
'physical_network': None})
for name in [ext_net.left, ext_net.right]]
@@ -1028,6 +1354,10 @@ class ChainManager(object):
net_cfg = [int_nets.left, int_nets.right]
else:
net_cfg = [int_nets.left, int_nets.middle, int_nets.right]
+ if self.config.l3_router:
+ edge_nets = self.config.edge_networks
+ net_cfg.append(edge_nets.left)
+ net_cfg.append(edge_nets.right)
networks = []
try:
for cfg in net_cfg:
@@ -1091,30 +1421,41 @@ class ChainManager(object):
"""
return self.get_existing_ports().get(chain_network.get_uuid(), None)
- def get_host_ip_from_mac(self, mac):
- """Get the host IP address matching a MAC.
+ def get_hypervisor_from_mac(self, mac):
+ """Get the hypervisor that hosts a VM MAC.
mac: MAC address to look for
- return: the IP address of the host where the matching port runs or None if not found
+ return: the hypervisor where the matching port runs or None if not found
"""
# _existing_ports is a dict of list of ports indexed by network id
- for port_list in self.get_existing_ports().values():
+ for port_list in list(self.get_existing_ports().values()):
for port in port_list:
try:
if port['mac_address'] == mac:
host_id = port['binding:host_id']
- return self.comp.get_hypervisor(host_id).host_ip
+ return self.comp.get_hypervisor(host_id)
except KeyError:
pass
return None
+ def get_host_ip_from_mac(self, mac):
+ """Get the host IP address matching a MAC.
+
+ mac: MAC address to look for
+ return: the IP address of the host where the matching port runs or None if not found
+ """
+ hypervisor = self.get_hypervisor_from_mac(mac)
+ if hypervisor:
+ return hypervisor.host_ip
+ return None
+
def get_chain_vlans(self, port_index):
"""Get the list of per chain VLAN id on a given port.
port_index: left port is 0, right port is 1
return: a VLAN ID list indexed by the chain index or None if no vlan tagging
"""
- if self.chains:
+ if self.chains and self.is_admin:
return [self.chains[chain_index].get_vlan(port_index)
for chain_index in range(self.chain_count)]
# no openstack
@@ -1126,11 +1467,23 @@ class ChainManager(object):
port_index: left port is 0, right port is 1
return: a VNIs ID list indexed by the chain index or None if no vlan tagging
"""
- if self.chains:
+ if self.chains and self.is_admin:
return [self.chains[chain_index].get_vxlan(port_index)
for chain_index in range(self.chain_count)]
# no openstack
- raise ChainException('VxLAN is only supported with OpenStack')
+ raise ChainException('VxLAN is only supported with OpenStack and with admin user')
+
+ def get_chain_mpls_inner_labels(self, port_index):
+ """Get the list of per chain MPLS VPN Labels on a given port.
+
+ port_index: left port is 0, right port is 1
+ return: a MPLSs ID list indexed by the chain index or None if no mpls
+ """
+ if self.chains and self.is_admin:
+ return [self.chains[chain_index].get_mpls_inner_label(port_index)
+ for chain_index in range(self.chain_count)]
+ # no openstack
+ raise ChainException('MPLS is only supported with OpenStack and with admin user')
def get_dest_macs(self, port_index):
"""Get the list of per chain dest MACs on a given port.
@@ -1178,7 +1531,17 @@ class ChainManager(object):
if self.chains:
# in the case of EXT, the compute node must be retrieved from the port
# associated to any of the dest MACs
- return self.chains[0].get_compute_nodes()
+ if self.config.service_chain != ChainType.EXT:
+ return self.chains[0].get_compute_nodes()
+ # in the case of EXT, the compute node must be retrieved from the port
+ # associated to any of the dest MACs
+ dst_macs = self.generator_config.get_dest_macs()
+ # dest MAC on port 0, chain 0
+ dst_mac = dst_macs[0][0]
+ hypervisor = self.get_hypervisor_from_mac(dst_mac)
+ if hypervisor:
+ LOG.info('Found hypervisor for EXT chain: %s', hypervisor.hypervisor_hostname)
+ return [':' + hypervisor.hypervisor_hostname]
# no openstack = no chains
return []
@@ -1188,5 +1551,9 @@ class ChainManager(object):
chain.delete()
for network in self.networks:
network.delete()
+ if self.config.use_management_port and hasattr(self, 'management_network'):
+ self.management_network.delete()
+ if self.config.use_floating_ip and hasattr(self, 'floating_ip_network'):
+ self.floating_ip_network.delete()
if self.flavor:
self.flavor.delete()
diff --git a/nfvbench/cleanup.py b/nfvbench/cleanup.py
index 819514a..cefdcfa 100644
--- a/nfvbench/cleanup.py
+++ b/nfvbench/cleanup.py
@@ -15,15 +15,16 @@
#
import sys
-import time
from neutronclient.neutron import client as nclient
from novaclient.client import Client
from novaclient.exceptions import NotFound
from tabulate import tabulate
-import credentials as credentials
-from log import LOG
+from . import credentials
+from .log import LOG
+from . import utils
+
class ComputeCleaner(object):
"""A cleaner for compute resources."""
@@ -35,40 +36,24 @@ class ComputeCleaner(object):
self.servers = [server for server in all_servers
if server.name.startswith(instance_prefix)]
- def instance_exists(self, server):
- try:
- self.nova_client.servers.get(server.id)
- except NotFound:
- return False
- return True
-
def get_resource_list(self):
return [["Instance", server.name, server.id] for server in self.servers]
- def clean(self):
- if self.servers:
- for server in self.servers:
- try:
- LOG.info('Deleting instance %s...', server.name)
- self.nova_client.servers.delete(server.id)
- except Exception:
- LOG.exception("Instance %s deletion failed", server.name)
- LOG.info(' Waiting for %d instances to be fully deleted...', len(self.servers))
- retry_count = 15 + len(self.servers) * 5
- while True:
- retry_count -= 1
- self.servers = [server for server in self.servers if self.instance_exists(server)]
- if not self.servers:
- break
+ def get_cleaner_code(self):
+ return "instances"
- if retry_count:
- LOG.info(' %d yet to be deleted by Nova, retries left=%d...',
- len(self.servers), retry_count)
- time.sleep(2)
- else:
- LOG.warning(' instance deletion verification time-out: %d still not deleted',
- len(self.servers))
- break
+ def clean_needed(self, clean_options):
+ if clean_options is None:
+ return True
+ code = self.get_cleaner_code()
+ return code[0] in clean_options
+
+ def clean(self, clean_options):
+ if self.clean_needed(clean_options):
+ if self.servers:
+ for server in self.servers:
+ utils.delete_server(self.nova_client, server)
+ utils.waiting_servers_deletion(self.nova_client, self.servers)
class NetworkCleaner(object):
@@ -83,7 +68,7 @@ class NetworkCleaner(object):
for net in all_networks:
netname = net['name']
for prefix in network_name_prefixes:
- if netname.startswith(prefix):
+ if prefix and netname.startswith(prefix):
self.networks.append(net)
net_ids.append(net['id'])
break
@@ -91,28 +76,125 @@ class NetworkCleaner(object):
LOG.info('Discovering ports...')
all_ports = self.neutron_client.list_ports()['ports']
self.ports = [port for port in all_ports if port['network_id'] in net_ids]
+ LOG.info('Discovering floating ips...')
+ all_floating_ips = self.neutron_client.list_floatingips()['floatingips']
+ self.floating_ips = [floating_ip for floating_ip in all_floating_ips if
+ floating_ip['floating_network_id'] in net_ids and "nfvbench" in
+ floating_ip['description']]
else:
self.ports = []
+ self.floating_ips = []
def get_resource_list(self):
res_list = [["Network", net['name'], net['id']] for net in self.networks]
res_list.extend([["Port", port['name'], port['id']] for port in self.ports])
+ res_list.extend(
+ [["Floating IP", floating_ip['description'], floating_ip['id']] for floating_ip in
+ self.floating_ips])
return res_list
- def clean(self):
- for port in self.ports:
- LOG.info("Deleting port %s...", port['id'])
- try:
- self.neutron_client.delete_port(port['id'])
- except Exception:
- LOG.exception("Port deletion failed")
-
- for net in self.networks:
- LOG.info("Deleting network %s...", net['name'])
- try:
- self.neutron_client.delete_network(net['id'])
- except Exception:
- LOG.exception("Network deletion failed")
+ def get_cleaner_code(self):
+ return "networks, ports and floating ips"
+
+ def clean_needed(self, clean_options):
+ if clean_options is None:
+ return True
+ code = self.get_cleaner_code()
+ return code[0] in clean_options
+
+ def clean(self, clean_options):
+ if self.clean_needed(clean_options):
+ for port in self.ports:
+ LOG.info("Deleting port %s...", port['id'])
+ try:
+ self.neutron_client.delete_port(port['id'])
+ except Exception:
+ LOG.exception("Port deletion failed")
+ for floating_ip in self.floating_ips:
+ LOG.info("Deleting floating ip %s...", floating_ip['id'])
+ try:
+ self.neutron_client.delete_floatingip(floating_ip['id'])
+ except Exception:
+ LOG.exception("Floating IP deletion failed")
+ # associated subnets are automatically deleted by neutron
+ for net in self.networks:
+ LOG.info("Deleting network %s...", net['name'])
+ try:
+ self.neutron_client.delete_network(net['id'])
+ except Exception:
+ LOG.exception("Network deletion failed")
+
+
+class RouterCleaner(object):
+ """A cleaner for router resources."""
+
+ def __init__(self, neutron_client, router_names):
+ self.neutron_client = neutron_client
+ LOG.info('Discovering routers...')
+ all_routers = self.neutron_client.list_routers()['routers']
+ self.routers = []
+ self.ports = []
+ self.routes = []
+ rtr_ids = []
+ for rtr in all_routers:
+ rtrname = rtr['name']
+ for name in router_names:
+ if rtrname == name:
+ self.routers.append(rtr)
+ rtr_ids.append(rtr['id'])
+
+ LOG.info('Discovering router routes for router %s...', rtr['name'])
+ all_routes = rtr['routes']
+ for route in all_routes:
+ LOG.info("destination: %s, nexthop: %s", route['destination'],
+ route['nexthop'])
+
+ LOG.info('Discovering router ports for router %s...', rtr['name'])
+ self.ports.extend(self.neutron_client.list_ports(device_id=rtr['id'])['ports'])
+ break
+
+ def get_resource_list(self):
+ res_list = [["Router", rtr['name'], rtr['id']] for rtr in self.routers]
+ return res_list
+
+ def get_cleaner_code(self):
+ return "router"
+
+ def clean_needed(self, clean_options):
+ if clean_options is None:
+ return True
+ code = self.get_cleaner_code()
+ return code[0] in clean_options
+
+ def clean(self, clean_options):
+ if self.clean_needed(clean_options):
+ # associated routes needs to be deleted before deleting routers
+ for rtr in self.routers:
+ LOG.info("Deleting routes for %s...", rtr['name'])
+ try:
+ body = {
+ 'router': {
+ 'routes': []
+ }
+ }
+ self.neutron_client.update_router(rtr['id'], body)
+ except Exception:
+ LOG.exception("Router routes deletion failed")
+ LOG.info("Deleting ports for %s...", rtr['name'])
+ try:
+ for port in self.ports:
+ body = {
+ 'port_id': port['id']
+ }
+ self.neutron_client.remove_interface_router(rtr['id'], body)
+ except Exception:
+ LOG.exception("Router ports deletion failed")
+ LOG.info("Deleting router %s...", rtr['name'])
+ try:
+ self.neutron_client.delete_router(rtr['id'])
+ except Exception:
+ LOG.exception("Router deletion failed")
+
class FlavorCleaner(object):
"""Cleaner for NFVbench flavor."""
@@ -130,26 +212,45 @@ class FlavorCleaner(object):
return [['Flavor', self.name, self.flavor.id]]
return None
- def clean(self):
- if self.flavor:
- LOG.info("Deleting flavor %s...", self.flavor.name)
- try:
- self.flavor.delete()
- except Exception:
- LOG.exception("Flavor deletion failed")
+ def get_cleaner_code(self):
+ return "flavor"
+
+ def clean_needed(self, clean_options):
+ if clean_options is None:
+ return True
+ code = self.get_cleaner_code()
+ return code[0] in clean_options
+
+ def clean(self, clean_options):
+ if self.clean_needed(clean_options):
+ if self.flavor:
+ LOG.info("Deleting flavor %s...", self.flavor.name)
+ try:
+ self.flavor.delete()
+ except Exception:
+ LOG.exception("Flavor deletion failed")
+
class Cleaner(object):
"""Cleaner for all NFVbench resources."""
def __init__(self, config):
- cred = credentials.Credentials(config.openrc_file, None, False)
+ cred = credentials.Credentials(config.openrc_file, config.clouds_detail, None, False)
session = cred.get_session()
self.neutron_client = nclient.Client('2.0', session=session)
self.nova_client = Client(2, session=session)
network_names = [inet['name'] for inet in config.internal_networks.values()]
+ network_names.extend([inet['name'] for inet in config.edge_networks.values()])
+ network_names.append(config.management_network['name'])
+ network_names.append(config.floating_network['name'])
+ router_names = [rtr['router_name'] for rtr in config.edge_networks.values()]
+ # add idle networks as well
+ if config.idle_networks.name:
+ network_names.append(config.idle_networks.name)
self.cleaners = [ComputeCleaner(self.nova_client, config.loop_vm_name),
FlavorCleaner(self.nova_client, config.flavor_type),
- NetworkCleaner(self.neutron_client, network_names)]
+ NetworkCleaner(self.neutron_client, network_names),
+ RouterCleaner(self.neutron_client, router_names)]
def show_resources(self):
"""Show all NFVbench resources."""
@@ -168,11 +269,37 @@ class Cleaner(object):
def clean(self, prompt):
"""Clean all resources."""
- LOG.info("NFVbench will delete all resources shown...")
+ LOG.info("NFVbench will delete resources shown...")
+ clean_options = None
if prompt:
- answer = raw_input("Are you sure? (y/n) ")
+ answer = input("Do you want to delete all ressources? (y/n) ")
if answer.lower() != 'y':
- LOG.info("Exiting without deleting any resource")
- sys.exit(0)
+ print("What kind of resources do you want to delete?")
+ all_option = ""
+ all_option_codes = []
+ for cleaner in self.cleaners:
+ code = cleaner.get_cleaner_code()
+ print(("%s: %s" % (code[0], code)))
+ all_option += code[0]
+ all_option_codes.append(code)
+ print(("a: all resources - a shortcut for '%s'" % all_option))
+ all_option_codes.append("all resources")
+ print("q: quit")
+ answer_res = input(":").lower()
+ # Check only first character because answer_res can be "flavor" and it is != all
+ if answer_res[0] == "a":
+ clean_options = all_option
+ elif answer_res[0] != 'q':
+ # if user write complete code instead of shortcuts
+ # Get only first character of clean code to avoid false clean request
+ # i.e "networks and ports" and "router" have 1 letter in common and router clean
+ # will be called even if user ask for networks and ports
+ if answer_res in all_option_codes:
+ clean_options = answer_res[0]
+ else:
+ clean_options = answer_res
+ else:
+ LOG.info("Exiting without deleting any resource")
+ sys.exit(0)
for cleaner in self.cleaners:
- cleaner.clean()
+ cleaner.clean(clean_options)
diff --git a/nfvbench/compute.py b/nfvbench/compute.py
index 556ade4..883dc28 100644
--- a/nfvbench/compute.py
+++ b/nfvbench/compute.py
@@ -23,8 +23,10 @@ except ImportError:
from glanceclient.v1.apiclient.exceptions import NotFound as GlanceImageNotFound
import keystoneauth1
import novaclient
+from novaclient.exceptions import NotFound
-from log import LOG
+from .log import LOG
+from . import utils
class Compute(object):
@@ -50,7 +52,7 @@ class Compute(object):
retry = 0
try:
# check image is file/url based.
- with open(image_file) as f_image:
+ with open(image_file, 'rb') as f_image:
img = self.glance_client.images.create(name=str(final_image_name),
disk_format="qcow2",
container_format="bare",
@@ -95,6 +97,24 @@ class Compute(object):
return True
+ def image_multiqueue_enabled(self, img):
+ """Check if multiqueue property is enabled on given image."""
+ try:
+ return img['hw_vif_multiqueue_enabled'] == 'true'
+ except KeyError:
+ return False
+
+ def image_set_multiqueue(self, img, enabled):
+ """Set multiqueue property as enabled or disabled on given image."""
+ cur_mqe = self.image_multiqueue_enabled(img)
+ LOG.info('Image %s hw_vif_multiqueue_enabled property is "%s"',
+ img.name, str(cur_mqe).lower())
+ if cur_mqe != enabled:
+ mqe = str(enabled).lower()
+ self.glance_client.images.update(img.id, hw_vif_multiqueue_enabled=mqe)
+ img['hw_vif_multiqueue_enabled'] = mqe
+ LOG.info('Image %s hw_vif_multiqueue_enabled property changed to "%s"', img.name, mqe)
+
# Create a server instance with name vmname
# and check that it gets into the ACTIVE state
def create_server(self, vmname, image, flavor, key_name,
@@ -129,9 +149,17 @@ class Compute(object):
servers_list = self.novaclient.servers.list()
return servers_list
+ def instance_exists(self, server):
+ try:
+ self.novaclient.servers.get(server)
+ except NotFound:
+ return False
+ return True
+
def delete_server(self, server):
"""Delete a server from its object reference."""
- self.novaclient.servers.delete(server)
+ utils.delete_server(self.novaclient, server)
+ utils.waiting_servers_deletion(self.novaclient, [server])
def find_flavor(self, flavor_type):
"""Find a flavor by name."""
diff --git a/nfvbench/config.py b/nfvbench/config.py
index 5feeda5..8e77127 100644
--- a/nfvbench/config.py
+++ b/nfvbench/config.py
@@ -16,19 +16,19 @@
from attrdict import AttrDict
import yaml
-from log import LOG
+from .log import LOG
def config_load(file_name, from_cfg=None, whitelist_keys=None):
"""Load a yaml file into a config dict, merge with from_cfg if not None
The config file content taking precedence in case of duplicate
"""
try:
- with open(file_name) as fileobj:
+ with open(file_name, encoding="utf-8") as fileobj:
cfg = AttrDict(yaml.safe_load(fileobj))
except IOError:
raise Exception("Configuration file at '{}' was not found. Please use correct path "
"and verify it is visible to container if you run nfvbench in container."
- .format(file_name))
+ .format(file_name)) from IOError
if from_cfg:
if not whitelist_keys:
@@ -43,10 +43,16 @@ def config_loads(cfg_text, from_cfg=None, whitelist_keys=None):
"""Same as config_load but load from a string
"""
try:
- cfg = AttrDict(yaml.load(cfg_text))
+ cfg = AttrDict(yaml.safe_load(cfg_text))
except TypeError:
# empty string
cfg = AttrDict()
+ except ValueError as e:
+ # In case of wrong path or file not readable or string not well formatted
+ LOG.error("String %s is not well formatted. Please verify your yaml/json string. "
+ "If string is a file path, file was not found. Please use correct path and "
+ "verify it is visible to container if you run nfvbench in container.", cfg_text)
+ raise Exception(e) from e
if from_cfg:
if not whitelist_keys:
whitelist_keys = []
@@ -58,7 +64,7 @@ def config_loads(cfg_text, from_cfg=None, whitelist_keys=None):
def _validate_config(subset, superset, whitelist_keys):
def get_err_config(subset, superset):
result = {}
- for k, v in subset.items():
+ for k, v in list(subset.items()):
if k not in whitelist_keys:
if k not in superset:
result.update({k: v})
diff --git a/nfvbench/config_plugin.py b/nfvbench/config_plugin.py
index a6759cd..86e5505 100644
--- a/nfvbench/config_plugin.py
+++ b/nfvbench/config_plugin.py
@@ -18,19 +18,15 @@
This module is used to override the configuration with platform specific constraints and extensions
"""
import abc
-import specs
+from . import specs
-class ConfigPluginBase(object):
+class ConfigPluginBase(object, metaclass=abc.ABCMeta):
"""Base class for config plugins."""
- __metaclass__ = abc.ABCMeta
-
class InitializationFailure(Exception):
"""Used in case of any init failure."""
- pass
-
def __init__(self, config):
"""Save configuration."""
if not config:
@@ -95,9 +91,8 @@ class ConfigPlugin(ConfigPluginBase):
"""Return RunSpec for given platform."""
return specs.RunSpec(config.no_vswitch_access, openstack_spec)
- def validate_config(self, config, openstack_spec):
+ def validate_config(self, cfg, openstack_spec):
"""Nothing to validate by default."""
- pass
def prepare_results_config(self, cfg):
"""Nothing to add the results by default."""
diff --git a/nfvbench/credentials.py b/nfvbench/credentials.py
index 530ad69..7c48879 100644
--- a/nfvbench/credentials.py
+++ b/nfvbench/credentials.py
@@ -21,32 +21,40 @@ import getpass
from keystoneauth1.identity import v2
from keystoneauth1.identity import v3
from keystoneauth1 import session
-from log import LOG
+import openstack
+from keystoneclient.exceptions import HTTPClientError
+
+from .log import LOG
class Credentials(object):
def get_session(self):
- dct = {
- 'username': self.rc_username,
- 'password': self.rc_password,
- 'auth_url': self.rc_auth_url
- }
- auth = None
-
- if self.rc_identity_api_version == 3:
- dct.update({
- 'project_name': self.rc_project_name,
- 'project_domain_name': self.rc_project_domain_name,
- 'user_domain_name': self.rc_user_domain_name
- })
- auth = v3.Password(**dct)
+
+ if self.clouds_detail:
+ connection = openstack.connect(cloud=self.clouds_detail)
+ cred_session = connection.session
else:
- dct.update({
- 'tenant_name': self.rc_tenant_name
- })
- auth = v2.Password(**dct)
- return session.Session(auth=auth, verify=self.rc_cacert)
+ dct = {
+ 'username': self.rc_username,
+ 'password': self.rc_password,
+ 'auth_url': self.rc_auth_url
+ }
+
+ if self.rc_identity_api_version == 3:
+ dct.update({
+ 'project_name': self.rc_project_name,
+ 'project_domain_name': self.rc_project_domain_name,
+ 'user_domain_name': self.rc_user_domain_name
+ })
+ auth = v3.Password(**dct)
+ else:
+ dct.update({
+ 'tenant_name': self.rc_tenant_name
+ })
+ auth = v2.Password(**dct)
+ cred_session = session.Session(auth=auth, verify=self.rc_cacert)
+ return cred_session
def __parse_openrc(self, file):
export_re = re.compile('export OS_([A-Z_]*)="?(.*)')
@@ -91,11 +99,28 @@ class Credentials(object):
elif name == "PROJECT_DOMAIN_NAME":
self.rc_project_domain_name = value
+ # /users URL returns exception (HTTP 403) if user is not admin.
+ # try first without the version in case session already has it in
+ # Return HTTP 200 if user is admin
+ def __user_is_admin(self, url):
+ is_admin = False
+ try:
+ # check if user has admin role in OpenStack project
+ filter = {'service_type': 'identity',
+ 'interface': 'public'}
+ self.get_session().get(url, endpoint_filter=filter)
+ is_admin = True
+ except HTTPClientError as exc:
+ if exc.http_status == 403:
+ LOG.warning(
+ "User is not admin, no permission to list user roles. Exception: %s", exc)
+ return is_admin
+
#
# Read a openrc file and take care of the password
# The 2 args are passed from the command line and can be None
#
- def __init__(self, openrc_file, pwd=None, no_env=False):
+ def __init__(self, openrc_file, clouds_detail, pwd=None, no_env=False):
self.rc_password = None
self.rc_username = None
self.rc_tenant_name = None
@@ -105,19 +130,22 @@ class Credentials(object):
self.rc_user_domain_name = None
self.rc_project_domain_name = None
self.rc_project_name = None
- self.rc_identity_api_version = 2
+ self.rc_identity_api_version = 3
+ self.is_admin = False
+ self.clouds_detail = clouds_detail
success = True
if openrc_file:
if isinstance(openrc_file, str):
if os.path.exists(openrc_file):
- self.__parse_openrc(open(openrc_file))
+ with open(openrc_file, encoding="utf-8") as rc_file:
+ self.__parse_openrc(rc_file)
else:
LOG.error('Error: rc file does not exist %s', openrc_file)
success = False
else:
self.__parse_openrc(openrc_file)
- elif not no_env:
+ elif not clouds_detail and not no_env:
# no openrc file passed - we assume the variables have been
# sourced by the calling shell
# just check that they are present
@@ -152,15 +180,27 @@ class Credentials(object):
# always override with CLI argument if provided
- if pwd:
- self.rc_password = pwd
- # if password not know, check from env variable
- elif self.rc_auth_url and not self.rc_password and success:
- if 'OS_PASSWORD' in os.environ and not no_env:
- self.rc_password = os.environ['OS_PASSWORD']
- else:
- # interactively ask for password
- self.rc_password = getpass.getpass(
- 'Please enter your OpenStack Password: ')
- if not self.rc_password:
- self.rc_password = ""
+ if not clouds_detail:
+ if pwd:
+ self.rc_password = pwd
+ # if password not know, check from env variable
+ elif self.rc_auth_url and not self.rc_password and success:
+ if 'OS_PASSWORD' in os.environ and not no_env:
+ self.rc_password = os.environ['OS_PASSWORD']
+ else:
+ # interactively ask for password
+ self.rc_password = getpass.getpass(
+ 'Please enter your OpenStack Password: ')
+ if not self.rc_password:
+ self.rc_password = ""
+
+
+ try:
+ # /users URL returns exception (HTTP 403) if user is not admin.
+ # try first without the version in case session already has it in
+ # Return HTTP 200 if user is admin
+ self.is_admin = self.__user_is_admin('/users') or self.__user_is_admin(
+ '/v2/users') or self.__user_is_admin('/v3/users')
+ except Exception as e:
+ LOG.warning("Error occurred during Openstack API access. "
+ "Unable to check user is admin. Exception: %s", e)
diff --git a/nfvbench/factory.py b/nfvbench/factory.py
index cad5a43..0d4b042 100644
--- a/nfvbench/factory.py
+++ b/nfvbench/factory.py
@@ -15,8 +15,8 @@
#
"""Factory for creating worker and config plugin instances."""
-import chain_workers as workers
-from config_plugin import ConfigPlugin
+from . import chain_workers as workers
+from .config_plugin import ConfigPlugin
class BasicFactory(object):
diff --git a/nfvbench/fluentd.py b/nfvbench/fluentd.py
index ad0ea34..535d640 100644
--- a/nfvbench/fluentd.py
+++ b/nfvbench/fluentd.py
@@ -114,7 +114,7 @@ class FluentLogHandler(logging.Handler):
def __get_highest_level(self):
if self.__error_counter > 0:
return logging.ERROR
- elif self.__warning_counter > 0:
+ if self.__warning_counter > 0:
return logging.WARNING
return logging.INFO
@@ -122,7 +122,7 @@ class FluentLogHandler(logging.Handler):
highest_level = self.__get_highest_level()
if highest_level == logging.INFO:
return "GOOD RUN"
- elif highest_level == logging.WARNING:
+ if highest_level == logging.WARNING:
return "RUN WITH WARNINGS"
return "RUN WITH ERRORS"
diff --git a/nfvbench/nfvbench.py b/nfvbench/nfvbench.py
index cdb99c8..891b2bb 100644
--- a/nfvbench/nfvbench.py
+++ b/nfvbench/nfvbench.py
@@ -24,23 +24,24 @@ import sys
import traceback
from attrdict import AttrDict
+from logging import FileHandler
import pbr.version
from pkg_resources import resource_string
-from __init__ import __version__
-from chain_runner import ChainRunner
-from cleanup import Cleaner
-from config import config_load
-from config import config_loads
-import credentials as credentials
-from fluentd import FluentLogHandler
-import log
-from log import LOG
-from nfvbenchd import WebSocketIoServer
-from specs import ChainType
-from specs import Specs
-from summarizer import NFVBenchSummarizer
-import utils
+from .__init__ import __version__
+from .chain_runner import ChainRunner
+from .cleanup import Cleaner
+from .config import config_load
+from .config import config_loads
+from . import credentials
+from .fluentd import FluentLogHandler
+from . import log
+from .log import LOG
+from .nfvbenchd import WebServer
+from .specs import ChainType
+from .specs import Specs
+from .summarizer import NFVBenchSummarizer
+from . import utils
fluent_logger = None
@@ -59,8 +60,8 @@ class NFVBench(object):
self.config_plugin = config_plugin
self.factory = factory
self.notifier = notifier
- self.cred = credentials.Credentials(config.openrc_file, None, False) \
- if config.openrc_file else None
+ self.cred = credentials.Credentials(config.openrc_file, config.clouds_detail, None, False) \
+ if config.openrc_file or config.clouds_detail else None
self.chain_runner = None
self.specs = Specs()
self.specs.set_openstack_spec(openstack_spec)
@@ -70,7 +71,13 @@ class NFVBench(object):
def set_notifier(self, notifier):
self.notifier = notifier
- def run(self, opts, args):
+ def run(self, opts, args, dry_run=False):
+ """This run() method is called for every NFVbench benchmark request.
+
+ In CLI mode, this method is called only once per invocation.
+ In REST server mode, this is called once per REST POST request
+ On dry_run, show the running config in json format then exit
+ """
status = NFVBench.STATUS_OK
result = None
message = ''
@@ -82,6 +89,18 @@ class NFVBench(object):
try:
# recalc the running config based on the base config and options for this run
self._update_config(opts)
+
+ if dry_run:
+ print((json.dumps(self.config, sort_keys=True, indent=4)))
+ sys.exit(0)
+
+ # check that an empty openrc file (no OpenStack) is only allowed
+ # with EXT chain
+ if (not self.config.openrc_file and not self.config.clouds_detail) and \
+ self.config.service_chain != ChainType.EXT:
+ raise Exception("openrc_file or clouds_detail in the configuration is required"
+ " for PVP/PVVP chains")
+
self.specs.set_run_spec(self.config_plugin.get_run_spec(self.config,
self.specs.openstack))
self.chain_runner = ChainRunner(self.config,
@@ -153,7 +172,9 @@ class NFVBench(object):
self.config.service_chain,
self.config.service_chain_count,
self.config.flow_count,
- self.config.frame_sizes)
+ self.config.frame_sizes,
+ self.config.user_id,
+ self.config.group_id)
def _update_config(self, opts):
"""Recalculate the running config based on the base config and opts.
@@ -161,17 +182,56 @@ class NFVBench(object):
Sanity check on the config is done here as well.
"""
self.config = AttrDict(dict(self.base_config))
+ # Update log file handler if needed after a config update (REST mode)
+ if 'log_file' in opts:
+ if opts['log_file']:
+ (path, _filename) = os.path.split(opts['log_file'])
+ if not os.path.exists(path):
+ LOG.warning(
+ 'Path %s does not exist. Please verify root path is shared with host. Path '
+ 'will be created.', path)
+ os.makedirs(path)
+ LOG.info('%s is created.', path)
+ if not any(isinstance(h, FileHandler) for h in log.getLogger().handlers):
+ log.add_file_logger(opts['log_file'])
+ else:
+ for h in log.getLogger().handlers:
+ if isinstance(h, FileHandler) and h.baseFilename != opts['log_file']:
+ # clean log file handler
+ log.getLogger().removeHandler(h)
+ log.add_file_logger(opts['log_file'])
+
self.config.update(opts)
config = self.config
config.service_chain = config.service_chain.upper()
config.service_chain_count = int(config.service_chain_count)
if config.l2_loopback:
- # force the number of chains to be 1 in case of l2 loopback
- config.service_chain_count = 1
+ # force the number of chains to be 1 in case of untagged l2 loopback
+ # (on the other hand, multiple L2 vlan tagged service chains are allowed)
+ if not config.vlan_tagging:
+ config.service_chain_count = 1
config.service_chain = ChainType.EXT
config.no_arp = True
LOG.info('Running L2 loopback: using EXT chain/no ARP')
+
+ # allow oversized vlan lists, just clip them
+ try:
+ vlans = [list(v) for v in config.vlans]
+ for v in vlans:
+ del v[config.service_chain_count:]
+ config.vlans = vlans
+ except Exception:
+ pass
+
+ # traffic profile override options
+ if 'frame_sizes' in opts:
+ unidir = False
+ if 'unidir' in opts:
+ unidir = opts['unidir']
+ override_custom_traffic(config, opts['frame_sizes'], unidir)
+ LOG.info("Frame size has been set to %s for current configuration", opts['frame_sizes'])
+
config.flow_count = utils.parse_flow_count(config.flow_count)
required_flow_count = config.service_chain_count * 2
if config.flow_count < required_flow_count:
@@ -183,6 +243,13 @@ class NFVBench(object):
if config.flow_count % 2:
config.flow_count += 1
+ # Possibly adjust the cache size
+ if config.cache_size < 0:
+ config.cache_size = config.flow_count
+
+ # The size must be capped to 10000 (where does this limit come from?)
+ config.cache_size = min(config.cache_size, 10000)
+
config.duration_sec = float(config.duration_sec)
config.interval_sec = float(config.interval_sec)
config.pause_sec = float(config.pause_sec)
@@ -192,6 +259,8 @@ class NFVBench(object):
if config.openrc_file:
config.openrc_file = os.path.expanduser(config.openrc_file)
+ if config.flavor.vcpus < 2:
+ raise Exception("Flavor vcpus must be >= 2")
config.ndr_run = (not config.no_traffic and
'ndr' in config.rate.strip().lower().split('_'))
@@ -213,16 +282,41 @@ class NFVBench(object):
raise Exception('Please provide existing path for storing results in JSON file. '
'Path used: {path}'.format(path=config.std_json_path))
- # VxLAN sanity checks
- if config.vxlan:
+ # Check that multiqueue is between 1 and 8 (8 is the max allowed by libvirt/qemu)
+ if config.vif_multiqueue_size < 1 or config.vif_multiqueue_size > 8:
+ raise Exception('vif_multiqueue_size (%d) must be in [1..8]' %
+ config.vif_multiqueue_size)
+
+ # VxLAN and MPLS sanity checks
+ if config.vxlan or config.mpls:
if config.vlan_tagging:
config.vlan_tagging = False
- LOG.info('VxLAN: vlan_tagging forced to False '
+ config.no_latency_streams = True
+ config.no_latency_stats = True
+ config.no_flow_stats = True
+ LOG.info('VxLAN or MPLS: vlan_tagging forced to False '
'(inner VLAN tagging must be disabled)')
self.config_plugin.validate_config(config, self.specs.openstack)
+def bool_arg(x):
+ """Argument type to be used in parser.add_argument()
+ When a boolean like value is expected to be given
+ """
+ return (str(x).lower() != 'false') \
+ and (str(x).lower() != 'no') \
+ and (str(x).lower() != '0')
+
+
+def int_arg(x):
+ """Argument type to be used in parser.add_argument()
+ When an integer type value is expected to be given
+ (returns 0 if argument is invalid, hexa accepted)
+ """
+ return int(x, 0)
+
+
def _parse_opts_from_cli():
parser = argparse.ArgumentParser()
@@ -239,10 +333,8 @@ def _parse_opts_from_cli():
parser.add_argument('--server', dest='server',
default=None,
- action='store',
- metavar='<http_root_pathname>',
- help='Run nfvbench in server mode and pass'
- ' the HTTP root folder full pathname')
+ action='store_true',
+ help='Run nfvbench in server mode')
parser.add_argument('--host', dest='host',
action='store',
@@ -309,6 +401,17 @@ def _parse_opts_from_cli():
action='store',
help='Traffic generator profile to use')
+ parser.add_argument('-l3', '--l3-router', dest='l3_router',
+ default=None,
+ action='store_true',
+ help='Use L3 neutron routers to handle traffic')
+
+ parser.add_argument('-garp', '--gratuitous-arp', dest='periodic_gratuitous_arp',
+ default=None,
+ action='store_true',
+ help='Use gratuitous ARP to maintain session between TG '
+ 'and L3 routers to handle traffic')
+
parser.add_argument('-0', '--no-traffic', dest='no_traffic',
default=None,
action='store_true',
@@ -320,6 +423,12 @@ def _parse_opts_from_cli():
help='Do not use ARP to find MAC addresses, '
'instead use values in config file')
+ parser.add_argument('--loop-vm-arp', dest='loop_vm_arp',
+ default=None,
+ action='store_true',
+ help='Use ARP to find MAC addresses '
+ 'instead of using values from TRex ports (VPP forwarder only)')
+
parser.add_argument('--no-vswitch-access', dest='no_vswitch_access',
default=None,
action='store_true',
@@ -330,6 +439,11 @@ def _parse_opts_from_cli():
action='store_true',
help='Enable VxLan encapsulation')
+ parser.add_argument('--mpls', dest='mpls',
+ default=None,
+ action='store_true',
+ help='Enable MPLS encapsulation')
+
parser.add_argument('--no-cleanup', dest='no_cleanup',
default=None,
action='store_true',
@@ -345,6 +459,11 @@ def _parse_opts_from_cli():
action='store_true',
help='Cleanup NFVbench resources (do not prompt)')
+ parser.add_argument('--restart', dest='restart',
+ default=None,
+ action='store_true',
+ help='Restart TRex server')
+
parser.add_argument('--json', dest='json',
action='store',
help='store results in json format file',
@@ -362,10 +481,15 @@ def _parse_opts_from_cli():
action='store_true',
help='print the default config in yaml format (unedited)')
+ parser.add_argument('--show-pre-config', dest='show_pre_config',
+ default=None,
+ action='store_true',
+ help='print the config in json format (cfg file applied)')
+
parser.add_argument('--show-config', dest='show_config',
default=None,
action='store_true',
- help='print the running config in json format')
+ help='print the running config in json format (final)')
parser.add_argument('-ss', '--show-summary', dest='summary',
action='store',
@@ -403,8 +527,109 @@ def _parse_opts_from_cli():
parser.add_argument('--l2-loopback', '--l2loopback', dest='l2_loopback',
action='store',
- metavar='<vlan>',
- help='Port to port or port to switch to port L2 loopback with VLAN id')
+ metavar='<vlan(s)|no-tag|true|false>',
+ help='Port to port or port to switch to port L2 loopback '
+ 'tagged with given VLAN id(s) or not (given \'no-tag\') '
+ '\'true\': use current vlans; \'false\': disable this mode.')
+
+ parser.add_argument('--i40e-mixed', dest='i40e_mixed',
+ action='store',
+ default=None,
+ metavar='<ignore,check,unbind>',
+ help='TRex behavior when dealing with a i40e network card driver'
+ ' [ https://trex-tgn.cisco.com/youtrack/issue/trex-528 ]')
+
+ parser.add_argument('--user-info', dest='user_info',
+ action='append',
+ metavar='<data>',
+ help='Custom data to be included as is '
+ 'in the json report config branch - '
+ ' example, pay attention! no space: '
+ '--user-info=\'{"status":"explore","description":'
+ '{"target":"lab","ok":true,"version":2020}}\' - '
+ 'this option may be repeated; given data will be merged.')
+
+ parser.add_argument('--vlan-tagging', dest='vlan_tagging',
+ type=bool_arg,
+ metavar='<boolean>',
+ action='store',
+ default=None,
+ help='Override the NFVbench \'vlan_tagging\' parameter')
+
+ parser.add_argument('--intf-speed', dest='intf_speed',
+ metavar='<speed>',
+ action='store',
+ default=None,
+ help='Override the NFVbench \'intf_speed\' '
+ 'parameter (e.g. 10Gbps, auto, 16.72Gbps)')
+
+ parser.add_argument('--cores', dest='cores',
+ type=int_arg,
+ metavar='<number>',
+ action='store',
+ default=None,
+ help='Override the T-Rex \'cores\' parameter')
+
+ parser.add_argument('--cache-size', dest='cache_size',
+ type=int_arg,
+ metavar='<size>',
+ action='store',
+ default=None,
+ help='Specify the FE cache size (default: 0, flow-count if < 0)')
+
+ parser.add_argument('--service-mode', dest='service_mode',
+ action='store_true',
+ default=None,
+ help='Enable T-Rex service mode (for debugging purpose)')
+
+ parser.add_argument('--no-e2e-check', dest='no_e2e_check',
+ action='store_true',
+ default=None,
+ help='Skip "end to end" connectivity check (on test purpose)')
+
+ parser.add_argument('--no-flow-stats', dest='no_flow_stats',
+ action='store_true',
+ default=None,
+ help='Disable additional flow stats (on high load traffic)')
+
+ parser.add_argument('--no-latency-stats', dest='no_latency_stats',
+ action='store_true',
+ default=None,
+ help='Disable flow stats for latency traffic')
+
+ parser.add_argument('--no-latency-streams', dest='no_latency_streams',
+ action='store_true',
+ default=None,
+ help='Disable latency measurements (no streams)')
+
+ parser.add_argument('--user-id', dest='user_id',
+ type=int_arg,
+ metavar='<uid>',
+ action='store',
+ default=None,
+ help='Change json/log files ownership with this user (int)')
+
+ parser.add_argument('--group-id', dest='group_id',
+ type=int_arg,
+ metavar='<gid>',
+ action='store',
+ default=None,
+ help='Change json/log files ownership with this group (int)')
+
+ parser.add_argument('--show-trex-log', dest='show_trex_log',
+ default=None,
+ action='store_true',
+ help='Show the current TRex local server log file contents'
+ ' => diagnostic/help in case of configuration problems')
+
+ parser.add_argument('--debug-mask', dest='debug_mask',
+ type=int_arg,
+ metavar='<mask>',
+ action='store',
+ default=None,
+ help='General purpose register (debugging flags), '
+ 'the hexadecimal notation (0x...) is accepted.'
+ 'Designed for development needs (default: 0).')
opts, unknown_opts = parser.parse_known_args()
return opts, unknown_opts
@@ -470,13 +695,20 @@ def main():
log.setup()
# load default config file
config, default_cfg = load_default_config()
+ # possibly override the default user_id & group_id values
+ if 'USER_ID' in os.environ:
+ config.user_id = int(os.environ['USER_ID'])
+ if 'GROUP_ID' in os.environ:
+ config.group_id = int(os.environ['GROUP_ID'])
+
# create factory for platform specific classes
try:
factory_module = importlib.import_module(config['factory_module'])
factory = getattr(factory_module, config['factory_class'])()
except AttributeError:
raise Exception("Requested factory module '{m}' or class '{c}' was not found."
- .format(m=config['factory_module'], c=config['factory_class']))
+ .format(m=config['factory_module'],
+ c=config['factory_class'])) from AttributeError
# create config plugin for this platform
config_plugin = factory.get_config_plugin_class()(config)
config = config_plugin.get_config()
@@ -485,26 +717,40 @@ def main():
log.set_level(debug=opts.debug)
if opts.version:
- print pbr.version.VersionInfo('nfvbench').version_string_with_vcs()
+ print((pbr.version.VersionInfo('nfvbench').version_string_with_vcs()))
sys.exit(0)
if opts.summary:
- with open(opts.summary) as json_data:
+ with open(opts.summary, encoding="utf-8") as json_data:
result = json.load(json_data)
if opts.user_label:
result['config']['user_label'] = opts.user_label
- print NFVBenchSummarizer(result, fluent_logger)
+ print((NFVBenchSummarizer(result, fluent_logger)))
sys.exit(0)
# show default config in text/yaml format
if opts.show_default_config:
- print default_cfg
+ print((default_cfg.decode("utf-8")))
sys.exit(0)
+ # dump the contents of the trex log file
+ if opts.show_trex_log:
+ try:
+ with open('/tmp/trex.log', encoding="utf-8") as trex_log_file:
+ print(trex_log_file.read(), end="")
+ except FileNotFoundError:
+ print("No TRex log file found!")
+ sys.exit(0)
+
+ # mask info logging in case of further config dump
+ if opts.show_config or opts.show_pre_config:
+ LOG.setLevel(log.logging.WARNING)
+
config.name = ''
if opts.config:
# do not check extra_specs in flavor as it can contain any key/value pairs
- whitelist_keys = ['extra_specs']
+ # the same principle applies also to the optional user_info open property
+ whitelist_keys = ['extra_specs', 'user_info']
# override default config options with start config at path parsed from CLI
# check if it is an inline yaml/json config or a file name
if os.path.isfile(opts.config):
@@ -515,6 +761,11 @@ def main():
LOG.info('Loading configuration string: %s', opts.config)
config = config_loads(opts.config, config, whitelist_keys)
+ # show current config in json format (before CLI overriding)
+ if opts.show_pre_config:
+ print((json.dumps(config, sort_keys=True, indent=4)))
+ sys.exit(0)
+
# setup the fluent logger as soon as possible right after the config plugin is called,
# if there is any logging or result tag is set then initialize the fluent logger
for fluentd in config.fluentd:
@@ -526,40 +777,124 @@ def main():
# traffic profile override options
override_custom_traffic(config, opts.frame_sizes, opts.unidir)
- # copy over cli options that are used in config
+ # Copy over some of the cli options that are used in config.
+ # This explicit copy is sometimes necessary
+ # because some early evaluation depends on them
+ # and cannot wait for _update_config() coming further.
+ # It is good practice then to set them to None (<=> done)
+ # and even required if a specific conversion is performed here
+ # that would be corrupted by a default update (simple copy).
+ # On the other hand, some excessive assignments have been removed
+ # from here, since the _update_config() procedure does them well.
+
config.generator_profile = opts.generator_profile
- if opts.sriov:
+ if opts.sriov is not None:
config.sriov = True
- if opts.log_file:
+ opts.sriov = None
+ if opts.log_file is not None:
config.log_file = opts.log_file
- if opts.service_chain:
+ opts.log_file = None
+ if opts.user_id is not None:
+ config.user_id = opts.user_id
+ opts.user_id = None
+ if opts.group_id is not None:
+ config.group_id = opts.group_id
+ opts.group_id = None
+ if opts.service_chain is not None:
config.service_chain = opts.service_chain
- if opts.service_chain_count:
- config.service_chain_count = opts.service_chain_count
- if opts.no_vswitch_access:
- config.no_vswitch_access = opts.no_vswitch_access
- if opts.hypervisor:
+ opts.service_chain = None
+ if opts.hypervisor is not None:
# can be any of 'comp1', 'nova:', 'nova:comp1'
config.compute_nodes = opts.hypervisor
- if opts.vxlan:
- config.vxlan = True
+ opts.hypervisor = None
+ if opts.debug_mask is not None:
+ config.debug_mask = opts.debug_mask
+ opts.debug_mask = None
+
+ # convert 'user_info' opt from json string to dictionnary
+ # and merge the result with the current config dictionnary
+ if opts.user_info is not None:
+ for user_info_json in opts.user_info:
+ user_info_dict = json.loads(user_info_json)
+ if config.user_info:
+ config.user_info = config.user_info + user_info_dict
+ else:
+ config.user_info = user_info_dict
+ opts.user_info = None
# port to port loopback (direct or through switch)
- if opts.l2_loopback:
- config.l2_loopback = True
- if config.service_chain != ChainType.EXT:
- LOG.info('Changing service chain type to EXT')
- config.service_chain = ChainType.EXT
- if not config.no_arp:
- LOG.info('Disabling ARP')
- config.no_arp = True
- config.vlans = [int(opts.l2_loopback), int(opts.l2_loopback)]
- LOG.info('Running L2 loopback: using EXT chain/no ARP')
-
- if opts.use_sriov_middle_net:
- if (not config.sriov) or (config.service_chain != ChainType.PVVP):
- raise Exception("--use-sriov-middle-net is only valid for PVVP with SRIOV")
- config.use_sriov_middle_net = True
+ # we accept the following syntaxes for the CLI argument
+ # 'false' : mode not enabled
+ # 'true' : mode enabled with currently defined vlan IDs
+ # 'no-tag' : mode enabled with no vlan tagging
+ # <vlan IDs>: mode enabled using the given (pair of) vlan ID lists
+ # - If present, a '_' char will separate left an right ports lists
+ # e.g. 'a_x' => vlans: [[a],[x]]
+ # 'a,b,c_x,y,z' => [[a,b,c],[x,y,z]]
+ # - Otherwise the given vlan ID list applies to both sides
+ # e.g. 'a' => vlans: [[a],[a]]
+ # 'a,b' => [[a,b],[a,b]]
+ # - Vlan lists size needs to be at least the actual SCC value
+ # - Unless overriden in CLI opts, config.service_chain_count
+ # is adjusted to the size of the VLAN ID lists given here.
+
+ if opts.l2_loopback is not None:
+ arg_pair = opts.l2_loopback.lower().split('_')
+ if arg_pair[0] == 'false':
+ config.l2_loopback = False
+ else:
+ config.l2_loopback = True
+ if config.service_chain != ChainType.EXT:
+ LOG.info('Changing service chain type to EXT')
+ config.service_chain = ChainType.EXT
+ if not config.no_arp:
+ LOG.info('Disabling ARP')
+ config.no_arp = True
+ if arg_pair[0] == 'true':
+ pass
+ else:
+ # here explicit (not)tagging is not CLI overridable
+ opts.vlan_tagging = None
+ if arg_pair[0] == 'no-tag':
+ config.vlan_tagging = False
+ else:
+ config.vlan_tagging = True
+ if len(arg_pair) == 1 or not arg_pair[1]:
+ arg_pair = [arg_pair[0], arg_pair[0]]
+ vlans = [[], []]
+
+ def append_vlan(port, vlan_id):
+ # a vlan tag value must be in [0..4095]
+ if vlan_id not in range(0, 4096):
+ raise ValueError
+ vlans[port].append(vlan_id)
+ try:
+ for port in [0, 1]:
+ vlan_ids = arg_pair[port].split(',')
+ for vlan_id in vlan_ids:
+ append_vlan(port, int(vlan_id))
+ if len(vlans[0]) != len(vlans[1]):
+ raise ValueError
+ except ValueError:
+ # at least one invalid tag => no tagging
+ config.vlan_tagging = False
+ if config.vlan_tagging:
+ config.vlans = vlans
+ # force service chain count if not CLI overriden
+ if opts.service_chain_count is None:
+ config.service_chain_count = len(vlans[0])
+ opts.l2_loopback = None
+
+ if config.i40e_mixed is None:
+ config.i40e_mixed = 'ignore'
+ if config.use_sriov_middle_net is None:
+ config.use_sriov_middle_net = False
+ if opts.use_sriov_middle_net is not None:
+ config.use_sriov_middle_net = opts.use_sriov_middle_net
+ opts.use_sriov_middle_net = None
+ if (config.use_sriov_middle_net and (
+ (not config.sriov) or (config.service_chain != ChainType.PVVP))):
+ raise Exception("--use-sriov-middle-net is only valid for PVVP with SRIOV")
if config.sriov and config.service_chain != ChainType.EXT:
# if sriov is requested (does not apply to ext chains)
@@ -569,19 +904,6 @@ def main():
if config.service_chain == ChainType.PVVP and config.use_sriov_middle_net:
check_physnet("middle", config.internal_networks.middle)
- # show running config in json format
- if opts.show_config:
- print json.dumps(config, sort_keys=True, indent=4)
- sys.exit(0)
-
- # check that an empty openrc file (no OpenStack) is only allowed
- # with EXT chain
- if not config.openrc_file:
- if config.service_chain == ChainType.EXT:
- LOG.info('EXT chain with OpenStack mode disabled')
- else:
- raise Exception("openrc_file is empty in the configuration and is required")
-
# update the config in the config plugin as it might have changed
# in a copy of the dict (config plugin still holds the original dict)
config_plugin.set_config(config)
@@ -592,6 +914,13 @@ def main():
# add file log if requested
if config.log_file:
log.add_file_logger(config.log_file)
+ # possibly change file ownership
+ uid = config.user_id
+ gid = config.group_id
+ if gid is None:
+ gid = uid
+ if uid is not None:
+ os.chown(config.log_file, uid, gid)
openstack_spec = config_plugin.get_openstack_spec() if config.openrc_file \
else None
@@ -599,19 +928,16 @@ def main():
nfvbench_instance = NFVBench(config, openstack_spec, config_plugin, factory)
if opts.server:
- if os.path.isdir(opts.server):
- server = WebSocketIoServer(opts.server, nfvbench_instance, fluent_logger)
- nfvbench_instance.set_notifier(server)
- try:
- port = int(opts.port)
- except ValueError:
- server.run(host=opts.host)
- else:
- server.run(host=opts.host, port=port)
+ server = WebServer(nfvbench_instance, fluent_logger)
+ try:
+ port = int(opts.port)
+ except ValueError:
+ server.run(host=opts.host)
else:
- print 'Invalid HTTP root directory: ' + opts.server
- sys.exit(1)
+ server.run(host=opts.host, port=port)
+ # server.run() should never return
else:
+ dry_run = opts.show_config
with utils.RunLock():
run_summary_required = True
if unknown_opts:
@@ -620,10 +946,10 @@ def main():
raise Exception(err_msg)
# remove unfilled values
- opts = {k: v for k, v in vars(opts).iteritems() if v is not None}
+ opts = {k: v for k, v in list(vars(opts).items()) if v is not None}
# get CLI args
params = ' '.join(str(e) for e in sys.argv[1:])
- result = nfvbench_instance.run(opts, params)
+ result = nfvbench_instance.run(opts, params, dry_run=dry_run)
if 'error_message' in result:
raise Exception(result['error_message'])
@@ -636,7 +962,7 @@ def main():
'status': NFVBench.STATUS_ERROR,
'error_message': traceback.format_exc()
})
- print str(exc)
+ print((str(exc)))
finally:
if fluent_logger:
# only send a summary record if there was an actual nfvbench run or
diff --git a/nfvbench/nfvbenchd.py b/nfvbench/nfvbenchd.py
index fa781af..07f1eea 100644
--- a/nfvbench/nfvbenchd.py
+++ b/nfvbench/nfvbenchd.py
@@ -15,38 +15,31 @@
#
import json
-import Queue
+import queue
+from threading import Thread
import uuid
from flask import Flask
from flask import jsonify
-from flask import render_template
from flask import request
-from flask_socketio import emit
-from flask_socketio import SocketIO
-from summarizer import NFVBenchSummarizer
+from .summarizer import NFVBenchSummarizer
-from log import LOG
-from utils import byteify
-from utils import RunLock
+from .log import LOG
+from .utils import RunLock
-# this global cannot reside in Ctx because of the @app and @socketio decorators
-app = None
-socketio = None
+from .__init__ import __version__
STATUS_OK = 'OK'
STATUS_ERROR = 'ERROR'
STATUS_PENDING = 'PENDING'
STATUS_NOT_FOUND = 'NOT_FOUND'
-
def result_json(status, message, request_id=None):
body = {
'status': status,
'error_message': message
}
-
if request_id is not None:
body['request_id'] = request_id
@@ -54,7 +47,7 @@ def result_json(status, message, request_id=None):
def load_json(data):
- return json.loads(json.dumps(data), object_hook=byteify)
+ return json.loads(json.dumps(data))
def get_uuid():
@@ -63,18 +56,16 @@ def get_uuid():
class Ctx(object):
MAXLEN = 5
- run_queue = Queue.Queue()
+ run_queue = queue.Queue()
busy = False
result = None
- request_from_socketio = False
results = {}
ids = []
current_id = None
@staticmethod
- def enqueue(config, request_id, from_socketio=False):
+ def enqueue(config, request_id):
Ctx.busy = True
- Ctx.request_from_socketio = from_socketio
config['request_id'] = request_id
Ctx.run_queue.put(config)
@@ -109,16 +100,15 @@ class Ctx(object):
res = Ctx.results[request_id]
except KeyError:
return None
-
+ # pylint: disable=unsubscriptable-object
if Ctx.result and request_id == Ctx.result['request_id']:
Ctx.result = None
-
- return res
- else:
- res = Ctx.result
- if res:
- Ctx.result = None
return res
+ # pylint: enable=unsubscriptable-object
+ res = Ctx.result
+ if res:
+ Ctx.result = None
+ return res
@staticmethod
def is_busy():
@@ -129,40 +119,18 @@ class Ctx(object):
return Ctx.current_id
-def setup_flask(root_path):
- global socketio
- global app
+def setup_flask():
app = Flask(__name__)
- app.root_path = root_path
- socketio = SocketIO(app, async_mode='threading')
busy_json = result_json(STATUS_ERROR, 'there is already an NFVbench request running')
not_busy_json = result_json(STATUS_ERROR, 'no pending NFVbench run')
not_found_msg = 'results not found'
pending_msg = 'NFVbench run still pending'
- # --------- socketio requests ------------
-
- @socketio.on('start_run')
- def _socketio_start_run(config):
- if not Ctx.is_busy():
- Ctx.enqueue(config, get_uuid(), from_socketio=True)
- else:
- emit('error', {'reason': 'there is already an NFVbench request running'})
-
- @socketio.on('echo')
- def _socketio_echo(config):
- emit('echo', config)
-
# --------- HTTP requests ------------
- @app.route('/')
- def _index():
- return render_template('index.html')
-
- @app.route('/echo', methods=['GET'])
- def _echo():
- config = request.json
- return jsonify(config)
+ @app.route('/version', methods=['GET'])
+ def _version():
+ return __version__
@app.route('/start_run', methods=['POST'])
def _start_run():
@@ -189,35 +157,34 @@ def setup_flask(root_path):
return jsonify(res)
# result for given request_id not found
return jsonify(result_json(STATUS_NOT_FOUND, not_found_msg, request_id))
- else:
- if Ctx.is_busy():
- # task still pending, return with request_id
- return jsonify(result_json(STATUS_PENDING,
- pending_msg,
- Ctx.get_current_request_id()))
-
- res = Ctx.get_result()
- if res:
- return jsonify(res)
- return jsonify(not_busy_json)
+ if Ctx.is_busy():
+ # task still pending, return with request_id
+ return jsonify(result_json(STATUS_PENDING,
+ pending_msg,
+ Ctx.get_current_request_id()))
+ res = Ctx.get_result()
+ if res:
+ return jsonify(res)
+ return jsonify(not_busy_json)
-class WebSocketIoServer(object):
- """This class takes care of the web socketio server, accepts websocket events, and sends back
- notifications using websocket events (send_ methods). Caller should simply create an instance
+ return app
+
+class WebServer(object):
+ """This class takes care of the web server. Caller should simply create an instance
of this class and pass a runner object then invoke the run method
"""
- def __init__(self, http_root, runner, fluent_logger):
+ def __init__(self, runner, fluent_logger):
self.nfvbench_runner = runner
- setup_flask(http_root)
+ self.app = setup_flask()
self.fluent_logger = fluent_logger
- def run(self, host='127.0.0.1', port=7556):
+ def run(self, host, port):
- # socketio.run will not return so we need to run it in a background thread so that
+ # app.run will not return so we need to run it in a background thread so that
# the calling thread (main thread) can keep doing work
- socketio.start_background_task(target=socketio.run, app=app, host=host, port=port)
+ Thread(target=self.app.run, args=(host, port)).start()
# wait for run requests
# the runner must be executed from the main thread (Trex client library requirement)
@@ -229,7 +196,7 @@ class WebSocketIoServer(object):
# print config
try:
# remove unfilled values as we do not want them to override default values with None
- config = {k: v for k, v in config.items() if v is not None}
+ config = {k: v for k, v in list(config.items()) if v is not None}
with RunLock():
if self.fluent_logger:
self.fluent_logger.start_new_run()
@@ -238,14 +205,13 @@ class WebSocketIoServer(object):
results = result_json(STATUS_ERROR, str(exc))
LOG.exception('NFVbench runner exception:')
- if Ctx.request_from_socketio:
- socketio.emit('run_end', results)
- else:
- # this might overwrite a previously unfetched result
- Ctx.set_result(results)
+ # this might overwrite a previously unfetched result
+ Ctx.set_result(results)
try:
summary = NFVBenchSummarizer(results['result'], self.fluent_logger)
LOG.info(str(summary))
+ if 'json' in config and 'result' in results and results['status']:
+ self.nfvbench_runner.save(results['result'])
except KeyError:
# in case of error, 'result' might be missing
if 'error_message' in results:
@@ -255,13 +221,3 @@ class WebSocketIoServer(object):
Ctx.release()
if self.fluent_logger:
self.fluent_logger.send_run_summary(True)
-
- def send_interval_stats(self, time_ms, tx_pps, rx_pps, drop_pct):
- stats = {'time_ms': time_ms, 'tx_pps': tx_pps, 'rx_pps': rx_pps, 'drop_pct': drop_pct}
- socketio.emit('run_interval_stats', stats)
-
- def send_ndr_found(self, ndr_pps):
- socketio.emit('ndr_found', {'rate_pps': ndr_pps})
-
- def send_pdr_found(self, pdr_pps):
- socketio.emit('pdr_found', {'rate_pps': pdr_pps})
diff --git a/nfvbench/nfvbenchvm/nfvbenchvm.conf b/nfvbench/nfvbenchvm/nfvbenchvm.conf
index 3bc6ace..8f5e7e9 100644
--- a/nfvbench/nfvbenchvm/nfvbenchvm.conf
+++ b/nfvbench/nfvbenchvm/nfvbenchvm.conf
@@ -9,3 +9,8 @@ TG_NET1={tg_net1}
TG_NET2={tg_net2}
TG_GATEWAY1_IP={tg_gateway1_ip}
TG_GATEWAY2_IP={tg_gateway2_ip}
+VIF_MQ_SIZE={vif_mq_size}
+NUM_MBUFS={num_mbufs}
+INTF_MGMT_CIDR={intf_mgmt_cidr}
+INTF_MGMT_IP_GW={intf_mgmt_ip_gw}
+INTF_MAC_MGMT={intf_mac_mgmt} \ No newline at end of file
diff --git a/nfvbench/packet_stats.py b/nfvbench/packet_stats.py
index 4b9eac5..d3ec78a 100644
--- a/nfvbench/packet_stats.py
+++ b/nfvbench/packet_stats.py
@@ -21,7 +21,8 @@ PacketPathStatsManager manages all packet path stats for all chains.
import copy
-from traffic_gen.traffic_base import Latency
+from hdrh.histogram import HdrHistogram
+from .traffic_gen.traffic_base import Latency
class InterfaceStats(object):
"""A class to hold the RX and TX counters for a virtual or physical interface.
@@ -141,7 +142,7 @@ class PacketPathStats(object):
chain.
"""
- def __init__(self, if_stats, aggregate=False):
+ def __init__(self, config, if_stats, aggregate=False):
"""Create a packet path stats intance with the list of associated if stats.
if_stats: a list of interface stats that compose this packet path stats
@@ -150,6 +151,7 @@ class PacketPathStats(object):
Aggregate packet path stats are the only one that should show counters for shared
interface stats
"""
+ self.config = config
self.if_stats = if_stats
# latency for packets sent from port 0 and 1
self.latencies = [Latency(), Latency()]
@@ -170,7 +172,7 @@ class PacketPathStats(object):
ifstats.add_if_stats(pps.if_stats[index])
@staticmethod
- def get_agg_packet_path_stats(pps_list):
+ def get_agg_packet_path_stats(config, pps_list):
"""Get the aggregated packet path stats from a list of packet path stats.
Interface counters are added, latency stats are updated.
@@ -179,7 +181,7 @@ class PacketPathStats(object):
for pps in pps_list:
if agg_pps is None:
# Get a clone of the first in the list
- agg_pps = PacketPathStats(pps.get_cloned_if_stats(), aggregate=True)
+ agg_pps = PacketPathStats(config, pps.get_cloned_if_stats(), aggregate=True)
else:
agg_pps.add_packet_path_stats(pps)
# aggregate all latencies
@@ -237,6 +239,21 @@ class PacketPathStats(object):
results = {'lat_min_usec': latency.min_usec,
'lat_max_usec': latency.max_usec,
'lat_avg_usec': latency.avg_usec}
+ if latency.hdrh_available():
+ results['hdrh'] = latency.hdrh
+ decoded_histogram = HdrHistogram.decode(latency.hdrh)
+ results['lat_percentile'] = {}
+ # override min max and avg from hdrh (only if histogram is valid)
+ if decoded_histogram.get_total_count() != 0:
+ results['lat_min_usec'] = decoded_histogram.get_min_value()
+ results['lat_max_usec'] = decoded_histogram.get_max_value()
+ results['lat_avg_usec'] = decoded_histogram.get_mean_value()
+ for percentile in self.config.lat_percentiles:
+ results['lat_percentile'][percentile] = decoded_histogram.\
+ get_value_at_percentile(percentile)
+ else:
+ for percentile in self.config.lat_percentiles:
+ results['lat_percentile'][percentile] = 'n/a'
else:
results = {}
results['packets'] = counters
@@ -249,12 +266,13 @@ class PacketPathStatsManager(object):
Each run will generate packet path stats for 1 or more chains.
"""
- def __init__(self, pps_list):
+ def __init__(self, config, pps_list):
"""Create a packet path stats intance with the list of associated if stats.
pps_list: a list of packet path stats indexed by the chain id.
All packet path stats must have the same length.
"""
+ self.config = config
self.pps_list = pps_list
def insert_pps_list(self, chain_index, if_stats):
@@ -286,11 +304,11 @@ class PacketPathStatsManager(object):
chains = {}
# insert the aggregated row if applicable
if len(self.pps_list) > 1:
- agg_pps = PacketPathStats.get_agg_packet_path_stats(self.pps_list)
+ agg_pps = PacketPathStats.get_agg_packet_path_stats(self.config, self.pps_list)
chains['total'] = agg_pps.get_stats(reverse)
for index, pps in enumerate(self.pps_list):
- chains[index] = pps.get_stats(reverse)
+ chains[str(index)] = pps.get_stats(reverse)
return {'interfaces': self._get_if_agg_name(reverse),
'chains': chains}
@@ -305,11 +323,11 @@ class PacketPathStatsManager(object):
'Forward': {
'interfaces': ['Port0', 'vhost0', 'Port1'],
'chains': {
- 0: {'packets': [2000054, 1999996, 1999996],
+ '0': {'packets': [2000054, 1999996, 1999996],
'min_usec': 10,
'max_usec': 187,
'avg_usec': 45},
- 1: {...},
+ '1': {...},
'total': {...}
}
},
diff --git a/nfvbench/specs.py b/nfvbench/specs.py
index 75fe703..ec5e24e 100644
--- a/nfvbench/specs.py
+++ b/nfvbench/specs.py
@@ -17,11 +17,13 @@
class Encaps(object):
VLAN = "VLAN"
VxLAN = "VxLAN"
+ MPLS = "MPLS"
NO_ENCAPS = "NONE"
encaps_mapping = {
'VLAN': VLAN,
'VXLAN': VxLAN,
+ 'MPLS': MPLS,
'NONE': NO_ENCAPS
}
diff --git a/nfvbench/stats_collector.py b/nfvbench/stats_collector.py
index 964d704..dc750db 100644
--- a/nfvbench/stats_collector.py
+++ b/nfvbench/stats_collector.py
@@ -56,9 +56,7 @@ class IntervalCollector(StatsCollector):
self.notifier = notifier
def add(self, stats):
- if self.notifier:
- current_stats = self.__compute_tx_rx_diff(stats)
- self.notifier.send_interval_stats(**current_stats)
+ pass
def reset(self):
# don't reset time!
@@ -66,52 +64,7 @@ class IntervalCollector(StatsCollector):
self.last_tx_pkts = 0
def add_ndr_pdr(self, tag, stats):
- if self.notifier:
-
- current_time = self._get_current_time_diff()
- rx_pps = self._get_rx_pps(stats['tx_pps'], stats['drop_percentage'])
-
- self.last_tx_pkts = stats['tx_pps'] / 1000 * (current_time - self.last_time)
- self.last_rx_pkts = rx_pps / 1000 * (current_time - self.last_time)
- self.last_time = current_time
-
- # 'drop_pct' key is an unfortunate name, since in iteration stats it means
- # number of the packets. More suitable would be 'drop_percentage'.
- # FDS frontend depends on this key
- current_stats = {
- '{}_pps'.format(tag): stats['tx_pps'],
- 'tx_pps': stats['tx_pps'],
- 'rx_pps': rx_pps,
- 'drop_pct': stats['drop_percentage'],
- 'time_ms': current_time
- }
-
- self.notifier.send_interval_stats(time_ms=current_stats['time_ms'],
- tx_pps=current_stats['tx_pps'],
- rx_pps=current_stats['rx_pps'],
- drop_pct=current_stats['drop_pct'])
- if tag == 'ndr':
- self.notifier.send_ndr_found(stats['tx_pps'])
- else:
- self.notifier.send_pdr_found(stats['tx_pps'])
-
- def __compute_tx_rx_diff(self, stats):
- current_time = self._get_current_time_diff()
- tx_diff = stats['overall']['tx']['total_pkts'] - self.last_tx_pkts
- tx_pps = (tx_diff * 1000) / (current_time - self.last_time)
- rx_diff = stats['overall']['rx']['total_pkts'] - self.last_rx_pkts
- rx_pps = (rx_diff * 1000) / (current_time - self.last_time)
-
- self.last_rx_pkts = stats['overall']['rx']['total_pkts']
- self.last_tx_pkts = stats['overall']['tx']['total_pkts']
- self.last_time = current_time
-
- return {
- 'tx_pps': tx_pps,
- 'rx_pps': rx_pps,
- 'drop_pct': max(0.0, (1 - (float(rx_pps) / tx_pps)) * 100),
- 'time_ms': current_time
- }
+ pass
class IterationCollector(StatsCollector):
diff --git a/nfvbench/stats_manager.py b/nfvbench/stats_manager.py
index 98ac413..6fa98bd 100644
--- a/nfvbench/stats_manager.py
+++ b/nfvbench/stats_manager.py
@@ -15,9 +15,9 @@
#
import time
-from log import LOG
-from packet_stats import PacketPathStatsManager
-from stats_collector import IntervalCollector
+from .log import LOG
+from .packet_stats import PacketPathStatsManager
+from .stats_collector import IntervalCollector
class StatsManager(object):
@@ -35,7 +35,7 @@ class StatsManager(object):
if self.config.single_run:
pps_list = []
self.traffic_client.insert_interface_stats(pps_list)
- self.pps_mgr = PacketPathStatsManager(pps_list)
+ self.pps_mgr = PacketPathStatsManager(self.config, pps_list)
else:
self.pps_mgr = None
self.worker = None
diff --git a/nfvbench/summarizer.py b/nfvbench/summarizer.py
index 7520076..7c69f52 100644
--- a/nfvbench/summarizer.py
+++ b/nfvbench/summarizer.py
@@ -47,7 +47,7 @@ def _annotate_chain_stats(chain_stats, nodrop_marker='=>'):
In the case of shared net, some columns in packets array can have ''.
Some columns cab also be None which means the data is not available.
"""
- for stats in chain_stats.values():
+ for stats in list(chain_stats.values()):
packets = stats['packets']
count = len(packets)
if count > 1:
@@ -97,7 +97,7 @@ class Formatter(object):
def standard(data):
if isinstance(data, int):
return Formatter.int(data)
- elif isinstance(data, float):
+ if isinstance(data, float):
return Formatter.float(4)(data)
return Formatter.fixed(data)
@@ -130,7 +130,7 @@ class Formatter(object):
def percentage(data):
if data is None:
return ''
- elif math.isnan(data):
+ if math.isnan(data):
return '-'
return Formatter.suffix('%')(Formatter.float(4)(data))
@@ -139,7 +139,7 @@ class Table(object):
"""ASCII readable table class."""
def __init__(self, header):
- header_row, self.formatters = zip(*header)
+ header_row, self.formatters = list(zip(*header))
self.data = [header_row]
self.columns = len(header_row)
@@ -195,7 +195,7 @@ class Summarizer(object):
def _put_dict(self, data):
with self._create_block(False):
- for key, value in data.iteritems():
+ for key, value in list(data.items()):
if isinstance(value, dict):
self._put(key + ':')
self._put_dict(value)
@@ -219,35 +219,6 @@ class Summarizer(object):
class NFVBenchSummarizer(Summarizer):
"""Summarize nfvbench json result."""
- ndr_pdr_header = [
- ('-', Formatter.fixed),
- ('L2 Frame Size', Formatter.standard),
- ('Rate (fwd+rev)', Formatter.bits),
- ('Rate (fwd+rev)', Formatter.suffix(' pps')),
- ('Avg Drop Rate', Formatter.suffix('%')),
- ('Avg Latency (usec)', Formatter.standard),
- ('Min Latency (usec)', Formatter.standard),
- ('Max Latency (usec)', Formatter.standard)
- ]
-
- single_run_header = [
- ('L2 Frame Size', Formatter.standard),
- ('Drop Rate', Formatter.suffix('%')),
- ('Avg Latency (usec)', Formatter.standard),
- ('Min Latency (usec)', Formatter.standard),
- ('Max Latency (usec)', Formatter.standard)
- ]
-
- config_header = [
- ('Direction', Formatter.standard),
- ('Requested TX Rate (bps)', Formatter.bits),
- ('Actual TX Rate (bps)', Formatter.bits),
- ('RX Rate (bps)', Formatter.bits),
- ('Requested TX Rate (pps)', Formatter.suffix(' pps')),
- ('Actual TX Rate (pps)', Formatter.suffix(' pps')),
- ('RX Rate (pps)', Formatter.suffix(' pps'))
- ]
-
direction_keys = ['direction-forward', 'direction-reverse', 'direction-total']
direction_names = ['Forward', 'Reverse', 'Total']
@@ -259,6 +230,47 @@ class NFVBenchSummarizer(Summarizer):
self.record_header = None
self.record_data = None
self.sender = sender
+
+ self.ndr_pdr_header = [
+ ('-', Formatter.fixed),
+ ('L2 Frame Size', Formatter.standard),
+ ('Rate (fwd+rev)', Formatter.bits),
+ ('Rate (fwd+rev)', Formatter.suffix(' pps')),
+ ('Avg Drop Rate', Formatter.suffix('%')),
+ ('Avg Latency (usec)', Formatter.standard),
+ ('Min Latency (usec)', Formatter.standard),
+ ('Max Latency (usec)', Formatter.standard)
+ ]
+
+ self.single_run_header = [
+ ('L2 Frame Size', Formatter.standard),
+ ('Drop Rate', Formatter.suffix('%')),
+ ('Avg Latency (usec)', Formatter.standard),
+ ('Min Latency (usec)', Formatter.standard),
+ ('Max Latency (usec)', Formatter.standard)
+ ]
+
+ self.config_header = [
+ ('Direction', Formatter.standard),
+ ('Requested TX Rate (bps)', Formatter.bits),
+ ('Actual TX Rate (bps)', Formatter.bits),
+ ('RX Rate (bps)', Formatter.bits),
+ ('Requested TX Rate (pps)', Formatter.suffix(' pps')),
+ ('Actual TX Rate (pps)', Formatter.suffix(' pps')),
+ ('RX Rate (pps)', Formatter.suffix(' pps'))
+ ]
+
+ # add percentiles headers if hdrh enabled
+ if not self.config.disable_hdrh:
+ for percentile in self.config.lat_percentiles:
+ # 'append' expects a single parameter => double parentheses
+ self.ndr_pdr_header.append((str(percentile) + ' %ile lat.', Formatter.standard))
+ self.single_run_header.append((str(percentile) + ' %ile lat.', Formatter.standard))
+
+ if self.config.periodic_gratuitous_arp:
+ self.direction_keys.insert(2, 'garp-direction-total')
+ self.direction_names.insert(2, 'Gratuitous ARP')
+
# if sender is available initialize record
if self.sender:
self.__record_init()
@@ -297,7 +309,7 @@ class NFVBenchSummarizer(Summarizer):
if network_benchmark['versions']:
self._put('Versions:')
with self._create_block():
- for component, version in network_benchmark['versions'].iteritems():
+ for component, version in list(network_benchmark['versions'].items()):
self._put(component + ':', version)
if self.config['ndr_run'] or self.config['pdr_run']:
@@ -308,7 +320,7 @@ class NFVBenchSummarizer(Summarizer):
if self.config['pdr_run']:
self._put('PDR:', self.config['measurement']['PDR'])
self._put('Service chain:')
- for result in network_benchmark['service_chain'].iteritems():
+ for result in list(network_benchmark['service_chain'].items()):
with self._create_block():
self.__chain_summarize(*result)
@@ -325,13 +337,13 @@ class NFVBenchSummarizer(Summarizer):
self._put('Bidirectional:', traffic_benchmark['bidirectional'])
self._put('Flow count:', traffic_benchmark['flow_count'])
self._put('Service chains count:', traffic_benchmark['service_chain_count'])
- self._put('Compute nodes:', traffic_benchmark['compute_nodes'].keys())
+ self._put('Compute nodes:', list(traffic_benchmark['compute_nodes'].keys()))
self.__record_header_put('profile', traffic_benchmark['profile'])
self.__record_header_put('bidirectional', traffic_benchmark['bidirectional'])
self.__record_header_put('flow_count', traffic_benchmark['flow_count'])
self.__record_header_put('sc_count', traffic_benchmark['service_chain_count'])
- self.__record_header_put('compute_nodes', traffic_benchmark['compute_nodes'].keys())
+ self.__record_header_put('compute_nodes', list(traffic_benchmark['compute_nodes'].keys()))
with self._create_block(False):
self._put()
if not self.config['no_traffic']:
@@ -345,7 +357,7 @@ class NFVBenchSummarizer(Summarizer):
except KeyError:
pass
- for entry in traffic_benchmark['result'].iteritems():
+ for entry in list(traffic_benchmark['result'].items()):
if 'warning' in entry:
continue
self.__chain_analysis_summarize(*entry)
@@ -391,10 +403,11 @@ class NFVBenchSummarizer(Summarizer):
summary_table = Table(self.ndr_pdr_header)
if self.config['ndr_run']:
- for frame_size, analysis in traffic_result.iteritems():
+ for frame_size, analysis in list(traffic_result.items()):
if frame_size == 'warning':
continue
- summary_table.add_row([
+
+ row_data = [
'NDR',
frame_size,
analysis['ndr']['rate_bps'],
@@ -403,21 +416,34 @@ class NFVBenchSummarizer(Summarizer):
analysis['ndr']['stats']['overall']['avg_delay_usec'],
analysis['ndr']['stats']['overall']['min_delay_usec'],
analysis['ndr']['stats']['overall']['max_delay_usec']
- ])
- self.__record_data_put(frame_size, {'ndr': {
+ ]
+ if not self.config.disable_hdrh:
+ self.extract_hdrh_percentiles(
+ analysis['ndr']['stats']['overall']['lat_percentile'], row_data)
+ summary_table.add_row(row_data)
+
+ ndr_data = {
'type': 'NDR',
'rate_bps': analysis['ndr']['rate_bps'],
'rate_pps': analysis['ndr']['rate_pps'],
+ 'offered_tx_rate_bps': analysis['ndr']['stats']['offered_tx_rate_bps'],
+ 'theoretical_tx_rate_pps': analysis['ndr']['stats']['theoretical_tx_rate_pps'],
+ 'theoretical_tx_rate_bps': analysis['ndr']['stats']['theoretical_tx_rate_bps'],
'drop_percentage': analysis['ndr']['stats']['overall']['drop_percentage'],
'avg_delay_usec': analysis['ndr']['stats']['overall']['avg_delay_usec'],
'min_delay_usec': analysis['ndr']['stats']['overall']['min_delay_usec'],
'max_delay_usec': analysis['ndr']['stats']['overall']['max_delay_usec']
- }})
+ }
+ if not self.config.disable_hdrh:
+ self.extract_hdrh_percentiles(
+ analysis['ndr']['stats']['overall']['lat_percentile'], ndr_data, True)
+ self.__record_data_put(frame_size, {'ndr': ndr_data})
if self.config['pdr_run']:
- for frame_size, analysis in traffic_result.iteritems():
+ for frame_size, analysis in list(traffic_result.items()):
if frame_size == 'warning':
continue
- summary_table.add_row([
+
+ row_data = [
'PDR',
frame_size,
analysis['pdr']['rate_bps'],
@@ -426,34 +452,73 @@ class NFVBenchSummarizer(Summarizer):
analysis['pdr']['stats']['overall']['avg_delay_usec'],
analysis['pdr']['stats']['overall']['min_delay_usec'],
analysis['pdr']['stats']['overall']['max_delay_usec']
- ])
- self.__record_data_put(frame_size, {'pdr': {
+ ]
+ if not self.config.disable_hdrh:
+ self.extract_hdrh_percentiles(
+ analysis['pdr']['stats']['overall']['lat_percentile'], row_data)
+ summary_table.add_row(row_data)
+
+ pdr_data = {
'type': 'PDR',
'rate_bps': analysis['pdr']['rate_bps'],
'rate_pps': analysis['pdr']['rate_pps'],
+ 'offered_tx_rate_bps': analysis['pdr']['stats']['offered_tx_rate_bps'],
+ 'theoretical_tx_rate_pps': analysis['pdr']['stats']['theoretical_tx_rate_pps'],
+ 'theoretical_tx_rate_bps': analysis['pdr']['stats']['theoretical_tx_rate_bps'],
'drop_percentage': analysis['pdr']['stats']['overall']['drop_percentage'],
'avg_delay_usec': analysis['pdr']['stats']['overall']['avg_delay_usec'],
'min_delay_usec': analysis['pdr']['stats']['overall']['min_delay_usec'],
'max_delay_usec': analysis['pdr']['stats']['overall']['max_delay_usec']
- }})
+ }
+ if not self.config.disable_hdrh:
+ self.extract_hdrh_percentiles(
+ analysis['pdr']['stats']['overall']['lat_percentile'], pdr_data, True)
+ self.__record_data_put(frame_size, {'pdr': pdr_data})
if self.config['single_run']:
- for frame_size, analysis in traffic_result.iteritems():
- summary_table.add_row([
+ for frame_size, analysis in list(traffic_result.items()):
+ row_data = [
frame_size,
analysis['stats']['overall']['drop_rate_percent'],
analysis['stats']['overall']['rx']['avg_delay_usec'],
analysis['stats']['overall']['rx']['min_delay_usec'],
analysis['stats']['overall']['rx']['max_delay_usec']
- ])
- self.__record_data_put(frame_size, {'single_run': {
+ ]
+ if not self.config.disable_hdrh:
+ self.extract_hdrh_percentiles(
+ analysis['stats']['overall']['rx']['lat_percentile'], row_data)
+ summary_table.add_row(row_data)
+
+ single_run_data = {
'type': 'single_run',
+ 'offered_tx_rate_bps': analysis['stats']['offered_tx_rate_bps'],
+ 'theoretical_tx_rate_pps': analysis['stats']['theoretical_tx_rate_pps'],
+ 'theoretical_tx_rate_bps': analysis['stats']['theoretical_tx_rate_bps'],
'drop_rate_percent': analysis['stats']['overall']['drop_rate_percent'],
'avg_delay_usec': analysis['stats']['overall']['rx']['avg_delay_usec'],
'min_delay_usec': analysis['stats']['overall']['rx']['min_delay_usec'],
'max_delay_usec': analysis['stats']['overall']['rx']['max_delay_usec']
- }})
+ }
+ if not self.config.disable_hdrh:
+ self.extract_hdrh_percentiles(
+ analysis['stats']['overall']['rx']['lat_percentile'], single_run_data, True)
+ self.__record_data_put(frame_size, {'single_run': single_run_data})
return summary_table
+ def extract_hdrh_percentiles(self, lat_percentile, data, add_key=False):
+ if add_key:
+ data['lat_percentile'] = {}
+ for percentile in self.config.lat_percentiles:
+ if add_key:
+ try:
+ data['lat_percentile_' + str(percentile)] = lat_percentile[percentile]
+ except TypeError:
+ data['lat_percentile_' + str(percentile)] = "n/a"
+ else:
+ try:
+ data.append(lat_percentile[percentile])
+ except TypeError:
+ data.append("n/a")
+
def __get_config_table(self, run_config, frame_size):
config_table = Table(self.config_header)
for key, name in zip(self.direction_keys, self.direction_names):
@@ -485,11 +550,11 @@ class NFVBenchSummarizer(Summarizer):
chain_stats: {
'interfaces': ['Port0', 'drop %'', 'vhost0', 'Port1'],
'chains': {
- 0: {'packets': [2000054, '-0.023%', 1999996, 1999996],
+ '0': {'packets': [2000054, '-0.023%', 1999996, 1999996],
'lat_min_usec': 10,
'lat_max_usec': 187,
'lat_avg_usec': 45},
- 1: {...},
+ '1': {...},
'total': {...}
}
}
@@ -498,21 +563,43 @@ class NFVBenchSummarizer(Summarizer):
_annotate_chain_stats(chains)
header = [('Chain', Formatter.standard)] + \
[(ifname, Formatter.standard) for ifname in chain_stats['interfaces']]
- # add latency columns if available Avg, Min, Max
+ # add latency columns if available Avg, Min, Max and percentiles
lat_keys = []
lat_map = {'lat_avg_usec': 'Avg lat.',
'lat_min_usec': 'Min lat.',
'lat_max_usec': 'Max lat.'}
- if 'lat_avg_usec' in chains[0]:
+ if 'lat_avg_usec' in chains['0']:
lat_keys = ['lat_avg_usec', 'lat_min_usec', 'lat_max_usec']
- for key in lat_keys:
- header.append((lat_map[key], Formatter.standard))
+
+ if not self.config.disable_hdrh:
+ lat_keys.append('lat_percentile')
+ for percentile in self.config.lat_percentiles:
+ lat_map['lat_' + str(percentile) + '_percentile'] = \
+ str(percentile) + ' %ile lat.'
+
+ for lat_value in lat_map.values():
+ # 'append' expects a single parameter => double parentheses
+ header.append((lat_value, Formatter.standard))
table = Table(header)
- for chain in sorted(chains.keys()):
+ for chain in sorted(list(chains.keys()), key=str):
row = [chain] + chains[chain]['packets']
for lat_key in lat_keys:
- row.append('{:,} usec'.format(chains[chain][lat_key]))
+
+ if lat_key != 'lat_percentile':
+ if chains[chain].get(lat_key, None):
+ row.append(Formatter.standard(chains[chain][lat_key]))
+ else:
+ row.append('n/a')
+ else:
+ if not self.config.disable_hdrh:
+ if chains[chain].get(lat_key, None):
+ for percentile in chains[chain][lat_key]:
+ row.append(Formatter.standard(
+ chains[chain][lat_key][percentile]))
+ else:
+ for _ in self.config.lat_percentiles:
+ row.append('n/a')
table.add_row(row)
return table
@@ -546,9 +633,9 @@ class NFVBenchSummarizer(Summarizer):
run_specific_data['pdr'] = data['pdr']
run_specific_data['pdr']['drop_limit'] = self.config['measurement']['PDR']
del data['pdr']
- for key in run_specific_data:
+ for data_value in run_specific_data.values():
data_to_send = data.copy()
- data_to_send.update(run_specific_data[key])
+ data_to_send.update(data_value)
self.sender.record_send(data_to_send)
self.__record_init()
diff --git a/nfvbench/traffic_client.py b/nfvbench/traffic_client.py
index dbb8206..47af265 100755
--- a/nfvbench/traffic_client.py
+++ b/nfvbench/traffic_client.py
@@ -13,43 +13,45 @@
# under the License.
"""Interface to the traffic generator clients including NDR/PDR binary search."""
-
-from datetime import datetime
import socket
import struct
import time
+import sys
from attrdict import AttrDict
import bitmath
+from hdrh.histogram import HdrHistogram
from netaddr import IPNetwork
# pylint: disable=import-error
-from trex_stl_lib.api import STLError
+from trex.stl.api import Ether
+from trex.stl.api import STLError
+from trex.stl.api import UDP
+# pylint: disable=wrong-import-order
+from scapy.contrib.mpls import MPLS # flake8: noqa
+# pylint: enable=wrong-import-order
# pylint: enable=import-error
-from log import LOG
-from packet_stats import InterfaceStats
-from packet_stats import PacketPathStats
-from stats_collector import IntervalCollector
-from stats_collector import IterationCollector
-import traffic_gen.traffic_utils as utils
-from utils import cast_integer
-
+from .log import LOG
+from .packet_stats import InterfaceStats
+from .packet_stats import PacketPathStats
+from .stats_collector import IntervalCollector
+from .stats_collector import IterationCollector
+from .traffic_gen import traffic_utils as utils
+from .utils import cast_integer, find_max_size, find_tuples_equal_to_lcm_value, get_divisors, lcm
class TrafficClientException(Exception):
"""Generic traffic client exception."""
- pass
-
-
class TrafficRunner(object):
"""Serialize various steps required to run traffic."""
- def __init__(self, client, duration_sec, interval_sec=0):
+ def __init__(self, client, duration_sec, interval_sec=0, service_mode=False):
"""Create a traffic runner."""
self.client = client
self.start_time = None
self.duration_sec = duration_sec
self.interval_sec = interval_sec
+ self.service_mode = service_mode
def run(self):
"""Clear stats and instruct the traffic generator to start generating traffic."""
@@ -57,6 +59,13 @@ class TrafficRunner(object):
return None
LOG.info('Running traffic generator')
self.client.gen.clear_stats()
+ # Debug use only: the service_mode flag may have been set in
+ # the configuration, in order to enable the 'service' mode
+ # in the trex generator, before starting the traffic (run).
+ # From this point, a T-rex console (launched in readonly mode) would
+ # then be able to capture the transmitted and/or received traffic.
+ self.client.gen.set_service_mode(enabled=self.service_mode)
+ LOG.info('Service mode is %sabled', 'en' if self.service_mode else 'dis')
self.client.gen.start_traffic()
self.start_time = time.time()
return self.poll_stats()
@@ -110,6 +119,8 @@ class IpBlock(object):
def __init__(self, base_ip, step_ip, count_ip):
"""Create an IP block."""
self.base_ip_int = Device.ip_to_int(base_ip)
+ if step_ip == 'random':
+ step_ip = '0.0.0.1'
self.step = Device.ip_to_int(step_ip)
self.max_available = count_ip
self.next_free = 0
@@ -120,8 +131,15 @@ class IpBlock(object):
raise IndexError('Index out of bounds: %d (max=%d)' % (index, self.max_available))
return Device.int_to_ip(self.base_ip_int + index * self.step)
+ def get_ip_from_chain_first_ip(self, first_ip, index=0):
+ """Return the IP address at given index starting from chain first ip."""
+ if index < 0 or index >= self.max_available:
+ raise IndexError('Index out of bounds: %d (max=%d)' % (index, self.max_available))
+ return Device.int_to_ip(first_ip + index * self.step)
+
def reserve_ip_range(self, count):
- """Reserve a range of count consecutive IP addresses spaced by step."""
+ """Reserve a range of count consecutive IP addresses spaced by step.
+ """
if self.next_free + count > self.max_available:
raise IndexError('No more IP addresses next free=%d max_available=%d requested=%d' %
(self.next_free,
@@ -137,6 +155,27 @@ class IpBlock(object):
self.next_free = 0
+class UdpPorts(object):
+
+ def __init__(self, src_min, src_max, dst_min, dst_max, udp_src_size, udp_dst_size, step):
+
+ self.src_min = int(src_min)
+ self.src_max = int(src_max)
+ self.dst_min = int(dst_min)
+ self.dst_max = int(dst_max)
+ self.udp_src_size = udp_src_size
+ self.udp_dst_size = udp_dst_size
+ self.step = step
+
+ def get_src_max(self, index=0):
+ """Return the UDP src port at given index."""
+ return int(self.src_min) + index * int(self.step)
+
+ def get_dst_max(self, index=0):
+ """Return the UDP dst port at given index."""
+ return int(self.dst_min) + index * int(self.step)
+
+
class Device(object):
"""Represent a port device and all information associated to it.
@@ -148,12 +187,19 @@ class Device(object):
"""Create a new device for a given port."""
self.generator_config = generator_config
self.chain_count = generator_config.service_chain_count
- self.flow_count = generator_config.flow_count / 2
+ if generator_config.bidirectional:
+ self.flow_count = generator_config.flow_count / 2
+ else:
+ self.flow_count = generator_config.flow_count
+
self.port = port
self.switch_port = generator_config.interfaces[port].get('switch_port', None)
self.vtep_vlan = None
self.vtep_src_mac = None
self.vxlan = False
+ self.mpls = False
+ self.inner_labels = None
+ self.outer_labels = None
self.pci = generator_config.interfaces[port].pci
self.mac = None
self.dest_macs = None
@@ -166,10 +212,50 @@ class Device(object):
self.vnis = None
self.vlans = None
self.ip_addrs = generator_config.ip_addrs[port]
- subnet = IPNetwork(self.ip_addrs)
- self.ip = subnet.ip.format()
+ self.ip_src_static = generator_config.ip_src_static
self.ip_addrs_step = generator_config.ip_addrs_step
- self.ip_block = IpBlock(self.ip, self.ip_addrs_step, self.flow_count)
+ if self.ip_addrs_step == 'random':
+ # Set step to 1 to calculate the IP range size (see check_range_size below)
+ step = '0.0.0.1'
+ else:
+ step = self.ip_addrs_step
+ self.ip_size = self.check_range_size(IPNetwork(self.ip_addrs).size, Device.ip_to_int(step))
+ self.ip = str(IPNetwork(self.ip_addrs).network)
+ ip_addrs_left = generator_config.ip_addrs[0]
+ ip_addrs_right = generator_config.ip_addrs[1]
+ self.ip_addrs_size = {
+ 'left': self.check_range_size(IPNetwork(ip_addrs_left).size, Device.ip_to_int(step)),
+ 'right': self.check_range_size(IPNetwork(ip_addrs_right).size, Device.ip_to_int(step))}
+ udp_src_port = generator_config.gen_config.udp_src_port
+ if udp_src_port is None:
+ udp_src_port = 53
+ udp_dst_port = generator_config.gen_config.udp_dst_port
+ if udp_dst_port is None:
+ udp_dst_port = 53
+ src_max, src_min = self.define_udp_range(udp_src_port, 'udp_src_port')
+ dst_max, dst_min = self.define_udp_range(udp_dst_port, 'udp_dst_port')
+ if generator_config.gen_config.udp_port_step == 'random':
+ # Set step to 1 to calculate the UDP range size
+ udp_step = 1
+ else:
+ udp_step = int(generator_config.gen_config.udp_port_step)
+ udp_src_size = self.check_range_size(int(src_max) - int(src_min) + 1, udp_step)
+ udp_dst_size = self.check_range_size(int(dst_max) - int(dst_min) + 1, udp_step)
+ lcm_port = lcm(udp_src_size, udp_dst_size)
+ if self.ip_src_static is True:
+ lcm_ip = lcm(1, min(self.ip_addrs_size['left'], self.ip_addrs_size['right']))
+ else:
+ lcm_ip = lcm(self.ip_addrs_size['left'], self.ip_addrs_size['right'])
+ flow_max = lcm(lcm_port, lcm_ip)
+ if self.flow_count > flow_max:
+ raise TrafficClientException('Trying to set unachievable traffic (%d > %d)' %
+ (self.flow_count, flow_max))
+
+ self.udp_ports = UdpPorts(src_min, src_max, dst_min, dst_max, udp_src_size, udp_dst_size,
+ generator_config.gen_config.udp_port_step)
+
+ self.ip_block = IpBlock(self.ip, step, self.ip_size)
+
self.gw_ip_block = IpBlock(generator_config.gateway_ips[port],
generator_config.gateway_ip_addrs_step,
self.chain_count)
@@ -177,8 +263,146 @@ class Device(object):
self.tg_gw_ip_block = IpBlock(self.tg_gateway_ip_addrs,
generator_config.tg_gateway_ip_addrs_step,
self.chain_count)
- self.udp_src_port = generator_config.udp_src_port
- self.udp_dst_port = generator_config.udp_dst_port
+
+ def limit_ip_udp_ranges(self, peer_ip_size, cur_chain_flow_count):
+ # init to min value in case of no matching values found with lcm calculation
+ new_src_ip_size = 1
+ new_peer_ip_size = 1
+ new_src_udp_size = 1
+ new_dst_udp_size = 1
+
+ if self.ip_src_static is True:
+ src_ip_size = 1
+ else:
+ src_ip_size = self.ip_size
+ ip_src_divisors = list(get_divisors(src_ip_size))
+ ip_dst_divisors = list(get_divisors(peer_ip_size))
+ udp_src_divisors = list(get_divisors(self.udp_ports.udp_src_size))
+ udp_dst_divisors = list(get_divisors(self.udp_ports.udp_dst_size))
+ fc = int(cur_chain_flow_count)
+ tuples_ip = list(find_tuples_equal_to_lcm_value(ip_src_divisors, ip_dst_divisors, fc))
+ tuples_udp = list(find_tuples_equal_to_lcm_value(udp_src_divisors, udp_dst_divisors, fc))
+
+ if tuples_ip:
+ new_src_ip_size = tuples_ip[-1][0]
+ new_peer_ip_size = tuples_ip[-1][1]
+
+ if tuples_udp:
+ new_src_udp_size = tuples_udp[-1][0]
+ new_dst_udp_size = tuples_udp[-1][1]
+
+ tuples_src = []
+ tuples_dst = []
+ if not tuples_ip and not tuples_udp:
+ # in case of not divisors in common matching LCM value (i.e. requested flow count)
+ # try to find an accurate UDP range to fit requested flow count
+ udp_src_int = range(self.udp_ports.src_min, self.udp_ports.src_max)
+ udp_dst_int = range(self.udp_ports.dst_min, self.udp_ports.dst_max)
+ tuples_src = list(find_tuples_equal_to_lcm_value(ip_src_divisors, udp_src_int, fc))
+ tuples_dst = list(find_tuples_equal_to_lcm_value(ip_dst_divisors, udp_dst_int, fc))
+
+ if not tuples_src and not tuples_dst:
+ # iterate IP and UDP ranges to find a tuple that match flow count values
+ src_ip_range = range(1,src_ip_size)
+ dst_ip_range = range(1, peer_ip_size)
+ tuples_src = list(find_tuples_equal_to_lcm_value(src_ip_range, udp_src_int, fc))
+ tuples_dst = list(find_tuples_equal_to_lcm_value(dst_ip_range, udp_dst_int, fc))
+
+ if tuples_src or tuples_dst:
+ if tuples_src:
+ new_src_ip_size = tuples_src[-1][0]
+ new_src_udp_size = tuples_src[-1][1]
+ if tuples_dst:
+ new_peer_ip_size = tuples_dst[-1][0]
+ new_dst_udp_size = tuples_dst[-1][1]
+ else:
+ if not tuples_ip:
+ if src_ip_size != 1:
+ if src_ip_size > fc:
+ new_src_ip_size = fc
+ else:
+ new_src_ip_size = find_max_size(src_ip_size, tuples_udp, fc)
+ if peer_ip_size != 1:
+ if peer_ip_size > fc:
+ new_peer_ip_size = fc
+ else:
+ new_peer_ip_size = find_max_size(peer_ip_size, tuples_udp, fc)
+
+ if not tuples_udp:
+ if self.udp_ports.udp_src_size != 1:
+ if self.udp_ports.udp_src_size > fc:
+ new_src_udp_size = fc
+ else:
+ new_src_udp_size = find_max_size(self.udp_ports.udp_src_size,
+ tuples_ip, fc)
+ if self.udp_ports.udp_dst_size != 1:
+ if self.udp_ports.udp_dst_size > fc:
+ new_dst_udp_size = fc
+ else:
+ new_dst_udp_size = find_max_size(self.udp_ports.udp_dst_size,
+ tuples_ip, fc)
+ max_possible_flows = lcm(lcm(new_src_ip_size, new_peer_ip_size),
+ lcm(new_src_udp_size, new_dst_udp_size))
+
+ LOG.debug("IP dst size: %d", new_peer_ip_size)
+ LOG.debug("LCM IP: %d", lcm(new_src_ip_size, new_peer_ip_size))
+ LOG.debug("LCM UDP: %d", lcm(new_src_udp_size, new_dst_udp_size))
+ LOG.debug("Global LCM: %d", max_possible_flows)
+ LOG.debug("IP src size: %d, IP dst size: %d, UDP src size: %d, UDP dst size: %d",
+ new_src_ip_size, new_peer_ip_size, self.udp_ports.udp_src_size,
+ self.udp_ports.udp_dst_size)
+ if not max_possible_flows == cur_chain_flow_count:
+ if (self.ip_addrs_step != '0.0.0.1' or self.udp_ports.step != '1') and not (
+ self.ip_addrs_step == 'random' and self.udp_ports.step == 'random'):
+ LOG.warning("Current values of ip_addrs_step and/or udp_port_step properties "
+ "do not allow to control an accurate flow count. "
+ "Values will be overridden as follows:")
+ if self.ip_addrs_step != '0.0.0.1':
+ LOG.info("ip_addrs_step='0.0.0.1' (previous value: ip_addrs_step='%s')",
+ self.ip_addrs_step)
+ self.ip_addrs_step = '0.0.0.1'
+
+ if self.udp_ports.step != '1':
+ LOG.info("udp_port_step='1' (previous value: udp_port_step='%s')",
+ self.udp_ports.step)
+ self.udp_ports.step = '1'
+ # override config for not logging random step warning message in trex_gen.py
+ self.generator_config.gen_config.udp_port_step = self.udp_ports.step
+ else:
+ LOG.error("Current values of ip_addrs_step and udp_port_step properties "
+ "do not allow to control an accurate flow count.")
+ else:
+ src_ip_size = new_src_ip_size
+ peer_ip_size = new_peer_ip_size
+ self.udp_ports.udp_src_size = new_src_udp_size
+ self.udp_ports.udp_dst_size = new_dst_udp_size
+ return src_ip_size, peer_ip_size
+
+ @staticmethod
+ def define_udp_range(udp_port, property_name):
+ if isinstance(udp_port, int):
+ min = udp_port
+ max = min
+ elif isinstance(udp_port, tuple):
+ min = udp_port[0]
+ max = udp_port[1]
+ else:
+ raise TrafficClientException('Invalid %s property value (53 or [\'53\',\'1024\'])'
+ % property_name)
+ return max, min
+
+
+ @staticmethod
+ def check_range_size(range_size, step):
+ """Check and set the available IPs or UDP ports, considering the step."""
+ try:
+ if range_size % step == 0:
+ value = range_size // step
+ else:
+ value = range_size // step + 1
+ return value
+ except ZeroDivisionError:
+ raise ZeroDivisionError("step can't be zero !") from ZeroDivisionError
def set_mac(self, mac):
"""Set the local MAC for this port device."""
@@ -197,7 +421,7 @@ class Device(object):
- VM macs discovered using openstack API
- dest MACs provisioned in config file
"""
- self.vtep_dst_mac = map(str, dest_macs)
+ self.vtep_dst_mac = list(map(str, dest_macs))
def set_dest_macs(self, dest_macs):
"""Set the list of dest MACs indexed by the chain id.
@@ -206,7 +430,7 @@ class Device(object):
- VM macs discovered using openstack API
- dest MACs provisioned in config file
"""
- self.dest_macs = map(str, dest_macs)
+ self.dest_macs = list(map(str, dest_macs))
def get_dest_macs(self):
"""Get the list of dest macs for this device.
@@ -237,10 +461,30 @@ class Device(object):
LOG.info("Port %d: src_vtep %s, dst_vtep %s", self.port,
self.vtep_src_ip, self.vtep_dst_ip)
+ def set_mpls_peers(self, src_ip, dst_ip):
+ self.mpls = True
+ self.vtep_dst_ip = dst_ip
+ self.vtep_src_ip = src_ip
+ LOG.info("Port %d: src_mpls_vtep %s, mpls_peer_ip %s", self.port,
+ self.vtep_src_ip, self.vtep_dst_ip)
+
def set_vxlans(self, vnis):
self.vnis = vnis
LOG.info("Port %d: VNIs %s", self.port, self.vnis)
+ def set_mpls_inner_labels(self, labels):
+ self.inner_labels = labels
+ LOG.info("Port %d: MPLS Inner Labels %s", self.port, self.inner_labels)
+
+ def set_mpls_outer_labels(self, labels):
+ self.outer_labels = labels
+ LOG.info("Port %d: MPLS Outer Labels %s", self.port, self.outer_labels)
+
+ def set_gw_ip(self, gateway_ip):
+ self.gw_ip_block = IpBlock(gateway_ip,
+ self.generator_config.gateway_ip_addrs_step,
+ self.chain_count)
+
def get_gw_ip(self, chain_index):
"""Retrieve the IP address assigned for the gateway of a given chain."""
return self.gw_ip_block.get_ip(chain_index)
@@ -257,16 +501,44 @@ class Device(object):
# calculated as (total_flows + chain_count - 1) / chain_count
# - the first chain will have the remainder
# example 11 flows and 3 chains => 3, 4, 4
- flows_per_chain = (self.flow_count + self.chain_count - 1) / self.chain_count
- cur_chain_flow_count = self.flow_count - flows_per_chain * (self.chain_count - 1)
+ flows_per_chain = int((self.flow_count + self.chain_count - 1) / self.chain_count)
+ cur_chain_flow_count = int(self.flow_count - flows_per_chain * (self.chain_count - 1))
+
peer = self.get_peer_device()
self.ip_block.reset_reservation()
peer.ip_block.reset_reservation()
dest_macs = self.get_dest_macs()
- for chain_idx in xrange(self.chain_count):
- src_ip_first, src_ip_last = self.ip_block.reserve_ip_range(cur_chain_flow_count)
- dst_ip_first, dst_ip_last = peer.ip_block.reserve_ip_range(cur_chain_flow_count)
+ # limit ranges of UDP ports and IP to avoid overflow of the number of flows
+ peer_size = peer.ip_size // self.chain_count
+
+ for chain_idx in range(self.chain_count):
+ src_ip_size, peer_ip_size = self.limit_ip_udp_ranges(peer_size, cur_chain_flow_count)
+
+ src_ip_first, src_ip_last = self.ip_block.reserve_ip_range \
+ (src_ip_size)
+ dst_ip_first, dst_ip_last = peer.ip_block.reserve_ip_range \
+ (peer_ip_size)
+
+ if self.ip_addrs_step != 'random':
+ src_ip_last = self.ip_block.get_ip_from_chain_first_ip(
+ Device.ip_to_int(src_ip_first), src_ip_size - 1)
+ dst_ip_last = peer.ip_block.get_ip_from_chain_first_ip(
+ Device.ip_to_int(dst_ip_first), peer_ip_size - 1)
+ if self.udp_ports.step != 'random':
+ self.udp_ports.src_max = self.udp_ports.get_src_max(self.udp_ports.udp_src_size - 1)
+ self.udp_ports.dst_max = self.udp_ports.get_dst_max(self.udp_ports.udp_dst_size - 1)
+ if self.ip_src_static:
+ src_ip_last = src_ip_first
+
+ LOG.info("Port %d, chain %d: IP src range [%s,%s]", self.port, chain_idx,
+ src_ip_first, src_ip_last)
+ LOG.info("Port %d, chain %d: IP dst range [%s,%s]", self.port, chain_idx,
+ dst_ip_first, dst_ip_last)
+ LOG.info("Port %d, chain %d: UDP src range [%s,%s]", self.port, chain_idx,
+ self.udp_ports.src_min, self.udp_ports.src_max)
+ LOG.info("Port %d, chain %d: UDP dst range [%s,%s]", self.port, chain_idx,
+ self.udp_ports.dst_min, self.udp_ports.dst_max)
configs.append({
'count': cur_chain_flow_count,
@@ -274,24 +546,34 @@ class Device(object):
'mac_dst': dest_macs[chain_idx],
'ip_src_addr': src_ip_first,
'ip_src_addr_max': src_ip_last,
- 'ip_src_count': cur_chain_flow_count,
+ 'ip_src_count': src_ip_size,
'ip_dst_addr': dst_ip_first,
'ip_dst_addr_max': dst_ip_last,
- 'ip_dst_count': cur_chain_flow_count,
+ 'ip_dst_count': peer_ip_size,
'ip_addrs_step': self.ip_addrs_step,
- 'udp_src_port': self.udp_src_port,
- 'udp_dst_port': self.udp_dst_port,
+ 'ip_src_static': self.ip_src_static,
+ 'udp_src_port': self.udp_ports.src_min,
+ 'udp_src_port_max': self.udp_ports.src_max,
+ 'udp_src_count': self.udp_ports.udp_src_size,
+ 'udp_dst_port': self.udp_ports.dst_min,
+ 'udp_dst_port_max': self.udp_ports.dst_max,
+ 'udp_dst_count': self.udp_ports.udp_dst_size,
+ 'udp_port_step': self.udp_ports.step,
'mac_discovery_gw': self.get_gw_ip(chain_idx),
'ip_src_tg_gw': self.tg_gw_ip_block.get_ip(chain_idx),
'ip_dst_tg_gw': peer.tg_gw_ip_block.get_ip(chain_idx),
'vlan_tag': self.vlans[chain_idx] if self.vlans else None,
'vxlan': self.vxlan,
'vtep_vlan': self.vtep_vlan if self.vtep_vlan else None,
- 'vtep_src_mac': self.mac if self.vxlan is True else None,
- 'vtep_dst_mac': self.vtep_dst_mac if self.vxlan is True else None,
+ 'vtep_src_mac': self.mac if (self.vxlan or self.mpls) else None,
+ 'vtep_dst_mac': self.vtep_dst_mac if (self.vxlan or self.mpls) else None,
'vtep_dst_ip': self.vtep_dst_ip if self.vxlan is True else None,
'vtep_src_ip': self.vtep_src_ip if self.vxlan is True else None,
- 'net_vni': self.vnis[chain_idx] if self.vxlan is True else None
+ 'net_vni': self.vnis[chain_idx] if self.vxlan is True else None,
+ 'mpls': self.mpls,
+ 'mpls_outer_label': self.outer_labels[chain_idx] if self.mpls is True else None,
+ 'mpls_inner_label': self.inner_labels[chain_idx] if self.mpls is True else None
+
})
# after first chain, fall back to the flow count for all other chains
cur_chain_flow_count = flows_per_chain
@@ -305,7 +587,7 @@ class Device(object):
@staticmethod
def int_to_ip(nvalue):
"""Convert an IP address from numeric to string."""
- return socket.inet_ntoa(struct.pack("!I", nvalue))
+ return socket.inet_ntoa(struct.pack("!I", int(nvalue)))
class GeneratorConfig(object):
@@ -333,23 +615,37 @@ class GeneratorConfig(object):
self.cores = config.cores
else:
self.cores = gen_config.get('cores', 1)
+ # let's report the value actually used in the end
+ config.cores_used = self.cores
self.mbuf_factor = config.mbuf_factor
- if gen_config.intf_speed:
- # interface speed is overriden from config
- self.intf_speed = bitmath.parse_string(gen_config.intf_speed.replace('ps', '')).bits
+ self.mbuf_64 = config.mbuf_64
+ self.hdrh = not config.disable_hdrh
+ if config.intf_speed:
+ # interface speed is overriden from the command line
+ self.intf_speed = config.intf_speed
+ elif gen_config.intf_speed:
+ # interface speed is overriden from the generator config
+ self.intf_speed = gen_config.intf_speed
else:
+ self.intf_speed = "auto"
+ if self.intf_speed in ("auto", "0"):
# interface speed is discovered/provided by the traffic generator
self.intf_speed = 0
+ else:
+ self.intf_speed = bitmath.parse_string(self.intf_speed.replace('ps', '')).bits
+ self.name = gen_config.name
+ self.zmq_pub_port = gen_config.get('zmq_pub_port', 4500)
+ self.zmq_rpc_port = gen_config.get('zmq_rpc_port', 4501)
+ self.limit_memory = gen_config.get('limit_memory', 1024)
self.software_mode = gen_config.get('software_mode', False)
self.interfaces = gen_config.interfaces
if self.interfaces[0].port != 0 or self.interfaces[1].port != 1:
raise TrafficClientException('Invalid port order/id in generator_profile.interfaces')
-
self.service_chain = config.service_chain
self.service_chain_count = config.service_chain_count
self.flow_count = config.flow_count
self.host_name = gen_config.host_name
-
+ self.bidirectional = config.traffic.bidirectional
self.tg_gateway_ip_addrs = gen_config.tg_gateway_ip_addrs
self.ip_addrs = gen_config.ip_addrs
self.ip_addrs_step = gen_config.ip_addrs_step or self.DEFAULT_SRC_DST_IP_STEP
@@ -357,8 +653,7 @@ class GeneratorConfig(object):
gen_config.tg_gateway_ip_addrs_step or self.DEFAULT_IP_STEP
self.gateway_ip_addrs_step = gen_config.gateway_ip_addrs_step or self.DEFAULT_IP_STEP
self.gateway_ips = gen_config.gateway_ip_addrs
- self.udp_src_port = gen_config.udp_src_port
- self.udp_dst_port = gen_config.udp_dst_port
+ self.ip_src_static = gen_config.ip_src_static
self.vteps = gen_config.get('vteps')
self.devices = [Device(port, self) for port in [0, 1]]
# This should normally always be [0, 1]
@@ -386,10 +681,11 @@ class GeneratorConfig(object):
port_index: the port for which dest macs must be set
dest_macs: a list of dest MACs indexed by chain id
"""
- if len(dest_macs) != self.config.service_chain_count:
+ if len(dest_macs) < self.config.service_chain_count:
raise TrafficClientException('Dest MAC list %s must have %d entries' %
(dest_macs, self.config.service_chain_count))
- self.devices[port_index].set_dest_macs(dest_macs)
+ # only pass the first scc dest MACs
+ self.devices[port_index].set_dest_macs(dest_macs[:self.config.service_chain_count])
LOG.info('Port %d: dst MAC %s', port_index, [str(mac) for mac in dest_macs])
def set_vtep_dest_macs(self, port_index, dest_macs):
@@ -402,7 +698,7 @@ class GeneratorConfig(object):
raise TrafficClientException('Dest MAC list %s must have %d entries' %
(dest_macs, self.config.service_chain_count))
self.devices[port_index].set_vtep_dst_mac(dest_macs)
- LOG.info('Port %d: vtep dst MAC %s', port_index, set([str(mac) for mac in dest_macs]))
+ LOG.info('Port %d: vtep dst MAC %s', port_index, {str(mac) for mac in dest_macs})
def get_dest_macs(self):
"""Return the list of dest macs indexed by port."""
@@ -430,6 +726,28 @@ class GeneratorConfig(object):
(vxlans, self.config.service_chain_count))
self.devices[port_index].set_vxlans(vxlans)
+ def set_mpls_inner_labels(self, port_index, labels):
+ """Set the list of MPLS Labels to use indexed by the chain id on given port.
+
+ port_index: the port for which Labels must be set
+ Labels: a list of Labels lists indexed by chain id
+ """
+ if len(labels) != self.config.service_chain_count:
+ raise TrafficClientException('Inner MPLS list %s must have %d entries' %
+ (labels, self.config.service_chain_count))
+ self.devices[port_index].set_mpls_inner_labels(labels)
+
+ def set_mpls_outer_labels(self, port_index, labels):
+ """Set the list of MPLS Labels to use indexed by the chain id on given port.
+
+ port_index: the port for which Labels must be set
+ Labels: a list of Labels lists indexed by chain id
+ """
+ if len(labels) != self.config.service_chain_count:
+ raise TrafficClientException('Outer MPLS list %s must have %d entries' %
+ (labels, self.config.service_chain_count))
+ self.devices[port_index].set_mpls_outer_labels(labels)
+
def set_vtep_vlan(self, port_index, vlan):
"""Set the vtep vlan to use indexed by the chain id on given port.
port_index: the port for which VLAN must be set
@@ -439,6 +757,9 @@ class GeneratorConfig(object):
def set_vxlan_endpoints(self, port_index, src_ip, dst_ip):
self.devices[port_index].set_vxlan_endpoints(src_ip, dst_ip)
+ def set_mpls_peers(self, port_index, src_ip, dst_ip):
+ self.devices[port_index].set_mpls_peers(src_ip, dst_ip)
+
@staticmethod
def __match_generator_profile(traffic_generator, generator_profile):
gen_config = AttrDict(traffic_generator)
@@ -473,7 +794,8 @@ class TrafficClient(object):
self.notifier = notifier
self.interval_collector = None
self.iteration_collector = None
- self.runner = TrafficRunner(self, self.config.duration_sec, self.config.interval_sec)
+ self.runner = TrafficRunner(self, self.config.duration_sec, self.config.interval_sec,
+ self.config.service_mode)
self.config.frame_sizes = self._get_frame_sizes()
self.run_config = {
'l2frame_size': None,
@@ -493,10 +815,10 @@ class TrafficClient(object):
def _get_generator(self):
tool = self.tool.lower()
if tool == 'trex':
- from traffic_gen import trex
- return trex.TRex(self)
+ from .traffic_gen import trex_gen
+ return trex_gen.TRex(self)
if tool == 'dummy':
- from traffic_gen import dummy
+ from .traffic_gen import dummy
return dummy.DummyTG(self)
raise TrafficClientException('Unsupported generator tool name:' + self.tool)
@@ -514,7 +836,7 @@ class TrafficClient(object):
if len(matching_profiles) > 1:
raise TrafficClientException('Multiple traffic profiles with name: ' +
traffic_profile_name)
- elif not matching_profiles:
+ if not matching_profiles:
raise TrafficClientException('Cannot find traffic profile: ' + traffic_profile_name)
return matching_profiles[0].l2frame_size
@@ -529,13 +851,17 @@ class TrafficClient(object):
# interface speed is overriden from config
if self.intf_speed != tg_if_speed:
# Warn the user if the speed in the config is different
- LOG.warning('Interface speed provided is different from actual speed (%d Gbps)',
- intf_speeds[0])
+ LOG.warning(
+ 'Interface speed provided (%g Gbps) is different from actual speed (%d Gbps)',
+ self.intf_speed / 1000000000.0, intf_speeds[0])
else:
# interface speed not provisioned by config
self.intf_speed = tg_if_speed
# also update the speed in the tg config
self.generator_config.intf_speed = tg_if_speed
+ # let's report detected and actually used interface speed
+ self.config.intf_speed_detected = tg_if_speed
+ self.config.intf_speed_used = self.intf_speed
# Save the traffic generator local MAC
for mac, device in zip(self.gen.get_macs(), self.generator_config.devices):
@@ -571,11 +897,11 @@ class TrafficClient(object):
LOG.info('Starting traffic generator to ensure end-to-end connectivity')
# send 2pps on each chain and each direction
rate_pps = {'rate_pps': str(self.config.service_chain_count * 2)}
- self.gen.create_traffic('64', [rate_pps, rate_pps], bidirectional=True, latency=False)
-
+ self.gen.create_traffic('64', [rate_pps, rate_pps], bidirectional=True, latency=False,
+ e2e=True)
# ensures enough traffic is coming back
- retry_count = (self.config.check_traffic_time_sec +
- self.config.generic_poll_sec - 1) / self.config.generic_poll_sec
+ retry_count = int((self.config.check_traffic_time_sec +
+ self.config.generic_poll_sec - 1) / self.config.generic_poll_sec)
# we expect to see packets coming from 2 unique MAC per chain
# because there can be flooding in the case of shared net
@@ -591,9 +917,12 @@ class TrafficClient(object):
get_mac_id = lambda packet: packet['binary'][60:66]
elif self.config.vxlan:
get_mac_id = lambda packet: packet['binary'][56:62]
+ elif self.config.mpls:
+ get_mac_id = lambda packet: packet['binary'][24:30]
+ # mpls_transport_label = lambda packet: packet['binary'][14:18]
else:
get_mac_id = lambda packet: packet['binary'][6:12]
- for it in xrange(retry_count):
+ for it in range(retry_count):
self.gen.clear_stats()
self.gen.start_traffic()
self.gen.start_capture()
@@ -605,28 +934,47 @@ class TrafficClient(object):
self.gen.stop_traffic()
self.gen.fetch_capture_packets()
self.gen.stop_capture()
-
for packet in self.gen.packet_list:
- mac_id = get_mac_id(packet)
+ mac_id = get_mac_id(packet).decode('latin-1')
src_mac = ':'.join(["%02x" % ord(x) for x in mac_id])
- if src_mac in mac_map:
- port, chain = mac_map[src_mac]
- LOG.info('Received packet from mac: %s (chain=%d, port=%d)',
- src_mac, chain, port)
- mac_map.pop(src_mac, None)
+ if self.config.mpls:
+ if src_mac in mac_map and self.is_mpls(packet):
+ port, chain = mac_map[src_mac]
+ LOG.info('Received mpls packet from mac: %s (chain=%d, port=%d)',
+ src_mac, chain, port)
+ mac_map.pop(src_mac, None)
+ else:
+ if src_mac in mac_map and self.is_udp(packet):
+ port, chain = mac_map[src_mac]
+ LOG.info('Received udp packet from mac: %s (chain=%d, port=%d)',
+ src_mac, chain, port)
+ mac_map.pop(src_mac, None)
if not mac_map:
LOG.info('End-to-end connectivity established')
return
-
+ if self.config.l3_router and not self.config.no_arp:
+ # In case of L3 traffic mode, routers are not able to route traffic
+ # until VM interfaces are up and ARP requests are done
+ LOG.info('Waiting for loopback service completely started...')
+ LOG.info('Sending ARP request to assure end-to-end connectivity established')
+ self.ensure_arp_successful()
raise TrafficClientException('End-to-end connectivity cannot be ensured')
+ def is_udp(self, packet):
+ pkt = Ether(packet['binary'])
+ return UDP in pkt
+
+ def is_mpls(self, packet):
+ pkt = Ether(packet['binary'])
+ return MPLS in pkt
+
def ensure_arp_successful(self):
"""Resolve all IP using ARP and throw an exception in case of failure."""
dest_macs = self.gen.resolve_arp()
if dest_macs:
# all dest macs are discovered, saved them into the generator config
- if self.config.vxlan:
+ if self.config.vxlan or self.config.mpls:
self.generator_config.set_vtep_dest_macs(0, dest_macs[0])
self.generator_config.set_vtep_dest_macs(1, dest_macs[1])
else:
@@ -652,7 +1000,13 @@ class TrafficClient(object):
self.run_config['rates'][idx] = {'rate_pps': self.__convert_rates(rate)['rate_pps']}
self.gen.clear_streamblock()
- self.gen.create_traffic(frame_size, self.run_config['rates'], bidirectional, latency=True)
+
+ if self.config.no_latency_streams:
+ LOG.info("Latency streams are disabled")
+ # in service mode, we must disable flow stats (e2e=True)
+ self.gen.create_traffic(frame_size, self.run_config['rates'], bidirectional,
+ latency=not self.config.no_latency_streams,
+ e2e=self.runner.service_mode)
def _modify_load(self, load):
self.current_total_rate = {'rate_percent': str(load)}
@@ -709,31 +1063,37 @@ class TrafficClient(object):
def get_stats(self):
"""Collect final stats for previous run."""
- stats = self.gen.get_stats()
- retDict = {'total_tx_rate': stats['total_tx_rate']}
- for port in self.PORTS:
- retDict[port] = {'tx': {}, 'rx': {}}
+ stats = self.gen.get_stats(self.ifstats)
+ retDict = {'total_tx_rate': stats['total_tx_rate'],
+ 'offered_tx_rate_bps': stats['offered_tx_rate_bps'],
+ 'theoretical_tx_rate_bps': stats['theoretical_tx_rate_bps'],
+ 'theoretical_tx_rate_pps': stats['theoretical_tx_rate_pps']}
+
+ if self.config.periodic_gratuitous_arp:
+ retDict['garp_total_tx_rate'] = stats['garp_total_tx_rate']
tx_keys = ['total_pkts', 'total_pkt_bytes', 'pkt_rate', 'pkt_bit_rate']
rx_keys = tx_keys + ['dropped_pkts']
for port in self.PORTS:
+ port_stats = {'tx': {}, 'rx': {}}
for key in tx_keys:
- retDict[port]['tx'][key] = int(stats[port]['tx'][key])
+ port_stats['tx'][key] = int(stats[port]['tx'][key])
for key in rx_keys:
try:
- retDict[port]['rx'][key] = int(stats[port]['rx'][key])
+ port_stats['rx'][key] = int(stats[port]['rx'][key])
except ValueError:
- retDict[port]['rx'][key] = 0
- retDict[port]['rx']['avg_delay_usec'] = cast_integer(
+ port_stats['rx'][key] = 0
+ port_stats['rx']['avg_delay_usec'] = cast_integer(
stats[port]['rx']['avg_delay_usec'])
- retDict[port]['rx']['min_delay_usec'] = cast_integer(
+ port_stats['rx']['min_delay_usec'] = cast_integer(
stats[port]['rx']['min_delay_usec'])
- retDict[port]['rx']['max_delay_usec'] = cast_integer(
+ port_stats['rx']['max_delay_usec'] = cast_integer(
stats[port]['rx']['max_delay_usec'])
- retDict[port]['drop_rate_percent'] = self.__get_dropped_rate(retDict[port])
+ port_stats['drop_rate_percent'] = self.__get_dropped_rate(port_stats)
+ retDict[str(port)] = port_stats
- ports = sorted(retDict.keys())
+ ports = sorted(list(retDict.keys()), key=str)
if self.run_config['bidirectional']:
retDict['overall'] = {'tx': {}, 'rx': {}}
for key in tx_keys:
@@ -759,6 +1119,22 @@ class TrafficClient(object):
else:
retDict['overall'] = retDict[ports[0]]
retDict['overall']['drop_rate_percent'] = self.__get_dropped_rate(retDict['overall'])
+
+ if 'overall_hdrh' in stats:
+ retDict['overall']['hdrh'] = stats.get('overall_hdrh', None)
+ decoded_histogram = HdrHistogram.decode(retDict['overall']['hdrh'])
+ retDict['overall']['rx']['lat_percentile'] = {}
+ # override min max and avg from hdrh (only if histogram is valid)
+ if decoded_histogram.get_total_count() != 0:
+ retDict['overall']['rx']['min_delay_usec'] = decoded_histogram.get_min_value()
+ retDict['overall']['rx']['max_delay_usec'] = decoded_histogram.get_max_value()
+ retDict['overall']['rx']['avg_delay_usec'] = decoded_histogram.get_mean_value()
+ for percentile in self.config.lat_percentiles:
+ retDict['overall']['rx']['lat_percentile'][percentile] = \
+ decoded_histogram.get_value_at_percentile(percentile)
+ else:
+ for percentile in self.config.lat_percentiles:
+ retDict['overall']['rx']['lat_percentile'][percentile] = 'n/a'
return retDict
def __convert_rates(self, rate):
@@ -774,6 +1150,7 @@ class TrafficClient(object):
def __format_output_stats(self, stats):
for key in self.PORTS + ['overall']:
+ key = str(key)
interface = stats[key]
stats[key] = {
'tx_pkts': interface['tx']['total_pkts'],
@@ -785,10 +1162,26 @@ class TrafficClient(object):
'min_delay_usec': interface['rx']['min_delay_usec'],
}
+ if key == 'overall':
+ if 'hdrh' in interface:
+ stats[key]['hdrh'] = interface.get('hdrh', None)
+ decoded_histogram = HdrHistogram.decode(stats[key]['hdrh'])
+ stats[key]['lat_percentile'] = {}
+ # override min max and avg from hdrh (only if histogram is valid)
+ if decoded_histogram.get_total_count() != 0:
+ stats[key]['min_delay_usec'] = decoded_histogram.get_min_value()
+ stats[key]['max_delay_usec'] = decoded_histogram.get_max_value()
+ stats[key]['avg_delay_usec'] = decoded_histogram.get_mean_value()
+ for percentile in self.config.lat_percentiles:
+ stats[key]['lat_percentile'][percentile] = decoded_histogram.\
+ get_value_at_percentile(percentile)
+ else:
+ for percentile in self.config.lat_percentiles:
+ stats[key]['lat_percentile'][percentile] = 'n/a'
return stats
def __targets_found(self, rate, targets, results):
- for tag, target in targets.iteritems():
+ for tag, target in list(targets.items()):
LOG.info('Found %s (%s) load: %s', tag, target, rate)
self.__ndr_pdr_found(tag, rate)
results[tag]['timestamp_sec'] = time.time()
@@ -824,7 +1217,7 @@ class TrafficClient(object):
# Split target dicts based on the avg drop rate
left_targets = {}
right_targets = {}
- for tag, target in targets.iteritems():
+ for tag, target in list(targets.items()):
if stats['overall']['drop_rate_percent'] <= target:
# record the best possible rate found for this target
results[tag] = rates
@@ -870,6 +1263,17 @@ class TrafficClient(object):
"""
self._modify_load(rate)
+ # There used to be a inconsistency in case of interface speed override.
+ # The emulated 'intf_speed' value is unknown to the T-Rex generator which
+ # refers to the detected line rate for converting relative traffic loads.
+ # Therefore, we need to convert actual rates here, in terms of packets/s.
+
+ for idx, str_rate in enumerate(self.gen.rates):
+ if str_rate.endswith('%'):
+ float_rate = float(str_rate.replace('%', '').strip())
+ pps_rate = self.__convert_rates({'rate_percent': float_rate})['rate_pps']
+ self.gen.rates[idx] = str(pps_rate) + 'pps'
+
# poll interval stats and collect them
for stats in self.run_traffic():
self.interval_collector.add(stats)
@@ -893,25 +1297,32 @@ class TrafficClient(object):
LOG.info('Average drop rate: %f', stats['overall']['drop_rate_percent'])
return stats, current_traffic_config['direction-total']
- @staticmethod
- def log_stats(stats):
+ def log_stats(self, stats):
"""Log estimated stats during run."""
- report = {
- 'datetime': str(datetime.now()),
- 'tx_packets': stats['overall']['tx']['total_pkts'],
- 'rx_packets': stats['overall']['rx']['total_pkts'],
- 'drop_packets': stats['overall']['rx']['dropped_pkts'],
- 'drop_rate_percent': stats['overall']['drop_rate_percent']
- }
- LOG.info('TX: %(tx_packets)d; '
- 'RX: %(rx_packets)d; '
- 'Est. Dropped: %(drop_packets)d; '
- 'Est. Drop rate: %(drop_rate_percent).4f%%',
- report)
+ # Calculate a rolling drop rate based on differential to
+ # the previous reading
+ cur_tx = stats['overall']['tx']['total_pkts']
+ cur_rx = stats['overall']['rx']['total_pkts']
+ delta_tx = cur_tx - self.prev_tx
+ delta_rx = cur_rx - self.prev_rx
+ drops = delta_tx - delta_rx
+ if delta_tx == 0:
+ LOG.info("\x1b[1mConfiguration issue!\x1b[0m (no transmission)")
+ sys.exit(0)
+ drop_rate_pct = 100 * (delta_tx - delta_rx)/delta_tx
+ self.prev_tx = cur_tx
+ self.prev_rx = cur_rx
+ LOG.info('TX: %15s; RX: %15s; (Est.) Dropped: %12s; Drop rate: %8.4f%%',
+ format(cur_tx, ',d'),
+ format(cur_rx, ',d'),
+ format(drops, ',d'),
+ drop_rate_pct)
def run_traffic(self):
"""Start traffic and return intermediate stats for each interval."""
stats = self.runner.run()
+ self.prev_tx = 0
+ self.prev_rx = 0
while self.runner.is_running:
self.log_stats(stats)
yield stats
@@ -957,21 +1368,35 @@ class TrafficClient(object):
# because we want each direction to have the far end RX rates,
# use the far end index (1-idx) to retrieve the RX rates
for idx, key in enumerate(["direction-forward", "direction-reverse"]):
- tx_rate = results["stats"][idx]["tx"]["total_pkts"] / self.config.duration_sec
- rx_rate = results["stats"][1 - idx]["rx"]["total_pkts"] / self.config.duration_sec
+ tx_rate = results["stats"][str(idx)]["tx"]["total_pkts"] / self.config.duration_sec
+ rx_rate = results["stats"][str(1 - idx)]["rx"]["total_pkts"] / self.config.duration_sec
+
+ orig_rate = self.run_config['rates'][idx]
+ if self.config.periodic_gratuitous_arp:
+ orig_rate['rate_pps'] = float(
+ orig_rate['rate_pps']) - self.config.gratuitous_arp_pps
+
r[key] = {
- "orig": self.__convert_rates(self.run_config['rates'][idx]),
+ "orig": self.__convert_rates(orig_rate),
"tx": self.__convert_rates({'rate_pps': tx_rate}),
"rx": self.__convert_rates({'rate_pps': rx_rate})
}
+ if self.config.periodic_gratuitous_arp:
+ r['garp-direction-total'] = {
+ "orig": self.__convert_rates({'rate_pps': self.config.gratuitous_arp_pps * 2}),
+ "tx": self.__convert_rates({'rate_pps': results["stats"]["garp_total_tx_rate"]}),
+ "rx": self.__convert_rates({'rate_pps': 0})
+ }
+
total = {}
for direction in ['orig', 'tx', 'rx']:
total[direction] = {}
for unit in ['rate_percent', 'rate_bps', 'rate_pps']:
- total[direction][unit] = sum([float(x[direction][unit]) for x in r.values()])
+ total[direction][unit] = sum([float(x[direction][unit]) for x in list(r.values())])
r['direction-total'] = total
+
return r
def insert_interface_stats(self, pps_list):
@@ -998,7 +1423,7 @@ class TrafficClient(object):
for chain_idx in range(self.config.service_chain_count)]
# note that we need to make a copy of the ifs list so that any modification in the
# list from pps will not change the list saved in self.ifstats
- self.pps_list = [PacketPathStats(list(ifs)) for ifs in self.ifstats]
+ self.pps_list = [PacketPathStats(self.config, list(ifs)) for ifs in self.ifstats]
# insert the corresponding pps in the passed list
pps_list.extend(self.pps_list)
@@ -1017,7 +1442,7 @@ class TrafficClient(object):
]
"""
if diff:
- stats = self.gen.get_stats()
+ stats = self.gen.get_stats(self.ifstats)
for chain_idx, ifs in enumerate(self.ifstats):
# each ifs has exactly 2 InterfaceStats and 2 Latency instances
# corresponding to the
diff --git a/nfvbench/traffic_gen/dummy.py b/nfvbench/traffic_gen/dummy.py
index 9beea28..95147ab 100644
--- a/nfvbench/traffic_gen/dummy.py
+++ b/nfvbench/traffic_gen/dummy.py
@@ -13,8 +13,8 @@
# under the License.
from nfvbench.log import LOG
-from traffic_base import AbstractTrafficGenerator
-import traffic_utils as utils
+from .traffic_base import AbstractTrafficGenerator
+from . import traffic_utils as utils
class DummyTG(AbstractTrafficGenerator):
@@ -95,14 +95,14 @@ class DummyTG(AbstractTrafficGenerator):
ports = list(self.traffic_client.generator_config.ports)
self.port_handle = ports
- def create_traffic(self, l2frame_size, rates, bidirectional, latency=True):
+ def create_traffic(self, l2frame_size, rates, bidirectional, latency=True, e2e=False):
self.rates = [utils.to_rate_str(rate) for rate in rates]
self.l2_frame_size = l2frame_size
def clear_streamblock(self):
pass
- def get_stats(self):
+ def get_stats(self, ifstats=None):
"""Get stats from current run.
The binary search mainly looks at 2 results to make the decision:
@@ -147,6 +147,12 @@ class DummyTG(AbstractTrafficGenerator):
total_tx_pps += tx_pps
# actual total tx rate in pps
result['total_tx_rate'] = total_tx_pps
+ # actual offered tx rate in bps
+ avg_packet_size = utils.get_average_packet_size(self.l2_frame_size)
+ total_tx_bps = utils.pps_to_bps(total_tx_pps, avg_packet_size)
+ result['offered_tx_rate_bps'] = total_tx_bps
+
+ result.update(self.get_theoretical_rates(avg_packet_size))
return result
def get_stream_stats(self, tg_stats, if_stats, latencies, chain_idx):
@@ -176,8 +182,8 @@ class DummyTG(AbstractTrafficGenerator):
def fetch_capture_packets(self):
def _get_packet_capture(mac):
# convert text to binary
- src_mac = mac.replace(':', '').decode('hex')
- return {'binary': 'SSSSSS' + src_mac}
+ src_mac = bytearray.fromhex(mac.replace(':', '')).decode()
+ return {'binary': bytes('SSSSSS' + src_mac, 'ascii')}
# for packet capture, generate 2*scc random packets
# normally we should generate packets coming from the right dest macs
@@ -201,6 +207,9 @@ class DummyTG(AbstractTrafficGenerator):
def set_mode(self):
pass
+ def set_service_mode(self, enabled=True):
+ pass
+
def resolve_arp(self):
"""Resolve ARP sucessfully."""
def get_macs(port, scc):
diff --git a/nfvbench/traffic_gen/traffic_base.py b/nfvbench/traffic_gen/traffic_base.py
index 0360591..30aec6e 100644
--- a/nfvbench/traffic_gen/traffic_base.py
+++ b/nfvbench/traffic_gen/traffic_base.py
@@ -16,7 +16,9 @@ import abc
import sys
from nfvbench.log import LOG
-import traffic_utils
+from . import traffic_utils
+from hdrh.histogram import HdrHistogram
+from functools import reduce
class Latency(object):
@@ -27,29 +29,42 @@ class Latency(object):
latency_list: aggregate all latency values from list if not None
"""
- self.min_usec = sys.maxint
+ self.min_usec = sys.maxsize
self.max_usec = 0
self.avg_usec = 0
+ self.hdrh = None
if latency_list:
+ hdrh_list = []
for lat in latency_list:
if lat.available():
self.min_usec = min(self.min_usec, lat.min_usec)
self.max_usec = max(self.max_usec, lat.max_usec)
self.avg_usec += lat.avg_usec
+ if lat.hdrh_available():
+ hdrh_list.append(HdrHistogram.decode(lat.hdrh))
+
+ # aggregate histograms if any
+ if hdrh_list:
+ def add_hdrh(x, y):
+ x.add(y)
+ return x
+ decoded_hdrh = reduce(add_hdrh, hdrh_list)
+ self.hdrh = HdrHistogram.encode(decoded_hdrh).decode('utf-8')
+
# round to nearest usec
self.avg_usec = int(round(float(self.avg_usec) / len(latency_list)))
def available(self):
"""Return True if latency information is available."""
- return self.min_usec != sys.maxint
+ return self.min_usec != sys.maxsize
+ def hdrh_available(self):
+ """Return True if latency histogram information is available."""
+ return self.hdrh is not None
class TrafficGeneratorException(Exception):
"""Exception for traffic generator."""
- pass
-
-
class AbstractTrafficGenerator(object):
def __init__(self, traffic_client):
@@ -68,7 +83,7 @@ class AbstractTrafficGenerator(object):
return None
@abc.abstractmethod
- def create_traffic(self, l2frame_size, rates, bidirectional, latency=True):
+ def create_traffic(self, l2frame_size, rates, bidirectional, latency=True, e2e=False):
# Must be implemented by sub classes
return None
@@ -84,7 +99,7 @@ class AbstractTrafficGenerator(object):
LOG.info('Modified traffic stream for port %s, new rate=%s.', port, self.rates[port_index])
@abc.abstractmethod
- def get_stats(self):
+ def get_stats(self, ifstats):
# Must be implemented by sub classes
return None
@@ -105,7 +120,6 @@ class AbstractTrafficGenerator(object):
def clear_streamblock(self):
"""Clear all streams from the traffic generator."""
- pass
@abc.abstractmethod
def resolve_arp(self):
@@ -115,7 +129,6 @@ class AbstractTrafficGenerator(object):
else a dict of list of dest macs indexed by port#
the dest macs in the list are indexed by the chain id
"""
- pass
@abc.abstractmethod
def get_macs(self):
@@ -123,7 +136,6 @@ class AbstractTrafficGenerator(object):
return: a list of MAC addresses indexed by the port#
"""
- pass
@abc.abstractmethod
def get_port_speed_gbps(self):
@@ -131,4 +143,25 @@ class AbstractTrafficGenerator(object):
return: a list of speed in Gbps indexed by the port#
"""
- pass
+
+ def get_theoretical_rates(self, avg_packet_size):
+
+ result = {}
+
+ # actual interface speed? (may be a virtual override)
+ intf_speed = self.config.intf_speed_used
+
+ if hasattr(self.config, 'user_info') and self.config.user_info is not None:
+ if "extra_encapsulation_bytes" in self.config.user_info:
+ frame_size_full_encapsulation = avg_packet_size + self.config.user_info[
+ "extra_encapsulation_bytes"]
+ result['theoretical_tx_rate_pps'] = traffic_utils.bps_to_pps(
+ intf_speed, frame_size_full_encapsulation) * 2
+ result['theoretical_tx_rate_bps'] = traffic_utils.pps_to_bps(
+ result['theoretical_tx_rate_pps'], avg_packet_size)
+ else:
+ result['theoretical_tx_rate_pps'] = traffic_utils.bps_to_pps(intf_speed,
+ avg_packet_size) * 2
+ result['theoretical_tx_rate_bps'] = traffic_utils.pps_to_bps(
+ result['theoretical_tx_rate_pps'], avg_packet_size)
+ return result
diff --git a/nfvbench/traffic_gen/traffic_utils.py b/nfvbench/traffic_gen/traffic_utils.py
index f856267..4366a6c 100644
--- a/nfvbench/traffic_gen/traffic_utils.py
+++ b/nfvbench/traffic_gen/traffic_utils.py
@@ -14,7 +14,6 @@
import bitmath
-from nfvbench.utils import multiplier_map
# IMIX frame size including the 4-byte FCS field
IMIX_L2_SIZES = [64, 594, 1518]
@@ -23,6 +22,11 @@ IMIX_RATIOS = [7, 4, 1]
IMIX_AVG_L2_FRAME_SIZE = sum(
[1.0 * imix[0] * imix[1] for imix in zip(IMIX_L2_SIZES, IMIX_RATIOS)]) / sum(IMIX_RATIOS)
+multiplier_map = {
+ 'K': 1000,
+ 'M': 1000000,
+ 'G': 1000000000
+}
def convert_rates(l2frame_size, rate, intf_speed):
"""Convert a given rate unit into the other rate units.
@@ -54,12 +58,11 @@ def convert_rates(l2frame_size, rate, intf_speed):
pps = bps_to_pps(bps, avg_packet_size)
else:
raise Exception('Traffic config needs to have a rate type key')
-
return {
'initial_rate_type': initial_rate_type,
- 'rate_pps': int(pps),
+ 'rate_pps': int(float(pps)),
'rate_percent': load,
- 'rate_bps': int(bps)
+ 'rate_bps': int(float(bps))
}
@@ -113,23 +116,22 @@ def parse_rate_str(rate_str):
rate_pps = rate_pps[:-1]
except KeyError:
multiplier = 1
- rate_pps = int(rate_pps.strip()) * multiplier
+ rate_pps = int(float(rate_pps.strip()) * multiplier)
if rate_pps <= 0:
raise Exception('%s is out of valid range' % rate_str)
return {'rate_pps': str(rate_pps)}
- elif rate_str.endswith('ps'):
+ if rate_str.endswith('ps'):
rate = rate_str.replace('ps', '').strip()
bit_rate = bitmath.parse_string(rate).bits
if bit_rate <= 0:
raise Exception('%s is out of valid range' % rate_str)
return {'rate_bps': str(int(bit_rate))}
- elif rate_str.endswith('%'):
+ if rate_str.endswith('%'):
rate_percent = float(rate_str.replace('%', '').strip())
if rate_percent <= 0 or rate_percent > 100.0:
raise Exception('%s is out of valid range (must be 1-100%%)' % rate_str)
return {'rate_percent': str(rate_percent)}
- else:
- raise Exception('Unknown rate string format %s' % rate_str)
+ raise Exception('Unknown rate string format %s' % rate_str)
def get_load_from_rate(rate_str, avg_frame_size=64, line_rate='10Gbps'):
'''From any rate string (with unit) return the corresponding load (in % unit)
@@ -172,10 +174,10 @@ def to_rate_str(rate):
if 'rate_pps' in rate:
pps = rate['rate_pps']
return '{}pps'.format(pps)
- elif 'rate_bps' in rate:
+ if 'rate_bps' in rate:
bps = rate['rate_bps']
return '{}bps'.format(bps)
- elif 'rate_percent' in rate:
+ if 'rate_percent' in rate:
load = rate['rate_percent']
return '{}%'.format(load)
assert False
@@ -185,7 +187,7 @@ def to_rate_str(rate):
def nan_replace(d):
"""Replaces every occurence of 'N/A' with float nan."""
- for k, v in d.iteritems():
+ for k, v in d.items():
if isinstance(v, dict):
nan_replace(v)
elif v == 'N/A':
@@ -200,5 +202,5 @@ def mac_to_int(mac):
def int_to_mac(i):
"""Converts integer representation of MAC address to hex string."""
mac = format(i, 'x').zfill(12)
- blocks = [mac[x:x + 2] for x in xrange(0, len(mac), 2)]
+ blocks = [mac[x:x + 2] for x in range(0, len(mac), 2)]
return ':'.join(blocks)
diff --git a/nfvbench/traffic_gen/trex.py b/nfvbench/traffic_gen/trex.py
deleted file mode 100644
index 1f460f6..0000000
--- a/nfvbench/traffic_gen/trex.py
+++ /dev/null
@@ -1,700 +0,0 @@
-# Copyright 2016 Cisco Systems, Inc. All rights reserved.
-#
-# 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.
-"""Driver module for TRex traffic generator."""
-
-import math
-import os
-import random
-import time
-import traceback
-
-from itertools import count
-from nfvbench.log import LOG
-from nfvbench.traffic_server import TRexTrafficServer
-from nfvbench.utils import cast_integer
-from nfvbench.utils import timeout
-from nfvbench.utils import TimeoutError
-from traffic_base import AbstractTrafficGenerator
-from traffic_base import TrafficGeneratorException
-import traffic_utils as utils
-from traffic_utils import IMIX_AVG_L2_FRAME_SIZE
-from traffic_utils import IMIX_L2_SIZES
-from traffic_utils import IMIX_RATIOS
-
-# pylint: disable=import-error
-from trex_stl_lib.api import bind_layers
-from trex_stl_lib.api import CTRexVmInsFixHwCs
-from trex_stl_lib.api import Dot1Q
-from trex_stl_lib.api import Ether
-from trex_stl_lib.api import FlagsField
-from trex_stl_lib.api import IP
-from trex_stl_lib.api import Packet
-from trex_stl_lib.api import STLClient
-from trex_stl_lib.api import STLError
-from trex_stl_lib.api import STLFlowLatencyStats
-from trex_stl_lib.api import STLFlowStats
-from trex_stl_lib.api import STLPktBuilder
-from trex_stl_lib.api import STLScVmRaw
-from trex_stl_lib.api import STLStream
-from trex_stl_lib.api import STLTXCont
-from trex_stl_lib.api import STLVmFixChecksumHw
-from trex_stl_lib.api import STLVmFlowVar
-from trex_stl_lib.api import STLVmFlowVarRepetableRandom
-from trex_stl_lib.api import STLVmWrFlowVar
-from trex_stl_lib.api import ThreeBytesField
-from trex_stl_lib.api import UDP
-from trex_stl_lib.api import XByteField
-from trex_stl_lib.services.trex_stl_service_arp import STLServiceARP
-
-
-# pylint: enable=import-error
-
-class VXLAN(Packet):
- """VxLAN class."""
-
- _VXLAN_FLAGS = ['R' * 27] + ['I'] + ['R' * 5]
- name = "VXLAN"
- fields_desc = [FlagsField("flags", 0x08000000, 32, _VXLAN_FLAGS),
- ThreeBytesField("vni", 0),
- XByteField("reserved", 0x00)]
-
- def mysummary(self):
- """Summary."""
- return self.sprintf("VXLAN (vni=%VXLAN.vni%)")
-
-class TRex(AbstractTrafficGenerator):
- """TRex traffic generator driver."""
-
- LATENCY_PPS = 1000
- CHAIN_PG_ID_MASK = 0x007F
- PORT_PG_ID_MASK = 0x0080
- LATENCY_PG_ID_MASK = 0x0100
-
- def __init__(self, traffic_client):
- """Trex driver."""
- AbstractTrafficGenerator.__init__(self, traffic_client)
- self.client = None
- self.id = count()
- self.port_handle = []
- self.chain_count = self.generator_config.service_chain_count
- self.rates = []
- self.capture_id = None
- self.packet_list = []
-
- def get_version(self):
- """Get the Trex version."""
- return self.client.get_server_version() if self.client else ''
-
- def get_pg_id(self, port, chain_id):
- """Calculate the packet group IDs to use for a given port/stream type/chain_id.
-
- port: 0 or 1
- chain_id: identifies to which chain the pg_id is associated (0 to 255)
- return: pg_id, lat_pg_id
-
- We use a bit mask to set up the 3 fields:
- 0x007F: chain ID (8 bits for a max of 128 chains)
- 0x0080: port bit
- 0x0100: latency bit
- """
- pg_id = port * TRex.PORT_PG_ID_MASK | chain_id
- return pg_id, pg_id | TRex.LATENCY_PG_ID_MASK
-
- def extract_stats(self, in_stats):
- """Extract stats from dict returned by Trex API.
-
- :param in_stats: dict as returned by TRex api
- """
- utils.nan_replace(in_stats)
- # LOG.debug(in_stats)
-
- result = {}
- # port_handles should have only 2 elements: [0, 1]
- # so (1 - ph) will be the index for the far end port
- for ph in self.port_handle:
- stats = in_stats[ph]
- far_end_stats = in_stats[1 - ph]
- result[ph] = {
- 'tx': {
- 'total_pkts': cast_integer(stats['opackets']),
- 'total_pkt_bytes': cast_integer(stats['obytes']),
- 'pkt_rate': cast_integer(stats['tx_pps']),
- 'pkt_bit_rate': cast_integer(stats['tx_bps'])
- },
- 'rx': {
- 'total_pkts': cast_integer(stats['ipackets']),
- 'total_pkt_bytes': cast_integer(stats['ibytes']),
- 'pkt_rate': cast_integer(stats['rx_pps']),
- 'pkt_bit_rate': cast_integer(stats['rx_bps']),
- # how many pkts were dropped in RX direction
- # need to take the tx counter on the far end port
- 'dropped_pkts': cast_integer(
- far_end_stats['opackets'] - stats['ipackets'])
- }
- }
- self.__combine_latencies(in_stats, result[ph]['rx'], ph)
-
- total_tx_pkts = result[0]['tx']['total_pkts'] + result[1]['tx']['total_pkts']
- result["total_tx_rate"] = cast_integer(total_tx_pkts / self.config.duration_sec)
- result["flow_stats"] = in_stats["flow_stats"]
- result["latency"] = in_stats["latency"]
- return result
-
- def get_stream_stats(self, trex_stats, if_stats, latencies, chain_idx):
- """Extract the aggregated stats for a given chain.
-
- trex_stats: stats as returned by get_stats()
- if_stats: a list of 2 interface stats to update (port 0 and 1)
- latencies: a list of 2 Latency instances to update for this chain (port 0 and 1)
- latencies[p] is the latency for packets sent on port p
- if there are no latency streams, the Latency instances are not modified
- chain_idx: chain index of the interface stats
-
- The packet counts include normal and latency streams.
-
- Trex returns flows stats as follows:
-
- 'flow_stats': {0: {'rx_bps': {0: 0, 1: 0, 'total': 0},
- 'rx_bps_l1': {0: 0.0, 1: 0.0, 'total': 0.0},
- 'rx_bytes': {0: nan, 1: nan, 'total': nan},
- 'rx_pkts': {0: 0, 1: 15001, 'total': 15001},
- 'rx_pps': {0: 0, 1: 0, 'total': 0},
- 'tx_bps': {0: 0, 1: 0, 'total': 0},
- 'tx_bps_l1': {0: 0.0, 1: 0.0, 'total': 0.0},
- 'tx_bytes': {0: 1020068, 1: 0, 'total': 1020068},
- 'tx_pkts': {0: 15001, 1: 0, 'total': 15001},
- 'tx_pps': {0: 0, 1: 0, 'total': 0}},
- 1: {'rx_bps': {0: 0, 1: 0, 'total': 0},
- 'rx_bps_l1': {0: 0.0, 1: 0.0, 'total': 0.0},
- 'rx_bytes': {0: nan, 1: nan, 'total': nan},
- 'rx_pkts': {0: 0, 1: 15001, 'total': 15001},
- 'rx_pps': {0: 0, 1: 0, 'total': 0},
- 'tx_bps': {0: 0, 1: 0, 'total': 0},
- 'tx_bps_l1': {0: 0.0, 1: 0.0, 'total': 0.0},
- 'tx_bytes': {0: 1020068, 1: 0, 'total': 1020068},
- 'tx_pkts': {0: 15001, 1: 0, 'total': 15001},
- 'tx_pps': {0: 0, 1: 0, 'total': 0}},
- 128: {'rx_bps': {0: 0, 1: 0, 'total': 0},
- 'rx_bps_l1': {0: 0.0, 1: 0.0, 'total': 0.0},
- 'rx_bytes': {0: nan, 1: nan, 'total': nan},
- 'rx_pkts': {0: 15001, 1: 0, 'total': 15001},
- 'rx_pps': {0: 0, 1: 0, 'total': 0},
- 'tx_bps': {0: 0, 1: 0, 'total': 0},
- 'tx_bps_l1': {0: 0.0, 1: 0.0, 'total': 0.0},
- 'tx_bytes': {0: 0, 1: 1020068, 'total': 1020068},
- 'tx_pkts': {0: 0, 1: 15001, 'total': 15001},
- 'tx_pps': {0: 0, 1: 0, 'total': 0}},etc...
-
- the pg_id (0, 1, 128,...) is the key of the dict and is obtained using the
- get_pg_id() method.
- packet counters for a given stream sent on port p are reported as:
- - tx_pkts[p] on port p
- - rx_pkts[1-p] on the far end port
-
- This is a tricky/critical counter transposition operation because
- the results are grouped by port (not by stream):
- tx_pkts_port(p=0) comes from pg_id(port=0, chain_idx)['tx_pkts'][0]
- rx_pkts_port(p=0) comes from pg_id(port=1, chain_idx)['rx_pkts'][0]
- tx_pkts_port(p=1) comes from pg_id(port=1, chain_idx)['tx_pkts'][1]
- rx_pkts_port(p=1) comes from pg_id(port=0, chain_idx)['rx_pkts'][1]
-
- or using a more generic formula:
- tx_pkts_port(p) comes from pg_id(port=p, chain_idx)['tx_pkts'][p]
- rx_pkts_port(p) comes from pg_id(port=1-p, chain_idx)['rx_pkts'][p]
-
- the second formula is equivalent to
- rx_pkts_port(1-p) comes from pg_id(port=p, chain_idx)['rx_pkts'][1-p]
-
- If there are latency streams, those same counters need to be added in the same way
- """
- def get_latency(lval):
- try:
- return int(round(lval))
- except ValueError:
- return 0
-
- for ifs in if_stats:
- ifs.tx = ifs.rx = 0
- for port in range(2):
- pg_id, lat_pg_id = self.get_pg_id(port, chain_idx)
- for pid in [pg_id, lat_pg_id]:
- try:
- pg_stats = trex_stats['flow_stats'][pid]
- if_stats[port].tx += pg_stats['tx_pkts'][port]
- if_stats[1 - port].rx += pg_stats['rx_pkts'][1 - port]
- except KeyError:
- pass
- try:
- lat = trex_stats['latency'][lat_pg_id]['latency']
- # dropped_pkts += lat['err_cntrs']['dropped']
- latencies[port].max_usec = get_latency(lat['total_max'])
- if math.isnan(lat['total_min']):
- latencies[port].min_usec = 0
- latencies[port].avg_usec = 0
- else:
- latencies[port].min_usec = get_latency(lat['total_min'])
- latencies[port].avg_usec = get_latency(lat['average'])
- except KeyError:
- pass
-
- def __combine_latencies(self, in_stats, results, port_handle):
- """Traverse TRex result dictionary and combines chosen latency stats."""
- total_max = 0
- average = 0
- total_min = float("inf")
- for chain_id in range(self.chain_count):
- try:
- _, lat_pg_id = self.get_pg_id(port_handle, chain_id)
- lat = in_stats['latency'][lat_pg_id]['latency']
- # dropped_pkts += lat['err_cntrs']['dropped']
- total_max = max(lat['total_max'], total_max)
- total_min = min(lat['total_min'], total_min)
- average += lat['average']
- except KeyError:
- pass
- if total_min == float("inf"):
- total_min = 0
- results['min_delay_usec'] = total_min
- results['max_delay_usec'] = total_max
- results['avg_delay_usec'] = int(average / self.chain_count)
-
- def _bind_vxlan(self):
- bind_layers(UDP, VXLAN, dport=4789)
- bind_layers(VXLAN, Ether)
-
- def _create_pkt(self, stream_cfg, l2frame_size):
- """Create a packet of given size.
-
- l2frame_size: size of the L2 frame in bytes (including the 32-bit FCS)
- """
- # Trex will add the FCS field, so we need to remove 4 bytes from the l2 frame size
- frame_size = int(l2frame_size) - 4
-
- if stream_cfg['vxlan'] is True:
- self._bind_vxlan()
- encap_level = '1'
- pkt_base = Ether(src=stream_cfg['vtep_src_mac'], dst=stream_cfg['vtep_dst_mac'])
- if stream_cfg['vtep_vlan'] is not None:
- pkt_base /= Dot1Q(vlan=stream_cfg['vtep_vlan'])
- pkt_base /= IP(src=stream_cfg['vtep_src_ip'], dst=stream_cfg['vtep_dst_ip'])
- pkt_base /= UDP(sport=random.randint(1337, 32767), dport=4789)
- pkt_base /= VXLAN(vni=stream_cfg['net_vni'])
- pkt_base /= Ether(src=stream_cfg['mac_src'], dst=stream_cfg['mac_dst'])
- else:
- encap_level = '0'
- pkt_base = Ether(src=stream_cfg['mac_src'], dst=stream_cfg['mac_dst'])
-
- if stream_cfg['vlan_tag'] is not None:
- pkt_base /= Dot1Q(vlan=stream_cfg['vlan_tag'])
-
- udp_args = {}
- if stream_cfg['udp_src_port']:
- udp_args['sport'] = int(stream_cfg['udp_src_port'])
- if stream_cfg['udp_dst_port']:
- udp_args['dport'] = int(stream_cfg['udp_dst_port'])
- pkt_base /= IP() / UDP(**udp_args)
-
- if stream_cfg['ip_addrs_step'] == 'random':
- src_fv = STLVmFlowVarRepetableRandom(
- name="ip_src",
- min_value=stream_cfg['ip_src_addr'],
- max_value=stream_cfg['ip_src_addr_max'],
- size=4,
- seed=random.randint(0, 32767),
- limit=stream_cfg['ip_src_count'])
- dst_fv = STLVmFlowVarRepetableRandom(
- name="ip_dst",
- min_value=stream_cfg['ip_dst_addr'],
- max_value=stream_cfg['ip_dst_addr_max'],
- size=4,
- seed=random.randint(0, 32767),
- limit=stream_cfg['ip_dst_count'])
- else:
- src_fv = STLVmFlowVar(
- name="ip_src",
- min_value=stream_cfg['ip_src_addr'],
- max_value=stream_cfg['ip_src_addr'],
- size=4,
- op="inc",
- step=stream_cfg['ip_addrs_step'])
- dst_fv = STLVmFlowVar(
- name="ip_dst",
- min_value=stream_cfg['ip_dst_addr'],
- max_value=stream_cfg['ip_dst_addr_max'],
- size=4,
- op="inc",
- step=stream_cfg['ip_addrs_step'])
-
- vm_param = [
- src_fv,
- STLVmWrFlowVar(fv_name="ip_src", pkt_offset="IP:{}.src".format(encap_level)),
- dst_fv,
- STLVmWrFlowVar(fv_name="ip_dst", pkt_offset="IP:{}.dst".format(encap_level)),
- STLVmFixChecksumHw(l3_offset="IP:{}".format(encap_level),
- l4_offset="UDP:{}".format(encap_level),
- l4_type=CTRexVmInsFixHwCs.L4_TYPE_UDP)
- ]
- pad = max(0, frame_size - len(pkt_base)) * 'x'
-
- return STLPktBuilder(pkt=pkt_base / pad, vm=STLScVmRaw(vm_param))
-
- def generate_streams(self, port, chain_id, stream_cfg, l2frame, latency=True):
- """Create a list of streams corresponding to a given chain and stream config.
-
- port: port where the streams originate (0 or 1)
- chain_id: the chain to which the streams are associated to
- stream_cfg: stream configuration
- l2frame: L2 frame size (including 4-byte FCS) or 'IMIX'
- latency: if True also create a latency stream
- """
- streams = []
- pg_id, lat_pg_id = self.get_pg_id(port, chain_id)
- if l2frame == 'IMIX':
- for ratio, l2_frame_size in zip(IMIX_RATIOS, IMIX_L2_SIZES):
- pkt = self._create_pkt(stream_cfg, l2_frame_size)
- streams.append(STLStream(packet=pkt,
- flow_stats=STLFlowStats(pg_id=pg_id),
- mode=STLTXCont(pps=ratio)))
-
- if latency:
- # for IMIX, the latency packets have the average IMIX packet size
- pkt = self._create_pkt(stream_cfg, IMIX_AVG_L2_FRAME_SIZE)
-
- else:
- l2frame_size = int(l2frame)
- pkt = self._create_pkt(stream_cfg, l2frame_size)
- streams.append(STLStream(packet=pkt,
- flow_stats=STLFlowStats(pg_id=pg_id),
- mode=STLTXCont()))
- # for the latency stream, the minimum payload is 16 bytes even in case of vlan tagging
- # without vlan, the min l2 frame size is 64
- # with vlan it is 68
- # This only applies to the latency stream
- if latency and stream_cfg['vlan_tag'] and l2frame_size < 68:
- pkt = self._create_pkt(stream_cfg, 68)
-
- if latency:
- streams.append(STLStream(packet=pkt,
- flow_stats=STLFlowLatencyStats(pg_id=lat_pg_id),
- mode=STLTXCont(pps=self.LATENCY_PPS)))
- return streams
-
- @timeout(5)
- def __connect(self, client):
- client.connect()
-
- def __connect_after_start(self):
- # after start, Trex may take a bit of time to initialize
- # so we need to retry a few times
- for it in xrange(self.config.generic_retry_count):
- try:
- time.sleep(1)
- self.client.connect()
- break
- except Exception as ex:
- if it == (self.config.generic_retry_count - 1):
- raise
- LOG.info("Retrying connection to TRex (%s)...", ex.message)
-
- def connect(self):
- """Connect to the TRex server."""
- server_ip = self.generator_config.ip
- LOG.info("Connecting to TRex (%s)...", server_ip)
-
- # Connect to TRex server
- self.client = STLClient(server=server_ip)
- try:
- self.__connect(self.client)
- except (TimeoutError, STLError) as e:
- if server_ip == '127.0.0.1':
- try:
- self.__start_server()
- self.__connect_after_start()
- except (TimeoutError, STLError) as e:
- LOG.error('Cannot connect to TRex')
- LOG.error(traceback.format_exc())
- logpath = '/tmp/trex.log'
- if os.path.isfile(logpath):
- # Wait for TRex to finish writing error message
- last_size = 0
- for _ in xrange(self.config.generic_retry_count):
- size = os.path.getsize(logpath)
- if size == last_size:
- # probably not writing anymore
- break
- last_size = size
- time.sleep(1)
- with open(logpath, 'r') as f:
- message = f.read()
- else:
- message = e.message
- raise TrafficGeneratorException(message)
- else:
- raise TrafficGeneratorException(e.message)
-
- ports = list(self.generator_config.ports)
- self.port_handle = ports
- # Prepare the ports
- self.client.reset(ports)
- # Read HW information from each port
- # this returns an array of dict (1 per port)
- """
- Example of output for Intel XL710
- [{'arp': '-', 'src_ipv4': '-', u'supp_speeds': [40000], u'is_link_supported': True,
- 'grat_arp': 'off', 'speed': 40, u'index': 0, 'link_change_supported': 'yes',
- u'rx': {u'counters': 127, u'caps': [u'flow_stats', u'latency']},
- u'is_virtual': 'no', 'prom': 'off', 'src_mac': u'3c:fd:fe:a8:24:48', 'status': 'IDLE',
- u'description': u'Ethernet Controller XL710 for 40GbE QSFP+',
- 'dest': u'fa:16:3e:3c:63:04', u'is_fc_supported': False, 'vlan': '-',
- u'driver': u'net_i40e', 'led_change_supported': 'yes', 'rx_filter_mode': 'hardware match',
- 'fc': 'none', 'link': 'UP', u'hw_mac': u'3c:fd:fe:a8:24:48', u'pci_addr': u'0000:5e:00.0',
- 'mult': 'off', 'fc_supported': 'no', u'is_led_supported': True, 'rx_queue': 'off',
- 'layer_mode': 'Ethernet', u'numa': 0}, ...]
- """
- self.port_info = self.client.get_port_info(ports)
- LOG.info('Connected to TRex')
- for id, port in enumerate(self.port_info):
- LOG.info(' Port %d: %s speed=%dGbps mac=%s pci=%s driver=%s',
- id, port['description'], port['speed'], port['src_mac'],
- port['pci_addr'], port['driver'])
- # Make sure the 2 ports have the same speed
- if self.port_info[0]['speed'] != self.port_info[1]['speed']:
- raise TrafficGeneratorException('Traffic generator ports speed mismatch: %d/%d Gbps' %
- (self.port_info[0]['speed'],
- self.port_info[1]['speed']))
-
- def __start_server(self):
- server = TRexTrafficServer()
- server.run_server(self.generator_config)
-
- def resolve_arp(self):
- """Resolve all configured remote IP addresses.
-
- return: None if ARP failed to resolve for all IP addresses
- else a dict of list of dest macs indexed by port#
- the dest macs in the list are indexed by the chain id
- """
- self.client.set_service_mode(ports=self.port_handle)
- LOG.info('Polling ARP until successful...')
- arp_dest_macs = {}
- for port, device in zip(self.port_handle, self.generator_config.devices):
- # there should be 1 stream config per chain
- stream_configs = device.get_stream_configs()
- chain_count = len(stream_configs)
- ctx = self.client.create_service_ctx(port=port)
- # all dest macs on this port indexed by chain ID
- dst_macs = [None] * chain_count
- dst_macs_count = 0
- # the index in the list is the chain id
- if self.config.vxlan:
- arps = [
- STLServiceARP(ctx,
- src_ip=device.vtep_src_ip,
- dst_ip=device.vtep_dst_ip,
- vlan=device.vtep_vlan)
- for cfg in stream_configs
- ]
- else:
- arps = [
- STLServiceARP(ctx,
- src_ip=cfg['ip_src_tg_gw'],
- dst_ip=cfg['mac_discovery_gw'],
- # will be None if no vlan tagging
- vlan=cfg['vlan_tag'])
- for cfg in stream_configs
- ]
-
- for attempt in range(self.config.generic_retry_count):
- try:
- ctx.run(arps)
- except STLError:
- LOG.error(traceback.format_exc())
- continue
-
- unresolved = []
- for chain_id, mac in enumerate(dst_macs):
- if not mac:
- arp_record = arps[chain_id].get_record()
- if arp_record.dst_mac:
- dst_macs[chain_id] = arp_record.dst_mac
- dst_macs_count += 1
- LOG.info(' ARP: port=%d chain=%d src IP=%s dst IP=%s -> MAC=%s',
- port, chain_id,
- arp_record.src_ip,
- arp_record.dst_ip, arp_record.dst_mac)
- else:
- unresolved.append(arp_record.dst_ip)
- if dst_macs_count == chain_count:
- arp_dest_macs[port] = dst_macs
- LOG.info('ARP resolved successfully for port %s', port)
- break
- else:
- retry = attempt + 1
- LOG.info('Retrying ARP for: %s (retry %d/%d)',
- unresolved, retry, self.config.generic_retry_count)
- if retry < self.config.generic_retry_count:
- time.sleep(self.config.generic_poll_sec)
- else:
- LOG.error('ARP timed out for port %s (resolved %d out of %d)',
- port,
- dst_macs_count,
- chain_count)
- break
-
- self.client.set_service_mode(ports=self.port_handle, enabled=False)
- if len(arp_dest_macs) == len(self.port_handle):
- return arp_dest_macs
- return None
-
- def __is_rate_enough(self, l2frame_size, rates, bidirectional, latency):
- """Check if rate provided by user is above requirements. Applies only if latency is True."""
- intf_speed = self.generator_config.intf_speed
- if latency:
- if bidirectional:
- mult = 2
- total_rate = 0
- for rate in rates:
- r = utils.convert_rates(l2frame_size, rate, intf_speed)
- total_rate += int(r['rate_pps'])
- else:
- mult = 1
- total_rate = utils.convert_rates(l2frame_size, rates[0], intf_speed)
- # rate must be enough for latency stream and at least 1 pps for base stream per chain
- required_rate = (self.LATENCY_PPS + 1) * self.config.service_chain_count * mult
- result = utils.convert_rates(l2frame_size,
- {'rate_pps': required_rate},
- intf_speed * mult)
- result['result'] = total_rate >= required_rate
- return result
-
- return {'result': True}
-
- def create_traffic(self, l2frame_size, rates, bidirectional, latency=True):
- """Program all the streams in Trex server.
-
- l2frame_size: L2 frame size or IMIX
- rates: a list of 2 rates to run each direction
- each rate is a dict like {'rate_pps': '10kpps'}
- bidirectional: True if bidirectional
- latency: True if latency measurement is needed
- """
- r = self.__is_rate_enough(l2frame_size, rates, bidirectional, latency)
- if not r['result']:
- raise TrafficGeneratorException(
- 'Required rate in total is at least one of: \n{pps}pps \n{bps}bps \n{load}%.'
- .format(pps=r['rate_pps'],
- bps=r['rate_bps'],
- load=r['rate_percent']))
- # a dict of list of streams indexed by port#
- # in case of fixed size, has self.chain_count * 2 * 2 streams
- # (1 normal + 1 latency stream per direction per chain)
- # for IMIX, has self.chain_count * 2 * 4 streams
- # (3 normal + 1 latency stream per direction per chain)
- streamblock = {}
- for port in self.port_handle:
- streamblock[port] = []
- stream_cfgs = [d.get_stream_configs() for d in self.generator_config.devices]
- self.rates = [utils.to_rate_str(rate) for rate in rates]
- for chain_id, (fwd_stream_cfg, rev_stream_cfg) in enumerate(zip(*stream_cfgs)):
- streamblock[0].extend(self.generate_streams(self.port_handle[0],
- chain_id,
- fwd_stream_cfg,
- l2frame_size,
- latency=latency))
- if len(self.rates) > 1:
- streamblock[1].extend(self.generate_streams(self.port_handle[1],
- chain_id,
- rev_stream_cfg,
- l2frame_size,
- latency=bidirectional and latency))
-
- for port in self.port_handle:
- self.client.add_streams(streamblock[port], ports=port)
- LOG.info('Created %d traffic streams for port %s.', len(streamblock[port]), port)
-
- def clear_streamblock(self):
- """Clear all streams from TRex."""
- self.rates = []
- self.client.reset(self.port_handle)
- LOG.info('Cleared all existing streams')
-
- def get_stats(self):
- """Get stats from Trex."""
- stats = self.client.get_stats()
- return self.extract_stats(stats)
-
- def get_macs(self):
- """Return the Trex local port MAC addresses.
-
- return: a list of MAC addresses indexed by the port#
- """
- return [port['src_mac'] for port in self.port_info]
-
- def get_port_speed_gbps(self):
- """Return the Trex local port MAC addresses.
-
- return: a list of speed in Gbps indexed by the port#
- """
- return [port['speed'] for port in self.port_info]
-
- def clear_stats(self):
- """Clear all stats in the traffic gneerator."""
- if self.port_handle:
- self.client.clear_stats()
-
- def start_traffic(self):
- """Start generating traffic in all ports."""
- for port, rate in zip(self.port_handle, self.rates):
- self.client.start(ports=port, mult=rate, duration=self.config.duration_sec, force=True)
-
- def stop_traffic(self):
- """Stop generating traffic."""
- self.client.stop(ports=self.port_handle)
-
- def start_capture(self):
- """Capture all packets on both ports that are unicast to us."""
- if self.capture_id:
- self.stop_capture()
- # Need to filter out unwanted packets so we do not end up counting
- # src MACs of frames that are not unicast to us
- src_mac_list = self.get_macs()
- bpf_filter = "ether dst %s or ether dst %s" % (src_mac_list[0], src_mac_list[1])
- # ports must be set in service in order to enable capture
- self.client.set_service_mode(ports=self.port_handle)
- self.capture_id = self.client.start_capture(rx_ports=self.port_handle,
- bpf_filter=bpf_filter)
-
- def fetch_capture_packets(self):
- """Fetch capture packets in capture mode."""
- if self.capture_id:
- self.packet_list = []
- self.client.fetch_capture_packets(capture_id=self.capture_id['id'],
- output=self.packet_list)
-
- def stop_capture(self):
- """Stop capturing packets."""
- if self.capture_id:
- self.client.stop_capture(capture_id=self.capture_id['id'])
- self.capture_id = None
- self.client.set_service_mode(ports=self.port_handle, enabled=False)
-
- def cleanup(self):
- """Cleanup Trex driver."""
- if self.client:
- try:
- self.client.reset(self.port_handle)
- self.client.disconnect()
- except STLError:
- # TRex does not like a reset while in disconnected state
- pass
diff --git a/nfvbench/traffic_gen/trex_gen.py b/nfvbench/traffic_gen/trex_gen.py
new file mode 100644
index 0000000..dff72ac
--- /dev/null
+++ b/nfvbench/traffic_gen/trex_gen.py
@@ -0,0 +1,1208 @@
+# Copyright 2016 Cisco Systems, Inc. All rights reserved.
+#
+# 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.
+"""Driver module for TRex traffic generator."""
+
+import math
+import os
+import sys
+import random
+import time
+import traceback
+from functools import reduce
+
+from itertools import count
+# pylint: disable=import-error
+from scapy.contrib.mpls import MPLS # flake8: noqa
+# pylint: enable=import-error
+from nfvbench.log import LOG
+from nfvbench.specs import ChainType
+from nfvbench.traffic_server import TRexTrafficServer
+from nfvbench.utils import cast_integer
+from nfvbench.utils import timeout
+from nfvbench.utils import TimeoutError
+
+from hdrh.histogram import HdrHistogram
+
+# pylint: disable=import-error
+from trex.common.services.trex_service_arp import ServiceARP
+from trex.stl.api import ARP
+from trex.stl.api import bind_layers
+from trex.stl.api import CTRexVmInsFixHwCs
+from trex.stl.api import Dot1Q
+from trex.stl.api import Ether
+from trex.stl.api import FlagsField
+from trex.stl.api import IP
+from trex.stl.api import Packet
+from trex.stl.api import STLClient
+from trex.stl.api import STLError
+from trex.stl.api import STLFlowLatencyStats
+from trex.stl.api import STLFlowStats
+from trex.stl.api import STLPktBuilder
+from trex.stl.api import STLScVmRaw
+from trex.stl.api import STLStream
+from trex.stl.api import STLTXCont
+from trex.stl.api import STLTXMultiBurst
+from trex.stl.api import STLVmFixChecksumHw
+from trex.stl.api import STLVmFixIpv4
+from trex.stl.api import STLVmFlowVar
+from trex.stl.api import STLVmFlowVarRepeatableRandom
+from trex.stl.api import STLVmTupleGen
+from trex.stl.api import STLVmWrFlowVar
+from trex.stl.api import ThreeBytesField
+from trex.stl.api import UDP
+from trex.stl.api import XByteField
+
+# pylint: enable=import-error
+
+from .traffic_base import AbstractTrafficGenerator
+from .traffic_base import TrafficGeneratorException
+from . import traffic_utils as utils
+from .traffic_utils import IMIX_AVG_L2_FRAME_SIZE
+from .traffic_utils import IMIX_L2_SIZES
+from .traffic_utils import IMIX_RATIOS
+
+class VXLAN(Packet):
+ """VxLAN class."""
+
+ _VXLAN_FLAGS = ['R' * 27] + ['I'] + ['R' * 5]
+ name = "VXLAN"
+ fields_desc = [FlagsField("flags", 0x08000000, 32, _VXLAN_FLAGS),
+ ThreeBytesField("vni", 0),
+ XByteField("reserved", 0x00)]
+
+ def mysummary(self):
+ """Summary."""
+ return self.sprintf("VXLAN (vni=%VXLAN.vni%)")
+
+class TRex(AbstractTrafficGenerator):
+ """TRex traffic generator driver."""
+
+ LATENCY_PPS = 1000
+ CHAIN_PG_ID_MASK = 0x007F
+ PORT_PG_ID_MASK = 0x0080
+ LATENCY_PG_ID_MASK = 0x0100
+
+ def __init__(self, traffic_client):
+ """Trex driver."""
+ AbstractTrafficGenerator.__init__(self, traffic_client)
+ self.client = None
+ self.id = count()
+ self.port_handle = []
+ self.chain_count = self.generator_config.service_chain_count
+ self.rates = []
+ self.capture_id = None
+ self.packet_list = []
+ self.l2_frame_size = 0
+
+ def get_version(self):
+ """Get the Trex version."""
+ return self.client.get_server_version() if self.client else ''
+
+ def get_pg_id(self, port, chain_id):
+ """Calculate the packet group IDs to use for a given port/stream type/chain_id.
+
+ port: 0 or 1
+ chain_id: identifies to which chain the pg_id is associated (0 to 255)
+ return: pg_id, lat_pg_id
+
+ We use a bit mask to set up the 3 fields:
+ 0x007F: chain ID (8 bits for a max of 128 chains)
+ 0x0080: port bit
+ 0x0100: latency bit
+ """
+ pg_id = port * TRex.PORT_PG_ID_MASK | chain_id
+ return pg_id, pg_id | TRex.LATENCY_PG_ID_MASK
+
+ def extract_stats(self, in_stats, ifstats):
+ """Extract stats from dict returned by Trex API.
+
+ :param in_stats: dict as returned by TRex api
+ """
+ utils.nan_replace(in_stats)
+ # LOG.debug(in_stats)
+
+ result = {}
+ # port_handles should have only 2 elements: [0, 1]
+ # so (1 - ph) will be the index for the far end port
+ for ph in self.port_handle:
+ stats = in_stats[ph]
+ far_end_stats = in_stats[1 - ph]
+ result[ph] = {
+ 'tx': {
+ 'total_pkts': cast_integer(stats['opackets']),
+ 'total_pkt_bytes': cast_integer(stats['obytes']),
+ 'pkt_rate': cast_integer(stats['tx_pps']),
+ 'pkt_bit_rate': cast_integer(stats['tx_bps'])
+ },
+ 'rx': {
+ 'total_pkts': cast_integer(stats['ipackets']),
+ 'total_pkt_bytes': cast_integer(stats['ibytes']),
+ 'pkt_rate': cast_integer(stats['rx_pps']),
+ 'pkt_bit_rate': cast_integer(stats['rx_bps']),
+ # how many pkts were dropped in RX direction
+ # need to take the tx counter on the far end port
+ 'dropped_pkts': cast_integer(
+ far_end_stats['opackets'] - stats['ipackets'])
+ }
+ }
+ self.__combine_latencies(in_stats, result[ph]['rx'], ph)
+
+ total_tx_pkts = result[0]['tx']['total_pkts'] + result[1]['tx']['total_pkts']
+
+ # in case of GARP packets we need to base total_tx_pkts value using flow_stats
+ # as no GARP packets have no flow stats and will not be received on the other port
+ if self.config.periodic_gratuitous_arp:
+ if not self.config.no_flow_stats and not self.config.no_latency_stats:
+ global_total_tx_pkts = total_tx_pkts
+ total_tx_pkts = 0
+ if ifstats:
+ for chain_id, _ in enumerate(ifstats):
+ for ph in self.port_handle:
+ pg_id, lat_pg_id = self.get_pg_id(ph, chain_id)
+ flows_tx_pkts = in_stats['flow_stats'][pg_id]['tx_pkts']['total'] + \
+ in_stats['flow_stats'][lat_pg_id]['tx_pkts']['total']
+ result[ph]['tx']['total_pkts'] = flows_tx_pkts
+ total_tx_pkts += flows_tx_pkts
+ else:
+ for pg_id in in_stats['flow_stats']:
+ if pg_id != 'global':
+ total_tx_pkts += in_stats['flow_stats'][pg_id]['tx_pkts']['total']
+ result["garp_total_tx_rate"] = cast_integer(
+ (global_total_tx_pkts - total_tx_pkts) / self.config.duration_sec)
+ else:
+ LOG.warning("Gratuitous ARP are not received by the other port so TRex and NFVbench"
+ " see these packets as dropped. Please do not activate no_flow_stats"
+ " and no_latency_stats properties to have a better drop rate.")
+
+ result["total_tx_rate"] = cast_integer(total_tx_pkts / self.config.duration_sec)
+ # actual offered tx rate in bps
+ avg_packet_size = utils.get_average_packet_size(self.l2_frame_size)
+ total_tx_bps = utils.pps_to_bps(result["total_tx_rate"], avg_packet_size)
+ result['offered_tx_rate_bps'] = total_tx_bps
+
+ result.update(self.get_theoretical_rates(avg_packet_size))
+
+ result["flow_stats"] = in_stats["flow_stats"]
+ result["latency"] = in_stats["latency"]
+
+ # Merge HDRHistogram to have an overall value for all chains and ports
+ # (provided that the histogram exists in the stats returned by T-Rex)
+ # Of course, empty histograms will produce an empty (invalid) histogram.
+ try:
+ hdrh_list = []
+ if ifstats:
+ for chain_id, _ in enumerate(ifstats):
+ for ph in self.port_handle:
+ _, lat_pg_id = self.get_pg_id(ph, chain_id)
+ hdrh_list.append(
+ HdrHistogram.decode(in_stats['latency'][lat_pg_id]['latency']['hdrh']))
+ else:
+ for pg_id in in_stats['latency']:
+ if pg_id != 'global':
+ hdrh_list.append(
+ HdrHistogram.decode(in_stats['latency'][pg_id]['latency']['hdrh']))
+
+ def add_hdrh(x, y):
+ x.add(y)
+ return x
+ decoded_hdrh = reduce(add_hdrh, hdrh_list)
+ result["overall_hdrh"] = HdrHistogram.encode(decoded_hdrh).decode('utf-8')
+ except KeyError:
+ pass
+
+ return result
+
+ def get_stream_stats(self, trex_stats, if_stats, latencies, chain_idx):
+ """Extract the aggregated stats for a given chain.
+
+ trex_stats: stats as returned by get_stats()
+ if_stats: a list of 2 interface stats to update (port 0 and 1)
+ latencies: a list of 2 Latency instances to update for this chain (port 0 and 1)
+ latencies[p] is the latency for packets sent on port p
+ if there are no latency streams, the Latency instances are not modified
+ chain_idx: chain index of the interface stats
+
+ The packet counts include normal and latency streams.
+
+ Trex returns flows stats as follows:
+
+ 'flow_stats': {0: {'rx_bps': {0: 0, 1: 0, 'total': 0},
+ 'rx_bps_l1': {0: 0.0, 1: 0.0, 'total': 0.0},
+ 'rx_bytes': {0: nan, 1: nan, 'total': nan},
+ 'rx_pkts': {0: 0, 1: 15001, 'total': 15001},
+ 'rx_pps': {0: 0, 1: 0, 'total': 0},
+ 'tx_bps': {0: 0, 1: 0, 'total': 0},
+ 'tx_bps_l1': {0: 0.0, 1: 0.0, 'total': 0.0},
+ 'tx_bytes': {0: 1020068, 1: 0, 'total': 1020068},
+ 'tx_pkts': {0: 15001, 1: 0, 'total': 15001},
+ 'tx_pps': {0: 0, 1: 0, 'total': 0}},
+ 1: {'rx_bps': {0: 0, 1: 0, 'total': 0},
+ 'rx_bps_l1': {0: 0.0, 1: 0.0, 'total': 0.0},
+ 'rx_bytes': {0: nan, 1: nan, 'total': nan},
+ 'rx_pkts': {0: 0, 1: 15001, 'total': 15001},
+ 'rx_pps': {0: 0, 1: 0, 'total': 0},
+ 'tx_bps': {0: 0, 1: 0, 'total': 0},
+ 'tx_bps_l1': {0: 0.0, 1: 0.0, 'total': 0.0},
+ 'tx_bytes': {0: 1020068, 1: 0, 'total': 1020068},
+ 'tx_pkts': {0: 15001, 1: 0, 'total': 15001},
+ 'tx_pps': {0: 0, 1: 0, 'total': 0}},
+ 128: {'rx_bps': {0: 0, 1: 0, 'total': 0},
+ 'rx_bps_l1': {0: 0.0, 1: 0.0, 'total': 0.0},
+ 'rx_bytes': {0: nan, 1: nan, 'total': nan},
+ 'rx_pkts': {0: 15001, 1: 0, 'total': 15001},
+ 'rx_pps': {0: 0, 1: 0, 'total': 0},
+ 'tx_bps': {0: 0, 1: 0, 'total': 0},
+ 'tx_bps_l1': {0: 0.0, 1: 0.0, 'total': 0.0},
+ 'tx_bytes': {0: 0, 1: 1020068, 'total': 1020068},
+ 'tx_pkts': {0: 0, 1: 15001, 'total': 15001},
+ 'tx_pps': {0: 0, 1: 0, 'total': 0}},etc...
+
+ the pg_id (0, 1, 128,...) is the key of the dict and is obtained using the
+ get_pg_id() method.
+ packet counters for a given stream sent on port p are reported as:
+ - tx_pkts[p] on port p
+ - rx_pkts[1-p] on the far end port
+
+ This is a tricky/critical counter transposition operation because
+ the results are grouped by port (not by stream):
+ tx_pkts_port(p=0) comes from pg_id(port=0, chain_idx)['tx_pkts'][0]
+ rx_pkts_port(p=0) comes from pg_id(port=1, chain_idx)['rx_pkts'][0]
+ tx_pkts_port(p=1) comes from pg_id(port=1, chain_idx)['tx_pkts'][1]
+ rx_pkts_port(p=1) comes from pg_id(port=0, chain_idx)['rx_pkts'][1]
+
+ or using a more generic formula:
+ tx_pkts_port(p) comes from pg_id(port=p, chain_idx)['tx_pkts'][p]
+ rx_pkts_port(p) comes from pg_id(port=1-p, chain_idx)['rx_pkts'][p]
+
+ the second formula is equivalent to
+ rx_pkts_port(1-p) comes from pg_id(port=p, chain_idx)['rx_pkts'][1-p]
+
+ If there are latency streams, those same counters need to be added in the same way
+ """
+ def get_latency(lval):
+ try:
+ return int(round(lval))
+ except ValueError:
+ return 0
+
+ for ifs in if_stats:
+ ifs.tx = ifs.rx = 0
+ for port in range(2):
+ pg_id, lat_pg_id = self.get_pg_id(port, chain_idx)
+ for pid in [pg_id, lat_pg_id]:
+ try:
+ pg_stats = trex_stats['flow_stats'][pid]
+ if_stats[port].tx += pg_stats['tx_pkts'][port]
+ if_stats[1 - port].rx += pg_stats['rx_pkts'][1 - port]
+ except KeyError:
+ pass
+ try:
+ lat = trex_stats['latency'][lat_pg_id]['latency']
+ # dropped_pkts += lat['err_cntrs']['dropped']
+ latencies[port].max_usec = get_latency(lat['total_max'])
+ if math.isnan(lat['total_min']):
+ latencies[port].min_usec = 0
+ latencies[port].avg_usec = 0
+ else:
+ latencies[port].min_usec = get_latency(lat['total_min'])
+ latencies[port].avg_usec = get_latency(lat['average'])
+ # pick up the HDR histogram if present (otherwise will raise KeyError)
+ latencies[port].hdrh = lat['hdrh']
+ except KeyError:
+ pass
+
+ def __combine_latencies(self, in_stats, results, port_handle):
+ """Traverse TRex result dictionary and combines chosen latency stats.
+
+ example of latency dict returned by trex (2 chains):
+ 'latency': {256: {'err_cntrs': {'dropped': 0,
+ 'dup': 0,
+ 'out_of_order': 0,
+ 'seq_too_high': 0,
+ 'seq_too_low': 0},
+ 'latency': {'average': 26.5,
+ 'hdrh': u'HISTFAAAAEx4nJNpmSgz...bFRgxi',
+ 'histogram': {20: 303,
+ 30: 320,
+ 40: 300,
+ 50: 73,
+ 60: 4,
+ 70: 1},
+ 'jitter': 14,
+ 'last_max': 63,
+ 'total_max': 63,
+ 'total_min': 20}},
+ 257: {'err_cntrs': {'dropped': 0,
+ 'dup': 0,
+ 'out_of_order': 0,
+ 'seq_too_high': 0,
+ 'seq_too_low': 0},
+ 'latency': {'average': 29.75,
+ 'hdrh': u'HISTFAAAAEV4nJN...CALilDG0=',
+ 'histogram': {20: 261,
+ 30: 431,
+ 40: 3,
+ 50: 80,
+ 60: 225},
+ 'jitter': 23,
+ 'last_max': 67,
+ 'total_max': 67,
+ 'total_min': 20}},
+ 384: {'err_cntrs': {'dropped': 0,
+ 'dup': 0,
+ 'out_of_order': 0,
+ 'seq_too_high': 0,
+ 'seq_too_low': 0},
+ 'latency': {'average': 18.0,
+ 'hdrh': u'HISTFAAAADR4nJNpm...MjCwDDxAZG',
+ 'histogram': {20: 987, 30: 14},
+ 'jitter': 0,
+ 'last_max': 34,
+ 'total_max': 34,
+ 'total_min': 20}},
+ 385: {'err_cntrs': {'dropped': 0,
+ 'dup': 0,
+ 'out_of_order': 0,
+ 'seq_too_high': 0,
+ 'seq_too_low': 0},
+ 'latency': {'average': 19.0,
+ 'hdrh': u'HISTFAAAADR4nJNpm...NkYmJgDdagfK',
+ 'histogram': {20: 989, 30: 11},
+ 'jitter': 0,
+ 'last_max': 38,
+ 'total_max': 38,
+ 'total_min': 20}},
+ 'global': {'bad_hdr': 0, 'old_flow': 0}},
+ """
+ total_max = 0
+ average = 0
+ total_min = float("inf")
+ for chain_id in range(self.chain_count):
+ try:
+ _, lat_pg_id = self.get_pg_id(port_handle, chain_id)
+ lat = in_stats['latency'][lat_pg_id]['latency']
+ # dropped_pkts += lat['err_cntrs']['dropped']
+ total_max = max(lat['total_max'], total_max)
+ total_min = min(lat['total_min'], total_min)
+ average += lat['average']
+ except KeyError:
+ pass
+ if total_min == float("inf"):
+ total_min = 0
+ results['min_delay_usec'] = total_min
+ results['max_delay_usec'] = total_max
+ results['avg_delay_usec'] = int(average / self.chain_count)
+
+ def _bind_vxlan(self):
+ bind_layers(UDP, VXLAN, dport=4789)
+ bind_layers(VXLAN, Ether)
+
+ def _create_pkt(self, stream_cfg, l2frame_size, disable_random_latency_flow=False):
+ """Create a packet of given size.
+
+ l2frame_size: size of the L2 frame in bytes (including the 32-bit FCS)
+ """
+ # Trex will add the FCS field, so we need to remove 4 bytes from the l2 frame size
+ frame_size = int(l2frame_size) - 4
+ vm_param = []
+ if stream_cfg['vxlan'] is True:
+ self._bind_vxlan()
+ encap_level = '1'
+ pkt_base = Ether(src=stream_cfg['vtep_src_mac'], dst=stream_cfg['vtep_dst_mac'])
+ if stream_cfg['vtep_vlan'] is not None:
+ pkt_base /= Dot1Q(vlan=stream_cfg['vtep_vlan'])
+ pkt_base /= IP(src=stream_cfg['vtep_src_ip'], dst=stream_cfg['vtep_dst_ip'])
+ pkt_base /= UDP(sport=random.randint(1337, 32767), dport=4789)
+ pkt_base /= VXLAN(vni=stream_cfg['net_vni'])
+ pkt_base /= Ether(src=stream_cfg['mac_src'], dst=stream_cfg['mac_dst'])
+ # need to randomize the outer header UDP src port based on flow
+ vxlan_udp_src_fv = STLVmFlowVar(
+ name="vxlan_udp_src",
+ min_value=1337,
+ max_value=32767,
+ size=2,
+ op="random")
+ vm_param = [vxlan_udp_src_fv,
+ STLVmWrFlowVar(fv_name="vxlan_udp_src", pkt_offset="UDP.sport")]
+ elif stream_cfg['mpls'] is True:
+ encap_level = '0'
+ pkt_base = Ether(src=stream_cfg['vtep_src_mac'], dst=stream_cfg['vtep_dst_mac'])
+ if stream_cfg['vtep_vlan'] is not None:
+ pkt_base /= Dot1Q(vlan=stream_cfg['vtep_vlan'])
+ if stream_cfg['mpls_outer_label'] is not None:
+ pkt_base /= MPLS(label=stream_cfg['mpls_outer_label'], cos=1, s=0, ttl=255)
+ if stream_cfg['mpls_inner_label'] is not None:
+ pkt_base /= MPLS(label=stream_cfg['mpls_inner_label'], cos=1, s=1, ttl=255)
+ # Flow stats and MPLS labels randomization TBD
+ pkt_base /= Ether(src=stream_cfg['mac_src'], dst=stream_cfg['mac_dst'])
+ else:
+ encap_level = '0'
+ pkt_base = Ether(src=stream_cfg['mac_src'], dst=stream_cfg['mac_dst'])
+
+ if stream_cfg['vlan_tag'] is not None:
+ pkt_base /= Dot1Q(vlan=stream_cfg['vlan_tag'])
+
+ udp_args = {}
+ if stream_cfg['udp_src_port']:
+ udp_args['sport'] = int(stream_cfg['udp_src_port'])
+ if stream_cfg['udp_port_step'] == 'random':
+ step = 1
+ else:
+ step = stream_cfg['udp_port_step']
+ udp_args['sport_step'] = int(step)
+ udp_args['sport_max'] = int(stream_cfg['udp_src_port_max'])
+ if stream_cfg['udp_dst_port']:
+ udp_args['dport'] = int(stream_cfg['udp_dst_port'])
+ if stream_cfg['udp_port_step'] == 'random':
+ step = 1
+ else:
+ step = stream_cfg['udp_port_step']
+ udp_args['dport_step'] = int(step)
+ udp_args['dport_max'] = int(stream_cfg['udp_dst_port_max'])
+
+ pkt_base /= IP(src=stream_cfg['ip_src_addr'], dst=stream_cfg['ip_dst_addr']) / \
+ UDP(dport=udp_args['dport'], sport=udp_args['sport'])
+
+ # STLVmTupleGen need flow count >= cores used by TRex, if FC < cores we used STLVmFlowVar
+ if stream_cfg['ip_addrs_step'] == '0.0.0.1' and stream_cfg['udp_port_step'] == '1' and \
+ stream_cfg['count'] >= self.generator_config.cores:
+ src_fv = STLVmTupleGen(ip_min=stream_cfg['ip_src_addr'],
+ ip_max=stream_cfg['ip_src_addr_max'],
+ port_min=udp_args['sport'],
+ port_max=udp_args['sport_max'],
+ name="tuple_src",
+ limit_flows=stream_cfg['count'])
+ dst_fv = STLVmTupleGen(ip_min=stream_cfg['ip_dst_addr'],
+ ip_max=stream_cfg['ip_dst_addr_max'],
+ port_min=udp_args['dport'],
+ port_max=udp_args['dport_max'],
+ name="tuple_dst",
+ limit_flows=stream_cfg['count'])
+ vm_param = [
+ src_fv,
+ STLVmWrFlowVar(fv_name="tuple_src.ip",
+ pkt_offset="IP:{}.src".format(encap_level)),
+ STLVmWrFlowVar(fv_name="tuple_src.port",
+ pkt_offset="UDP:{}.sport".format(encap_level)),
+ dst_fv,
+ STLVmWrFlowVar(fv_name="tuple_dst.ip",
+ pkt_offset="IP:{}.dst".format(encap_level)),
+ STLVmWrFlowVar(fv_name="tuple_dst.port",
+ pkt_offset="UDP:{}.dport".format(encap_level)),
+ ]
+ else:
+ if disable_random_latency_flow:
+ src_fv_ip = STLVmFlowVar(
+ name="ip_src",
+ min_value=stream_cfg['ip_src_addr'],
+ max_value=stream_cfg['ip_src_addr'],
+ size=4)
+ dst_fv_ip = STLVmFlowVar(
+ name="ip_dst",
+ min_value=stream_cfg['ip_dst_addr'],
+ max_value=stream_cfg['ip_dst_addr'],
+ size=4)
+ elif stream_cfg['ip_addrs_step'] == 'random':
+ src_fv_ip = STLVmFlowVarRepeatableRandom(
+ name="ip_src",
+ min_value=stream_cfg['ip_src_addr'],
+ max_value=stream_cfg['ip_src_addr_max'],
+ size=4,
+ seed=random.randint(0, 32767),
+ limit=stream_cfg['ip_src_count'])
+ dst_fv_ip = STLVmFlowVarRepeatableRandom(
+ name="ip_dst",
+ min_value=stream_cfg['ip_dst_addr'],
+ max_value=stream_cfg['ip_dst_addr_max'],
+ size=4,
+ seed=random.randint(0, 32767),
+ limit=stream_cfg['ip_dst_count'])
+ else:
+ src_fv_ip = STLVmFlowVar(
+ name="ip_src",
+ min_value=stream_cfg['ip_src_addr'],
+ max_value=stream_cfg['ip_src_addr_max'],
+ size=4,
+ op="inc",
+ step=stream_cfg['ip_addrs_step'])
+ dst_fv_ip = STLVmFlowVar(
+ name="ip_dst",
+ min_value=stream_cfg['ip_dst_addr'],
+ max_value=stream_cfg['ip_dst_addr_max'],
+ size=4,
+ op="inc",
+ step=stream_cfg['ip_addrs_step'])
+
+ if disable_random_latency_flow:
+ src_fv_port = STLVmFlowVar(
+ name="p_src",
+ min_value=udp_args['sport'],
+ max_value=udp_args['sport'],
+ size=2)
+ dst_fv_port = STLVmFlowVar(
+ name="p_dst",
+ min_value=udp_args['dport'],
+ max_value=udp_args['dport'],
+ size=2)
+ elif stream_cfg['udp_port_step'] == 'random':
+ src_fv_port = STLVmFlowVarRepeatableRandom(
+ name="p_src",
+ min_value=udp_args['sport'],
+ max_value=udp_args['sport_max'],
+ size=2,
+ seed=random.randint(0, 32767),
+ limit=stream_cfg['udp_src_count'])
+ dst_fv_port = STLVmFlowVarRepeatableRandom(
+ name="p_dst",
+ min_value=udp_args['dport'],
+ max_value=udp_args['dport_max'],
+ size=2,
+ seed=random.randint(0, 32767),
+ limit=stream_cfg['udp_dst_count'])
+ else:
+ src_fv_port = STLVmFlowVar(
+ name="p_src",
+ min_value=udp_args['sport'],
+ max_value=udp_args['sport_max'],
+ size=2,
+ op="inc",
+ step=udp_args['sport_step'])
+ dst_fv_port = STLVmFlowVar(
+ name="p_dst",
+ min_value=udp_args['dport'],
+ max_value=udp_args['dport_max'],
+ size=2,
+ op="inc",
+ step=udp_args['dport_step'])
+ vm_param = [
+ src_fv_ip,
+ STLVmWrFlowVar(fv_name="ip_src", pkt_offset="IP:{}.src".format(encap_level)),
+ src_fv_port,
+ STLVmWrFlowVar(fv_name="p_src", pkt_offset="UDP:{}.sport".format(encap_level)),
+ dst_fv_ip,
+ STLVmWrFlowVar(fv_name="ip_dst", pkt_offset="IP:{}.dst".format(encap_level)),
+ dst_fv_port,
+ STLVmWrFlowVar(fv_name="p_dst", pkt_offset="UDP:{}.dport".format(encap_level)),
+ ]
+ # Use HW Offload to calculate the outter IP/UDP packet
+ vm_param.append(STLVmFixChecksumHw(l3_offset="IP:0",
+ l4_offset="UDP:0",
+ l4_type=CTRexVmInsFixHwCs.L4_TYPE_UDP))
+ # Use software to fix the inner IP/UDP payload for VxLAN packets
+ if int(encap_level):
+ vm_param.append(STLVmFixIpv4(offset="IP:1"))
+ pad = max(0, frame_size - len(pkt_base)) * 'x'
+
+ return STLPktBuilder(pkt=pkt_base / pad,
+ vm=STLScVmRaw(vm_param, cache_size=int(self.config.cache_size)))
+
+ def _create_gratuitous_arp_pkt(self, stream_cfg):
+ """Create a GARP packet.
+
+ """
+ pkt_base = Ether(src=stream_cfg['mac_src'], dst="ff:ff:ff:ff:ff:ff")
+
+ if self.config.vxlan or self.config.mpls:
+ pkt_base /= Dot1Q(vlan=stream_cfg['vtep_vlan'])
+ elif stream_cfg['vlan_tag'] is not None:
+ pkt_base /= Dot1Q(vlan=stream_cfg['vlan_tag'])
+
+ pkt_base /= ARP(psrc=stream_cfg['ip_src_tg_gw'], hwsrc=stream_cfg['mac_src'],
+ hwdst=stream_cfg['mac_src'], pdst=stream_cfg['ip_src_tg_gw'])
+
+ return STLPktBuilder(pkt=pkt_base)
+
+ def generate_streams(self, port, chain_id, stream_cfg, l2frame, latency=True,
+ e2e=False):
+ """Create a list of streams corresponding to a given chain and stream config.
+
+ port: port where the streams originate (0 or 1)
+ chain_id: the chain to which the streams are associated to
+ stream_cfg: stream configuration
+ l2frame: L2 frame size (including 4-byte FCS) or 'IMIX'
+ latency: if True also create a latency stream
+ e2e: True if performing "end to end" connectivity check
+ """
+ streams = []
+ pg_id, lat_pg_id = self.get_pg_id(port, chain_id)
+ if l2frame == 'IMIX':
+ for ratio, l2_frame_size in zip(IMIX_RATIOS, IMIX_L2_SIZES):
+ pkt = self._create_pkt(stream_cfg, l2_frame_size)
+ if e2e or stream_cfg['mpls']:
+ streams.append(STLStream(packet=pkt,
+ mode=STLTXCont(pps=ratio)))
+ else:
+ if stream_cfg['vxlan'] is True:
+ streams.append(STLStream(packet=pkt,
+ flow_stats=STLFlowStats(pg_id=pg_id,
+ vxlan=True)
+ if not self.config.no_flow_stats else None,
+ mode=STLTXCont(pps=ratio)))
+ else:
+ streams.append(STLStream(packet=pkt,
+ flow_stats=STLFlowStats(pg_id=pg_id)
+ if not self.config.no_flow_stats else None,
+ mode=STLTXCont(pps=ratio)))
+
+ if latency:
+ # for IMIX, the latency packets have the average IMIX packet size
+ if stream_cfg['ip_addrs_step'] == 'random' or \
+ stream_cfg['udp_port_step'] == 'random':
+ # Force latency flow to only one flow to avoid creating flows
+ # over requested flow count
+ pkt = self._create_pkt(stream_cfg, IMIX_AVG_L2_FRAME_SIZE, True)
+ else:
+ pkt = self._create_pkt(stream_cfg, IMIX_AVG_L2_FRAME_SIZE)
+
+ else:
+ l2frame_size = int(l2frame)
+ pkt = self._create_pkt(stream_cfg, l2frame_size)
+ if self.config.periodic_gratuitous_arp:
+ requested_pps = int(utils.parse_rate_str(self.rates[0])[
+ 'rate_pps']) - self.config.gratuitous_arp_pps
+ if latency:
+ requested_pps -= self.LATENCY_PPS
+ stltx_cont = STLTXCont(pps=requested_pps)
+ else:
+ stltx_cont = STLTXCont()
+ if e2e or stream_cfg['mpls']:
+ streams.append(STLStream(packet=pkt,
+ # Flow stats is disabled for MPLS now
+ # flow_stats=STLFlowStats(pg_id=pg_id),
+ mode=stltx_cont))
+ else:
+ if stream_cfg['vxlan'] is True:
+ streams.append(STLStream(packet=pkt,
+ flow_stats=STLFlowStats(pg_id=pg_id,
+ vxlan=True)
+ if not self.config.no_flow_stats else None,
+ mode=stltx_cont))
+ else:
+ streams.append(STLStream(packet=pkt,
+ flow_stats=STLFlowStats(pg_id=pg_id)
+ if not self.config.no_flow_stats else None,
+ mode=stltx_cont))
+ # for the latency stream, the minimum payload is 16 bytes even in case of vlan tagging
+ # without vlan, the min l2 frame size is 64
+ # with vlan it is 68
+ # This only applies to the latency stream
+ if latency:
+ if stream_cfg['vlan_tag'] and l2frame_size < 68:
+ l2frame_size = 68
+ if stream_cfg['ip_addrs_step'] == 'random' or \
+ stream_cfg['udp_port_step'] == 'random':
+ # Force latency flow to only one flow to avoid creating flows
+ # over requested flow count
+ pkt = self._create_pkt(stream_cfg, l2frame_size, True)
+ else:
+ pkt = self._create_pkt(stream_cfg, l2frame_size)
+
+ if latency:
+ if self.config.no_latency_stats:
+ LOG.info("Latency flow statistics are disabled.")
+ if stream_cfg['vxlan'] is True:
+ streams.append(STLStream(packet=pkt,
+ flow_stats=STLFlowLatencyStats(pg_id=lat_pg_id,
+ vxlan=True)
+ if not self.config.no_latency_stats else None,
+ mode=STLTXCont(pps=self.LATENCY_PPS)))
+ else:
+ streams.append(STLStream(packet=pkt,
+ flow_stats=STLFlowLatencyStats(pg_id=lat_pg_id)
+ if not self.config.no_latency_stats else None,
+ mode=STLTXCont(pps=self.LATENCY_PPS)))
+
+ if self.config.periodic_gratuitous_arp and (
+ self.config.l3_router or self.config.service_chain == ChainType.EXT):
+ # In case of L3 router feature or EXT chain with router
+ # and depending on ARP stale time SUT configuration
+ # Gratuitous ARP from TG port to the router is needed to keep traffic up
+ garp_pkt = self._create_gratuitous_arp_pkt(stream_cfg)
+ ibg = self.config.gratuitous_arp_pps * 1000000.0
+ packets_count = int(self.config.duration_sec / self.config.gratuitous_arp_pps)
+ streams.append(
+ STLStream(packet=garp_pkt,
+ mode=STLTXMultiBurst(pkts_per_burst=1, count=packets_count, ibg=ibg)))
+ return streams
+
+ @timeout(5)
+ def __connect(self, client):
+ client.connect()
+
+ def __local_server_status(self):
+ """ The TRex server may have started but failed initializing... and stopped.
+ This piece of code is especially designed to address
+ the case when a fatal failure occurs on a DPDK init call.
+ The TRex algorihm should be revised to include some missing timeouts (?)
+ status returned:
+ 0: no error detected
+ 1: fatal error detected - should lead to exiting the run
+ 2: error detected that could be solved by starting again
+ The diagnostic is based on parsing the local trex log file (improvable)
+ """
+ status = 0
+ message = None
+ failure = None
+ exited = None
+ cause = None
+ error = None
+ before = None
+ after = None
+ last = None
+ try:
+ with open('/tmp/trex.log', 'r', encoding="utf-8") as trex_log:
+ for _line in trex_log:
+ line = _line.strip()
+ if line.startswith('Usage:'):
+ break
+ if 'ports are bound' in line:
+ continue
+ if 'please wait' in line:
+ continue
+ if 'exit' in line.lower():
+ exited = line
+ elif 'cause' in line.lower():
+ cause = line
+ elif 'fail' in line.lower():
+ failure = line
+ elif 'msg' in line.lower():
+ message = line
+ elif (error is not None) and line:
+ after = line
+ elif line.startswith('Error:') or line.startswith('ERROR'):
+ error = line
+ before = last
+ last = line
+ except FileNotFoundError:
+ pass
+ if exited is not None:
+ status = 1
+ LOG.info("\x1b[1m%s\x1b[0m %s", 'TRex failed initializing:', exited)
+ if cause is not None:
+ LOG.info("TRex [cont'd] %s", cause)
+ if failure is not None:
+ LOG.info("TRex [cont'd] %s", failure)
+ if message is not None:
+ LOG.info("TRex [cont'd] %s", message)
+ if 'not supported yet' in message.lower():
+ LOG.info("TRex [cont'd] Try starting again!")
+ status = 2
+ elif error is not None:
+ status = 1
+ LOG.info("\x1b[1m%s\x1b[0m %s", 'TRex failed initializing:', error)
+ if after is not None:
+ LOG.info("TRex [cont'd] %s", after)
+ elif before is not None:
+ LOG.info("TRex [cont'd] %s", before)
+ return status
+
+ def __connect_after_start(self):
+ # after start, Trex may take a bit of time to initialize
+ # so we need to retry a few times
+ # we try to capture recoverable error cases (checking status)
+ status = 0
+ for it in range(self.config.generic_retry_count):
+ try:
+ time.sleep(1)
+ self.client.connect()
+ break
+ except Exception as ex:
+ if it == (self.config.generic_retry_count - 1):
+ raise
+ status = self.__local_server_status()
+ if status > 0:
+ # No need to wait anymore, something went wrong and TRex exited
+ if status == 1:
+ LOG.info("\x1b[1m%s\x1b[0m", 'TRex failed starting!')
+ print("More information? Try the command: "
+ + "\x1b[1mnfvbench --show-trex-log\x1b[0m")
+ sys.exit(0)
+ if status == 2:
+ # a new start will follow
+ return status
+ LOG.info("Retrying connection to TRex (%s)...", ex.msg)
+ return status
+
+ def connect(self):
+ """Connect to the TRex server."""
+ status = 0
+ server_ip = self.generator_config.ip
+ LOG.info("Connecting to TRex (%s)...", server_ip)
+
+ # Connect to TRex server
+ self.client = STLClient(server=server_ip, sync_port=self.generator_config.zmq_rpc_port,
+ async_port=self.generator_config.zmq_pub_port)
+ try:
+ self.__connect(self.client)
+ if server_ip == '127.0.0.1':
+ config_updated = self.__check_config()
+ if config_updated or self.config.restart:
+ status = self.__restart()
+ except (TimeoutError, STLError) as e:
+ if server_ip == '127.0.0.1':
+ status = self.__start_local_server()
+ else:
+ raise TrafficGeneratorException(e.message) from e
+
+ if status == 2:
+ # Workaround in case of a failed TRex server initialization
+ # we try to start it again (twice maximum)
+ # which may allow low level initialization to complete.
+ if self.__start_local_server() == 2:
+ self.__start_local_server()
+
+ ports = list(self.generator_config.ports)
+ self.port_handle = ports
+ # Prepare the ports
+ self.client.reset(ports)
+ # Read HW information from each port
+ # this returns an array of dict (1 per port)
+ """
+ Example of output for Intel XL710
+ [{'arp': '-', 'src_ipv4': '-', u'supp_speeds': [40000], u'is_link_supported': True,
+ 'grat_arp': 'off', 'speed': 40, u'index': 0, 'link_change_supported': 'yes',
+ u'rx': {u'counters': 127, u'caps': [u'flow_stats', u'latency']},
+ u'is_virtual': 'no', 'prom': 'off', 'src_mac': u'3c:fd:fe:a8:24:48', 'status': 'IDLE',
+ u'description': u'Ethernet Controller XL710 for 40GbE QSFP+',
+ 'dest': u'fa:16:3e:3c:63:04', u'is_fc_supported': False, 'vlan': '-',
+ u'driver': u'net_i40e', 'led_change_supported': 'yes', 'rx_filter_mode': 'hardware match',
+ 'fc': 'none', 'link': 'UP', u'hw_mac': u'3c:fd:fe:a8:24:48', u'pci_addr': u'0000:5e:00.0',
+ 'mult': 'off', 'fc_supported': 'no', u'is_led_supported': True, 'rx_queue': 'off',
+ 'layer_mode': 'Ethernet', u'numa': 0}, ...]
+ """
+ self.port_info = self.client.get_port_info(ports)
+ LOG.info('Connected to TRex')
+ for id, port in enumerate(self.port_info):
+ LOG.info(' Port %d: %s speed=%dGbps mac=%s pci=%s driver=%s',
+ id, port['description'], port['speed'], port['src_mac'],
+ port['pci_addr'], port['driver'])
+ # Make sure the 2 ports have the same speed
+ if self.port_info[0]['speed'] != self.port_info[1]['speed']:
+ raise TrafficGeneratorException('Traffic generator ports speed mismatch: %d/%d Gbps' %
+ (self.port_info[0]['speed'],
+ self.port_info[1]['speed']))
+
+ def __start_local_server(self):
+ try:
+ LOG.info("Starting TRex ...")
+ self.__start_server()
+ status = self.__connect_after_start()
+ except (TimeoutError, STLError) as e:
+ LOG.error('Cannot connect to TRex')
+ LOG.error(traceback.format_exc())
+ logpath = '/tmp/trex.log'
+ if os.path.isfile(logpath):
+ # Wait for TRex to finish writing error message
+ last_size = 0
+ for _ in range(self.config.generic_retry_count):
+ size = os.path.getsize(logpath)
+ if size == last_size:
+ # probably not writing anymore
+ break
+ last_size = size
+ time.sleep(1)
+ with open(logpath, 'r', encoding="utf-8") as f:
+ message = f.read()
+ else:
+ message = e.message
+ raise TrafficGeneratorException(message) from e
+ return status
+
+ def __start_server(self):
+ server = TRexTrafficServer()
+ server.run_server(self.generator_config)
+
+ def __check_config(self):
+ server = TRexTrafficServer()
+ return server.check_config_updated(self.generator_config)
+
+ def __restart(self):
+ LOG.info("Restarting TRex ...")
+ self.__stop_server()
+ # Wait for server stopped
+ for _ in range(self.config.generic_retry_count):
+ time.sleep(1)
+ if not self.client.is_connected():
+ LOG.info("TRex is stopped...")
+ break
+ # Start and report a possible failure
+ return self.__start_local_server()
+
+ def __stop_server(self):
+ if self.generator_config.ip == '127.0.0.1':
+ ports = self.client.get_acquired_ports()
+ LOG.info('Release ports %s and stopping TRex...', ports)
+ try:
+ if ports:
+ self.client.release(ports=ports)
+ self.client.server_shutdown()
+ except STLError as e:
+ LOG.warning('Unable to stop TRex. Error: %s', e)
+ else:
+ LOG.info('Using remote TRex. Unable to stop TRex')
+
+ def resolve_arp(self):
+ """Resolve all configured remote IP addresses.
+
+ return: None if ARP failed to resolve for all IP addresses
+ else a dict of list of dest macs indexed by port#
+ the dest macs in the list are indexed by the chain id
+ """
+ self.client.set_service_mode(ports=self.port_handle)
+ LOG.info('Polling ARP until successful...')
+ arp_dest_macs = {}
+ for port, device in zip(self.port_handle, self.generator_config.devices):
+ # there should be 1 stream config per chain
+ stream_configs = device.get_stream_configs()
+ chain_count = len(stream_configs)
+ ctx = self.client.create_service_ctx(port=port)
+ # all dest macs on this port indexed by chain ID
+ dst_macs = [None] * chain_count
+ dst_macs_count = 0
+ # the index in the list is the chain id
+ if self.config.vxlan or self.config.mpls:
+ arps = [
+ ServiceARP(ctx,
+ src_ip=device.vtep_src_ip,
+ dst_ip=device.vtep_dst_ip,
+ vlan=device.vtep_vlan)
+ for cfg in stream_configs
+ ]
+ else:
+ arps = [
+ ServiceARP(ctx,
+ src_ip=cfg['ip_src_tg_gw'],
+ dst_ip=cfg['mac_discovery_gw'],
+ # will be None if no vlan tagging
+ vlan=cfg['vlan_tag'])
+ for cfg in stream_configs
+ ]
+
+ for attempt in range(self.config.generic_retry_count):
+ try:
+ ctx.run(arps)
+ except STLError:
+ LOG.error(traceback.format_exc())
+ continue
+
+ unresolved = []
+ for chain_id, mac in enumerate(dst_macs):
+ if not mac:
+ arp_record = arps[chain_id].get_record()
+ if arp_record.dst_mac:
+ dst_macs[chain_id] = arp_record.dst_mac
+ dst_macs_count += 1
+ LOG.info(' ARP: port=%d chain=%d src IP=%s dst IP=%s -> MAC=%s',
+ port, chain_id,
+ arp_record.src_ip,
+ arp_record.dst_ip, arp_record.dst_mac)
+ else:
+ unresolved.append(arp_record.dst_ip)
+ if dst_macs_count == chain_count:
+ arp_dest_macs[port] = dst_macs
+ LOG.info('ARP resolved successfully for port %s', port)
+ break
+
+ retry = attempt + 1
+ LOG.info('Retrying ARP for: %s (retry %d/%d)',
+ unresolved, retry, self.config.generic_retry_count)
+ if retry < self.config.generic_retry_count:
+ time.sleep(self.config.generic_poll_sec)
+ else:
+ LOG.error('ARP timed out for port %s (resolved %d out of %d)',
+ port,
+ dst_macs_count,
+ chain_count)
+ break
+
+ # A traffic capture may have been started (from a T-Rex console) at this time.
+ # If asked so, we keep the service mode enabled here, and disable it otherwise.
+ # | Disabling the service mode while a capture is in progress
+ # | would cause the application to stop/crash with an error.
+ if not self.config.service_mode:
+ self.client.set_service_mode(ports=self.port_handle, enabled=False)
+ if len(arp_dest_macs) == len(self.port_handle):
+ return arp_dest_macs
+ return None
+
+ def __is_rate_enough(self, l2frame_size, rates, bidirectional, latency):
+ """Check if rate provided by user is above requirements. Applies only if latency is True."""
+ intf_speed = self.generator_config.intf_speed
+ if latency:
+ if bidirectional:
+ mult = 2
+ total_rate = 0
+ for rate in rates:
+ r = utils.convert_rates(l2frame_size, rate, intf_speed)
+ total_rate += int(r['rate_pps'])
+ else:
+ mult = 1
+ r = utils.convert_rates(l2frame_size, rates[0], intf_speed)
+ total_rate = int(r['rate_pps'])
+ # rate must be enough for latency stream and at least 1 pps for base stream per chain
+ if self.config.periodic_gratuitous_arp:
+ required_rate = (self.LATENCY_PPS + 1 + self.config.gratuitous_arp_pps) \
+ * self.config.service_chain_count * mult
+ else:
+ required_rate = (self.LATENCY_PPS + 1) * self.config.service_chain_count * mult
+ result = utils.convert_rates(l2frame_size,
+ {'rate_pps': required_rate},
+ intf_speed * mult)
+ result['result'] = total_rate >= required_rate
+ return result
+
+ return {'result': True}
+
+ def create_traffic(self, l2frame_size, rates, bidirectional, latency=True, e2e=False):
+ """Program all the streams in Trex server.
+
+ l2frame_size: L2 frame size or IMIX
+ rates: a list of 2 rates to run each direction
+ each rate is a dict like {'rate_pps': '10kpps'}
+ bidirectional: True if bidirectional
+ latency: True if latency measurement is needed
+ e2e: True if performing "end to end" connectivity check
+ """
+ if self.config.no_flow_stats:
+ LOG.info("Traffic flow statistics are disabled.")
+ r = self.__is_rate_enough(l2frame_size, rates, bidirectional, latency)
+ if not r['result']:
+ raise TrafficGeneratorException(
+ 'Required rate in total is at least one of: \n{pps}pps \n{bps}bps \n{load}%.'
+ .format(pps=r['rate_pps'],
+ bps=r['rate_bps'],
+ load=r['rate_percent']))
+ self.l2_frame_size = l2frame_size
+ # a dict of list of streams indexed by port#
+ # in case of fixed size, has self.chain_count * 2 * 2 streams
+ # (1 normal + 1 latency stream per direction per chain)
+ # for IMIX, has self.chain_count * 2 * 4 streams
+ # (3 normal + 1 latency stream per direction per chain)
+ streamblock = {}
+ for port in self.port_handle:
+ streamblock[port] = []
+ stream_cfgs = [d.get_stream_configs() for d in self.generator_config.devices]
+ if self.generator_config.ip_addrs_step == 'random' \
+ or self.generator_config.gen_config.udp_port_step == 'random':
+ LOG.warning("Using random step, the number of flows can be less than "
+ "the requested number of flows due to repeatable multivariate random "
+ "generation which can reproduce the same pattern of values")
+ self.rates = [utils.to_rate_str(rate) for rate in rates]
+ for chain_id, (fwd_stream_cfg, rev_stream_cfg) in enumerate(zip(*stream_cfgs)):
+ streamblock[0].extend(self.generate_streams(self.port_handle[0],
+ chain_id,
+ fwd_stream_cfg,
+ l2frame_size,
+ latency=latency,
+ e2e=e2e))
+ if len(self.rates) > 1:
+ streamblock[1].extend(self.generate_streams(self.port_handle[1],
+ chain_id,
+ rev_stream_cfg,
+ l2frame_size,
+ latency=bidirectional and latency,
+ e2e=e2e))
+
+ for port in self.port_handle:
+ if self.config.vxlan:
+ self.client.set_port_attr(ports=port, vxlan_fs=[4789])
+ else:
+ self.client.set_port_attr(ports=port, vxlan_fs=None)
+ self.client.add_streams(streamblock[port], ports=port)
+ LOG.info('Created %d traffic streams for port %s.', len(streamblock[port]), port)
+
+ def clear_streamblock(self):
+ """Clear all streams from TRex."""
+ self.rates = []
+ self.client.reset(self.port_handle)
+ LOG.info('Cleared all existing streams')
+
+ def get_stats(self, ifstats=None):
+ """Get stats from Trex."""
+ stats = self.client.get_stats()
+ return self.extract_stats(stats, ifstats)
+
+ def get_macs(self):
+ """Return the Trex local port MAC addresses.
+
+ return: a list of MAC addresses indexed by the port#
+ """
+ return [port['src_mac'] for port in self.port_info]
+
+ def get_port_speed_gbps(self):
+ """Return the Trex local port MAC addresses.
+
+ return: a list of speed in Gbps indexed by the port#
+ """
+ return [port['speed'] for port in self.port_info]
+
+ def clear_stats(self):
+ """Clear all stats in the traffic gneerator."""
+ if self.port_handle:
+ self.client.clear_stats()
+
+ def start_traffic(self):
+ """Start generating traffic in all ports."""
+ for port, rate in zip(self.port_handle, self.rates):
+ self.client.start(ports=port, mult=rate, duration=self.config.duration_sec, force=True)
+
+ def stop_traffic(self):
+ """Stop generating traffic."""
+ self.client.stop(ports=self.port_handle)
+
+ def start_capture(self):
+ """Capture all packets on both ports that are unicast to us."""
+ if self.capture_id:
+ self.stop_capture()
+ # Need to filter out unwanted packets so we do not end up counting
+ # src MACs of frames that are not unicast to us
+ src_mac_list = self.get_macs()
+ bpf_filter = "ether dst %s or ether dst %s" % (src_mac_list[0], src_mac_list[1])
+ # ports must be set in service in order to enable capture
+ self.client.set_service_mode(ports=self.port_handle)
+ self.capture_id = self.client.start_capture \
+ (rx_ports=self.port_handle, bpf_filter=bpf_filter)
+
+ def fetch_capture_packets(self):
+ """Fetch capture packets in capture mode."""
+ if self.capture_id:
+ self.packet_list = []
+ self.client.fetch_capture_packets(capture_id=self.capture_id['id'],
+ output=self.packet_list)
+
+ def stop_capture(self):
+ """Stop capturing packets."""
+ if self.capture_id:
+ self.client.stop_capture(capture_id=self.capture_id['id'])
+ self.capture_id = None
+ # A traffic capture may have been started (from a T-Rex console) at this time.
+ # If asked so, we keep the service mode enabled here, and disable it otherwise.
+ # | Disabling the service mode while a capture is in progress
+ # | would cause the application to stop/crash with an error.
+ if not self.config.service_mode:
+ self.client.set_service_mode(ports=self.port_handle, enabled=False)
+
+ def cleanup(self):
+ """Cleanup Trex driver."""
+ if self.client:
+ try:
+ self.client.reset(self.port_handle)
+ self.client.disconnect()
+ except STLError:
+ # TRex does not like a reset while in disconnected state
+ pass
+
+ def set_service_mode(self, enabled=True):
+ """Enable/disable the 'service' mode."""
+ self.client.set_service_mode(ports=self.port_handle, enabled=enabled)
diff --git a/nfvbench/traffic_server.py b/nfvbench/traffic_server.py
index c3d4d14..5111b32 100644
--- a/nfvbench/traffic_server.py
+++ b/nfvbench/traffic_server.py
@@ -16,7 +16,7 @@ import os
import subprocess
import yaml
-from log import LOG
+from .log import LOG
class TrafficServerException(Exception):
@@ -49,26 +49,134 @@ class TRexTrafficServer(TrafficServer):
mbuf_opt = "--mbuf-factor " + str(generator_config.mbuf_factor)
else:
mbuf_opt = ""
- subprocess.Popen(['nohup', '/bin/bash', '-c',
- './t-rex-64 -i -c {} --iom 0 --no-scapy-server --close-at-end {} '
- '{} {} --cfg {} &> /tmp/trex.log & disown'.format(cores, sw_mode,
- vlan_opt,
- mbuf_opt, cfg)],
- cwd=self.trex_dir)
- LOG.info('TRex server is running...')
+ hdrh_opt = "--hdrh" if generator_config.hdrh else ""
+ # --unbind-unused-ports: for NIC that have more than 2 ports such as Intel X710
+ # this will instruct trex to unbind all ports that are unused instead of
+ # erroring out with an exception (i40e only)
+ # Try: --ignore-528-issue -> neither unbind nor exit with error,
+ # just proceed cause it might work!
+ # Note that force unbinding is probably a bad choice:
+ # we can't assume for sure that other ports are "unused".
+ # The default TRex behaviour - exit - is indeed a safer option;
+ # a message informs about the ports that should be unbound.
+ i40e_opt = ("--ignore-528-issue" if
+ generator_config.config.i40e_mixed == 'ignore' else
+ "--unbind-unused-ports" if
+ generator_config.config.i40e_mixed == 'unbind' else "")
+ cmd = ['nohup', '/bin/bash', '-c',
+ './t-rex-64 -i -c {} --iom 0 --no-scapy-server '
+ '--close-at-end {} {} {} '
+ '{} {} --cfg {} &> /tmp/trex.log & disown'.format(cores, sw_mode,
+ i40e_opt,
+ vlan_opt,
+ hdrh_opt,
+ mbuf_opt, cfg)]
+ LOG.info(' '.join(cmd))
+ with subprocess.Popen(cmd, cwd=self.trex_dir) as trex_process:
+ LOG.info('TRex server is running (PID: %s)...', trex_process.pid)
- def __save_config(self, generator_config, filename):
- ifs = ",".join([repr(pci) for pci in generator_config.pcis])
-
- result = """# Config generated by NFVbench
- - port_limit : 2
- version : 2
- interfaces : [{ifs}]""".format(ifs=ifs)
+ def __load_config(self, filename):
+ result = {}
+ if os.path.exists(filename):
+ with open(filename, 'r', encoding="utf-8") as stream:
+ try:
+ result = yaml.safe_load(stream)
+ except yaml.YAMLError as exc:
+ print(exc)
+ return result
+ def __save_config(self, generator_config, filename):
+ result = self.__prepare_config(generator_config)
yaml.safe_load(result)
if os.path.exists(filename):
os.remove(filename)
- with open(filename, 'w') as f:
+ with open(filename, 'w', encoding="utf-8") as f:
f.write(result)
-
return filename
+
+ def __prepare_config(self, generator_config):
+ ifs = ",".join([repr(pci) for pci in generator_config.pcis])
+
+ # For consistency and stability reasons, the T-Rex server
+ # should be forciby restarted each time the value of a
+ # parameter, specified as one of the starting command line
+ # arguments, has been modified since the last launch.
+ # Hence we add some extra fields to the config file
+ # (nb_cores, use_vlan, mbuf_factor, i40e_mixed, hdrh)
+ # which will serve as a memory between runs -
+ # while being actually ignored by the T-Rex server.
+
+ result = """# Config generated by NFVbench
+ - port_limit : 2
+ version : 2
+ zmq_pub_port : {zmq_pub_port}
+ zmq_rpc_port : {zmq_rpc_port}
+ prefix : {prefix}
+ limit_memory : {limit_memory}
+ command_line :
+ sw_mode : {sw_mode}
+ mbuf_factor: {mbuf_factor}
+ hdrh : {hdrh}
+ nb_cores : {nb_cores}
+ use_vlan : {use_vlan}
+ i40e_mixed : {i40e_mixed}
+ interfaces : [{ifs}]""".format(
+ zmq_pub_port=generator_config.zmq_pub_port,
+ zmq_rpc_port=generator_config.zmq_rpc_port,
+ prefix=generator_config.name,
+ limit_memory=generator_config.limit_memory,
+ sw_mode=generator_config.software_mode,
+ mbuf_factor=generator_config.mbuf_factor,
+ hdrh=generator_config.hdrh,
+ nb_cores=generator_config.cores,
+ use_vlan=generator_config.gen_config.get('vtep_vlan') or
+ generator_config.vlan_tagging,
+ i40e_mixed=generator_config.config.i40e_mixed,
+ ifs=ifs)
+
+ if hasattr(generator_config, 'mbuf_64') and generator_config.mbuf_64:
+ result += """
+ memory :
+ mbuf_64 : {mbuf_64}""".format(mbuf_64=generator_config.mbuf_64)
+
+ if self.__check_platform_config(generator_config):
+ try:
+ platform = """
+ platform :
+ master_thread_id : {master_thread_id}
+ latency_thread_id : {latency_thread_id}
+ dual_if:""".format(master_thread_id=generator_config.gen_config.platform.
+ master_thread_id,
+ latency_thread_id=generator_config.gen_config.platform.
+ latency_thread_id)
+ result += platform
+
+ for core in generator_config.gen_config.platform.dual_if:
+ threads = ""
+ try:
+ threads = ",".join([repr(thread) for thread in core.threads])
+ except TypeError:
+ LOG.warning("No threads defined for socket %s", core.socket)
+ core_result = """
+ - socket : {socket}
+ threads : [{threads}]""".format(socket=core.socket, threads=threads)
+ result += core_result
+ except (KeyError, AttributeError):
+ pass
+ return result + "\n"
+
+ def __check_platform_config(self, generator_config):
+ return hasattr(generator_config.gen_config, 'platform') \
+ and hasattr(generator_config.gen_config.platform, "master_thread_id") \
+ and generator_config.gen_config.platform.master_thread_id is not None \
+ and hasattr(generator_config.gen_config.platform, "latency_thread_id") \
+ and generator_config.gen_config.platform.latency_thread_id is not None
+
+ def check_config_updated(self, generator_config):
+ existing_config = self.__load_config(filename='/etc/trex_cfg.yaml')
+ new_config = yaml.safe_load(self.__prepare_config(generator_config))
+ LOG.debug("Existing config: %s", existing_config)
+ LOG.debug("New config: %s", new_config)
+ if existing_config == new_config:
+ return False
+ return True
diff --git a/nfvbench/utils.py b/nfvbench/utils.py
index ecbb55a..07a38cb 100644
--- a/nfvbench/utils.py
+++ b/nfvbench/utils.py
@@ -13,6 +13,8 @@
# under the License.
import glob
+import time
+from math import gcd
from math import isnan
import os
import re
@@ -23,8 +25,9 @@ import errno
import fcntl
from functools import wraps
import json
-from log import LOG
-
+from .log import LOG
+from nfvbench.traffic_gen.traffic_utils import multiplier_map
+from novaclient.exceptions import NotFound
class TimeoutError(Exception):
pass
@@ -50,7 +53,7 @@ def timeout(seconds=10, error_message=os.strerror(errno.ETIME)):
def save_json_result(result, json_file, std_json_path, service_chain, service_chain_count,
- flow_count, frame_sizes):
+ flow_count, frame_sizes, user_id=None, group_id=None):
"""Save results in json format file."""
filepaths = []
if json_file:
@@ -63,29 +66,18 @@ def save_json_result(result, json_file, std_json_path, service_chain, service_ch
if filepaths:
for file_path in filepaths:
LOG.info('Saving results in json file: %s...', file_path)
- with open(file_path, 'w') as jfp:
+ with open(file_path, 'w', encoding="utf-8") as jfp:
json.dump(result,
jfp,
indent=4,
sort_keys=True,
separators=(',', ': '),
default=lambda obj: obj.to_json())
-
-
-def byteify(data, ignore_dicts=False):
- # if this is a unicode string, return its string representation
- if isinstance(data, unicode):
- return data.encode('utf-8')
- # if this is a list of values, return list of byteified values
- if isinstance(data, list):
- return [byteify(item, ignore_dicts=ignore_dicts) for item in data]
- # if this is a dictionary, return dictionary of byteified keys and values
- # but only if we haven't already byteified it
- if isinstance(data, dict) and not ignore_dicts:
- return {byteify(key, ignore_dicts=ignore_dicts): byteify(value, ignore_dicts=ignore_dicts)
- for key, value in data.iteritems()}
- # if it's anything else, return it in its original form
- return data
+ # possibly change file ownership
+ if group_id is None:
+ group_id = user_id
+ if user_id is not None:
+ os.chown(file_path, user_id, group_id)
def dict_to_json_dict(record):
@@ -113,8 +105,8 @@ def get_intel_pci(nic_slot=None, nic_ports=None):
if nic_slot and nic_ports:
dmidecode = subprocess.check_output(['dmidecode', '-t', 'slot'])
- regex = r"(?<=SlotID:%s).*?(....:..:..\..)" % nic_slot
- match = re.search(regex, dmidecode, flags=re.DOTALL)
+ regex = r"(?<=SlotID:{}).*?(....:..:..\..)".format(nic_slot)
+ match = re.search(regex, dmidecode.decode('utf-8'), flags=re.DOTALL)
if not match:
return None
@@ -135,47 +127,41 @@ def get_intel_pci(nic_slot=None, nic_ports=None):
trex_base_dir = '/opt/trex'
contents = os.listdir(trex_base_dir)
trex_dir = os.path.join(trex_base_dir, contents[0])
- process = subprocess.Popen(['python', 'dpdk_setup_ports.py', '-s'],
- cwd=trex_dir,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- devices, _ = process.communicate()
+ with subprocess.Popen(['python', 'dpdk_setup_ports.py', '-s'],
+ cwd=trex_dir,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE) as process:
+ devices, _ = process.communicate()
except Exception:
devices = ''
for driver in ['i40e', 'ixgbe']:
- matches = re.findall(regex.format(hx=hx, driver=driver), devices)
+ matches = re.findall(regex.format(hx=hx, driver=driver), devices.decode("utf-8"))
if not matches:
continue
matches.sort()
+ device_list = list(x[0].split('.')[0] for x in matches)
+ device_ports_list = {i: {'ports': device_list.count(i)} for i in device_list}
for port in matches:
intf_name = glob.glob("/sys/bus/pci/devices/%s/net/*" % port[0])
- if not intf_name:
- # Interface is not bind to kernel driver, so take it
- pcis.append(port[1])
- else:
+ if intf_name:
intf_name = intf_name[0][intf_name[0].rfind('/') + 1:]
- process = subprocess.Popen(['ip', '-o', '-d', 'link', 'show', intf_name],
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- intf_info, _ = process.communicate()
- if not re.search('team_slave|bond_slave', intf_info):
- pcis.append(port[1])
-
+ with subprocess.Popen(['ip', '-o', '-d', 'link', 'show', intf_name],
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE) as process:
+ intf_info, _ = process.communicate()
+ if re.search('team_slave|bond_slave', intf_info.decode("utf-8")):
+ device_ports_list[port[0].split('.')[0]]['busy'] = True
+ for port in matches:
+ if not device_ports_list[port[0].split('.')[0]].get('busy'):
+ pcis.append(port[1])
if len(pcis) == 2:
break
return pcis
-multiplier_map = {
- 'K': 1000,
- 'M': 1000000,
- 'G': 1000000000
-}
-
-
def parse_flow_count(flow_count):
flow_count = str(flow_count)
input_fc = flow_count
@@ -187,13 +173,14 @@ def parse_flow_count(flow_count):
try:
flow_count = int(flow_count)
except ValueError:
- raise Exception("Unknown flow count format '{}'".format(input_fc))
+ raise Exception("Unknown flow count format '{}'".format(input_fc)) from ValueError
return flow_count * multiplier
def cast_integer(value):
- return int(value) if not isnan(value) else value
+ # force 0 value if NaN value from TRex to avoid error in JSON result parsing
+ return int(value) if not isnan(value) else 0
class RunLock(object):
@@ -210,8 +197,8 @@ class RunLock(object):
try:
self._fd = os.open(self._path, os.O_CREAT)
fcntl.flock(self._fd, fcntl.LOCK_EX | fcntl.LOCK_NB)
- except (OSError, IOError):
- raise Exception('Other NFVbench process is running. Please wait')
+ except (OSError, IOError) as e:
+ raise Exception('Other NFVbench process is running. Please wait') from e
def __exit__(self, *args):
fcntl.flock(self._fd, fcntl.LOCK_UN)
@@ -223,3 +210,82 @@ class RunLock(object):
os.unlink(self._path)
except (OSError, IOError):
pass
+
+
+def get_divisors(n):
+ for i in range(1, int(n / 2) + 1):
+ if n % i == 0:
+ yield i
+ yield n
+
+
+def lcm(a, b):
+ """
+ Calculate the maximum possible value for both IP and ports,
+ eventually for maximum possible flow.
+ """
+ if a != 0 and b != 0:
+ lcm_value = a * b // gcd(a, b)
+ return lcm_value
+ raise TypeError(" IP size or port range can't be zero !")
+
+
+def find_tuples_equal_to_lcm_value(a, b, lcm_value):
+ """
+ Find numbers from two list matching a LCM value.
+ """
+ for x in a:
+ for y in b:
+ if lcm(x, y) == lcm_value:
+ yield (x, y)
+
+
+def find_max_size(max_size, tuples, flow):
+ if tuples:
+ if max_size > tuples[-1][0]:
+ max_size = tuples[-1][0]
+ return int(max_size)
+ if max_size > tuples[-1][1]:
+ max_size = tuples[-1][1]
+ return int(max_size)
+
+ for i in range(max_size, 1, -1):
+ if flow % i == 0:
+ return int(i)
+ return 1
+
+
+def delete_server(nova_client, server):
+ try:
+ LOG.info('Deleting instance %s...', server.name)
+ nova_client.servers.delete(server.id)
+ except Exception:
+ LOG.exception("Instance %s deletion failed", server.name)
+
+
+def instance_exists(nova_client, server):
+ try:
+ nova_client.servers.get(server.id)
+ except NotFound:
+ return False
+ return True
+
+
+def waiting_servers_deletion(nova_client, servers):
+ LOG.info(' Waiting for %d instances to be fully deleted...', len(servers))
+ retry_count = 15 + len(servers) * 5
+ while True:
+ retry_count -= 1
+ servers = [server for server in servers if instance_exists(nova_client, server)]
+ if not servers:
+ break
+
+ if retry_count:
+ LOG.info(' %d yet to be deleted by Nova, retries left=%d...',
+ len(servers), retry_count)
+ time.sleep(2)
+ else:
+ LOG.warning(
+ ' instance deletion verification time-out: %d still not deleted',
+ len(servers))
+ break
diff --git a/nfvbenchvm/README.rst b/nfvbenchvm/README.rst
deleted file mode 100644
index 1bf0bbf..0000000
--- a/nfvbenchvm/README.rst
+++ /dev/null
@@ -1,86 +0,0 @@
-NFVBENCH VM IMAGE FOR OPENSTACK
-+++++++++++++++++++++++++++++++
-
-This repo will build a centos 7 image with testpmd and VPP installed.
-The VM will come with a pre-canned user/password: nfvbench/nfvbench
-
-BUILD INSTRUCTIONS
-==================
-
-Pre-requisites
---------------
-- must run on Linux
-- the following packages must be installed prior to using this script:
- - git
- - qemu-utils
- - kpartx
-
-Build the image
----------------
-- cd dib
-- update the version number for the image (if needed) by modifying __version__ in build-image.sh
-- setup your http_proxy if needed
-- bash build-image.sh
-
-IMAGE INSTANCE AND CONFIG
-=========================
-
-Interface Requirements
-----------------------
-The instance must be launched using OpenStack with 2 network interfaces.
-For best performance, it should use a flavor with:
-
-- 2 vCPU
-- 4 GB RAM
-- cpu pinning set to exclusive
-
-Auto-configuration
-------------------
-nfvbench VM will automatically find the two virtual interfaces to use, and use the forwarder specifed in the config file.
-
-In the case testpmd is used, testpmd will be launched with mac forwarding mode where the destination macs rewritten according to the config file.
-
-In the case VPP is used, VPP will set up a L3 router, and forwarding traffic from one port to the other.
-
-nfvbenchvm Config
------------------
-nfvbenchvm config file is located at ``/etc/nfvbenchvm.conf``.
-
-.. code-block:: bash
-
- FORWARDER=testpmd
- INTF_MAC1=FA:16:3E:A2:30:41
- INTF_MAC2=FA:16:3E:10:DA:10
- TG_MAC1=00:10:94:00:0A:00
- TG_MAC2=00:11:94:00:0A:00
- VNF_GATEWAY1_CIDR=1.1.0.2/8
- VNF_GATEWAY2_CIDR=2.2.0.2/8
- TG_NET1=10.0.0.0/8
- TG_NET2=20.0.0.0/8
- TG_GATEWAY1_IP=1.1.0.100
- TG_GATEWAY2_IP=2.2.0.100
-
-
-Launching nfvbenchvm VM
------------------------
-
-Normally this image will be used together with NFVBench, and the required configurations will be automatically generated and pushed to VM by NFVBench. If launched manually, no forwarder will be run. Users will have the full control to run either testpmd or VPP via VNC console.
-
-To check if testpmd is running, you can run this command in VNC console:
-
-.. code-block:: bash
-
- sudo screen -r testpmd
-
-To check if VPP is running, you can run this command in VNC console:
-
-.. code-block:: bash
-
- service vpp status
-
-
-Hardcoded Username and Password
---------------------------------
-- Username: nfvbench
-- Password: nfvbench
-
diff --git a/nfvbenchvm/dib/build-image.sh b/nfvbenchvm/dib/build-image.sh
index d9ab20e..c320192 100755
--- a/nfvbenchvm/dib/build-image.sh
+++ b/nfvbenchvm/dib/build-image.sh
@@ -1,63 +1,247 @@
#!/bin/bash
#
-# A shell script to build the VPP VM image using diskinage-builder
+# A shell script to build the VPP VM image or NFVbench+TRex VM image using diskinage-builder
#
# The following packages must be installed prior to using this script:
-# sudo apt-get -y install python-virtualenv qemu-utils kpartx
+# Ubuntu: sudo apt-get -y install python3 python3-venv qemu-utils kpartx
+# CentOS: sudo yum install -y python3 qemu-img kpartx
-set -e
+# Stop on error (see https://wizardzines.com/comics/bash-errors/)
+set -euo pipefail
+
+DEBUG=no
+verify_only=0
+build_generator=0
+build_loopvm=0
+__prefix__=""
# Artifact URL
gs_url=artifacts.opnfv.org/nfvbench/images
# image version number
-__version__=0.6
-image_name=nfvbenchvm_centos-$__version__
-
-# if image exists skip building
-if command -v gsutil >/dev/null; then
- if gsutil -q stat gs://$gs_url/$image_name.qcow2; then
- echo "Image already exists at http://$gs_url/$image_name.qcow2"
- exit 0
- fi
-else
- echo "Cannot check image availability in OPNFV artifact repository (gsutil not available)"
+__loopvm_version__=0.16
+__generator_version__=0.15
+loopvm_image_name=nfvbenchvm_centos-$__loopvm_version__
+generator_image_name=nfvbenchvm_centos-generator-$__generator_version__
+
+# Default values for nfvbenchvm dib element variables
+export DIB_NFVBENCH_CODE_ORIGIN=opnfv-gerrit
+
+
+# ----------------------------------------------------------------------------
+# Parse command line options and configure the script
+# ----------------------------------------------------------------------------
+
+usage() {
+ cat <<EOF
+$(basename $0) - build NFVbench VM images
+Usage:
+ $(basename $0) [OPTIONS]
+
+OPTIONS
+ -l: build NFVbench loop VM image
+ -g: build NFVbench generator image
+ -v: verify only (build but do not push to google storage)
+ -s: use local nfvbench code instead of cloning from OPNFV gerrit
+ (only relevant for NFVbench generator image)
+
+ -t: enable debug trace (set -x + DIB_DEBUG_TRACE=1)
+ -d: start debug shell in image chroot in case of build error
+ -h: show this help message
+EOF
+ exit 1
+}
+
+while getopts ":lgvstdh" opt; do
+ case $opt in
+ l)
+ build_loopvm=1
+ ;;
+ g)
+ build_generator=1
+ ;;
+ v)
+ verify_only=1
+ ;;
+ s)
+ export DIB_NFVBENCH_CODE_ORIGIN=static
+ ;;
+ t)
+ set -x
+ export DIB_DEBUG_TRACE=1
+ ;;
+ d)
+ DEBUG=yes
+ ;;
+ h)
+ usage
+ exit 0
+ ;;
+ ?)
+ usage
+ exit 1
+ ;;
+ esac
+done
+
+
+# Build all VM images if the image to build is not specified on the CLI
+if [[ $build_generator -eq 0 ]] && [[ $build_loopvm -eq 0 ]]; then
+ build_generator=1
+ build_loopvm=1
fi
-# install diskimage-builder
-if [ -d dib-venv ]; then
- . dib-venv/bin/activate
-else
- virtualenv dib-venv
- . dib-venv/bin/activate
- pip install diskimage-builder
+if [[ "${DIB_NFVBENCH_CODE_ORIGIN}" == "static" ]] && [[ $build_generator -eq 0 ]]; then
+ echo "Error: option -s is only relevant to the build of the generator image"
+ exit 1
fi
-# Add nfvbenchvm_centos elements directory to the DIB elements path
-export ELEMENTS_PATH=`pwd`/elements
-# canned user/password for direct login
-export DIB_DEV_USER_USERNAME=nfvbench
-export DIB_DEV_USER_PASSWORD=nfvbench
-export DIB_DEV_USER_PWDLESS_SUDO=Y
+# ----------------------------------------------------------------------------
+# Copy local nfvbench code to elements/nfvbenchvm/static/opt/nfvbench
+# ----------------------------------------------------------------------------
+
+function copy_local_nfvbench_code_to_static_dir {
+ echo "Copy local nfvbench code to elements/nfvbenchvm/static/opt"
+ # Create elements/nfvbenchvm/static/opt/ directory if it does not exist and
+ # move there
+ pushd $(dirname $0)/elements/nfvbenchvm/static
+ [ -d opt ] || mkdir opt
+ cd opt
+
+ # Remove nfvbench code if it is already there
+ [ -d nfvbench ] && rm -rf nfvbench
+
+ # Use git to "copy" the local nfvbench code.
+ # This will include all the committed changes of the current branch.
+ git clone ../../../../../.. nfvbench
+
+ # Go back to the current directory when this function was called
+ popd
+}
+
+
+# ----------------------------------------------------------------------------
+# Configure and start the nfvbenchvm image build
+# ----------------------------------------------------------------------------
+
+function build_image {
+ # if image exists skip building
+ echo "Checking if image exists in google storage..."
+ if command -v gsutil >/dev/null; then
+ if gsutil -q stat gs://$gs_url/$1.qcow2; then
+ echo "Image already exists at https://$gs_url/$1.qcow2"
+ echo "Build is skipped"
+ exit 0
+ fi
+ echo "Image does not exist in google storage, starting build..."
+ echo
+ else
+ echo "Cannot check image availability in OPNFV artifact repository (gsutil not available)"
+ fi
+
+ # check if image is already built locally
+ if [ -f $1.qcow2 ]; then
+ echo "Image $1.qcow2 already exists locally"
+ else
+ # install diskimage-builder
+ if [ -d dib-venv ]; then
+ . dib-venv/bin/activate
+ else
+ python3 -m venv dib-venv
+ . dib-venv/bin/activate
+ pip install diskimage-builder==3.16.0
+ fi
+
+ # Add nfvbenchvm_centos elements directory to the DIB elements path
+ export ELEMENTS_PATH=`pwd`/elements
+
+ # canned user/password for direct login
+ export DIB_DEV_USER_USERNAME=nfvbench
+ export DIB_DEV_USER_PASSWORD=nfvbench
+ export DIB_DEV_USER_PWDLESS_SUDO=Y
+
+ # Set the data sources to have ConfigDrive only
+ export DIB_CLOUD_INIT_DATASOURCES="ConfigDrive"
+
+ # Configure VPP REPO
+ export DIB_YUM_REPO_CONF=$ELEMENTS_PATH/nfvbenchvm/fdio-release.repo
+
+ # Use ELRepo to have latest kernel
+ # only for loop vm image
+ if [ $1 = $loopvm_image_name ]; then
+ export DIB_USE_ELREPO_KERNEL=True
+ export DIB_DEV_IMAGE=loopvm
+ else
+ export DIB_USE_ELREPO_KERNEL=False
+ export DIB_DEV_IMAGE=generator
+ # get current git branch to build image with current code
+ export GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
+ # retrieve TREX_VER from Dockerfile
+ export TREX_VER=$(awk '/ENV TREX_VER/ {print $3}' ../../docker/Dockerfile | sed 's/"//g' | sed 's/\r//g')
+ fi
+
+ # Specify CentOS version
+ export DIB_RELEASE=7
+
+ # Debug on error: if an error occurs during the build, disk-image-create
+ # will drop us in a Bash inside the chroot, and we will be able to inspect
+ # the current state of the image.
+ if [[ "${DEBUG}" == "yes" ]]; then
+ export break=after-error
+ fi
-# Set the data sources to have ConfigDrive only
-export DIB_CLOUD_INIT_DATASOURCES="ConfigDrive"
+ echo "Building $1.qcow2..."
+ time disk-image-create -o $1 centos nfvbenchvm
+ fi
+
+ ls -l $1.qcow2
-# Configure VPP REPO
-export DIB_YUM_REPO_CONF=$ELEMENTS_PATH/nfvbenchvm/fdio-release.repo
+ if [ $verify_only -eq 1 ]; then
+ echo "Image verification SUCCESS"
+ echo "NO upload to google storage (-v)"
+ else
+ if command -v gsutil >/dev/null; then
+ echo "Uploading $1.qcow2..."
+ gsutil cp $1.qcow2 gs://$gs_url/$1.qcow2
+ echo "You can access to image at https://$gs_url/$1.qcow2"
+ else
+ echo "Cannot upload new image to the OPNFV artifact repository (gsutil not available)"
+ exit 1
+ fi
+ fi
+}
-# Use ELRepo to have latest kernel
-export DIB_USE_ELREPO_KERNEL=True
-echo "Building $image_name.qcow2..."
-time disk-image-create -o $image_name centos7 nfvbenchvm
-ls -l $image_name.qcow2
+# ----------------------------------------------------------------------------
+# Main program
+# ----------------------------------------------------------------------------
+
+if [ $build_loopvm -eq 1 ]; then
+ echo "Build loop VM image"
+ build_image $loopvm_image_name
+fi
+
+if [ $build_generator -eq 1 ]; then
+ echo "Build generator image"
+
+ if [[ "${DIB_NFVBENCH_CODE_ORIGIN}" == "static" ]]; then
+ echo "Use local nfvbench code"
+ copy_local_nfvbench_code_to_static_dir
+
+ # Append nfvbench version number to the image name:
+ # during development, this is useful to distinguish the development
+ # images from the latest published image.
+ #
+ # To avoid confusion, we use the same versioning as nfvbench (see
+ # nfvbench/__init__.py), although "git describe" would give us a better
+ # number with respect to uniqueness. So we will typically get something
+ # like "5.0.4.dev31" where "5.0.4" is the latest annotated tag ("5.0.3")
+ # plus one and where dev31 indicates the number of commits (31) since
+ # that tag.
+ nfvbench_version=$(python -c 'import pbr.version; print(pbr.version.VersionInfo("nfvbench").version_string_with_vcs())')
+ generator_image_name="${generator_image_name}-${nfvbench_version}"
+ fi
-if command -v gsutil >/dev/null; then
- echo "Uploading $image_name.qcow2..."
- gsutil cp $image_name.qcow2 gs://$gs_url/$image_name.qcow2
- echo "You can access to image at http://$gs_url/$image_name.qcow2"
-else
- echo "Cannot upload new image to the OPNFV artifact repository (gsutil not available)"
+ build_image $generator_image_name
fi
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/element-deps b/nfvbenchvm/dib/elements/nfvbenchvm/element-deps
index c6be0aa..7fd8e5b 100644
--- a/nfvbenchvm/dib/elements/nfvbenchvm/element-deps
+++ b/nfvbenchvm/dib/elements/nfvbenchvm/element-deps
@@ -1,4 +1,5 @@
vm
+block-device-mbr
cloud-init-datasources
install-static
package-installs
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/fdio-release.repo b/nfvbenchvm/dib/elements/nfvbenchvm/fdio-release.repo
index 3ad12fb..6b980c1 100644
--- a/nfvbenchvm/dib/elements/nfvbenchvm/fdio-release.repo
+++ b/nfvbenchvm/dib/elements/nfvbenchvm/fdio-release.repo
@@ -1,5 +1,11 @@
[fdio-release]
-name=fd.io release branch latest merge
-baseurl=https://nexus.fd.io/content/repositories/fd.io.stable.1710.centos7/
-enabled=1
+name=FD.io release 17.10 binary RPM package repository for CentOS 7
+baseurl=https://packagecloud.io/fdio/1710/el/7/$basearch
+repo_gpgcheck=1
gpgcheck=0
+enabled=1
+gpgkey=https://packagecloud.io/fdio/1710/gpgkey
+sslverify=1
+sslcacert=/etc/pki/tls/certs/ca-bundle.crt
+metadata_expire=300
+
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/finalise.d/51-add-cpu-isolation b/nfvbenchvm/dib/elements/nfvbenchvm/finalise.d/51-add-cpu-isolation
index eab5817..e9cf3c5 100755
--- a/nfvbenchvm/dib/elements/nfvbenchvm/finalise.d/51-add-cpu-isolation
+++ b/nfvbenchvm/dib/elements/nfvbenchvm/finalise.d/51-add-cpu-isolation
@@ -1,4 +1,12 @@
#!/bin/bash
-grubby --update-kernel=ALL --args="isolcpus=1 rcu_nocbs=1 nohz=on nohz_full=1 nmi_watchdog=0"
-grubby --update-kernel=ALL --args="default_hugepagesz=1G hugepagesz=1G hugepages=1"
+if [ ${DIB_DEBUG_TRACE:-1} -gt 0 ]; then
+ set -x
+fi
+
+# Stop on error
+set -euo pipefail
+
+grubby --update-kernel=ALL --args="isolcpus=1-7 rcu_nocbs=1 nohz=on nohz_full=1 nmi_watchdog=0"
+grubby --update-kernel=ALL --args="default_hugepagesz=1G hugepagesz=1G hugepages=4"
+grubby --update-kernel=ALL --args="intel_iommu=on iommu=pt"
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/finalise.d/52-change-resolution b/nfvbenchvm/dib/elements/nfvbenchvm/finalise.d/52-change-resolution
index 26f2f6a..d01b907 100755
--- a/nfvbenchvm/dib/elements/nfvbenchvm/finalise.d/52-change-resolution
+++ b/nfvbenchvm/dib/elements/nfvbenchvm/finalise.d/52-change-resolution
@@ -1,3 +1,10 @@
#!/bin/bash
+if [ ${DIB_DEBUG_TRACE:-1} -gt 0 ]; then
+ set -x
+fi
+
+# Stop on error
+set -euo pipefail
+
grubby --update-kernel=ALL --args="vga=792"
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/finalise.d/53-boot-from-new-kernel b/nfvbenchvm/dib/elements/nfvbenchvm/finalise.d/53-boot-from-new-kernel
index 6607b0b..e461801 100755
--- a/nfvbenchvm/dib/elements/nfvbenchvm/finalise.d/53-boot-from-new-kernel
+++ b/nfvbenchvm/dib/elements/nfvbenchvm/finalise.d/53-boot-from-new-kernel
@@ -1,3 +1,10 @@
#!/bin/bash
+if [ ${DIB_DEBUG_TRACE:-1} -gt 0 ]; then
+ set -x
+fi
+
+# Stop on error
+set -euo pipefail
+
grubby --set-default-index=0
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/package-installs.yaml b/nfvbenchvm/dib/elements/nfvbenchvm/package-installs.yaml
index e3184c7..6f86027 100644
--- a/nfvbenchvm/dib/elements/nfvbenchvm/package-installs.yaml
+++ b/nfvbenchvm/dib/elements/nfvbenchvm/package-installs.yaml
@@ -4,12 +4,18 @@ tuna:
wget:
screen:
telnet:
-python-devel:
libyaml-devel:
numactl-libs:
numactl-devel:
vpp:
vpp-plugins:
+vpp-config:
kernel-firmware:
kernel-headers:
kernel-devel:
+openssh-server:
+dpdk-tools:
+git:
+python3-dev:
+libpython3.6-dev:
+python3-pip:
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/01-update-kernel b/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/01-update-kernel
index 8094006..0c32b5f 100755
--- a/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/01-update-kernel
+++ b/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/01-update-kernel
@@ -1,5 +1,12 @@
#!/bin/bash
+if [ ${DIB_DEBUG_TRACE:-1} -gt 0 ]; then
+ set -x
+fi
+
+# Stop on error
+set -euo pipefail
+
if [ $DIB_USE_ELREPO_KERNEL != "True" ]; then
exit 0
fi
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/02-pip-package b/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/02-pip-package
new file mode 100755
index 0000000..ee7c5f2
--- /dev/null
+++ b/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/02-pip-package
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+if [ ${DIB_DEBUG_TRACE:-1} -gt 0 ]; then
+ set -x
+fi
+
+# Stop on error
+set -euo pipefail
+
+python3 -m pip install --upgrade pip
+python3 -m pip install setuptools wheel pbr
+python3 -m pip install pyyaml
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/02-testpmd-script b/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/02-testpmd-script
deleted file mode 100755
index 6f133d1..0000000
--- a/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/02-testpmd-script
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/bash
-
-DPDK=dpdk-18.02
-DPDK_UNTAR=dpdk-18.02
-
-# pick up the kernel version for the target image
-kernel_version=`ls -t /lib/modules | awk 'NR==1 {print}'`
-
-mkdir dpdk
-wget http://fast.dpdk.org/rel/$DPDK.tar.xz
-tar xfJ $DPDK.tar.xz
-cd $DPDK_UNTAR
-
-export RTE_KERNELDIR=/lib/modules/$kernel_version/build
-export ARCH=x86
-make -j4 install T=x86_64-native-linuxapp-gcc
-
-cp usertools/dpdk-devbind.py ../dpdk
-# cp tools/dpdk_nic_bind.py ../dpdk/dpdk-devbind.py
-cp x86_64-native-linuxapp-gcc/app/testpmd ../dpdk
-cp x86_64-native-linuxapp-gcc/kmod/igb_uio.ko ../dpdk
-echo "set promisc all off" > /dpdk/testpmd_cmd.txt
-
-cd ..
-rm -f $DPDK.tar.xz
-rm -rf $DPDK_UNTAR
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/03-add-execute-attribute b/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/03-add-execute-attribute
deleted file mode 100755
index a13ab95..0000000
--- a/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/03-add-execute-attribute
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/bash
-
-chmod +x /etc/rc.d/rc.local
-chmod +x /etc/sysconfig/network-scripts/ifcfg-eth0
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/03-copy-rc-local b/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/03-copy-rc-local
new file mode 100755
index 0000000..4a8e66b
--- /dev/null
+++ b/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/03-copy-rc-local
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+if [ ${DIB_DEBUG_TRACE:-1} -gt 0 ]; then
+ set -x
+fi
+
+# Stop on error
+set -euo pipefail
+
+# set accurate rc.local file corresponding to current image built
+if [ $DIB_DEV_IMAGE = "loopvm" ]; then
+ mv /etc/rc.d/rc.local.loopvm /etc/rc.d/rc.local
+else
+ mv /etc/rc.d/rc.local.generator /etc/rc.d/rc.local
+fi
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/04-add-execute-attribute b/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/04-add-execute-attribute
new file mode 100755
index 0000000..52aed8a
--- /dev/null
+++ b/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/04-add-execute-attribute
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+if [ ${DIB_DEBUG_TRACE:-1} -gt 0 ]; then
+ set -x
+fi
+
+# Stop on error
+set -euo pipefail
+
+chmod +x /etc/rc.d/rc.local
+chmod +x /etc/sysconfig/network-scripts/ifcfg-eth0
+chmod +x /etc/profile.d/nfvbench.sh
+chmod +x /nfvbench/configure-nfvbench.sh
+chmod +x /nfvbench/start-nfvbench.sh
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/50-pip-package b/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/50-pip-package
deleted file mode 100755
index 2d74ff5..0000000
--- a/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/50-pip-package
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/bash
-
-cd /tmp
-wget https://bootstrap.pypa.io/get-pip.py
-python get-pip.py
-
-pip install setuptools wheel
-pip install pyyaml
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/51-cloudcfg-edit b/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/51-cloudcfg-edit
index 3e4647a..1a0dec9 100755
--- a/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/51-cloudcfg-edit
+++ b/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/51-cloudcfg-edit
@@ -5,7 +5,10 @@ cloudcfg = "/etc/cloud/cloud.cfg"
user = "cloud-user"
with open(cloudcfg) as f:
- cfg = yaml.load(f)
+ cfg = yaml.safe_load(f)
+
+# allow SSH password auth
+cfg['ssh_pwauth'] = "1"
try:
if cfg['system_info']['default_user']['name']:
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/52-nfvbench-script b/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/52-nfvbench-script
new file mode 100755
index 0000000..4edc493
--- /dev/null
+++ b/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/52-nfvbench-script
@@ -0,0 +1,56 @@
+#!/bin/bash
+
+if [ ${DIB_DEBUG_TRACE:-1} -gt 0 ]; then
+ set -x
+fi
+
+# Make sure the disk image build fails if nfvbench installation fails
+set -euo pipefail
+
+if [ $DIB_DEV_IMAGE != "generator" ]; then
+ exit 0
+fi
+
+# TRex installation
+mkdir -p /opt/trex
+mkdir /var/log/nfvbench
+
+wget --no-cache --no-check-certificate https://trex-tgn.cisco.com/trex/release/$TREX_VER.tar.gz
+tar xzf $TREX_VER.tar.gz -C /opt/trex
+rm -f /$TREX_VER.tar.gz
+rm -f /opt/trex/$TREX_VER/trex_client_$TREX_VER.tar.gz
+cp -a /opt/trex/$TREX_VER/automation/trex_control_plane/interactive/trex /usr/local/lib/python3.6/site-packages/
+rm -rf /opt/trex/$TREX_VER/automation/trex_control_plane/interactive/trex
+
+# NFVbench installation
+cd /opt
+if [[ "${DIB_NFVBENCH_CODE_ORIGIN}" == "static" ]]; then
+ # nfvbench code has been copied by the install-static element to
+ # /opt/nfvbench without the .git/ directory. But pip will need that .git/
+ # directory to compute nfvbench version, so will now finish the incomplete
+ # job of install-static:
+ STATIC_NFVBENCH_CODE="$(dirname $0)/../static/opt/nfvbench"
+ [ -d "${STATIC_NFVBENCH_CODE}" ] || {
+ echo "Error: directory ${STATIC_NFVBENCH_CODE} missing."
+ echo " You requested a build from local nfvbench code with"
+ echo " DIB_NFVBENCH_CODE_ORIGIN=static, but you likely forgot"
+ echo " to clone nfvbench code in elements/nfvbenchvm/static/opt/nfvbench"
+ exit 1
+ }
+ rsync -lr "${STATIC_NFVBENCH_CODE}"/ /opt/nfvbench/
+else
+ git clone https://gerrit.opnfv.org/gerrit/nfvbench
+fi
+cd nfvbench/
+python3 -m pip install . --use-deprecated=legacy-resolver
+cp xtesting/testcases.yaml /usr/local/lib/python3.6/site-packages/xtesting/ci/testcases.yaml
+python3 ./docker/cleanup_generators.py
+rm -rf /opt/nfvbench/.git
+rm -rf /opt/nfvbench/nfvbench
+rm -rf /opt/nfvbench/behave_tests
+# symlink to NFVbench sources
+ln -s /usr/local/lib/python3.6/site-packages/nfvbench /opt/nfvbench/nfvbench
+ln -s /usr/local/lib/python3.6/site-packages/behave_tests /opt/nfvbench/behave_tests
+# persist env variables
+echo "export TREX_VER=\"$TREX_VER\"" >> /etc/profile.d/nfvbench.sh
+echo "export TREX_EXT_LIBS=\"/opt/trex/$TREX_VER/external_libs\"" >> /etc/profile.d/nfvbench.sh
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/53-sshd-script b/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/53-sshd-script
new file mode 100755
index 0000000..0c7dfd5
--- /dev/null
+++ b/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/53-sshd-script
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+if [ ${DIB_DEBUG_TRACE:-1} -gt 0 ]; then
+ set -x
+fi
+
+# Stop on error
+set -euo pipefail
+
+# Set UseDNS no value in sshd_config to reduce time to connect
+echo "UseDNS no" >> /etc/ssh/sshd_config
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/99-cleanup b/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/99-cleanup
index 14e9f27..dbb7342 100755
--- a/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/99-cleanup
+++ b/nfvbenchvm/dib/elements/nfvbenchvm/post-install.d/99-cleanup
@@ -1,3 +1,10 @@
#!/bin/bash
-yum erase -y python-devel libyaml-devel numactl-devel kernel-devel kernel-headers kernel-lt-headers kernel-lt-devel gcc
+if [ ${DIB_DEBUG_TRACE:-1} -gt 0 ]; then
+ set -x
+fi
+
+# Stop on error
+set -euo pipefail
+
+yum erase -y python-devel libyaml-devel numactl-devel kernel-devel kernel-headers kernel-lt-headers kernel-lt-devel gcc git python3-dev libpython3.6-dev
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/modprobe.d/vfio.conf b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/modprobe.d/vfio.conf
new file mode 100644
index 0000000..f32633f
--- /dev/null
+++ b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/modprobe.d/vfio.conf
@@ -0,0 +1 @@
+options vfio enable_unsafe_noiommu_mode=1
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/modules-load.d/vfio-pci.conf b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/modules-load.d/vfio-pci.conf
new file mode 100644
index 0000000..7ce4214
--- /dev/null
+++ b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/modules-load.d/vfio-pci.conf
@@ -0,0 +1 @@
+vfio-pci
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/openstack/clouds.yaml b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/openstack/clouds.yaml
new file mode 100644
index 0000000..cb1130f
--- /dev/null
+++ b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/openstack/clouds.yaml
@@ -0,0 +1 @@
+# clouds.yaml file \ No newline at end of file
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/profile.d/nfvbench.sh b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/profile.d/nfvbench.sh
new file mode 100644
index 0000000..a9bf588
--- /dev/null
+++ b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/profile.d/nfvbench.sh
@@ -0,0 +1 @@
+#!/bin/bash
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local
deleted file mode 100644
index caf3142..0000000
--- a/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local
+++ /dev/null
@@ -1,110 +0,0 @@
-#!/bin/bash
-
-touch /var/lock/subsys/local
-
-# Waiting for cloud-init to generate $TESTPMD_CONF, retry 60 seconds
-NFVBENCH_CONF=/etc/nfvbenchvm.conf
-retry=30
-until [ $retry -eq 0 ]; do
- if [ -f $NFVBENCH_CONF ]; then break; fi
- retry=$[$retry-1]
- sleep 2
-done
-if [ ! -f $NFVBENCH_CONF ]; then
- exit 0
-fi
-
-# Parse and obtain all configurations
-echo "Generating configurations for forwarder..."
-eval $(cat $NFVBENCH_CONF)
-touch /nfvbench_configured.flag
-NICS=`lspci -D | grep Ethernet | cut -d' ' -f1 | xargs`
-PCI_ADDRESS_1=`echo $NICS | awk '{ print $1 }'`
-PCI_ADDRESS_2=`echo $NICS | awk '{ print $2 }'`
-CPU_CORES=`grep -c ^processor /proc/cpuinfo`
-CPU_MASKS=0x`echo "obase=16; 2 ^ $CPU_CORES - 1" | bc`
-WORKER_CORES=`expr $CPU_CORES - 1`
-
-# CPU isolation optimizations
-echo 1 > /sys/bus/workqueue/devices/writeback/cpumask
-echo 1 > /sys/devices/virtual/workqueue/cpumask
-echo 1 > /proc/irq/default_smp_affinity
-for irq in `ls /proc/irq/`; do
- echo 1 > /proc/irq/$irq/smp_affinity
-done
-tuna -c $(seq -s, 1 1 $WORKER_CORES) --isolate
-
-# Sometimes the interfaces on the loopback VM will use different drivers, e.g.
-# one from vswitch which is virtio based, one is from SRIOV VF. In this case,
-# we have to make sure the forwarder uses them in the right order, which is
-# especially important if the VM is in a PVVP chain.
-SWAP_FLAG=0
-if [ $INTF_MAC1 ] && [ $INTF_MAC2 ]; then
- NET_PATH=/sys/class/net
- EXP_INTF_1=$(for f in $(ls $NET_PATH/); do if grep -q "$INTF_MAC1" $NET_PATH/$f/address; then echo $f; break; fi; done)
- EXP_PCI_ADDRESS_1=$(ethtool -i $EXP_INTF_1 | grep "bus-info" | awk -F' ' '{ print $2 }')
- EXP_INTF_2=$(for f in $(ls $NET_PATH/); do if grep -q "$INTF_MAC2" $NET_PATH/$f/address; then echo $f; break; fi; done)
- EXP_PCI_ADDRESS_2=$(ethtool -i $EXP_INTF_2 | grep "bus-info" | awk -F' ' '{ print $2 }')
- if [ "$PCI_ADDRESS_1" == "$EXP_PCI_ADDRESS_2" ] && [ "$PCI_ADDRESS_2" == "$EXP_PCI_ADDRESS_1" ]; then
- # Interfaces are not coming in the expected order:
- # (1) Swap the traffic generator MAC in the case of testpmd;
- # (2) Swap the interface configs in the case of VPP;
- SWAP_FLAG=1
- fi
-fi
-
-# Configure the forwarder
-if [ -z "`lsmod | grep igb_uio`" ]; then
- modprobe uio
- insmod /dpdk/igb_uio.ko
-fi
-if [ "$FORWARDER" == "testpmd" ]; then
- echo "Configuring testpmd..."
- if [ $SWAP_FLAG -eq 1 ]; then
- TEMP=$TG_MAC1; TG_MAC1=$TG_MAC2; TG_MAC2=$TEMP
- fi
- # Binding ports to DPDK
- /dpdk/dpdk-devbind.py -b igb_uio $PCI_ADDRESS_1
- /dpdk/dpdk-devbind.py -b igb_uio $PCI_ADDRESS_2
- screen -dmSL testpmd /dpdk/testpmd \
- -c $CPU_MASKS \
- -n 4 \
- -- \
- --burst=32 \
- --txd=256 \
- --rxd=1024 \
- --eth-peer=0,$TG_MAC1 \
- --eth-peer=1,$TG_MAC2 \
- --forward-mode=mac \
- --nb-cores=$WORKER_CORES \
- --max-pkt-len=9000 \
- --cmdline-file=/dpdk/testpmd_cmd.txt
-else
- echo "Configuring vpp..."
- cp /vpp/startup.conf /etc/vpp/startup.conf
- cp /vpp/vm.conf /etc/vpp/vm.conf
-
- sed -i "s/{{PCI_ADDRESS_1}}/$PCI_ADDRESS_1/g" /etc/vpp/startup.conf
- sed -i "s/{{PCI_ADDRESS_2}}/$PCI_ADDRESS_2/g" /etc/vpp/startup.conf
- sed -i "s/{{WORKER_CORES}}/$WORKER_CORES/g" /etc/vpp/startup.conf
- service vpp start
- sleep 10
-
- INTFS=`vppctl show int | grep Ethernet | xargs`
- INTF_1=`echo $INTFS | awk '{ print $1 }'`
- INTF_2=`echo $INTFS | awk '{ print $4 }'`
- if [ $SWAP_FLAG -eq 1 ]; then
- TEMP=$INTF_1; INTF_1=$INTF_2; INTF_2=$TEMP
- fi
- sed -i "s/{{INTF_1}}/${INTF_1//\//\/}/g" /etc/vpp/vm.conf
- sed -i "s/{{INTF_2}}/${INTF_2//\//\/}/g" /etc/vpp/vm.conf
- sed -i "s/{{VNF_GATEWAY1_CIDR}}/${VNF_GATEWAY1_CIDR//\//\/}/g" /etc/vpp/vm.conf
- sed -i "s/{{VNF_GATEWAY2_CIDR}}/${VNF_GATEWAY2_CIDR//\//\/}/g" /etc/vpp/vm.conf
- sed -i "s/{{TG_MAC1}}/${TG_MAC1}/g" /etc/vpp/vm.conf
- sed -i "s/{{TG_MAC2}}/${TG_MAC2}/g" /etc/vpp/vm.conf
- sed -i "s/{{TG_NET1}}/${TG_NET1//\//\/}/g" /etc/vpp/vm.conf
- sed -i "s/{{TG_NET2}}/${TG_NET2//\//\/}/g" /etc/vpp/vm.conf
- sed -i "s/{{TG_GATEWAY1_IP}}/${TG_GATEWAY1_IP}/g" /etc/vpp/vm.conf
- sed -i "s/{{TG_GATEWAY2_IP}}/${TG_GATEWAY2_IP}/g" /etc/vpp/vm.conf
- service vpp restart
-fi
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local.generator b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local.generator
new file mode 100644
index 0000000..9ac23a3
--- /dev/null
+++ b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local.generator
@@ -0,0 +1,122 @@
+#!/bin/bash
+
+touch /var/lock/subsys/local
+
+# Waiting for cloud-init to generate $NFVBENCH_CONF, retry 60 seconds
+NFVBENCH_CONF=/etc/nfvbenchvm.conf
+retry=30
+until [ $retry -eq 0 ]; do
+ if [ -f $NFVBENCH_CONF ]; then break; fi
+ retry=$[$retry-1]
+ sleep 2
+done
+if [ ! -f $NFVBENCH_CONF ]; then
+ exit 0
+fi
+
+# Parse and obtain all configurations
+echo "Generating configurations for NFVbench and TRex..."
+eval $(cat $NFVBENCH_CONF)
+touch /nfvbench_configured.flag
+
+# Add DNS entry
+if [ $DNS_SERVERS ]; then
+ IFS="," read -a dns <<< $DNS_SERVERS
+ for d in "${dns[@]}"; do
+ echo "nameserver $d" >> /etc/resolv.conf
+ done
+fi
+
+# CPU isolation optimizations
+echo 1 > /sys/bus/workqueue/devices/writeback/cpumask
+echo 1 > /sys/devices/virtual/workqueue/cpumask
+echo 1 > /proc/irq/default_smp_affinity
+for irq in `ls /proc/irq/`; do
+ if [ -f /proc/irq/$irq/smp_affinity ]; then
+ echo 1 > /proc/irq/$irq/smp_affinity
+ fi
+done
+
+NET_PATH=/sys/class/net
+
+get_eth_port() {
+ # device mapping for CentOS Linux 7:
+ # lspci:
+ # 00.03.0 Ethernet controller: Red Hat, Inc. Virtio network device
+ # 00.04.0 Ethernet controller: Red Hat, Inc. Virtio network device
+ # /sys/class/net:
+ # /sys/class/net/eth0 -> ../../devices/pci0000:00/0000:00:03.0/virtio0/net/eth0
+ # /sys/class/net/eth1 -> ../../devices/pci0000:00/0000:00:04.0/virtio1/net/eth1
+
+ mac=$1
+ for f in $(ls $NET_PATH/); do
+ if grep -q "$mac" $NET_PATH/$f/address; then
+ eth_port=$(readlink $NET_PATH/$f | cut -d "/" -f8)
+ # some virtual interfaces match on MAC and do not have a PCI address
+ if [ "$eth_port" -a "$eth_port" != "N/A" ]; then
+ # Found matching interface
+ logger "NFVBENCHVM: found interface $f ($eth_port) matching $mac"
+ break
+ else
+ eth_port=""
+ fi
+ fi;
+ done
+ if [ -z "$eth_port" ]; then
+ echo "ERROR: Cannot find eth port for MAC $mac" >&2
+ logger "NFVBENCHVM ERROR: Cannot find eth port for MAC $mac"
+ return 1
+ fi
+ echo $eth_port
+ return 0
+}
+
+# Set VM MANAGEMENT port up and running
+if [ $INTF_MGMT_CIDR ] && [ $INTF_MGMT_IP_GW ]; then
+ if [ $INTF_MAC_MGMT ]; then
+ ETH_PORT=$(get_eth_port $INTF_MAC_MGMT)
+ elif [ "$CLOUD_DETAIL" ] && [ "$PORT_MGMT_NAME" ]; then
+ $INTF_MAC_MGMT=$(openstack --os-cloud $CLOUD_DETAIL port list | grep $PORT_MGMT_NAME | grep -o -Ei '([a-fA-F0-9:]{17}|[a-fA-F0-9]{12}$)' | head -1)
+ ETH_PORT=$(get_eth_port $INTF_MAC_MGMT)
+ else
+ ETH_PORT=""
+ fi
+ if [ -z "$ETH_PORT" ]; then
+ echo "ERROR: Cannot find eth port for management port" >&2
+ logger "NFVBENCHVM ERROR: Cannot find eth port for management port"
+ return 1
+ fi
+
+ # By default, configure the MTU of the management interface to the
+ # conservative value of 1500: this will reduce the risk to get an
+ # unmanageable VM in some setups.
+ #
+ # To set the MTU to a different value, configure the INTF_MGMT_MTU variable
+ # in /etc/nfvbenchvm.conf. If INTF_MGMT_MTU is set to the special value
+ # "auto", the MTU will not be configured and it will keep the value set by
+ # the hypervisor ("legacy" nfvbenchvm behavior). If INTF_MGMT_MTU is unset,
+ # the MTU will be set to 1500. In other cases, the MTU will be set to the
+ # value of INTF_MGMT_MTU.
+ #
+ if [[ -z "$INTF_MGMT_MTU" ]]; then
+ ip link set $ETH_PORT mtu 1500
+ elif [[ "$INTF_MGMT_MTU" != "auto" ]]; then
+ ip link set $ETH_PORT mtu $INTF_MGMT_MTU
+ fi
+
+ ip addr add $INTF_MGMT_CIDR dev $ETH_PORT
+ ip link set $ETH_PORT up
+ ip route add default via $INTF_MGMT_IP_GW dev $ETH_PORT
+else
+ echo "INFO: VM management IP Addresses missing in $NFVBENCH_CONF"
+fi
+
+/nfvbench/configure-nfvbench.sh
+
+if [ $ACTION ]; then
+ /nfvbench/start-nfvbench.sh $ACTION
+else
+ /nfvbench/start-nfvbench.sh
+fi
+
+exit 0
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local.loopvm b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local.loopvm
new file mode 100644
index 0000000..181ff2a
--- /dev/null
+++ b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local.loopvm
@@ -0,0 +1,298 @@
+#!/bin/bash
+
+touch /var/lock/subsys/local
+
+# Waiting for cloud-init to generate $NFVBENCH_CONF, retry 60 seconds
+NFVBENCH_CONF=/etc/nfvbenchvm.conf
+retry=30
+until [ $retry -eq 0 ]; do
+ if [ -f $NFVBENCH_CONF ]; then break; fi
+ retry=$[$retry-1]
+ sleep 2
+done
+if [ ! -f $NFVBENCH_CONF ]; then
+ exit 0
+fi
+
+# Parse and obtain all configurations
+echo "Generating configurations for forwarder..."
+eval $(cat $NFVBENCH_CONF)
+touch /nfvbench_configured.flag
+
+# WE assume there are at least 2 cores available for the VM
+CPU_CORES=$(grep -c ^processor /proc/cpuinfo)
+
+# We need at least 1 admin core.
+if [ $CPU_CORES -le 2 ]; then
+ ADMIN_CORES=1
+else
+ # If the number of cores is even we
+ # reserve 2 cores for admin (second being idle) so the number of
+ # workers is either 1 (if CPU_CORES is 2) or always even
+ if (( $CPU_CORES % 2 )); then
+ ADMIN_CORES=1
+ else
+ ADMIN_CORES=2
+ fi
+fi
+# 2 vcpus: AW (core 0: Admin, core 1: Worker)
+# 3 vcpus: AWW (core 0: Admin, core 1,2: Worker)
+# 4 vcpus: AWWU (core 0: Admin, core 1,2: Worker, core 3: Unused)
+# 5 vcpus: AWWWW
+# 6 vcpus: AWWWWU
+WORKER_CORES=$(expr $CPU_CORES - $ADMIN_CORES)
+# worker cores are all cores except the admin core (core 0) and the eventual unused core
+# AW -> 1
+# AWW -> 1,2
+# AWWU -> 1,2
+WORKER_CORE_LIST=$(seq -s, $ADMIN_CORES $WORKER_CORES)
+# always use all cores
+CORE_MASK=0x$(echo "obase=16; 2 ^ $CPU_CORES - 1" | bc)
+
+logger "NFVBENCHVM: CPU_CORES=$CPU_CORES, ADMIN_CORES=$ADMIN_CORES, WORKER_CORES=$WORKER_CORES ($WORKER_CORE_LIST)"
+
+# CPU isolation optimizations
+echo 1 > /sys/bus/workqueue/devices/writeback/cpumask
+echo 1 > /sys/devices/virtual/workqueue/cpumask
+echo 1 > /proc/irq/default_smp_affinity
+for irq in `ls /proc/irq/`; do
+ if [ -f /proc/irq/$irq/smp_affinity ]; then
+ echo 1 > /proc/irq/$irq/smp_affinity
+ fi
+done
+
+# Isolate all cores that are reserved for workers
+tuna -c $WORKER_CORE_LIST --isolate
+
+NET_PATH=/sys/class/net
+
+get_pci_address() {
+ # device mapping for CentOS Linux 7:
+ # lspci:
+ # 00.03.0 Ethernet controller: Red Hat, Inc. Virtio network device
+ # 00.04.0 Ethernet controller: Red Hat, Inc. Virtio network device
+ # /sys/class/net:
+ # /sys/class/net/eth0 -> ../../devices/pci0000:00/0000:00:03.0/virtio0/net/eth0
+ # /sys/class/net/eth1 -> ../../devices/pci0000:00/0000:00:04.0/virtio1/net/eth1
+
+ mac=$1
+ for f in $(ls $NET_PATH/); do
+ if grep -q "$mac" $NET_PATH/$f/address; then
+ pci_addr=$(readlink $NET_PATH/$f | cut -d "/" -f5)
+ # some virtual interfaces match on MAC and do not have a PCI address
+ if [ "$pci_addr" -a "$pci_addr" != "N/A" ]; then
+ # Found matching interface
+ logger "NFVBENCHVM: found interface $f ($pci_addr) matching $mac"
+ break
+ else
+ pci_addr=""
+ fi
+ fi;
+ done
+ if [ -z "$pci_addr" ]; then
+ echo "ERROR: Cannot find pci address for MAC $mac" >&2
+ logger "NFVBENCHVM ERROR: Cannot find pci address for MAC $mac"
+ return 1
+ fi
+ echo $pci_addr
+ return 0
+}
+
+get_eth_port() {
+ # device mapping for CentOS Linux 7:
+ # lspci:
+ # 00.03.0 Ethernet controller: Red Hat, Inc. Virtio network device
+ # 00.04.0 Ethernet controller: Red Hat, Inc. Virtio network device
+ # /sys/class/net:
+ # /sys/class/net/eth0 -> ../../devices/pci0000:00/0000:00:03.0/virtio0/net/eth0
+ # /sys/class/net/eth1 -> ../../devices/pci0000:00/0000:00:04.0/virtio1/net/eth1
+
+ mac=$1
+ for f in $(ls $NET_PATH/); do
+ if grep -q "$mac" $NET_PATH/$f/address; then
+ eth_port=$(readlink $NET_PATH/$f | cut -d "/" -f8)
+ # some virtual interfaces match on MAC and do not have a PCI address
+ if [ "$eth_port" -a "$eth_port" != "N/A" ]; then
+ # Found matching interface
+ logger "NFVBENCHVM: found interface $f ($eth_port) matching $mac"
+ break
+ else
+ eth_port=""
+ fi
+ fi;
+ done
+ if [ -z "$eth_port" ]; then
+ echo "ERROR: Cannot find eth port for MAC $mac" >&2
+ logger "NFVBENCHVM ERROR: Cannot find eth port for MAC $mac"
+ return 1
+ fi
+ echo $eth_port
+ return 0
+}
+
+# Set VM MANAGEMENT port up and running
+if [ $INTF_MGMT_CIDR ] && [ $INTF_MGMT_IP_GW ]; then
+ if [ $INTF_MAC_MGMT ]; then
+ ETH_PORT=$(get_eth_port $INTF_MAC_MGMT)
+ else
+ ETH_PORT="eth0"
+ fi
+
+ # By default, configure the MTU of the management interface to the
+ # conservative value of 1500: this will reduce the risk to get an
+ # unmanageable VM in some setups.
+ #
+ # To set the MTU to a different value, configure the INTF_MGMT_MTU variable
+ # in /etc/nfvbenchvm.conf. If INTF_MGMT_MTU is set to the special value
+ # "auto", the MTU will not be configured and it will keep the value set by
+ # the hypervisor ("legacy" nfvbenchvm behavior). If INTF_MGMT_MTU is unset,
+ # the MTU will be set to 1500. In other cases, the MTU will be set to the
+ # value of INTF_MGMT_MTU.
+ #
+ if [[ -z "$INTF_MGMT_MTU" ]]; then
+ ip link set $ETH_PORT mtu 1500
+ elif [[ "$INTF_MGMT_MTU" != "auto" ]]; then
+ ip link set $ETH_PORT mtu $INTF_MGMT_MTU
+ fi
+
+ ip addr add $INTF_MGMT_CIDR dev $ETH_PORT
+ ip link set $ETH_PORT up
+ ip route add default via $INTF_MGMT_IP_GW dev $ETH_PORT
+else
+ echo "INFO: VM management IP Addresses missing in $NFVBENCH_CONF"
+fi
+
+# Set dynamically interfaces mac values, if VM is spawn without using NFVBench
+# and management interface is used on eth0
+if [ -z "$INTF_MAC1" ] && [ -z "$INTF_MAC2" ]; then
+ INTF_MAC1=$(ip l show eth1 | grep -o -Ei '([a-fA-F0-9:]{17}|[a-fA-F0-9]{12}$)' | head -1)
+ INTF_MAC2=$(ip l show eth2 | grep -o -Ei '([a-fA-F0-9:]{17}|[a-fA-F0-9]{12}$)' | head -1)
+fi
+
+
+# Sometimes the interfaces on the loopback VM will use different drivers, e.g.
+# one from vswitch which is virtio based, one is from SRIOV VF. In this case,
+# we have to make sure the forwarder uses them in the right order, which is
+# especially important if the VM is in a PVVP chain.
+if [ $INTF_MAC1 ] && [ $INTF_MAC2 ]; then
+ PCI_ADDRESS_1=$(get_pci_address $INTF_MAC1)
+ PCI_ADDRESS_2=$(get_pci_address $INTF_MAC2)
+else
+ echo "ERROR: VM MAC Addresses missing in $NFVBENCH_CONF"
+ logger "NFVBENCHVM ERROR: VM MAC Addresses missing in $NFVBENCH_CONF"
+fi
+
+wait_vpp_service() {
+ # Wait for at most wait_max=$1 seconds until VPP service is ready. Exit
+ # with code 1 if timeout is reached.
+ #
+ # Because VPP systemd unit has Type=simple, systemctl will report the
+ # service to be active has soon as it is forked. This does not mean that
+ # the service is ready, and actually it takes some times before vppctl can
+ # succesfully connect to VPP client socket /run/vpp/cli.sock.
+ local wait_max=$1
+
+ local wait_time=0
+ while ! vppctl show int; do
+ if [[ $wait_time -ge $wait_max ]]; then
+ # Log error to both system log and standard error output
+ logger -s "NFVBENCHVM ERROR: VPP service still not ready after $wait_max seconds." \
+ "Exiting $(basename $0)."
+ exit 1
+ fi
+ sleep 1
+ wait_time=$(( wait_time + 1 ))
+ done
+}
+
+if [ $PCI_ADDRESS_1 ] && [ $PCI_ADDRESS_2 ]; then
+ logger "NFVBENCHVM: Using pci $PCI_ADDRESS_1 ($INTF_MAC1)"
+ logger "NFVBENCHVM: Using pci $PCI_ADDRESS_2 ($INTF_MAC2)"
+ # active uio_pci_generic driver
+ modprobe uio_pci_generic
+ # Configure the forwarder
+ if [ "$FORWARDER" == "testpmd" ]; then
+ echo "Configuring testpmd..."
+ mkdir /dpdk
+ echo "set promisc all off" > /dpdk/testpmd_cmd.txt
+ # Binding ports to DPDK VFIO or UIO
+ dpdk-devbind -b vfio-pci $PCI_ADDRESS_1 || dpdk-devbind -b uio_pci_generic $PCI_ADDRESS_1
+ dpdk-devbind -b vfio-pci $PCI_ADDRESS_2 || dpdk-devbind -b uio_pci_generic $PCI_ADDRESS_2
+ screen -dmSL testpmd testpmd \
+ -c $CORE_MASK \
+ -n 4 \
+ -- \
+ --nb-ports=2 \
+ --burst=32 \
+ --txd=256 \
+ --rxd=1024 \
+ --eth-peer=0,$TG_MAC1 \
+ --eth-peer=1,$TG_MAC2 \
+ --forward-mode=mac \
+ --nb-cores=$WORKER_CORES \
+ --txq=$VIF_MQ_SIZE \
+ --rxq=$VIF_MQ_SIZE \
+ --max-pkt-len=9000 \
+ --cmdline-file=/dpdk/testpmd_cmd.txt
+ echo "testpmd running in screen 'testpmd'"
+ logger "NFVBENCHVM: testpmd running in screen 'testpmd'"
+ elif [ "$FORWARDER" == "vpp" ]; then
+ echo "Configuring vpp..."
+ cp /vpp/startup.conf /etc/vpp/startup.conf
+ cp /vpp/vm.conf /etc/vpp/vm.conf
+
+ sed -i "s/{{PCI_ADDRESS_1}}/$PCI_ADDRESS_1/g" /etc/vpp/startup.conf
+ sed -i "s/{{PCI_ADDRESS_2}}/$PCI_ADDRESS_2/g" /etc/vpp/startup.conf
+ sed -i "s/{{WORKER_CORES}}/$WORKER_CORES/g" /etc/vpp/startup.conf
+ sed -i "s/{{VIF_MQ_SIZE}}/${VIF_MQ_SIZE}/g" /etc/vpp/startup.conf
+ sed -i "s/{{NUM_MBUFS}}/${NUM_MBUFS}/g" /etc/vpp/startup.conf
+ systemctl start vpp
+ # Wait until VPP service is ready for at most 30 seconds
+ wait_vpp_service 30
+
+ VPPCTL_OUTPUT=$(vppctl show int)
+ INTFS=$(echo "$VPPCTL_OUTPUT" | grep Ethernet | xargs)
+ INTF_1=$(echo $INTFS | awk '{ print $1 }')
+ INTF_2=$(echo $INTFS | awk '{ print $4 }')
+ if [[ -z "$INTF_1" ]] || [[ -z "$INTF_2" ]]; then
+ # Log error to both system log and standard error output
+ logger -s "NFVBENCHVM DEBUG: \"vppctl show int\" output:"
+ logger -s "NFVBENCHVM DEBUG: $VPPCTL_OUTPUT"
+ logger -s "NFVBENCHVM ERROR: vppctl does not show the two Ethernet interfaces we expect." \
+ "Exiting $(basename $0)."
+ exit 1
+ fi
+ if [ -z "${TG_MAC1}" ]; then
+ # vm.conf does not support lines commented with #, so
+ # we need to remove the line to set the static ARP entry.
+ sed -i "/{{TG_MAC1}}/d" /etc/vpp/vm.conf
+ else
+ sed -i "s/{{TG_MAC1}}/${TG_MAC1}/g" /etc/vpp/vm.conf
+ fi
+ if [ -z "${TG_MAC2}" ]; then
+ sed -i "/{{TG_MAC2}}/d" /etc/vpp/vm.conf
+ else
+ sed -i "s/{{TG_MAC2}}/${TG_MAC2}/g" /etc/vpp/vm.conf
+ fi
+ sed -i "s/{{INTF_1}}/${INTF_1//\//\/}/g" /etc/vpp/vm.conf
+ sed -i "s/{{INTF_2}}/${INTF_2//\//\/}/g" /etc/vpp/vm.conf
+ sed -i "s/{{VNF_GATEWAY1_CIDR}}/${VNF_GATEWAY1_CIDR//\//\/}/g" /etc/vpp/vm.conf
+ sed -i "s/{{VNF_GATEWAY2_CIDR}}/${VNF_GATEWAY2_CIDR//\//\/}/g" /etc/vpp/vm.conf
+ sed -i "s/{{TG_NET1}}/${TG_NET1//\//\/}/g" /etc/vpp/vm.conf
+ sed -i "s/{{TG_NET2}}/${TG_NET2//\//\/}/g" /etc/vpp/vm.conf
+ sed -i "s/{{TG_GATEWAY1_IP}}/${TG_GATEWAY1_IP}/g" /etc/vpp/vm.conf
+ sed -i "s/{{TG_GATEWAY2_IP}}/${TG_GATEWAY2_IP}/g" /etc/vpp/vm.conf
+ systemctl restart vpp
+ logger "NFVBENCHVM: vpp service restarted"
+ else
+ echo "ERROR: Unknown forwarder value. Accepted values: testpmd or vpp"
+ exit 1
+ fi
+else
+ echo "ERROR: Cannot find PCI Address from MAC"
+ echo "$INTF_MAC1: $PCI_ADDRESS_1"
+ echo "$INTF_MAC2: $PCI_ADDRESS_2"
+ logger "NFVBENCHVM ERROR: Cannot find PCI Address from MAC"
+fi
+
+exit 0
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/systemd/system/nfvbench.service b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/systemd/system/nfvbench.service
new file mode 100644
index 0000000..e952070
--- /dev/null
+++ b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/systemd/system/nfvbench.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=nfvbench service
+After=network.target
+
+[Service]
+Type=forking
+User=root
+RemainAfterExit=yes
+ExecStart=/bin/bash -a -c "source /etc/profile.d/nfvbench.sh && /usr/bin/screen -dmSL nfvbench /usr/local/bin/nfvbench -c /etc/nfvbench/nfvbench.conf --server"
+
+[Install]
+WantedBy=multi-user.target
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/static/nfvbench/configure-nfvbench.sh b/nfvbenchvm/dib/elements/nfvbenchvm/static/nfvbench/configure-nfvbench.sh
new file mode 100644
index 0000000..3bf1d8d
--- /dev/null
+++ b/nfvbenchvm/dib/elements/nfvbenchvm/static/nfvbench/configure-nfvbench.sh
@@ -0,0 +1,258 @@
+#!/bin/bash
+
+set -e
+
+NFVBENCH_CONF=/etc/nfvbenchvm.conf
+E2E_CFG=/etc/nfvbench/e2e.cfg
+LOOPBACK_CFG=/etc/nfvbench/loopback.cfg
+NFVBENCH_CFG=/etc/nfvbench/nfvbench.cfg
+
+# Parse and obtain all configurations
+eval $(cat $NFVBENCH_CONF)
+
+# WE assume there are at least 2 cores available for the VM
+CPU_CORES=$(grep -c ^processor /proc/cpuinfo)
+
+# We need at least 2 admin cores (one master and another latency).
+if [ $CPU_CORES -le 3 ]; then
+ ADMIN_CORES=2
+else
+ # If the number of cores is even we
+ # reserve 3 cores for admin (third being idle) so the number of
+ # workers is either 1 (if CPU_CORES is 4) or always even
+ if (( $CPU_CORES % 2 )); then
+ ADMIN_CORES=2
+ else
+ ADMIN_CORES=3
+ fi
+fi
+# 2 vcpus: AW (core 0: Admin, core 1: Worker)
+# 3 vcpus: AWW (core 0: Admin, core 1,2: Worker)
+# 4 vcpus: AWWU (core 0: Admin, core 1,2: Worker, core 3: Unused)
+# 5 vcpus: AWWWW
+# 6 vcpus: AWWWWU
+WORKER_CORES=$(expr $CPU_CORES - $ADMIN_CORES)
+# worker cores are all cores except the admin core (core 0) and the eventual unused core
+# AW -> 1
+# AWW -> 1,2
+# AWWU -> 1,2
+WORKER_CORE_LIST=$(seq -s, $ADMIN_CORES $WORKER_CORES)
+# always use all cores
+CORE_MASK=0x$(echo "obase=16; 2 ^ $CPU_CORES - 1" | bc)
+
+logger "NFVBENCHVM: CPU_CORES=$CPU_CORES, ADMIN_CORES=$ADMIN_CORES, WORKER_CORES=$WORKER_CORES ($WORKER_CORE_LIST)"
+
+# Isolate all cores that are reserved for workers
+tuna -c $WORKER_CORE_LIST --isolate
+
+NET_PATH=/sys/class/net
+
+get_pci_address() {
+ # device mapping for CentOS Linux 7:
+ # lspci:
+ # 00.03.0 Ethernet controller: Red Hat, Inc. Virtio network device
+ # 00.04.0 Ethernet controller: Red Hat, Inc. Virtio network device
+ # /sys/class/net:
+ # /sys/class/net/eth0 -> ../../devices/pci0000:00/0000:00:03.0/virtio0/net/eth0
+ # /sys/class/net/eth1 -> ../../devices/pci0000:00/0000:00:04.0/virtio1/net/eth1
+
+ mac=$1
+ for f in $(ls $NET_PATH/); do
+ if grep -q "$mac" $NET_PATH/$f/address; then
+ pci_addr=$(readlink $NET_PATH/$f | cut -d "/" -f5)
+ # some virtual interfaces match on MAC and do not have a PCI address
+ if [ "$pci_addr" -a "$pci_addr" != "N/A" ]; then
+ # Found matching interface
+ logger "NFVBENCHVM: found interface $f ($pci_addr) matching $mac"
+ break
+ else
+ pci_addr=""
+ fi
+ fi;
+ done
+ if [ -z "$pci_addr" ]; then
+ echo "ERROR: Cannot find pci address for MAC $mac" >&2
+ logger "NFVBENCHVM ERROR: Cannot find pci address for MAC $mac"
+ return 1
+ fi
+ echo $pci_addr
+ return 0
+}
+
+get_interfaces_mac_values(){
+ # Set dynamically interfaces mac values, if VM is spawn with SRIOV PF ports
+ # and openstack API are accessible
+ if [ -z "$LOOPBACK_INTF_MAC1" ] && [ -z "$LOOPBACK_INTF_MAC2" ]; then
+ if [ "$CLOUD_DETAIL" ] && [ "$LOOPBACK_PORT_NAME1" ] && [ "$LOOPBACK_PORT_NAME2" ]; then
+ LOOPBACK_INTF_MAC1=$(openstack --os-cloud $CLOUD_DETAIL port list | grep $LOOPBACK_PORT_NAME1 | grep -o -Ei '([a-fA-F0-9:]{17}|[a-fA-F0-9]{12}$)' | head -1)
+ LOOPBACK_INTF_MAC2=$(openstack --os-cloud $CLOUD_DETAIL port list | grep $LOOPBACK_PORT_NAME2 | grep -o -Ei '([a-fA-F0-9:]{17}|[a-fA-F0-9]{12}$)' | head -1)
+ fi
+ fi
+ if [ -z "$E2E_INTF_MAC1" ] && [ -z "$E2E_INTF_MAC2" ]; then
+ if [ "$CLOUD_DETAIL" ] && [ "$E2E_PORT_NAME1" ] && [ "$E2E_PORT_NAME2" ]; then
+ E2E_INTF_MAC1=$(openstack --os-cloud $CLOUD_DETAIL port list | grep $E2E_PORT_NAME1 | grep -o -Ei '([a-fA-F0-9:]{17}|[a-fA-F0-9]{12}$)' | head -1)
+ E2E_INTF_MAC2=$(openstack --os-cloud $CLOUD_DETAIL port list | grep $E2E_PORT_NAME2 | grep -o -Ei '([a-fA-F0-9:]{17}|[a-fA-F0-9]{12}$)' | head -1)
+ fi
+ fi
+ if [ -z "$INTF_MAC1" ] && [ -z "$INTF_MAC2" ]; then
+ if [ "$CLOUD_DETAIL" ] && [ "$PORT_NAME1" ] && [ "$PORT_NAME2" ]; then
+ INTF_MAC1=$(openstack --os-cloud $CLOUD_DETAIL port list | grep $PORT_NAME1 | grep -o -Ei '([a-fA-F0-9:]{17}|[a-fA-F0-9]{12}$)' | head -1)
+ INTF_MAC2=$(openstack --os-cloud $CLOUD_DETAIL port list | grep $PORT_NAME2 | grep -o -Ei '([a-fA-F0-9:]{17}|[a-fA-F0-9]{12}$)' | head -1)
+ fi
+ fi
+}
+
+get_interfaces_pci_address(){
+ # Sometimes the interfaces on the generator VM will use different physical networks. In this case,
+ # we have to make sure the generator uses them in the right order.
+ if [ $LOOPBACK_INTF_MAC1 ] && [ $LOOPBACK_INTF_MAC2 ]; then
+ LOOPBACK_PCI_ADDRESS_1=$(get_pci_address $LOOPBACK_INTF_MAC1)
+ LOOPBACK_PCI_ADDRESS_2=$(get_pci_address $LOOPBACK_INTF_MAC2)
+
+ echo LOOPBACK_PCI_ADDRESS_1=$LOOPBACK_PCI_ADDRESS_1 >> $NFVBENCH_CONF
+ echo LOOPBACK_PCI_ADDRESS_2=$LOOPBACK_PCI_ADDRESS_2 >> $NFVBENCH_CONF
+ fi
+ if [ $E2E_INTF_MAC1 ] && [ $E2E_INTF_MAC2 ]; then
+ E2E_PCI_ADDRESS_1=$(get_pci_address $E2E_INTF_MAC1)
+ E2E_PCI_ADDRESS_2=$(get_pci_address $E2E_INTF_MAC2)
+
+ echo E2E_PCI_ADDRESS_1=$E2E_PCI_ADDRESS_1 >> $NFVBENCH_CONF
+ echo E2E_PCI_ADDRESS_2=$E2E_PCI_ADDRESS_2 >> $NFVBENCH_CONF
+ fi
+ if [ $INTF_MAC1 ] && [ $INTF_MAC2 ]; then
+ PCI_ADDRESS_1=$(get_pci_address $INTF_MAC1)
+ PCI_ADDRESS_2=$(get_pci_address $INTF_MAC2)
+
+ echo PCI_ADDRESS_1=$PCI_ADDRESS_1 >> $NFVBENCH_CONF
+ echo PCI_ADDRESS_2=$PCI_ADDRESS_2 >> $NFVBENCH_CONF
+ fi
+}
+
+bind_interfaces(){
+ if [ $LOOPBACK_PCI_ADDRESS_1 ]; then
+ dpdk-devbind -b vfio-pci $LOOPBACK_PCI_ADDRESS_1
+ fi
+ if [ $LOOPBACK_PCI_ADDRESS_2 ]; then
+ dpdk-devbind -b vfio-pci $LOOPBACK_PCI_ADDRESS_2
+ fi
+ if [ $E2E_PCI_ADDRESS_1 ]; then
+ dpdk-devbind -b vfio-pci $E2E_PCI_ADDRESS_1
+ fi
+ if [ $E2E_PCI_ADDRESS_2 ]; then
+ dpdk-devbind -b vfio-pci $E2E_PCI_ADDRESS_2
+ fi
+ if [ $PCI_ADDRESS_1 ]; then
+ dpdk-devbind -b vfio-pci $PCI_ADDRESS_1
+ fi
+ if [ $PCI_ADDRESS_2 ]; then
+ dpdk-devbind -b vfio-pci $PCI_ADDRESS_2
+ fi
+}
+
+configure_loopback_mode(){
+ if [ $LOOPBACK_PCI_ADDRESS_1 ] && [ $LOOPBACK_PCI_ADDRESS_2 ]; then
+ logger "NFVBENCHVM: loopback - Using pci $LOOPBACK_PCI_ADDRESS_1 ($LOOPBACK_INTF_MAC1)"
+ logger "NFVBENCHVM: loopback - Using pci $LOOPBACK_PCI_ADDRESS_2 ($LOOPBACK_INTF_MAC2)"
+
+ echo "Configuring nfvbench and TRex for loopback mode..."
+ # execute env script to avoid no ENV in screen and a nfvbench error
+ source /etc/profile.d/nfvbench.sh
+ sed -i "s/{{PCI_ADDRESS_1}}/$LOOPBACK_PCI_ADDRESS_1/g" /etc/nfvbench/loopback.cfg
+ sed -i "s/{{PCI_ADDRESS_2}}/$LOOPBACK_PCI_ADDRESS_2/g" /etc/nfvbench/loopback.cfg
+ sed -i "s/{{CORES}}/$WORKER_CORES/g" /etc/nfvbench/loopback.cfg
+ CORE_THREADS=$(seq -s, 2 $((2+$WORKER_CORES)))
+ sed -i "s/{{CORE_THREADS}}/$CORE_THREADS/g" /etc/nfvbench/loopback.cfg
+ else
+ echo "ERROR: Cannot find PCI Address from MAC"
+ echo "$LOOPBACK_INTF_MAC1: $LOOPBACK_PCI_ADDRESS_1"
+ echo "$LOOPBACK_INTF_MAC2: $LOOPBACK_PCI_ADDRESS_2"
+ logger "NFVBENCHVM ERROR: Cannot find PCI Address from MAC (loopback mode)"
+ fi
+
+}
+
+configure_e2e_mode(){
+ if [ $E2E_PCI_ADDRESS_1 ] && [ $E2E_PCI_ADDRESS_2 ]; then
+ logger "NFVBENCHVM: e2e - Using pci $E2E_PCI_ADDRESS_1 ($E2E_INTF_MAC1)"
+ logger "NFVBENCHVM: e2e - Using pci $E2E_PCI_ADDRESS_2 ($E2E_INTF_MAC2)"
+
+ echo "Configuring nfvbench and TRex for e2e mode..."
+ # execute env script to avoid no ENV in screen and a nfvbench error
+ source /etc/profile.d/nfvbench.sh
+ sed -i "s/{{PCI_ADDRESS_1}}/$E2E_PCI_ADDRESS_1/g" /etc/nfvbench/e2e.cfg
+ sed -i "s/{{PCI_ADDRESS_2}}/$E2E_PCI_ADDRESS_2/g" /etc/nfvbench/e2e.cfg
+ sed -i "s/{{CORES}}/$WORKER_CORES/g" /etc/nfvbench/e2e.cfg
+ CORE_THREADS=$(seq -s, 2 $((2+$WORKER_CORES)))
+ sed -i "s/{{CORE_THREADS}}/$CORE_THREADS/g" /etc/nfvbench/e2e.cfg
+ else
+ echo "ERROR: Cannot find PCI Address from MAC"
+ echo "$E2E_INTF_MAC1: $E2E_PCI_ADDRESS_1"
+ echo "$E2E_INTF_MAC2: $E2E_PCI_ADDRESS_2"
+ logger "NFVBENCHVM ERROR: Cannot find PCI Address from MAC (e2e mode)"
+ fi
+}
+
+configure_nfvbench(){
+ if [ $PCI_ADDRESS_1 ] && [ $PCI_ADDRESS_2 ]; then
+ logger "NFVBENCHVM: Using pci $PCI_ADDRESS_1 ($INTF_MAC1)"
+ logger "NFVBENCHVM: Using pci $PCI_ADDRESS_2 ($INTF_MAC2)"
+
+ echo "Configuring nfvbench and TRex..."
+ # execute env script to avoid no ENV in screen and a nfvbench error
+ source /etc/profile.d/nfvbench.sh
+
+ if [ $DEFAULT ]; then
+ cp /nfvbench/nfvbench.conf /etc/nfvbench/nfvbench.cfg
+ fi
+ sed -i "s/{{PCI_ADDRESS_1}}/$PCI_ADDRESS_1/g" /etc/nfvbench/nfvbench.cfg
+ sed -i "s/{{PCI_ADDRESS_2}}/$PCI_ADDRESS_2/g" /etc/nfvbench/nfvbench.cfg
+ sed -i "s/{{CORES}}/$WORKER_CORES/g" /etc/nfvbench/nfvbench.cfg
+ CORE_THREADS=$(seq -s, 2 $((2+$WORKER_CORES)))
+ sed -i "s/{{CORE_THREADS}}/$CORE_THREADS/g" /etc/nfvbench/nfvbench.cfg
+
+ else
+ echo "ERROR: Cannot find PCI Address from MAC"
+ echo "$INTF_MAC1: $PCI_ADDRESS_1"
+ echo "$INTF_MAC2: $PCI_ADDRESS_2"
+ logger "NFVBENCHVM ERROR: Cannot find PCI Address from MAC"
+ fi
+}
+
+# Check if config files are provided by config drive (CLI command) or Ansible script
+# and configure NFVbench accordingly to these files
+if [ -f $E2E_CFG ]; then
+ if [ -z $E2E_PCI_ADDRESS_1 ] && [ -z $E2E_PCI_ADDRESS_2 ]; then
+ get_interfaces_mac_values
+ get_interfaces_pci_address
+ bind_interfaces
+ fi
+ configure_e2e_mode
+fi
+if [ -f $LOOPBACK_CFG ]; then
+ if [ -z $LOOPBACK_PCI_ADDRESS_1 ] && [ -z $LOOPBACK_PCI_ADDRESS_2 ]; then
+ get_interfaces_mac_values
+ get_interfaces_pci_address
+ bind_interfaces
+ fi
+ configure_loopback_mode
+fi
+# if nfvbench.cfg is provided by config drive (CLI command) or Ansible script
+# configure nfvbench using this file otherwise untemplate default config if no file exists
+if [ -f $NFVBENCH_CFG ]; then
+ if [ -z $PCI_ADDRESS_1 ] && [ -z $PCI_ADDRESS_2 ]; then
+ get_interfaces_mac_values
+ get_interfaces_pci_address
+ bind_interfaces
+ fi
+ configure_nfvbench
+elif [ ! -f $E2E_CFG ] && [ ! -f $LOOPBACK_CFG ]; then
+ if [ -z $PCI_ADDRESS_1 ] && [ -z $PCI_ADDRESS_2 ]; then
+ get_interfaces_mac_values
+ get_interfaces_pci_address
+ bind_interfaces
+ fi
+ DEFAULT=true
+ configure_nfvbench
+fi
+
+exit 0 \ No newline at end of file
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/static/nfvbench/nfvbench.conf b/nfvbenchvm/dib/elements/nfvbenchvm/static/nfvbench/nfvbench.conf
new file mode 100644
index 0000000..c1ca23e
--- /dev/null
+++ b/nfvbenchvm/dib/elements/nfvbenchvm/static/nfvbench/nfvbench.conf
@@ -0,0 +1,25 @@
+traffic_generator:
+ generator_profile:
+ - name: trex-local
+ tool: TRex
+ ip: 127.0.0.1
+ zmq_pub_port: 4500
+ zmq_rpc_port: 4501
+ software_mode: false
+
+ cores: {{CORES}}
+ platform:
+ master_thread_id: '0'
+ latency_thread_id: '1'
+ dual_if:
+ - socket: 0
+ threads: [{{CORE_THREADS}}]
+
+ interfaces:
+ - port: 0
+ pci: "{{PCI_ADDRESS_1}}"
+ switch:
+ - port: 1
+ pci: "{{PCI_ADDRESS_2}}"
+ switch:
+ intf_speed: \ No newline at end of file
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/static/nfvbench/start-nfvbench.sh b/nfvbenchvm/dib/elements/nfvbenchvm/static/nfvbench/start-nfvbench.sh
new file mode 100644
index 0000000..1f6fa28
--- /dev/null
+++ b/nfvbenchvm/dib/elements/nfvbenchvm/static/nfvbench/start-nfvbench.sh
@@ -0,0 +1,51 @@
+#!/bin/bash
+
+
+restart_nfvbench_service(){
+ service nfvbench restart
+ echo "NFVbench running in screen 'nfvbench'"
+ logger "NFVBENCHVM: NFVbench running in screen 'nfvbench'"
+}
+
+start_nfvbench(){
+ ln -sfn /etc/nfvbench/nfvbench.cfg /etc/nfvbench/nfvbench.conf
+ restart_nfvbench_service
+}
+
+start_nfvbench_e2e_mode(){
+ ln -sfn /etc/nfvbench/e2e.cfg /etc/nfvbench/nfvbench.conf
+ restart_nfvbench_service
+}
+
+start_nfvbench_loopback_mode(){
+ ln -sfn /etc/nfvbench/loopback.cfg /etc/nfvbench/nfvbench.conf
+ restart_nfvbench_service
+}
+
+usage() {
+ echo "Usage: $0 action"
+ echo "action (optional):"
+ echo "e2e start NFVbench with E2E config file"
+ echo "loopback start NFVbench with loopback config file"
+ echo ""
+ echo "If no action is given NFVbench will start with default config file"
+ exit 1
+}
+
+# ----------------------------------------------------------------------------
+# Parse command line options and configure the script
+# ----------------------------------------------------------------------------
+if [ "$#" -lt 1 ]; then
+ start_nfvbench
+ exit 0
+else
+ if [ $1 = "e2e" ]; then
+ start_nfvbench_e2e_mode
+ exit 0
+ elif [ $1 = "loopback" ]; then
+ start_nfvbench_loopback_mode
+ exit 0
+ else
+ usage
+ fi
+fi
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/static/vpp/startup.conf b/nfvbenchvm/dib/elements/nfvbenchvm/static/vpp/startup.conf
index e3f1486..874f6cb 100644
--- a/nfvbenchvm/dib/elements/nfvbenchvm/static/vpp/startup.conf
+++ b/nfvbenchvm/dib/elements/nfvbenchvm/static/vpp/startup.conf
@@ -14,11 +14,13 @@ dpdk {
dev default {
num-rx-desc 1024
num-tx-desc 1024
+ num-rx-queues {{VIF_MQ_SIZE}}
}
socket-mem 1024
dev {{PCI_ADDRESS_1}}
dev {{PCI_ADDRESS_2}}
- uio-driver igb_uio
+ uio-driver uio_pci_generic
+ num-mbufs {{NUM_MBUFS}}
}
api-segment {
diff --git a/nfvbenchvm/dib/verify-image.sh b/nfvbenchvm/dib/verify-image.sh
new file mode 100644
index 0000000..0a2090d
--- /dev/null
+++ b/nfvbenchvm/dib/verify-image.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+#
+# A shell script to verify that a VM image is present in google storage
+# If not present in google storage, verify it is present locally
+# If not present locally, build it but do not uplaod to google storage
+
+bash build-image.sh -v
diff --git a/pylint.rc b/pylint.rc
index 8671cef..f31b894 100644
--- a/pylint.rc
+++ b/pylint.rc
@@ -50,7 +50,7 @@ confidence=
# --enable=similarities". If you want to run only the classes checker, but have
# no Warning level messages displayed, use"--disable=all --enable=classes
# --disable=W"
-disable=unused-argument,global-statement,too-many-statements,too-many-arguments,too-many-branches,catching-non-exception,relative-import,too-many-locals,invalid-name,broad-except,print-statement,parameter-unpacking,unpacking-in-except,old-raise-syntax,backtick,long-suffix,old-ne-operator,import-star-module-level,raw-checker-failed,locally-disabled,locally-enabled,file-ignored,suppressed-message,useless-suppression,deprecated-pragma,apply-builtin,basestring-builtin,buffer-builtin,cmp-builtin,coerce-builtin,execfile-builtin,file-builtin,long-builtin,raw_input-builtin,reduce-builtin,standarderror-builtin,unicode-builtin,xrange-builtin,coerce-method,delslice-method,getslice-method,setslice-method,no-absolute-import,old-division,dict-iter-method,dict-view-method,next-method-called,metaclass-assignment,indexing-exception,raising-string,reload-builtin,oct-method,hex-method,nonzero-method,cmp-method,input-builtin,round-builtin,intern-builtin,unichr-builtin,map-builtin-not-iterating,zip-builtin-not-iterating,range-builtin-not-iterating,filter-builtin-not-iterating,using-cmp-argument,eq-without-hash,div-method,idiv-method,rdiv-method,exception-message-attribute,invalid-str-codec,sys-max-int,bad-python3-import,deprecated-string-function,deprecated-str-translate-call,missing-docstring,redefined-builtin,no-name-in-module,no-self-use,no-member,arguments-differ,attribute-defined-outside-init,non-iterator-returned,eval-used,unexpected-keyword-arg,pointless-string-statement,no-value-for-parameter
+disable=unused-argument,global-statement,too-many-statements,too-many-arguments,too-many-branches,catching-non-exception,too-many-locals,invalid-name,broad-except,raw-checker-failed,locally-disabled,file-ignored,suppressed-message,useless-suppression,deprecated-pragma,missing-docstring,redefined-builtin,no-name-in-module,no-member,arguments-differ,attribute-defined-outside-init,non-iterator-returned,eval-used,unexpected-keyword-arg,pointless-string-statement,no-value-for-parameter,useless-object-inheritance,import-outside-toplevel,wrong-import-order,consider-using-f-string,consider-using-generator,unnecessary-lambda-assignment,implicit-str-concat,global-variable-not-assigned
# Enable the message, report, category or checker with the given id(s). You can
# either give multiple identifier separated by comma (,) or put this option
@@ -92,36 +92,21 @@ max-nested-blocks=5
[BASIC]
-# Naming hint for argument names
-argument-name-hint=(([a-z][a-z0-9_]{2,50})|(_[a-z0-9_]*))$
-
# Regular expression matching correct argument names
argument-rgx=(([a-z][a-z0-9_]{2,50})|(_[a-z0-9_]*))$
-# Naming hint for attribute names
-attr-name-hint=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$
-
# Regular expression matching correct attribute names
attr-rgx=(([a-z][a-z0-9_]{2,50})|(_[a-z0-9_]*))$
# Bad variable names which should always be refused, separated by a comma
bad-names=foo,bar,baz,toto,tutu,tata
-# Naming hint for class attribute names
-class-attribute-name-hint=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$
-
# Regular expression matching correct class attribute names
class-attribute-rgx=([A-Za-z_][A-Za-z0-9_]{2,50}|(__.*__))$
-# Naming hint for class names
-class-name-hint=[A-Z_][a-zA-Z0-9]+$
-
# Regular expression matching correct class names
class-rgx=[A-Z_][a-zA-Z0-9]+$
-# Naming hint for constant names
-const-name-hint=(([A-Za-z_][A-Za-z0-9_]*)|(__.*__))$
-
# Regular expression matching correct constant names
const-rgx=(([A-Za-z_][A-Za-z0-9_]*)|(__.*__))$
@@ -129,9 +114,6 @@ const-rgx=(([A-Za-z_][A-Za-z0-9_]*)|(__.*__))$
# ones are exempt.
docstring-min-length=-1
-# Naming hint for function names
-function-name-hint=(([a-z][a-zA-Z0-9_]{2,50})|(_[a-z0-9_]*))$
-
# Regular expression matching correct function names
function-rgx=(([a-z][a-zA-Z0-9_]{2,50})|(_[a-z0-9_]*))$
@@ -141,21 +123,12 @@ good-names=i,j,k,ex,Run,_
# Include a hint for the correct naming format with invalid-name
include-naming-hint=no
-# Naming hint for inline iteration names
-inlinevar-name-hint=[A-Za-z_][A-Za-z0-9_]*$
-
# Regular expression matching correct inline iteration names
inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$
-# Naming hint for method names
-method-name-hint=(([a-z][a-z0-9_]{2,50})|(_[a-z0-9_]*))$
-
# Regular expression matching correct method names
method-rgx=(([a-z][a-z0-9_]{2,50})|(_[a-z0-9_]*))$
-# Naming hint for module names
-module-name-hint=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
-
# Regular expression matching correct module names
module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
@@ -171,9 +144,6 @@ no-docstring-rgx=^_
# to this list to register other decorators that produce valid properties.
property-classes=abc.abstractproperty
-# Naming hint for variable names
-variable-name-hint=(([a-z][a-z0-9_]{2,50})|(_[a-z0-9_]*))$
-
# Regular expression matching correct variable names
variable-rgx=(([a-z][a-z0-9_]{2,50})|(_[a-z0-9_]*))$
@@ -197,13 +167,7 @@ indent-string=' '
max-line-length=100
# Maximum number of lines in a module
-max-module-lines=1500
-
-# List of optional constructs for which whitespace checking is disabled. `dict-
-# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}.
-# `trailing-comma` allows a space between comma and closing bracket: (a, ).
-# `empty-line` allows space-only lines.
-no-space-check=trailing-comma,dict-separator
+max-module-lines=1600
# Allow the body of a class to be on the same line as the declaration if body
# contains single statement.
@@ -361,7 +325,7 @@ max-args=12
max-attributes=32
# Maximum number of boolean expressions in a if statement
-max-bool-expr=5
+max-bool-expr=6
# Maximum number of branch for function / method body
max-branches=30
diff --git a/requirements-dev.txt b/requirements-dev.txt
index 276d014..5522a05 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -1,9 +1,11 @@
+# Python requirements to setup a development environment to be able to do
+# anything directly or with tox: run unit tests, run code quality checks, build
+# the docs, ...
+
+-c https://opendev.org/openstack/requirements/raw/branch/stable/yoga/upper-constraints.txt
-r requirements.txt
-docutils==0.14.0
-flake8>=2.3.0
-pylint>=1.3
-pep8>=1.5.7
-sphinx>=1.4.0
-sphinx_rtd_theme>=0.2.4
-tox>=2.3.0
-mock>=2.0.0
+-r test-requirements.txt
+-r docs/requirements.txt
+
+# Install tox with the same version as on OPNFV build servers
+tox==3.21.4
diff --git a/requirements.txt b/requirements.txt
index 0a67060..488aa5f 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,27 +1,28 @@
+# Python dependencies required to run nfvbench and behave_tests
+#
# The order of packages is significant, because pip processes them in the order
# of appearance. Changing the order has an impact on the overall integration
# process, which may cause wedges in the gate later.
-pbr>=3.1.1
+pbr!=2.1.0 # Apache-2.0
attrdict>=2.0.0
bitmath>=1.3.1.1
-paramiko>=1.14.0
-prettytable>=0.7.2
-pytz>=2016.4
-six>=1.10.0
-python-glanceclient==2.6.0
-python-neutronclient<3,>=2.3.6
-python-novaclient>=2.18.1
-python-openstackclient>=0.4.1
-python-keystoneclient>=1.0.0
-pyyaml>=3.11
-pyzmq>=15.3.0
-requests>=2.13.0
-tabulate>=0.7.5
-flask>=0.12
-flask_socketio>=2.8.3
-backports.ssl-match-hostname==3.5.0.1 # via websocket-client
-socketIO-client==0.7.2
-websocket-client==0.40.0 # via socketio-client
+pytz # MIT
+python-glanceclient # Apache-2.0
+python-neutronclient # Apache-2.0
+python-novaclient # Apache-2.0
+python-openstackclient # Apache-2.0
+python-keystoneclient!=2.1.0 # Apache-2.0
+PyYAML # MIT
+tabulate # MIT
+Flask!=0.11 # BSD
fluent-logger>=0.5.3
+netaddr # BSD
+hdrhistogram>=0.8.0
+
+# Extra requirements for behave_tests:
+requests!=2.20.0,!=2.24.0 # Apache-2.0
+retry>=0.9.2
+xtesting>=0.92.0
+behave>=1.2.6
diff --git a/setup.cfg b/setup.cfg
index e1b1ddf..d570851 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -29,17 +29,20 @@ classifier =
Operating System :: POSIX :: Linux
Operating System :: MacOS
Programming Language :: Python
- Programming Language :: Python :: 2
- Programming Language :: Python :: 2.7
+ Programming Language :: Python :: 3
+ Programming Language :: Python :: 3.8
[files]
packages =
nfvbench
+ behave_tests
[entry_points]
console_scripts =
nfvbench = nfvbench.nfvbench:main
nfvbench_client = client.nfvbench_client:main
+xtesting.testcase =
+ nfvbench_behaveframework = behave_tests.behavedriver:BehaveDriver
[compile_catalog]
directory = nfvbench/locale
diff --git a/setup.py b/setup.py
index bf772f3..f63cc23 100644
--- a/setup.py
+++ b/setup.py
@@ -13,27 +13,9 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-from setuptools.command.test import test
-from setuptools import setup
-import sys
+# THIS FILE IS MANAGED BY THE GLOBAL REQUIREMENTS REPO - DO NOT EDIT
+import setuptools
-
-class Tox(test):
- def initialize_options(self):
- test.initialize_options(self)
- self.tox_args = None
-
- def finalize_options(self):
- test.finalize_options(self)
- self.test_args = []
- self.test_suite = True
-
- def run_tests(self):
- import tox
- sys.exit(tox.cmdline())
-
-
-if __name__ == '__main__':
- setup(setup_requires=['pbr'], pbr=True,
- tests_require=['tox'],
- cmdclass={'test': Tox})
+setuptools.setup(
+ setup_requires=['pbr>=2.0.0'],
+ pbr=True)
diff --git a/test-requirements.txt b/test-requirements.txt
index 18f4952..4fa57c3 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -1,18 +1,21 @@
+# Python dependencies required by tox to run unit tests and code quality checks
+#
+# (dependencies required to build and check the docs can be found in
+# docs/requirements.txt)
+#
# The order of packages is significant, because pip processes them in the order
# of appearance. Changing the order has an impact on the overall integration
# process, which may cause wedges in the gate later.
-hacking<0.11,>=0.10.0
+# Requirements for nfvbench unit tests:
+pytest # MIT
+scapy>=2.3.1
+# Extra requirements for behave_tests unit tests:
+pytest-subtests
-coverage>=3.6
-discover
-python-subunit>=0.0.18
-sphinx>=1.4.0
-sphinx_rtd_theme>=0.1.9
-oslosphinx>=2.5.0 # Apache-2.0
-oslotest>=1.10.0 # Apache-2.0
-testrepository>=0.0.18
-testscenarios>=0.4
-testtools>=1.4.0
-pytest>=3.2.2
-pylint>=1.7.1
+# Requirements for pep8 test:
+hacking==5.0.0
+flake8>=3.3.0
+
+# Requirements for linter test:
+pylint==2.15.9
diff --git a/test/mock_trex.py b/test/mock_trex.py
index c4ce9d7..cb8a081 100644
--- a/test/mock_trex.py
+++ b/test/mock_trex.py
@@ -17,32 +17,35 @@ import sys
# Because trex_stl_lib may not be installed when running unit test
# nfvbench.traffic_client will try to import STLError:
-# from trex_stl_lib.api import STLError
-# will raise ImportError: No module named trex_stl_lib.api
-# trex.py will also try to import a number of trex_stl_lib classes
+# from trex.stl.api import STLError
+# will raise ImportError: No module named trex.stl.api
+# trex_gen.py will also try to import a number of trex.stl.api classes
try:
- import trex_stl_lib.api
- assert trex_stl_lib.api
+ import trex.stl.api
+ assert trex.stl.api
except ImportError:
from types import ModuleType
- # Make up a trex_stl_lib.api.STLError class
+ # Make up a trex.stl.api.STLError class
class STLDummy(Exception):
"""Dummy class."""
- pass
-
- stl_lib_mod = ModuleType('trex_stl_lib')
- sys.modules['trex_stl_lib'] = stl_lib_mod
- api_mod = ModuleType('trex_stl_lib.api')
+ trex_lib_mod = ModuleType('trex')
+ sys.modules['trex'] = trex_lib_mod
+ stl_lib_mod = ModuleType('trex.stl')
+ trex_lib_mod.stl = stl_lib_mod
+ sys.modules['trex.stl'] = stl_lib_mod
+ api_mod = ModuleType('trex.stl.api')
stl_lib_mod.api = api_mod
- sys.modules['trex_stl_lib.api'] = api_mod
+ sys.modules['trex.stl.api'] = api_mod
api_mod.STLError = STLDummy
api_mod.STLxyz = STLDummy
api_mod.CTRexVmInsFixHwCs = STLDummy
api_mod.Dot1Q = STLDummy
api_mod.Ether = STLDummy
+ api_mod.ARP = STLDummy
api_mod.IP = STLDummy
+ api_mod.ARP = STLDummy
api_mod.STLClient = STLDummy
api_mod.STLFlowLatencyStats = STLDummy
api_mod.STLFlowStats = STLDummy
@@ -50,9 +53,12 @@ except ImportError:
api_mod.STLScVmRaw = STLDummy
api_mod.STLStream = STLDummy
api_mod.STLTXCont = STLDummy
+ api_mod.STLTXMultiBurst = STLDummy
api_mod.STLVmFixChecksumHw = STLDummy
+ api_mod.STLVmFixIpv4 = STLDummy
api_mod.STLVmFlowVar = STLDummy
- api_mod.STLVmFlowVarRepetableRandom = STLDummy
+ api_mod.STLVmFlowVarRepeatableRandom = STLDummy
+ api_mod.STLVmTupleGen = STLDummy
api_mod.STLVmWrFlowVar = STLDummy
api_mod.UDP = STLDummy
api_mod.bind_layers = STLDummy
@@ -61,15 +67,16 @@ except ImportError:
api_mod.ThreeBytesField = STLDummy
api_mod.XByteField = STLDummy
- services_mod = ModuleType('trex_stl_lib.services')
- stl_lib_mod.services = services_mod
- sys.modules['trex_stl_lib.services'] = services_mod
-
- arp_mod = ModuleType('trex_stl_lib.services.trex_stl_service_arp')
+ common_mod = ModuleType('trex.common')
+ trex_lib_mod.common = common_mod
+ sys.modules['trex.common'] = common_mod
+ services_mod = ModuleType('trex.common.services')
+ common_mod.services = services_mod
+ sys.modules['trex.common.services'] = services_mod
+ arp_mod = ModuleType('trex.common.services.trex_service_arp')
services_mod.trex_stl_service_arp = arp_mod
- sys.modules['trex_stl_lib.services.trex_stl_service_arp'] = arp_mod
- arp_mod.STLServiceARP = STLDummy
+ sys.modules['trex.common.services.trex_service_arp'] = arp_mod
+ arp_mod.ServiceARP = STLDummy
def no_op():
"""Empty function."""
- pass
diff --git a/test/test_chains.py b/test/test_chains.py
index ebc606e..d6f32c7 100644
--- a/test/test_chains.py
+++ b/test/test_chains.py
@@ -15,13 +15,14 @@
#
"""Test Chaining functions."""
-from mock_trex import no_op
-
from mock import MagicMock
from mock import patch
import pytest
+from .mock_trex import no_op
+
from nfvbench.chain_runner import ChainRunner
+from nfvbench.chaining import ChainException
from nfvbench.chaining import ChainVnfPort
from nfvbench.chaining import InstancePlacer
from nfvbench.compute import Compute
@@ -37,8 +38,8 @@ from nfvbench.specs import Specs
from nfvbench.summarizer import _annotate_chain_stats
from nfvbench.traffic_client import TrafficClient
from nfvbench.traffic_gen.traffic_base import Latency
-from nfvbench.traffic_gen.trex import TRex
-
+from nfvbench.traffic_gen.trex_gen import TRex
+from nfvbench import utils
# just to get rid of the unused function warning
no_op()
@@ -69,6 +70,10 @@ def _get_chain_config(sc=ChainType.PVP, scc=1, shared_net=True, rate='1Mpps'):
config.duration_sec = 2
config.interval_sec = 1
config.openrc_file = "dummy.rc"
+ config.no_flow_stats = False
+ config.no_latency_stats = False
+ config.no_latency_streams = False
+ config.loop_vm_arp = True
return config
def test_chain_runner_ext_no_openstack():
@@ -102,9 +107,13 @@ def test_chain_runner_ext_no_openstack():
def _mock_find_image(self, image_name):
- return True
+ return MagicMock()
+
+def _mock_waiting_servers_deletion(nova_client, servers):
+ return MagicMock()
@patch.object(Compute, 'find_image', _mock_find_image)
+@patch.object(utils, 'waiting_servers_deletion', _mock_waiting_servers_deletion)
@patch('nfvbench.chaining.Client')
@patch('nfvbench.chaining.neutronclient')
@patch('nfvbench.chaining.glanceclient')
@@ -119,18 +128,89 @@ def _test_pvp_chain(config, cred, mock_glance, mock_neutron, mock_client):
openstack_spec = OpenStackSpec()
specs.set_openstack_spec(openstack_spec)
cred = MagicMock(spec=nfvbench.credentials.Credentials)
+ cred.is_admin = True
runner = ChainRunner(config, cred, specs, BasicFactory())
runner.close()
def test_pvp_chain_runner():
"""Test PVP chain runner."""
cred = MagicMock(spec=nfvbench.credentials.Credentials)
+ cred.is_admin = True
for shared_net in [True, False]:
for sc in [ChainType.PVP]:
for scc in [1, 2]:
config = _get_chain_config(sc, scc, shared_net)
_test_pvp_chain(config, cred)
+
+# Test not admin exception with empty value is raised
+@patch.object(Compute, 'find_image', _mock_find_image)
+@patch.object(utils, 'waiting_servers_deletion', _mock_waiting_servers_deletion)
+@patch('nfvbench.chaining.Client')
+@patch('nfvbench.chaining.neutronclient')
+@patch('nfvbench.chaining.glanceclient')
+def _test_pvp_chain_no_admin_no_config_values(config, cred, mock_glance, mock_neutron, mock_client):
+ # instance = self.novaclient.servers.create(name=vmname,...)
+ # instance.status == 'ACTIVE'
+ mock_client.return_value.servers.create.return_value.status = 'ACTIVE'
+ netw = {'id': 0, 'provider:network_type': 'vlan', 'provider:segmentation_id': 1000}
+ mock_neutron.Client.return_value.create_network.return_value = {'network': netw}
+ mock_neutron.Client.return_value.list_networks.return_value = {'networks': None}
+ specs = Specs()
+ openstack_spec = OpenStackSpec()
+ specs.set_openstack_spec(openstack_spec)
+ runner = ChainRunner(config, cred, specs, BasicFactory())
+ runner.close()
+
+def test_pvp_chain_runner_no_admin_no_config_values():
+ """Test PVP/mock chain runner."""
+ cred = MagicMock(spec=nfvbench.credentials.Credentials)
+ cred.is_admin = False
+ for shared_net in [True, False]:
+ for sc in [ChainType.PVP]:
+ for scc in [1, 2]:
+ config = _get_chain_config(sc, scc, shared_net)
+ with pytest.raises(ChainException):
+ _test_pvp_chain_no_admin_no_config_values(config, cred)
+
+# Test not admin with mandatory parameters values in config file
+@patch.object(Compute, 'find_image', _mock_find_image)
+@patch.object(utils, 'waiting_servers_deletion', _mock_waiting_servers_deletion)
+@patch('nfvbench.chaining.Client')
+@patch('nfvbench.chaining.neutronclient')
+@patch('nfvbench.chaining.glanceclient')
+def _test_pvp_chain_no_admin_config_values(config, cred, mock_glance, mock_neutron, mock_client):
+ # instance = self.novaclient.servers.create(name=vmname,...)
+ # instance.status == 'ACTIVE'
+ mock_client.return_value.servers.create.return_value.status = 'ACTIVE'
+ netw = {'id': 0, 'provider:network_type': 'vlan', 'provider:segmentation_id': 1000}
+ mock_neutron.Client.return_value.create_network.return_value = {'network': netw}
+ mock_neutron.Client.return_value.list_networks.return_value = {'networks': None}
+ specs = Specs()
+ openstack_spec = OpenStackSpec()
+ specs.set_openstack_spec(openstack_spec)
+ runner = ChainRunner(config, cred, specs, BasicFactory())
+ runner.close()
+
+def test_pvp_chain_runner_no_admin_config_values():
+ """Test PVP chain runner."""
+ cred = MagicMock(spec=nfvbench.credentials.Credentials)
+ cred.is_admin = False
+ for shared_net in [True, False]:
+ for sc in [ChainType.PVP]:
+ for scc in [1, 2]:
+ config = _get_chain_config(sc, scc, shared_net)
+ config.availability_zone = "az"
+ config.hypervisor_hostname = "server"
+ # these are the 2 valid forms of vlan ranges
+ if scc == 1:
+ config.vlans = [100, 200]
+ else:
+ config.vlans = [[port * 100 + index for index in range(scc)]
+ for port in range(2)]
+ _test_pvp_chain_no_admin_config_values(config, cred)
+
+
@patch.object(Compute, 'find_image', _mock_find_image)
@patch('nfvbench.chaining.Client')
@patch('nfvbench.chaining.neutronclient')
@@ -145,6 +225,7 @@ def _test_ext_chain(config, cred, mock_glance, mock_neutron, mock_client):
openstack_spec = OpenStackSpec()
specs.set_openstack_spec(openstack_spec)
cred = MagicMock(spec=nfvbench.credentials.Credentials)
+ cred.is_admin = True
runner = ChainRunner(config, cred, specs, BasicFactory())
runner.close()
@@ -155,11 +236,15 @@ def test_ext_chain_runner():
shared/not shared net x arp/no_arp x scc 1 or 2
"""
cred = MagicMock(spec=nfvbench.credentials.Credentials)
+ cred.is_admin = True
for shared_net in [True, False]:
for no_arp in [False, True]:
for scc in [1, 2]:
config = _get_chain_config(ChainType.EXT, scc, shared_net)
config.no_arp = no_arp
+ # this time use a tuple of network names
+ config['external_networks']['left'] = ('ext-lnet00', 'ext-lnet01')
+ config['external_networks']['right'] = ('ext-rnet00', 'ext-rnet01')
if no_arp:
# If EXT and no arp, the config must provide mac addresses (1 pair per chain)
config['traffic_generator']['mac_addrs_left'] = ['00:00:00:00:00:00'] * scc
@@ -172,6 +257,9 @@ def _check_nfvbench_openstack(sc=ChainType.PVP, l2_loopback=False):
if l2_loopback:
config.l2_loopback = True
config.vlans = [[100], [200]]
+ if sc == ChainType.EXT:
+ config['external_networks']['left'] = 'ext-lnet'
+ config['external_networks']['right'] = 'ext-rnet'
factory = BasicFactory()
config_plugin = factory.get_config_plugin_class()(config)
config = config_plugin.get_config()
@@ -179,7 +267,7 @@ def _check_nfvbench_openstack(sc=ChainType.PVP, l2_loopback=False):
nfvb = NFVBench(config, openstack_spec, config_plugin, factory)
res = nfvb.run({}, 'pytest')
if res['status'] != 'OK':
- print res
+ print(res)
assert res['status'] == 'OK'
@@ -193,6 +281,8 @@ def _mock_get_mac(dummy):
@patch.object(Compute, 'find_image', _mock_find_image)
@patch.object(TrafficClient, 'skip_sleep', lambda x: True)
@patch.object(ChainVnfPort, 'get_mac', _mock_get_mac)
+@patch.object(TrafficClient, 'is_udp', lambda x, y: True)
+@patch.object(utils, 'waiting_servers_deletion', _mock_waiting_servers_deletion)
@patch('nfvbench.chaining.Client')
@patch('nfvbench.chaining.neutronclient')
@patch('nfvbench.chaining.glanceclient')
@@ -209,6 +299,7 @@ def test_nfvbench_run(mock_cred, mock_glance, mock_neutron, mock_client):
@patch.object(Compute, 'find_image', _mock_find_image)
@patch.object(TrafficClient, 'skip_sleep', lambda x: True)
+@patch.object(TrafficClient, 'is_udp', lambda x, y: True)
@patch('nfvbench.chaining.Client')
@patch('nfvbench.chaining.neutronclient')
@patch('nfvbench.chaining.glanceclient')
@@ -224,6 +315,7 @@ def test_nfvbench_ext_arp(mock_cred, mock_glance, mock_neutron, mock_client):
@patch.object(Compute, 'find_image', _mock_find_image)
@patch.object(TrafficClient, 'skip_sleep', lambda x: True)
+@patch.object(TrafficClient, 'is_udp', lambda x, y: True)
@patch('nfvbench.chaining.Client')
@patch('nfvbench.chaining.neutronclient')
@patch('nfvbench.chaining.glanceclient')
@@ -388,6 +480,7 @@ def test_summarizer():
assert stats == exp_stats
@patch.object(TrafficClient, 'skip_sleep', lambda x: True)
+@patch.object(TrafficClient, 'is_udp', lambda x, y: True)
def test_fixed_rate_no_openstack():
"""Test FIxed Rate run - no openstack."""
config = _get_chain_config(ChainType.EXT, 1, True, rate='100%')
diff --git a/test/test_nfvbench.py b/test/test_nfvbench.py
index 2a7ca77..e48fbda 100644
--- a/test/test_nfvbench.py
+++ b/test/test_nfvbench.py
@@ -13,16 +13,17 @@
# License for the specific language governing permissions and limitations
# under the License.
#
-from mock_trex import no_op
+import openstack
+from keystoneauth1.exceptions import HTTPClientError
+from mock import patch
+import pytest
+
+from .mock_trex import no_op
import json
import logging
import sys
-
from attrdict import AttrDict
-from mock import patch
-import pytest
-
from nfvbench.config import config_loads
from nfvbench.credentials import Credentials
from nfvbench.fluentd import FluentLogHandler
@@ -32,8 +33,9 @@ from nfvbench.traffic_client import Device
from nfvbench.traffic_client import GeneratorConfig
from nfvbench.traffic_client import IpBlock
from nfvbench.traffic_client import TrafficClient
-import nfvbench.traffic_gen.traffic_utils as traffic_utils
-
+from nfvbench.traffic_client import TrafficClientException
+from nfvbench.traffic_gen import traffic_utils
+from nfvbench import utils
# just to get rid of the unused function warning
no_op()
@@ -139,19 +141,60 @@ def test_load_from_rate():
# =========================================================================
def test_no_credentials():
- cred = Credentials('/completely/wrong/path/openrc', None, False)
- if cred.rc_auth_url:
- # shouldn't get valid data unless user set environment variables
+ with patch.object(openstack, 'connect') as mock:
+ cred = Credentials('/completely/wrong/path/openrc', None, None, False)
+ if cred.rc_auth_url:
+ # shouldn't get valid data unless user set environment variables
+ assert False
+ else:
+ assert True
+ mock.assert_not_called()
+
+
+def test_clouds_file_credentials():
+ with patch.object(openstack, 'connect') as mock:
+ Credentials(None, 'openstack', None, False)
+ mock.assert_called_once()
+
+
+@patch('nfvbench.nfvbench.credentials')
+def test_is_not_admin(mock_session):
+ mock_session.Session.return_value.get.return_value.raiseError.side_effect = HTTPClientError
+ cred = Credentials(None, 'openstack', None, False)
+ if cred.is_admin:
assert False
else:
assert True
+
+def test_is_admin():
+ with patch.object(openstack, 'connect'):
+ cred = Credentials(None, 'openstack', None, False)
+ if cred.is_admin:
+ assert True
+ else:
+ assert False
+
+
def test_ip_block():
ipb = IpBlock('10.0.0.0', '0.0.0.1', 256)
assert ipb.get_ip() == '10.0.0.0'
assert ipb.get_ip(255) == '10.0.0.255'
with pytest.raises(IndexError):
ipb.get_ip(256)
+ ipb = IpBlock('10.0.0.0', '0.0.0.1', 1)
+ assert ipb.get_ip() == '10.0.0.0'
+ with pytest.raises(IndexError):
+ ipb.get_ip(1)
+
+ ipb = IpBlock('10.0.0.0', '0.0.0.2', 256)
+ assert ipb.get_ip() == '10.0.0.0'
+ assert ipb.get_ip(1) == '10.0.0.2'
+ assert ipb.get_ip(127) == '10.0.0.254'
+ assert ipb.get_ip(128) == '10.0.1.0'
+ with pytest.raises(IndexError):
+ ipb.get_ip(256)
+
# verify with step larger than 1
ipb = IpBlock('10.0.0.0', '0.0.0.2', 256)
assert ipb.get_ip() == '10.0.0.0'
@@ -161,6 +204,76 @@ def test_ip_block():
with pytest.raises(IndexError):
ipb.get_ip(256)
+ ipb = IpBlock('10.0.0.0', '0.0.0.2', 128)
+ assert ipb.get_ip() == '10.0.0.0'
+ assert ipb.get_ip(1) == '10.0.0.2'
+ assert ipb.get_ip(127) == '10.0.0.254'
+ with pytest.raises(IndexError):
+ ipb.get_ip(128)
+
+ ipb = IpBlock('10.0.0.0', '0.0.0.4', 64)
+ assert ipb.get_ip() == '10.0.0.0'
+ assert ipb.get_ip(1) == '10.0.0.4'
+ assert ipb.get_ip(63) == '10.0.0.252'
+ with pytest.raises(IndexError):
+ ipb.get_ip(64)
+
+ ipb = IpBlock('10.0.0.0', '0.0.0.10', 1)
+ assert ipb.get_ip() == '10.0.0.0'
+ with pytest.raises(IndexError):
+ ipb.get_ip(1)
+
+
+def test_lcm():
+ assert utils.lcm(10, 2) == 10
+ assert utils.lcm(1, 256) == 256
+ assert utils.lcm(10, 256) == 1280
+ assert utils.lcm(utils.lcm(10, 2), utils.lcm(1, 256))
+ with pytest.raises(TypeError):
+ utils.lcm(0, 0)
+
+
+def test_flow_count_limit():
+ # lcm ip src and dst /32
+ lcm_ip = utils.lcm(1, 1) == 1
+ # port udp src = 1 port udp dst [1,29]
+ src_min = 1
+ src_max = 1
+ dst_min = 1
+ dst_max = 29
+ udp_step = 3
+ udp_src_size = Device.check_range_size(int(src_max) - int(src_min) + 1,
+ udp_step)
+ udp_dst_size = Device.check_range_size(int(dst_max) - int(dst_min) + 1,
+ udp_step)
+ lcm_port = utils.lcm(udp_src_size, udp_dst_size)
+ assert utils.lcm(lcm_ip, lcm_port) < 29
+
+
+def test_check_range_size():
+ assert Device.check_range_size(256, 1) == 256
+ assert Device.check_range_size(256, 3) == 86
+ assert Device.check_range_size(256, 4) == 64
+ assert Device.check_range_size(16, 10) == 2
+ assert Device.check_range_size(1, 10) == 1
+ with pytest.raises(ZeroDivisionError):
+ Device.check_range_size(256, 0)
+
+
+def test_reserve_ip_range():
+ ipb = IpBlock('10.0.0.0', '0.0.0.1', 256)
+ src_ip_first, src_ip_last = ipb.reserve_ip_range(256)
+ assert src_ip_first == "10.0.0.0"
+ assert src_ip_last == "10.0.0.255"
+ ipb = IpBlock('20.0.0.0', '0.0.0.1', 2)
+ src_ip_first, src_ip_last = ipb.reserve_ip_range(2)
+ assert src_ip_first == "20.0.0.0"
+ assert src_ip_last == "20.0.0.1"
+ ipb = IpBlock('30.0.0.0', '0.0.0.1', 2)
+ with pytest.raises(IndexError):
+ ipb.reserve_ip_range(256)
+
+
def check_stream_configs(gen_config):
"""Verify that the range for each chain have adjacent IP ranges without holes between chains."""
config = gen_config.config
@@ -172,12 +285,18 @@ def check_stream_configs(gen_config):
stream_configs = gen_config.devices[0].get_stream_configs()
for index in range(config['service_chain_count']):
stream_cfg = stream_configs[index]
- assert stream_cfg['ip_src_count'] == stream_cfg['ip_dst_count']
+ # ip_src_static == True
+ assert stream_cfg['ip_src_count'] == 1
+ if index == 0:
+ assert stream_cfg['ip_dst_count'] == 4999
+ else:
+ assert stream_cfg['ip_dst_count'] == 5000
+ assert stream_cfg['ip_src_addr'] == Device.int_to_ip(sip)
assert Device.ip_to_int(stream_cfg['ip_src_addr']) == sip
assert Device.ip_to_int(stream_cfg['ip_dst_addr']) == dip
- count = stream_cfg['ip_src_count']
+ count = stream_cfg['ip_dst_count']
cfc += count
- sip += count * step
+ sip += step
dip += count * step
assert cfc == int(config['flow_count'] / 2)
@@ -190,6 +309,661 @@ def test_device_flow_config():
_check_device_flow_config('0.0.0.1')
_check_device_flow_config('0.0.0.2')
+
+def check_udp_stream_configs(gen_config, expected_cfg):
+ """Verify that the range for each chain have adjacent UDP ports without holes between chains."""
+ config = gen_config.config
+ stream_configs = gen_config.devices[0].get_stream_configs()
+ for index in range(config['service_chain_count']):
+ stream_cfg = stream_configs[index]
+ expected = expected_cfg[index]
+ assert stream_cfg['ip_src_addr'] == expected['ip_src_addr']
+ assert stream_cfg['ip_src_addr_max'] == expected['ip_src_addr_max']
+ assert stream_cfg['ip_src_count'] == expected['ip_src_count']
+
+ assert stream_cfg['ip_dst_addr'] == expected['ip_dst_addr']
+ assert stream_cfg['ip_dst_addr_max'] == expected['ip_dst_addr_max']
+ assert stream_cfg['ip_dst_count'] == expected['ip_dst_count']
+
+ assert stream_cfg['udp_src_port'] == expected['udp_src_port']
+ assert stream_cfg['udp_src_port_max'] == expected['udp_src_port_max']
+ assert stream_cfg['udp_src_count'] == expected['udp_src_count']
+
+ assert stream_cfg['udp_dst_port'] == expected['udp_dst_port']
+ assert stream_cfg['udp_dst_port_max'] == expected['udp_dst_port_max']
+ assert stream_cfg['udp_dst_count'] == expected['udp_dst_count']
+
+ lcm_ip = utils.lcm(stream_cfg['ip_src_count'], stream_cfg['ip_dst_count'])
+ udp_src_size = int(stream_cfg['udp_src_port_max']) - int(stream_cfg['udp_src_port']) + 1
+ udp_dst_size = int(stream_cfg['udp_dst_port_max']) - int(stream_cfg['udp_dst_port']) + 1
+ lcm_udp = utils.lcm(udp_src_size, udp_dst_size)
+ assert utils.lcm(lcm_ip, lcm_udp) >= stream_cfg['count']
+
+
+def _check_device_udp_flow_config(param, expected_cfg):
+ config = _get_dummy_tg_config('PVP', '1Mpps',
+ scc=param['scc'],
+ ip_src_static=param['ip_src_static'],
+ fc=param['flow_count'],
+ ip0=param['ip_src_addr'],
+ ip1=param['ip_dst_addr'],
+ step_ip=param['ip_addrs_step'],
+ src_udp=param['udp_src_port'],
+ dst_udp=param['udp_dst_port'],
+ step_udp=param['udp_port_step'])
+ gen_config = GeneratorConfig(config)
+ check_udp_stream_configs(gen_config, expected_cfg)
+
+
+def __get_udp_params():
+ param = {'ip_src_static': True,
+ 'ip_src_addr': '110.0.0.0/32',
+ 'ip_dst_addr': '120.0.0.0/32',
+ 'ip_addrs_step': '0.0.0.1',
+ 'udp_src_port': 53,
+ 'udp_dst_port': 53,
+ 'flow_count': 2,
+ 'scc': 1,
+ 'udp_port_step': '1'}
+ return param
+
+
+def __get_udp_expected_list():
+ expected = {'ip_src_addr': '110.0.0.0',
+ 'ip_src_addr_max': '110.0.0.0',
+ 'ip_src_count': 1,
+ 'ip_dst_addr': '120.0.0.0',
+ 'ip_dst_addr_max': '120.0.0.0',
+ 'ip_dst_count': 1,
+ 'udp_src_port': 53,
+ 'udp_src_port_max': 53,
+ 'udp_src_count': 1,
+ 'udp_dst_port': 53,
+ 'udp_dst_port_max': 53,
+ 'udp_dst_count': 1}
+ return expected
+
+
+def test_device_udp_flow_config_single_ip_single_port():
+ param = __get_udp_params()
+ expected = __get_udp_expected_list()
+ _check_device_udp_flow_config(param, [expected])
+
+
+def test_device_udp_flow_config_single_ip_multiple_src_ports():
+ param = __get_udp_params()
+ expected = __get_udp_expected_list()
+ # Overwrite the udp_src_port value to define a large range of ports
+ # instead of a single port, in order to check if the imposed
+ # flow count is respected. Notice that udp range >> flow count.
+ param['udp_src_port'] = [53, 1024]
+ param['flow_count'] = 10
+ expected['udp_src_port_max'] = 57
+ expected['udp_src_count'] = 5
+ _check_device_udp_flow_config(param, [expected])
+
+
+def test_device_udp_flow_config_multiple_ip_src_single_port():
+ param = __get_udp_params()
+ expected = __get_udp_expected_list()
+ # Re affect the default udp_src_port values and
+ # overwrite the ip_dst_addr value to define a large range of addresses
+ # instead of a single one, in order to check if the imposed
+ # flow count is respected. Notice that the netmask allows a very larger
+ # range of possible addresses than the flow count value.
+ param['udp_src_port'] = 53
+ param['flow_count'] = 10
+ param['ip_src_static'] = False
+ param['ip_dst_addr'] = '120.0.0.0/24'
+
+ expected['udp_src_port_max'] = 53
+ expected['udp_src_count'] = 1
+ expected['ip_dst_addr'] = '120.0.0.0'
+ expected['ip_dst_addr_max'] = '120.0.0.4'
+ expected['ip_dst_count'] = 5
+ _check_device_udp_flow_config(param, [expected])
+
+
+def test_device_udp_flow_config_multiple_ip_src_dst_multiple_src_dst_ports():
+ param = __get_udp_params()
+ expected = __get_udp_expected_list()
+
+ param['udp_src_port'] = [49000, 49031]
+ param['udp_dst_port'] = [50000, 50033]
+ param['ip_src_static'] = False
+ param['flow_count'] = 1000
+ param['ip_src_addr'] = '110.0.0.0/16'
+ param['ip_dst_addr'] = '120.0.0.0/16'
+
+ expected['udp_src_port'] = 49000
+ expected['udp_src_port_max'] = 49024
+ expected['udp_dst_port'] = 50000
+ expected['udp_dst_port_max'] = 50024
+ expected['udp_src_count'] = 25
+ expected['udp_dst_count'] = 25
+ expected['ip_src_addr_max'] = '110.0.1.243'
+ expected['ip_src_count'] = 500
+ expected['ip_dst_addr'] = '120.0.0.0'
+ expected['ip_dst_addr_max'] = '120.0.1.243'
+ expected['ip_dst_count'] = 500
+ _check_device_udp_flow_config(param, [expected])
+
+
+
+
+def test_device_udp_flow_config_random_multiple_ip_src_dst_multiple_src_dst_ports():
+ param = __get_udp_params()
+ expected = __get_udp_expected_list()
+
+ param['udp_src_port'] = [1025, 65000]
+ param['udp_dst_port'] = [1024, 65000]
+ param['ip_src_static'] = False
+ param['ip_addrs_step'] = 'random'
+ param['udp_port_step'] = 'random'
+ param['flow_count'] = 1000000
+ param['ip_src_addr'] = '110.0.0.0/16'
+ param['ip_dst_addr'] = '120.0.0.0/16'
+
+ expected['udp_src_port'] = 1025
+ expected['udp_src_port_max'] = 65000
+ expected['udp_dst_port'] = 1024
+ expected['udp_dst_port_max'] = 65000
+ expected['udp_src_count'] = 62500
+ expected['udp_dst_count'] = 62500
+ expected['ip_src_addr_max'] = '110.0.0.31'
+ expected['ip_src_count'] = 32
+ expected['ip_dst_addr'] = '120.0.0.0'
+ expected['ip_dst_addr_max'] = '120.0.0.31'
+ expected['ip_dst_count'] = 32
+ _check_device_udp_flow_config(param, [expected])
+
+def test_device_udp_flow_config_random_multiple_ip_srcstatic_dst_multiple_src_dst_ports():
+ param = __get_udp_params()
+ expected = __get_udp_expected_list()
+
+ param['udp_src_port'] = [1025, 65000]
+ param['udp_dst_port'] = [1024, 65000]
+ param['ip_src_static'] = True
+ param['ip_addrs_step'] = 'random'
+ param['udp_port_step'] = 'random'
+ param['flow_count'] = 1000000
+ param['ip_src_addr'] = '110.0.0.0/16'
+ param['ip_dst_addr'] = '120.0.0.0/16'
+
+ expected['udp_src_port'] = 1025
+ expected['udp_src_port_max'] = 65000
+ expected['udp_dst_port'] = 1024
+ expected['udp_dst_port_max'] = 65000
+ expected['udp_src_count'] = 1
+ expected['udp_dst_count'] = 62500
+ expected['ip_src_addr_max'] = '110.0.0.0'
+ expected['ip_src_count'] = 1
+ expected['ip_dst_addr'] = '120.0.0.0'
+ expected['ip_dst_addr_max'] = '120.0.0.31'
+ expected['ip_dst_count'] = 32
+ _check_device_udp_flow_config(param, [expected])
+
+
+
+def test_device_udp_flow_config_single_ip_src_dst_multiple_src_dst_ports():
+ param = __get_udp_params()
+ expected = __get_udp_expected_list()
+
+ param['udp_src_port'] = [49152, 49154]
+ param['udp_dst_port'] = [50001, 50005]
+ param['ip_src_static'] = False
+ param['flow_count'] = 10
+ param['ip_src_addr'] = '110.0.0.0/32'
+ param['ip_dst_addr'] = '120.0.0.0/32'
+
+ expected['udp_src_port'] = 49152
+ expected['udp_src_port_max'] = 49152
+ expected['udp_dst_port'] = 50001
+ expected['udp_dst_port_max'] = 50005
+ expected['udp_src_count'] = 1
+ expected['udp_dst_count'] = 5
+ expected['ip_src_addr_max'] = '110.0.0.0'
+ expected['ip_src_count'] = 1
+ expected['ip_dst_addr'] = '120.0.0.0'
+ expected['ip_dst_addr_max'] = '120.0.0.0'
+ expected['ip_dst_count'] = 1
+ _check_device_udp_flow_config(param, [expected])
+
+
+def test_device_udp_flow_config_single_ip_src_dst_single_src_multiple_dst_ports():
+ param = __get_udp_params()
+ expected = __get_udp_expected_list()
+
+ param['udp_src_port'] = 49152
+ param['udp_dst_port'] = [50001, 50029]
+ param['udp_port_step'] = '3'
+ param['flow_count'] = 58
+ param['ip_src_addr'] = '110.0.0.0/32'
+ param['ip_dst_addr'] = '120.0.0.0/32'
+
+ expected['udp_src_port'] = 49152
+ expected['udp_src_port_max'] = 49152
+ expected['udp_dst_port'] = 50001
+ expected['udp_dst_port_max'] = 50029
+ expected['udp_src_count'] = 1
+ expected['udp_dst_count'] = 29
+ expected['ip_src_addr_max'] = '110.0.0.0'
+ expected['ip_src_count'] = 1
+ expected['ip_dst_addr'] = '120.0.0.0'
+ expected['ip_dst_addr_max'] = '120.0.0.0'
+ expected['ip_dst_count'] = 1
+ with pytest.raises(TrafficClientException):
+ _check_device_udp_flow_config(param, [expected])
+
+
+def test_device_udp_flow_config_scc3():
+ param = __get_udp_params()
+ expected = __get_udp_expected_list()
+
+ param['scc'] = 3
+ param['udp_src_port'] = [49000, 49031]
+ param['udp_dst_port'] = [50000, 50033]
+ param['ip_src_static'] = False
+ param['flow_count'] = 10000
+ param['ip_src_addr'] = '110.0.0.0/16'
+ param['ip_dst_addr'] = '120.0.0.0/16'
+
+ expected_cfg = []
+ # chain 0
+ expected_scc0 = dict(expected)
+ expected_scc0['udp_src_port'] = 49000
+ expected_scc0['udp_src_port_max'] = 49016
+ expected_scc0['udp_dst_port'] = 50000
+ expected_scc0['udp_dst_port_max'] = 50033
+ expected_scc0['udp_src_count'] = 17
+ expected_scc0['udp_dst_count'] = 34
+ expected_scc0['ip_src_addr_max'] = '110.0.6.129'
+ expected_scc0['ip_src_count'] = 1666
+ expected_scc0['ip_dst_addr'] = '120.0.0.0'
+ expected_scc0['ip_dst_addr_max'] = '120.0.6.129'
+ expected_scc0['ip_dst_count'] = 1666
+ expected_cfg.append(expected_scc0)
+
+ # chain 1
+ expected_scc1 = dict(expected)
+ expected_scc1['udp_src_port'] = 49000
+ expected_scc1['udp_src_port_max'] = 49000
+ expected_scc1['udp_dst_port'] = 50000
+ expected_scc1['udp_dst_port_max'] = 50000
+ expected_scc1['udp_src_count'] = 1
+ expected_scc1['udp_dst_count'] = 1
+ expected_scc1['ip_src_addr'] = '110.0.6.130'
+ expected_scc1['ip_src_addr_max'] = '110.0.13.4'
+ expected_scc1['ip_src_count'] = 1667
+ expected_scc1['ip_dst_addr'] = '120.0.6.130'
+ expected_scc1['ip_dst_addr_max'] = '120.0.13.4'
+ expected_scc1['ip_dst_count'] = 1667
+ expected_cfg.append(expected_scc1)
+
+ # chain 2
+ expected_scc2 = dict(expected)
+ expected_scc2['udp_src_port'] = 49000
+ expected_scc2['udp_src_port_max'] = 49000
+ expected_scc2['udp_dst_port'] = 50000
+ expected_scc2['udp_dst_port_max'] = 50000
+ expected_scc2['udp_src_count'] = 1
+ expected_scc2['udp_dst_count'] = 1
+ expected_scc2['ip_src_addr'] = '110.0.13.5'
+ expected_scc2['ip_src_addr_max'] = '110.0.19.135'
+ expected_scc2['ip_src_count'] = 1667
+ expected_scc2['ip_dst_addr'] = '120.0.13.5'
+ expected_scc2['ip_dst_addr_max'] = '120.0.19.135'
+ expected_scc2['ip_dst_count'] = 1667
+ expected_cfg.append(expected_scc2)
+
+ _check_device_udp_flow_config(param, expected_cfg)
+
+
+def test_device_udp_flow_config_doc_example1(caplog):
+ caplog.clear()
+ caplog.set_level(logging.INFO)
+ param = __get_udp_params()
+ expected = __get_udp_expected_list()
+
+ # Multiflow unitary test corresponding to first example in documentation
+ param['scc'] = 3
+ param['udp_src_port'] = 53
+ param['udp_dst_port'] = 53
+ param['ip_src_static'] = True
+ param['flow_count'] = 100
+ param['ip_src_addr'] = '110.0.0.0/8'
+ param['ip_dst_addr'] = '120.0.0.0/8'
+
+ expected_cfg = []
+ # chain 0
+ expected_scc0 = dict(expected)
+ expected_scc0['udp_src_port'] = 53
+ expected_scc0['udp_src_port_max'] = 53
+ expected_scc0['udp_dst_port'] = 53
+ expected_scc0['udp_dst_port_max'] = 53
+ expected_scc0['udp_src_count'] = 1
+ expected_scc0['udp_dst_count'] = 1
+ expected_scc0['ip_src_addr'] = '110.0.0.0'
+ expected_scc0['ip_src_addr_max'] = '110.0.0.0'
+ expected_scc0['ip_src_count'] = 1
+ expected_scc0['ip_dst_addr'] = '120.0.0.0'
+ expected_scc0['ip_dst_addr_max'] = '120.0.0.15'
+ expected_scc0['ip_dst_count'] = 16
+ expected_cfg.append(expected_scc0)
+
+ # chain 1
+ expected_scc1 = dict(expected)
+ expected_scc1['udp_src_port'] = 53
+ expected_scc1['udp_src_port_max'] = 53
+ expected_scc1['udp_dst_port'] = 53
+ expected_scc1['udp_dst_port_max'] = 53
+ expected_scc1['udp_src_count'] = 1
+ expected_scc1['udp_dst_count'] = 1
+ expected_scc1['ip_src_addr'] = '110.0.0.1'
+ expected_scc1['ip_src_addr_max'] = '110.0.0.1'
+ expected_scc1['ip_src_count'] = 1
+ expected_scc1['ip_dst_addr'] = '120.0.0.16'
+ expected_scc1['ip_dst_addr_max'] = '120.0.0.32'
+ expected_scc1['ip_dst_count'] = 17
+ expected_cfg.append(expected_scc1)
+
+ # chain 2
+ expected_scc2 = dict(expected)
+ expected_scc2['udp_src_port'] = 53
+ expected_scc2['udp_src_port_max'] = 53
+ expected_scc2['udp_dst_port'] = 53
+ expected_scc2['udp_dst_port_max'] = 53
+ expected_scc2['udp_src_count'] = 1
+ expected_scc2['udp_dst_count'] = 1
+ expected_scc2['ip_src_addr'] = '110.0.0.2'
+ expected_scc2['ip_src_addr_max'] = '110.0.0.2'
+ expected_scc2['ip_src_count'] = 1
+ expected_scc2['ip_dst_addr'] = '120.0.0.33'
+ expected_scc2['ip_dst_addr_max'] = '120.0.0.49'
+ expected_scc2['ip_dst_count'] = 17
+ expected_cfg.append(expected_scc2)
+
+ _check_device_udp_flow_config(param, expected_cfg)
+ assert "Current values of ip_addrs_step and/or udp_port_step properties" not in caplog.text
+
+
+def test_device_udp_flow_config_doc_example2(caplog):
+ caplog.clear()
+ caplog.set_level(logging.INFO)
+ param = __get_udp_params()
+ expected = __get_udp_expected_list()
+
+ # Multiflow unitary test corresponding to second example in documentation
+ param['scc'] = 3
+ param['udp_src_port'] = 53
+ param['udp_dst_port'] = 53
+ param['ip_src_static'] = True
+ param['ip_addrs_step'] = 'random'
+ param['flow_count'] = 100
+ param['ip_src_addr'] = '110.0.0.0/8'
+ param['ip_dst_addr'] = '120.0.0.0/8'
+
+ expected_cfg = []
+ # chain 0
+ expected_scc0 = dict(expected)
+ expected_scc0['udp_src_port'] = 53
+ expected_scc0['udp_src_port_max'] = 53
+ expected_scc0['udp_dst_port'] = 53
+ expected_scc0['udp_dst_port_max'] = 53
+ expected_scc0['udp_src_count'] = 1
+ expected_scc0['udp_dst_count'] = 1
+ expected_scc0['ip_src_addr'] = '110.0.0.0'
+ expected_scc0['ip_src_addr_max'] = '110.0.0.0'
+ expected_scc0['ip_src_count'] = 1
+ expected_scc0['ip_dst_addr'] = '120.0.0.0'
+ expected_scc0['ip_dst_addr_max'] = '120.0.0.15'
+ expected_scc0['ip_dst_count'] = 16
+ expected_cfg.append(expected_scc0)
+
+ # chain 1
+ expected_scc1 = dict(expected)
+ expected_scc1['udp_src_port'] = 53
+ expected_scc1['udp_src_port_max'] = 53
+ expected_scc1['udp_dst_port'] = 53
+ expected_scc1['udp_dst_port_max'] = 53
+ expected_scc1['udp_src_count'] = 1
+ expected_scc1['udp_dst_count'] = 1
+ expected_scc1['ip_src_addr'] = '110.0.0.1'
+ expected_scc1['ip_src_addr_max'] = '110.0.0.1'
+ expected_scc1['ip_src_count'] = 1
+ expected_scc1['ip_dst_addr'] = '120.0.0.16'
+ expected_scc1['ip_dst_addr_max'] = '120.0.0.32'
+ expected_scc1['ip_dst_count'] = 17
+ expected_cfg.append(expected_scc1)
+
+ # chain 2
+ expected_scc2 = dict(expected)
+ expected_scc2['udp_src_port'] = 53
+ expected_scc2['udp_src_port_max'] = 53
+ expected_scc2['udp_dst_port'] = 53
+ expected_scc2['udp_dst_port_max'] = 53
+ expected_scc2['udp_src_count'] = 1
+ expected_scc2['udp_dst_count'] = 1
+ expected_scc2['ip_src_addr'] = '110.0.0.2'
+ expected_scc2['ip_src_addr_max'] = '110.0.0.2'
+ expected_scc2['ip_src_count'] = 1
+ expected_scc2['ip_dst_addr'] = '120.0.0.33'
+ expected_scc2['ip_dst_addr_max'] = '120.0.0.49'
+ expected_scc2['ip_dst_count'] = 17
+ expected_cfg.append(expected_scc2)
+
+ _check_device_udp_flow_config(param, expected_cfg)
+ assert "Current values of ip_addrs_step and/or udp_port_step properties" not in caplog.text
+
+
+def test_device_udp_flow_config_doc_example3(caplog):
+ caplog.clear()
+ param = __get_udp_params()
+ expected = __get_udp_expected_list()
+
+ # Multiflow unitary test corresponding to third example in documentation
+ param['scc'] = 3
+ param['udp_src_port'] = 53
+ param['udp_dst_port'] = 53
+ param['ip_src_static'] = True
+ param['ip_addrs_step'] = '0.0.0.5'
+ param['flow_count'] = 100
+ param['ip_src_addr'] = '110.0.0.0/8'
+ param['ip_dst_addr'] = '120.0.0.0/8'
+
+ expected_cfg = []
+ # chain 0
+ expected_scc0 = dict(expected)
+ expected_scc0['udp_src_port'] = 53
+ expected_scc0['udp_src_port_max'] = 53
+ expected_scc0['udp_dst_port'] = 53
+ expected_scc0['udp_dst_port_max'] = 53
+ expected_scc0['udp_src_count'] = 1
+ expected_scc0['udp_dst_count'] = 1
+ expected_scc0['ip_src_addr'] = '110.0.0.0'
+ expected_scc0['ip_src_addr_max'] = '110.0.0.0'
+ expected_scc0['ip_src_count'] = 1
+ expected_scc0['ip_dst_addr'] = '120.0.0.0'
+ expected_scc0['ip_dst_addr_max'] = '120.0.0.75'
+ expected_scc0['ip_dst_count'] = 16
+ expected_cfg.append(expected_scc0)
+
+ # chain 1
+ expected_scc1 = dict(expected)
+ expected_scc1['udp_src_port'] = 53
+ expected_scc1['udp_src_port_max'] = 53
+ expected_scc1['udp_dst_port'] = 53
+ expected_scc1['udp_dst_port_max'] = 53
+ expected_scc1['udp_src_count'] = 1
+ expected_scc1['udp_dst_count'] = 1
+ expected_scc1['ip_src_addr'] = '110.0.0.5'
+ expected_scc1['ip_src_addr_max'] = '110.0.0.5'
+ expected_scc1['ip_src_count'] = 1
+ expected_scc1['ip_dst_addr'] = '120.0.0.80'
+ expected_scc1['ip_dst_addr_max'] = '120.0.0.160'
+ expected_scc1['ip_dst_count'] = 17
+ expected_cfg.append(expected_scc1)
+
+ # chain 2
+ expected_scc2 = dict(expected)
+ expected_scc2['udp_src_port'] = 53
+ expected_scc2['udp_src_port_max'] = 53
+ expected_scc2['udp_dst_port'] = 53
+ expected_scc2['udp_dst_port_max'] = 53
+ expected_scc2['udp_src_count'] = 1
+ expected_scc2['udp_dst_count'] = 1
+ expected_scc2['ip_src_addr'] = '110.0.0.10'
+ expected_scc2['ip_src_addr_max'] = '110.0.0.10'
+ expected_scc2['ip_src_count'] = 1
+ expected_scc2['ip_dst_addr'] = '120.0.0.165'
+ expected_scc2['ip_dst_addr_max'] = '120.0.0.245'
+ expected_scc2['ip_dst_count'] = 17
+ expected_cfg.append(expected_scc2)
+
+ caplog.set_level(logging.INFO)
+ _check_device_udp_flow_config(param, expected_cfg)
+ assert "Current values of ip_addrs_step and/or udp_port_step properties" not in caplog.text
+
+
+def test_device_udp_flow_config_doc_example4(caplog):
+ caplog.clear()
+ param = __get_udp_params()
+ expected = __get_udp_expected_list()
+
+ # Multiflow unitary test corresponding to fourth example in documentation
+ param['scc'] = 3
+ param['udp_src_port'] = [10, 14]
+ param['udp_dst_port'] = [20, 25]
+ param['ip_src_static'] = True
+ param['ip_addrs_step'] = '0.0.0.1'
+ param['udp_port_step'] = 'random'
+ param['flow_count'] = 100
+ param['ip_src_addr'] = '110.0.0.0/29'
+ param['ip_dst_addr'] = '120.0.0.0/30'
+
+ expected_cfg = []
+ # chain 0
+ expected_scc0 = dict(expected)
+ expected_scc0['udp_src_port'] = 10
+ expected_scc0['udp_src_port_max'] = 14
+ expected_scc0['udp_dst_port'] = 20
+ expected_scc0['udp_dst_port_max'] = 25
+ expected_scc0['udp_src_count'] = 5
+ expected_scc0['udp_dst_count'] = 6
+ expected_scc0['ip_src_addr'] = '110.0.0.0'
+ expected_scc0['ip_src_addr_max'] = '110.0.0.0'
+ expected_scc0['ip_src_count'] = 1
+ expected_scc0['ip_dst_addr'] = '120.0.0.0'
+ expected_scc0['ip_dst_addr_max'] = '120.0.0.0'
+ expected_scc0['ip_dst_count'] = 1
+ expected_cfg.append(expected_scc0)
+
+ # chain 1
+ expected_scc1 = dict(expected)
+ expected_scc1['udp_src_port'] = 10
+ expected_scc1['udp_src_port_max'] = 14
+ expected_scc1['udp_dst_port'] = 20
+ expected_scc1['udp_dst_port_max'] = 25
+ expected_scc1['udp_src_count'] = 5
+ expected_scc1['udp_dst_count'] = 6
+ expected_scc1['ip_src_addr'] = '110.0.0.1'
+ expected_scc1['ip_src_addr_max'] = '110.0.0.1'
+ expected_scc1['ip_src_count'] = 1
+ expected_scc1['ip_dst_addr'] = '120.0.0.1'
+ expected_scc1['ip_dst_addr_max'] = '120.0.0.1'
+ expected_scc1['ip_dst_count'] = 1
+ expected_cfg.append(expected_scc1)
+
+ # chain 2
+ expected_scc2 = dict(expected)
+ expected_scc2['udp_src_port'] = 10
+ expected_scc2['udp_src_port_max'] = 14
+ expected_scc2['udp_dst_port'] = 20
+ expected_scc2['udp_dst_port_max'] = 25
+ expected_scc2['udp_src_count'] = 5
+ expected_scc2['udp_dst_count'] = 6
+ expected_scc2['ip_src_addr'] = '110.0.0.2'
+ expected_scc2['ip_src_addr_max'] = '110.0.0.2'
+ expected_scc2['ip_src_count'] = 1
+ expected_scc2['ip_dst_addr'] = '120.0.0.2'
+ expected_scc2['ip_dst_addr_max'] = '120.0.0.2'
+ expected_scc2['ip_dst_count'] = 1
+ expected_cfg.append(expected_scc2)
+ caplog.set_level(logging.INFO)
+ _check_device_udp_flow_config(param, expected_cfg)
+ assert "Current values of ip_addrs_step and/or udp_port_step properties" in caplog.text
+ assert "udp_port_step='1' (previous value: udp_port_step='random'" in caplog.text
+
+
+def test_device_udp_flow_config_no_random_steps_overridden(caplog):
+ caplog.clear()
+ param = __get_udp_params()
+ expected = __get_udp_expected_list()
+
+ # Multiflow unitary test corresponding to fifth example in documentation
+ param['scc'] = 3
+ param['udp_src_port'] = [10, 14]
+ param['udp_dst_port'] = [20, 25]
+ param['ip_src_static'] = True
+ param['ip_addrs_step'] = 'random'
+ param['udp_port_step'] = 'random'
+ param['flow_count'] = 100
+ param['ip_src_addr'] = '110.0.0.0/29'
+ param['ip_dst_addr'] = '120.0.0.0/30'
+
+ expected_cfg = []
+ # chain 0
+ expected_scc0 = dict(expected)
+ expected_scc0['udp_src_port'] = 10
+ expected_scc0['udp_src_port_max'] = 14
+ expected_scc0['udp_dst_port'] = 20
+ expected_scc0['udp_dst_port_max'] = 25
+ expected_scc0['udp_src_count'] = 5
+ expected_scc0['udp_dst_count'] = 6
+ expected_scc0['ip_src_addr'] = '110.0.0.0'
+ expected_scc0['ip_src_addr_max'] = '110.0.0.0'
+ expected_scc0['ip_src_count'] = 1
+ expected_scc0['ip_dst_addr'] = '120.0.0.0'
+ expected_scc0['ip_dst_addr_max'] = '120.0.0.0'
+ expected_scc0['ip_dst_count'] = 1
+ expected_cfg.append(expected_scc0)
+
+ # chain 1
+ expected_scc1 = dict(expected)
+ expected_scc1['udp_src_port'] = 10
+ expected_scc1['udp_src_port_max'] = 14
+ expected_scc1['udp_dst_port'] = 20
+ expected_scc1['udp_dst_port_max'] = 25
+ expected_scc1['udp_src_count'] = 5
+ expected_scc1['udp_dst_count'] = 6
+ expected_scc1['ip_src_addr'] = '110.0.0.1'
+ expected_scc1['ip_src_addr_max'] = '110.0.0.1'
+ expected_scc1['ip_src_count'] = 1
+ expected_scc1['ip_dst_addr'] = '120.0.0.1'
+ expected_scc1['ip_dst_addr_max'] = '120.0.0.1'
+ expected_scc1['ip_dst_count'] = 1
+ expected_cfg.append(expected_scc1)
+
+ # chain 2
+ expected_scc2 = dict(expected)
+ expected_scc2['udp_src_port'] = 10
+ expected_scc2['udp_src_port_max'] = 14
+ expected_scc2['udp_dst_port'] = 20
+ expected_scc2['udp_dst_port_max'] = 25
+ expected_scc2['udp_src_count'] = 5
+ expected_scc2['udp_dst_count'] = 6
+ expected_scc2['ip_src_addr'] = '110.0.0.2'
+ expected_scc2['ip_src_addr_max'] = '110.0.0.2'
+ expected_scc2['ip_src_count'] = 1
+ expected_scc2['ip_dst_addr'] = '120.0.0.2'
+ expected_scc2['ip_dst_addr_max'] = '120.0.0.2'
+ expected_scc2['ip_dst_count'] = 1
+ expected_cfg.append(expected_scc2)
+ caplog.set_level(logging.INFO)
+ _check_device_udp_flow_config(param, expected_cfg)
+ assert "Current values of ip_addrs_step and/or udp_port_step properties" not in caplog.text
+
+
def test_config():
refcfg = {1: 100, 2: {21: 100, 22: 200}, 3: None}
res1 = {1: 10, 2: {21: 100, 22: 200}, 3: None}
@@ -278,7 +1052,8 @@ def assert_ndr_pdr(stats, ndr, ndr_dr, pdr, pdr_dr):
assert_equivalence(pdr_dr, stats['pdr']['stats']['overall']['drop_percentage'])
def _get_dummy_tg_config(chain_type, rate, scc=1, fc=10, step_ip='0.0.0.1',
- ip0='10.0.0.0/8', ip1='20.0.0.0/8'):
+ ip0='10.0.0.0/8', ip1='20.0.0.0/8',
+ step_udp='1', src_udp=None, dst_udp=None, ip_src_static=True):
return AttrDict({
'traffic_generator': {'host_name': 'nfvbench_tg',
'default_profile': 'dummy',
@@ -290,14 +1065,16 @@ def _get_dummy_tg_config(chain_type, rate, scc=1, fc=10, step_ip='0.0.0.1',
{'port': 1, 'pci': '0.0'}]}],
'ip_addrs_step': step_ip,
'ip_addrs': [ip0, ip1],
+ 'ip_src_static': ip_src_static,
'tg_gateway_ip_addrs': ['1.1.0.100', '2.2.0.100'],
'tg_gateway_ip_addrs_step': step_ip,
'gateway_ip_addrs': ['1.1.0.2', '2.2.0.2'],
'gateway_ip_addrs_step': step_ip,
'mac_addrs_left': None,
'mac_addrs_right': None,
- 'udp_src_port': None,
- 'udp_dst_port': None},
+ 'udp_src_port': src_udp,
+ 'udp_dst_port': dst_udp,
+ 'udp_port_step': step_udp},
'traffic': {'profile': 'profile_64',
'bidirectional': True},
'traffic_profile': [{'name': 'profile_64', 'l2frame_size': ['64']}],
@@ -316,16 +1093,28 @@ def _get_dummy_tg_config(chain_type, rate, scc=1, fc=10, step_ip='0.0.0.1',
'measurement': {'NDR': 0.001, 'PDR': 0.1, 'load_epsilon': 0.1},
'l2_loopback': False,
'cores': None,
- 'mbuf_factor': None
+ 'mbuf_factor': None,
+ 'disable_hdrh': None,
+ 'mbuf_64': None,
+ 'service_mode': False,
+ 'no_flow_stats': False,
+ 'no_latency_stats': False,
+ 'no_latency_streams': False,
+ 'intf_speed': '10Gbps',
+ 'periodic_gratuitous_arp': False,
+ 'gratuitous_arp_pps': 1
})
-def _get_traffic_client():
+def _get_traffic_client(user_info=None):
config = _get_dummy_tg_config('PVP', 'ndr_pdr')
config['vxlan'] = False
+ config['mpls'] = False
config['ndr_run'] = True
config['pdr_run'] = True
config['generator_profile'] = 'dummy'
config['single_run'] = False
+ if user_info:
+ config['user_info'] = user_info
traffic_client = TrafficClient(config)
traffic_client.start_traffic_generator()
traffic_client.set_traffic('64', True)
@@ -341,7 +1130,7 @@ def test_ndr_at_lr():
# tx packets should be line rate for 64B and no drops...
assert tg.get_tx_pps_dropped_pps(100) == (LR_64B_PPS, 0)
# NDR and PDR should be at 100%
- traffic_client.ensure_end_to_end()
+ # traffic_client.ensure_end_to_end()
results = traffic_client.get_ndr_and_pdr()
assert_ndr_pdr(results, 200.0, 0.0, 200.0, 0.0)
@@ -386,6 +1175,22 @@ def test_ndr_pdr_low_cpu():
# pp.pprint(results)
@patch.object(TrafficClient, 'skip_sleep', lambda x: True)
+def test_ndr_at_lr_sdn_gw_encapsulation():
+ """Test NDR at line rate with traffic gen outside SUT and connected via SDN GW."""
+ user_info = {'extra_encapsulation_bytes': 28}
+ traffic_client = _get_traffic_client(user_info)
+ tg = traffic_client.gen
+ # this is a perfect sut with no loss at LR
+ tg.set_response_curve(lr_dr=0, ndr=100, max_actual_tx=100, max_11_tx=100)
+ # tx packets should be line rate for 64B and no drops...
+ assert tg.get_tx_pps_dropped_pps(100) == (LR_64B_PPS, 0)
+ # NDR and PDR should be at 100%
+ # traffic_client.ensure_end_to_end()
+ results = traffic_client.get_ndr_and_pdr()
+ assert results['ndr']['stats']['theoretical_tx_rate_bps'] == 15000000000.0
+ assert_ndr_pdr(results, 200.0, 0.0, 200.0, 0.0)
+
+@patch.object(TrafficClient, 'skip_sleep', lambda x: True)
def test_no_openstack():
"""Test nfvbench using main."""
config = _get_dummy_tg_config('EXT', '1000pps')
diff --git a/test/ut_behave_tests/__init__.py b/test/ut_behave_tests/__init__.py
new file mode 100644
index 0000000..0403bca
--- /dev/null
+++ b/test/ut_behave_tests/__init__.py
@@ -0,0 +1 @@
+"""Unit tests for the behave_tests package."""
diff --git a/test/ut_behave_tests/test_data/project=nfvbench&case=characterization&criteria=PASS&page=1.json b/test/ut_behave_tests/test_data/project=nfvbench&case=characterization&criteria=PASS&page=1.json
new file mode 100644
index 0000000..885ab04
--- /dev/null
+++ b/test/ut_behave_tests/test_data/project=nfvbench&case=characterization&criteria=PASS&page=1.json
@@ -0,0 +1,48702 @@
+{
+ "pagination": {
+ "current_page": 1,
+ "total_pages": 2
+ },
+ "results": [
+ {
+ "project_name": "nfvbench",
+ "scenario": "loopback",
+ "stop_date": "2022-04-25 02:32:44",
+ "case_name": "characterization",
+ "build_tag": "TOV5HRPLCZYW",
+ "version": "unknown",
+ "pod_name": "AMICAL",
+ "criteria": "PASS",
+ "installer": "unknown",
+ "_id": "6266084fc0d88e001ca15aaf",
+ "start_date": "2022-04-25 00:13:31",
+ "details": {
+ "tests": [
+ {
+ "status": "passed",
+ "elements": [
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.1 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00011801719665527344,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "64 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "64"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.00010013580322265625,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.775161743164062e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.822845458984375e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 10.036147117614746,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 58.26510310173035,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00015854835510253906,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00029850006103515625,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:17",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.2 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010204315185546875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.870529174804688e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 0.00011563301086425781,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.417533874511719e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.00789332389831543,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 48.191978454589844,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00014138221740722656,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00026345252990722656,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:18",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.3 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.942054748535156e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "256 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "256"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.655952453613281e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.632110595703125e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.608268737792969e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007787942886352539,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 48.198084115982056,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012063980102539062,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002589225769042969,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:19",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.4 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010013580322265625,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "512 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "512"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.72747802734375e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.5367431640625e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.393692016601562e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.0078067779541015625,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 427.4761390686035,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012445449829101562,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00032782554626464844,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:20",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.5 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010132789611816406,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "768 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "768"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.5367431640625e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.393692016601562e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.655952453613281e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007827281951904297,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 427.47583389282227,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011754035949707031,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00030040740966796875,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:21",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.6 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010085105895996094,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1024 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1024"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.751319885253906e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.584426879882812e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.703636169433594e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008013725280761719,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 427.47237610816956,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011968612670898438,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00029087066650390625,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:22",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.7 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00012159347534179688,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1280 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1280"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.870529174804688e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.584426879882812e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 0.00011706352233886719,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007834196090698242,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 427.4668493270874,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012111663818359375,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0003085136413574219,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:23",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.8 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010085105895996094,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1518 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1518"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.775161743164062e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.655952453613281e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.870529174804688e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008010625839233398,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 427.470552444458,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.0001327991485595703,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0003223419189453125,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:24",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.9 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010228157043457031,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "IMIX frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "IMIX"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.751319885253906e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.608268737792969e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.822845458984375e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007843494415283203,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 48.19991326332092,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011920928955078125,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002856254577636719,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:25",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.10 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010061264038085938,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "9000 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "9000"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.72747802734375e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 0.0001125335693359375,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.822845458984375e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.0078046321868896484,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 427.4356060028076,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.000133514404296875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0003294944763183594,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:26",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.11 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010228157043457031,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "64 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "64"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.751319885253906e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.441375732421875e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.775161743164062e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007808685302734375,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 54.21188402175903,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.0001220703125,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00028014183044433594,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:27",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.12 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.942054748535156e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.584426879882812e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 0.00011420249938964844,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.369850158691406e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.0078582763671875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 54.213879346847534,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00014543533325195312,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00026297569274902344,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:28",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.13 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.918212890625e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "256 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "256"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.679794311523438e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.679794311523438e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.393692016601562e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007826566696166992,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 54.2158465385437,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.0001385211944580078,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002658367156982422,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:29",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.14 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010061264038085938,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "512 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "512"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.751319885253906e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.72747802734375e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.679794311523438e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.00782465934753418,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 180.64374685287476,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012063980102539062,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00026535987854003906,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:30",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.15 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010061264038085938,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "768 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "768"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.703636169433594e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.751319885253906e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.72747802734375e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.0077762603759765625,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.4992287158966,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00014448165893554688,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00032806396484375,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:31",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.16 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010180473327636719,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1024 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1024"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.489059448242188e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.632110595703125e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.822845458984375e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007920503616333008,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.49558329582214,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011801719665527344,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00028133392333984375,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:32",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.17 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00011992454528808594,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1280 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1280"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.608268737792969e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.369850158691406e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 0.00012254714965820312,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007806301116943359,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.5018527507782,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.0001227855682373047,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0003173351287841797,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:33",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.18 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010251998901367188,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1518 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1518"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.72747802734375e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.489059448242188e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.679794311523438e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007884740829467773,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.5023431777954,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012040138244628906,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00028133392333984375,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:34",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.19 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010061264038085938,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "IMIX frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "IMIX"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.846687316894531e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.512901306152344e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.417533874511719e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007809638977050781,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 56.228487968444824,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00013756752014160156,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00026535987854003906,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:35",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.20 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010156631469726562,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "9000 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "9000"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.870529174804688e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.965896606445312e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.703636169433594e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.00783085823059082,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.4738347530365,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00014972686767578125,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002911090850830078,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:36",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.21 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010085105895996094,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "64 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "64"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.00011968612670898438,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.72747802734375e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.441375732421875e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.00802922248840332,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 60.2336266040802,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011706352233886719,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002532005310058594,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:37",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.22 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.942054748535156e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.00010132789611816406,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.679794311523438e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.703636169433594e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007838964462280273,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 60.23164749145508,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012135505676269531,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00025343894958496094,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:38",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.23 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.846687316894531e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "256 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "256"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.00011467933654785156,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.894371032714844e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.584426879882812e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.00780177116394043,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 60.239051818847656,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011920928955078125,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002503395080566406,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:39",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.24 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.989738464355469e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "512 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "512"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.751319885253906e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.441375732421875e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.560585021972656e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008019447326660156,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 309.0816767215729,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012183189392089844,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00026702880859375,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:40",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.25 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00011706352233886719,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "768 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "768"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.679794311523438e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.441375732421875e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.369850158691406e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007838964462280273,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.50160241127014,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012803077697753906,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002942085266113281,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:41",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.26 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010156631469726562,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1024 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1024"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.870529174804688e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.560585021972656e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.417533874511719e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007815361022949219,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.4943425655365,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011849403381347656,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0003044605255126953,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:42",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.27 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.989738464355469e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1280 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1280"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.703636169433594e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 0.00011754035949707031,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.560585021972656e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007854700088500977,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.5042459964752,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012087821960449219,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002963542938232422,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:43",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.28 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.965896606445312e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1518 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1518"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.72747802734375e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.393692016601562e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.465217590332031e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007800579071044922,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.4900460243225,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011992454528808594,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0003037452697753906,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:44",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.29 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010275840759277344,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "IMIX frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "IMIX"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.560585021972656e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.560585021972656e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.72747802734375e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007885217666625977,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 60.23350286483765,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.0001304149627685547,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002522468566894531,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:45",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.30 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010347366333007812,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "9000 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "9000"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.679794311523438e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.5367431640625e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 0.00011348724365234375,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008048772811889648,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.47489833831787,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00013017654418945312,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002841949462890625,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:46",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.1 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:51",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010156631469726562,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "TRex is restarted",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:52",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:99"
+ },
+ "result": {
+ "duration": 9.703636169433594e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "64 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:53",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "64"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.0003788471221923828,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:54",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.870529174804688e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "70% rate of previous scenario",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:55",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage_rate",
+ "value": "70%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:129"
+ },
+ "result": {
+ "duration": 0.0002548694610595703,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:56",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.00780487060546875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:57",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 36.23451280593872,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:58",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00015497207641601562,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:62",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.2 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:51",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00011444091796875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "TRex is restarted",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:52",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:99"
+ },
+ "result": {
+ "duration": 0.00011348724365234375,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "64 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:53",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "64"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.00010061264038085938,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:54",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.703636169433594e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "90% rate of previous scenario",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:55",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage_rate",
+ "value": "90%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:129"
+ },
+ "result": {
+ "duration": 0.00025391578674316406,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:56",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.00824594497680664,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:57",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 36.24914073944092,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:58",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.0001533031463623047,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:63",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.3 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:51",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00011730194091796875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "TRex is restarted",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:52",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:99"
+ },
+ "result": {
+ "duration": 0.00011968612670898438,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "768 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:53",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "768"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.72747802734375e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:54",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.584426879882812e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "70% rate of previous scenario",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:55",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage_rate",
+ "value": "70%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:129"
+ },
+ "result": {
+ "duration": 0.00025177001953125,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:56",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.0079345703125,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:57",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 36.221691846847534,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:58",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.0001533031463623047,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:64",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.4 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:51",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.0001347064971923828,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "TRex is restarted",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:52",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:99"
+ },
+ "result": {
+ "duration": 9.72747802734375e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "768 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:53",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "768"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.703636169433594e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:54",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 0.00011730194091796875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "90% rate of previous scenario",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:55",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage_rate",
+ "value": "90%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:129"
+ },
+ "result": {
+ "duration": 0.00024175643920898438,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:56",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.0079345703125,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:57",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 36.23504996299744,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:58",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00016355514526367188,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:65",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.5 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:51",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00011444091796875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "TRex is restarted",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:52",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:99"
+ },
+ "result": {
+ "duration": 0.00011706352233886719,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1518 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:53",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1518"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.632110595703125e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:54",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 0.00010013580322265625,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "70% rate of previous scenario",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:55",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage_rate",
+ "value": "70%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:129"
+ },
+ "result": {
+ "duration": 0.0002498626708984375,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:56",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007980108261108398,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:57",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 36.23746657371521,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:58",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.0001513957977294922,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:66",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.6 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:51",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00011491775512695312,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "TRex is restarted",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:52",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:99"
+ },
+ "result": {
+ "duration": 9.775161743164062e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1518 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:53",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1518"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.584426879882812e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:54",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.512901306152344e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "90% rate of previous scenario",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:55",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage_rate",
+ "value": "90%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:129"
+ },
+ "result": {
+ "duration": 0.0002338886260986328,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:56",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007954835891723633,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:57",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 36.25133943557739,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:58",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00015425682067871094,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:67",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.7 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:51",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00011301040649414062,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "TRex is restarted",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:52",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:99"
+ },
+ "result": {
+ "duration": 9.751319885253906e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "9000 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:53",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "9000"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.655952453613281e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:54",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.560585021972656e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "70% rate of previous scenario",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:55",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage_rate",
+ "value": "70%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:129"
+ },
+ "result": {
+ "duration": 0.00024771690368652344,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:56",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008048534393310547,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:57",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 36.24317383766174,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:58",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00015354156494140625,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:68",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.8 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:51",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00011491775512695312,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "TRex is restarted",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:52",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:99"
+ },
+ "result": {
+ "duration": 0.00011086463928222656,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "9000 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:53",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "9000"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.608268737792969e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:54",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.489059448242188e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "90% rate of previous scenario",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:55",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage_rate",
+ "value": "90%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:129"
+ },
+ "result": {
+ "duration": 0.0002601146697998047,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:56",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007915735244750977,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:57",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 36.240649700164795,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:58",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00015354156494140625,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:69",
+ "type": "scenario"
+ }
+ ],
+ "name": "characterization",
+ "keyword": "Feature",
+ "tags": [
+ "characterization"
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:2"
+ }
+ ],
+ "skip_tests": 0,
+ "links": [
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/xtesting.log",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_768-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_128-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1518-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_512-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_64-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_9000-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1280-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1024-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_64-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_64-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_768-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_128-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_IMIX-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_256-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_9000-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/output.html",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1024-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_512-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_256-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_256-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1024-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_128-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_9000-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_64-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-latency-fs_64-fc_100k-rate_70%.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1280-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_256-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_512-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_768-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_768-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_512-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_IMIX-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_64-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1024-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1280-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_128-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_128-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_9000-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_9000-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_IMIX-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_768-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1280-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_IMIX-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_IMIX-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_IMIX-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1518-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/behave_tests.log",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_128-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-latency-fs_9000-fc_100k-rate_70%.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_512-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_9000-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_768-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/campaign_result.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_9000-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_512-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_256-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_128-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-latency-fs_768-fc_100k-rate_90%.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_IMIX-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1280-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_64-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1518-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/TESTS-characterization-full.xml",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-latency-fs_1518-fc_100k-rate_90%.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1518-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_9000-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_256-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_64-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1024-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1518-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_9000-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1024-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1024-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_256-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_IMIX-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_512-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1024-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1280-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1280-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_768-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_512-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1518-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_768-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-latency-fs_64-fc_100k-rate_90%.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_256-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1518-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-latency-fs_768-fc_100k-rate_70%.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_256-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench.log",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1518-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_64-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-latency-fs_9000-fc_100k-rate_90%.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_IMIX-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1518-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1280-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_512-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_128-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_768-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-latency-fs_1518-fc_100k-rate_70%.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1024-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_64-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_128-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/output.json",
+ "http://172.20.73.203:8181/TOV5HRPLCZYW/nfvbench-amical-loopback-_-nfvbench-launcher-latest-devel-nfvbench_loopback_only_test_characterization-run-25/characterization/nfvbench-throughput-fs_1280-fc_10k-rate_ndr-1.json"
+ ],
+ "results": {
+ "latency": [
+ {
+ "input": {
+ "rate": "70%",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_64-fc_100k-rate_70%.json",
+ "frame_sizes": [
+ "64"
+ ],
+ "duration_sec": "10",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback",
+ "restart": "true"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 02:28:13",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": "true",
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "29ad1ab70db044069cca0a6862c8d563",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "11735907pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "64"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_64-fc_100k-rate_70%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "64"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_64-fc_100k-rate_70%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "64": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 15.714376742399999,
+ "rate_pps": 5846122,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 3928594185
+ },
+ "tx": {
+ "rate_percent": 15.714376742399999,
+ "rate_pps": 5846122,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 3928594185
+ },
+ "orig": {
+ "rate_percent": 15.773059008,
+ "rate_pps": 5867953,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 3943264752
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 31.429699929599998,
+ "rate_pps": 11692596.0,
+ "rate_bps": 7857424981.0
+ },
+ "tx": {
+ "rate_percent": 31.429699929599998,
+ "rate_pps": 11692596.0,
+ "rate_bps": 7857424981.0
+ },
+ "orig": {
+ "rate_percent": 31.546118016,
+ "rate_pps": 11735906.0,
+ "rate_bps": 7886529504.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 15.715323187200001,
+ "rate_pps": 5846474,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 3928830796
+ },
+ "tx": {
+ "rate_percent": 15.715323187200001,
+ "rate_pps": 5846474,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 3928830796
+ },
+ "orig": {
+ "rate_percent": 15.773059008,
+ "rate_pps": 5867953,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 3943264752
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 58410774,
+ "-59 (-0.0001%)"
+ ],
+ "lat_max_usec": 42,
+ "lat_avg_usec": 16,
+ "lat_min_usec": 5,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 58464744,
+ 58464744
+ ],
+ "lat_max_usec": 42,
+ "lat_avg_usec": 15,
+ "lat_min_usec": 5,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 11692596,
+ "overall": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 3193174528.0,
+ "pkt_rate": 5869806.5,
+ "max_delay_usec": 42,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 15.50001505653573,
+ "total_pkt_bytes": 7950965756,
+ "total_pkts": 116925967,
+ "min_delay_usec": 5
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 7950965756,
+ "total_pkts": 116925967,
+ "pkt_bit_rate": 3193170688.0,
+ "pkt_rate": 5869801.5
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 3193216000,
+ "pkt_rate": 5869884,
+ "max_delay_usec": 42,
+ "total_pkt_bytes": 3975363164,
+ "avg_delay_usec": 15,
+ "total_pkts": 58461223,
+ "min_delay_usec": 5
+ },
+ "tx": {
+ "total_pkt_bytes": 3975602592,
+ "total_pkts": 58464744,
+ "pkt_bit_rate": 3193189888,
+ "pkt_rate": 5869842
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 3193133056,
+ "pkt_rate": 5869729,
+ "max_delay_usec": 42,
+ "total_pkt_bytes": 3975602592,
+ "avg_delay_usec": 16,
+ "total_pkts": 58464744,
+ "min_delay_usec": 5
+ },
+ "tx": {
+ "total_pkt_bytes": 3975363164,
+ "total_pkts": 58461223,
+ "pkt_bit_rate": 3193151488,
+ "pkt_rate": 5869761
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 7857424512.0,
+ "theoretical_tx_rate_pps": 74404761.90476191
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "29ad1ab70db044069cca0a6862c8d563"
+ },
+ "synthesis": {
+ "avg_delay_usec": 15.50001505653573,
+ "total_tx_rate": 11692596
+ }
+ },
+ {
+ "input": {
+ "rate": "90%",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_64-fc_100k-rate_90%.json",
+ "frame_sizes": [
+ "64"
+ ],
+ "duration_sec": "10",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback",
+ "restart": "true"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 02:28:50",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": "true",
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "1cc7ff91553043a19730fd45e9d5f126",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "15089023pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "64"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_64-fc_100k-rate_90%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "64"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_64-fc_100k-rate_90%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "64": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 20.20257792,
+ "rate_pps": 7515840,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 5050644480
+ },
+ "tx": {
+ "rate_percent": 20.20257792,
+ "rate_pps": 7515840,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 5050644480
+ },
+ "orig": {
+ "rate_percent": 20.279646912,
+ "rate_pps": 7544511,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 5069911728
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 40.4063724288,
+ "rate_pps": 15032132.0,
+ "rate_bps": 10101593107.0
+ },
+ "tx": {
+ "rate_percent": 40.4063724288,
+ "rate_pps": 15032132.0,
+ "rate_bps": 10101593107.0
+ },
+ "orig": {
+ "rate_percent": 40.559293824,
+ "rate_pps": 15089022.0,
+ "rate_bps": 10139823456.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 20.203794508799998,
+ "rate_pps": 7516292,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 5050948627
+ },
+ "tx": {
+ "rate_percent": 20.203794508799998,
+ "rate_pps": 7516292,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 5050948627
+ },
+ "orig": {
+ "rate_percent": 20.279646912,
+ "rate_pps": 7544511,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 5069911728
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 75091840,
+ "-79 (-0.0001%)"
+ ],
+ "lat_max_usec": 41,
+ "lat_avg_usec": 18,
+ "lat_min_usec": 5,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 75162926,
+ 75162926
+ ],
+ "lat_max_usec": 40,
+ "lat_avg_usec": 16,
+ "lat_min_usec": 5,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 15032132,
+ "overall": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 4096779776.0,
+ "pkt_rate": 7530844.5,
+ "max_delay_usec": 41,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 17.00003010883499,
+ "total_pkt_bytes": 10221850168,
+ "total_pkts": 150321326,
+ "min_delay_usec": 5
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 10221850168,
+ "total_pkts": 150321326,
+ "pkt_bit_rate": 4096779520.0,
+ "pkt_rate": 7530849.0
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 4096839424,
+ "pkt_rate": 7530954,
+ "max_delay_usec": 40,
+ "total_pkt_bytes": 5110771200,
+ "avg_delay_usec": 16,
+ "total_pkts": 75158400,
+ "min_delay_usec": 5
+ },
+ "tx": {
+ "total_pkt_bytes": 5111078968,
+ "total_pkts": 75162926,
+ "pkt_bit_rate": 4096763136,
+ "pkt_rate": 7530821
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 4096720128,
+ "pkt_rate": 7530735,
+ "max_delay_usec": 41,
+ "total_pkt_bytes": 5111078968,
+ "avg_delay_usec": 18,
+ "total_pkts": 75162926,
+ "min_delay_usec": 5
+ },
+ "tx": {
+ "total_pkt_bytes": 5110771200,
+ "total_pkts": 75158400,
+ "pkt_bit_rate": 4096795904,
+ "pkt_rate": 7530877
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 10101592704.0,
+ "theoretical_tx_rate_pps": 74404761.90476191
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "1cc7ff91553043a19730fd45e9d5f126"
+ },
+ "synthesis": {
+ "avg_delay_usec": 17.00003010883499,
+ "total_tx_rate": 15032132
+ }
+ },
+ {
+ "input": {
+ "rate": "70%",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_768-fc_100k-rate_70%.json",
+ "frame_sizes": [
+ "768"
+ ],
+ "duration_sec": "10",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback",
+ "restart": "true"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 02:29:26",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": "true",
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "83c6271d2c784b99971cb644e7b35976",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "5275399pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "768"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_768-fc_100k-rate_70%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "768"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_768-fc_100k-rate_70%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "768": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 66.2607564672,
+ "rate_pps": 2627726,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 16565189116
+ },
+ "tx": {
+ "rate_percent": 66.2607564672,
+ "rate_pps": 2627726,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 16565189116
+ },
+ "orig": {
+ "rate_percent": 66.512230592,
+ "rate_pps": 2637699,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 16628057648
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 132.52550210559997,
+ "rate_pps": 5255610.0,
+ "rate_bps": 33131375525.0
+ },
+ "tx": {
+ "rate_percent": 132.52550210559997,
+ "rate_pps": 5255610.0,
+ "rate_bps": 33131375525.0
+ },
+ "orig": {
+ "rate_percent": 133.024461184,
+ "rate_pps": 5275398.0,
+ "rate_bps": 33256115296.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 66.26474563839999,
+ "rate_pps": 2627884,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 16566186409
+ },
+ "tx": {
+ "rate_percent": 66.26474563839999,
+ "rate_pps": 2627884,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 16566186409
+ },
+ "orig": {
+ "rate_percent": 66.512230592,
+ "rate_pps": 2637699,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 16628057648
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 26254197,
+ "+5 (+0.0000%)"
+ ],
+ "lat_max_usec": 52,
+ "lat_avg_usec": 27,
+ "lat_min_usec": 6,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 26278849,
+ 26278849
+ ],
+ "lat_max_usec": 64,
+ "lat_avg_usec": 27,
+ "lat_min_usec": 8,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 5255611,
+ "overall": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 16250518528.0,
+ "pkt_rate": 2631236.0,
+ "max_delay_usec": 64,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 27.0,
+ "total_pkt_bytes": 40573321552,
+ "total_pkts": 52556116,
+ "min_delay_usec": 6
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 40573321552,
+ "total_pkts": 52556116,
+ "pkt_bit_rate": 16250488832.0,
+ "pkt_rate": 2631232.0
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 16250605568,
+ "pkt_rate": 2631250,
+ "max_delay_usec": 64,
+ "total_pkt_bytes": 20286050124,
+ "avg_delay_usec": 27,
+ "total_pkts": 26277267,
+ "min_delay_usec": 8
+ },
+ "tx": {
+ "total_pkt_bytes": 20287271428,
+ "total_pkts": 26278849,
+ "pkt_bit_rate": 16250417152,
+ "pkt_rate": 2631220
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 16250431488,
+ "pkt_rate": 2631222,
+ "max_delay_usec": 52,
+ "total_pkt_bytes": 20287271428,
+ "avg_delay_usec": 27,
+ "total_pkts": 26278849,
+ "min_delay_usec": 6
+ },
+ "tx": {
+ "total_pkt_bytes": 20286050124,
+ "total_pkts": 26277267,
+ "pkt_bit_rate": 16250560512,
+ "pkt_rate": 2631244
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 33131371744.0,
+ "theoretical_tx_rate_pps": 7931472.081218274
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "83c6271d2c784b99971cb644e7b35976"
+ },
+ "synthesis": {
+ "avg_delay_usec": 27.0,
+ "total_tx_rate": 5255611
+ }
+ },
+ {
+ "input": {
+ "rate": "90%",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_768-fc_100k-rate_90%.json",
+ "frame_sizes": [
+ "768"
+ ],
+ "duration_sec": "10",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback",
+ "restart": "true"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 02:30:02",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": "true",
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "2455d986fcbe4f858b57eb97a3d6cf28",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "6782656pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "768"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_768-fc_100k-rate_90%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "768"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_768-fc_100k-rate_90%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "768": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 85.19754631679999,
+ "rate_pps": 3378709,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 21299386579
+ },
+ "tx": {
+ "rate_percent": 85.19754631679999,
+ "rate_pps": 3378709,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 21299386579
+ },
+ "orig": {
+ "rate_percent": 85.515726848,
+ "rate_pps": 3391328,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 21378931712
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 170.40022661119997,
+ "rate_pps": 6757622.0,
+ "rate_bps": 42600056652.0
+ },
+ "tx": {
+ "rate_percent": 170.40022661119997,
+ "rate_pps": 6757622.0,
+ "rate_bps": 42600056652.0
+ },
+ "orig": {
+ "rate_percent": 171.031453696,
+ "rate_pps": 6782656.0,
+ "rate_bps": 42757863424.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 85.2026802944,
+ "rate_pps": 3378913,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 21300670073
+ },
+ "tx": {
+ "rate_percent": 85.2026802944,
+ "rate_pps": 3378913,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 21300670073
+ },
+ "orig": {
+ "rate_percent": 85.515726848,
+ "rate_pps": 3391328,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 21378931712
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 33757754,
+ "-3 (-0.0000%)"
+ ],
+ "lat_max_usec": 63,
+ "lat_avg_usec": 46,
+ "lat_min_usec": 17,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 33789134,
+ 33789134
+ ],
+ "lat_max_usec": 72,
+ "lat_avg_usec": 48,
+ "lat_min_usec": 21,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 6757623,
+ "overall": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 20899780608.0,
+ "pkt_rate": 3384031.5,
+ "max_delay_usec": 72,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 46.99996987106354,
+ "total_pkt_bytes": 52168851104,
+ "total_pkts": 67576232,
+ "min_delay_usec": 17
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 52168851104,
+ "total_pkts": 67576232,
+ "pkt_bit_rate": 20899762176.0,
+ "pkt_rate": 3384028.0
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 20900167680,
+ "pkt_rate": 3384094,
+ "max_delay_usec": 72,
+ "total_pkt_bytes": 26083639656,
+ "avg_delay_usec": 48,
+ "total_pkts": 33787098,
+ "min_delay_usec": 21
+ },
+ "tx": {
+ "total_pkt_bytes": 26085211448,
+ "total_pkts": 33789134,
+ "pkt_bit_rate": 20899940352,
+ "pkt_rate": 3384056
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 20899393536,
+ "pkt_rate": 3383969,
+ "max_delay_usec": 63,
+ "total_pkt_bytes": 26085211448,
+ "avg_delay_usec": 46,
+ "total_pkts": 33789134,
+ "min_delay_usec": 17
+ },
+ "tx": {
+ "total_pkt_bytes": 26083639656,
+ "total_pkts": 33787098,
+ "pkt_bit_rate": 20899584000,
+ "pkt_rate": 3384000
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 42600055392.0,
+ "theoretical_tx_rate_pps": 7931472.081218274
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "2455d986fcbe4f858b57eb97a3d6cf28"
+ },
+ "synthesis": {
+ "avg_delay_usec": 46.99996987106354,
+ "total_tx_rate": 6757623
+ }
+ },
+ {
+ "input": {
+ "rate": "70%",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_1518-fc_100k-rate_70%.json",
+ "frame_sizes": [
+ "1518"
+ ],
+ "duration_sec": "10",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback",
+ "restart": "true"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 02:30:39",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": "true",
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "5c5843684c864e02b3be78bf0c27b4f4",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "2713913pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1518"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_1518-fc_100k-rate_70%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1518"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_1518-fc_100k-rate_70%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1518": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 66.53541553919999,
+ "rate_pps": 1351906,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 16633853884
+ },
+ "tx": {
+ "rate_percent": 66.53541553919999,
+ "rate_pps": 1351906,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 16633853884
+ },
+ "orig": {
+ "rate_percent": 66.78397110399999,
+ "rate_pps": 1356956,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 16695992776
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 133.07484710399999,
+ "rate_pps": 2703893.0,
+ "rate_bps": 33268711775.0
+ },
+ "tx": {
+ "rate_percent": 133.07484710399999,
+ "rate_pps": 2703893.0,
+ "rate_bps": 33268711775.0
+ },
+ "orig": {
+ "rate_percent": 133.56794220799998,
+ "rate_pps": 2713912.0,
+ "rate_bps": 33391985552.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 66.5394315648,
+ "rate_pps": 1351987,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 16634857891
+ },
+ "tx": {
+ "rate_percent": 66.5394315648,
+ "rate_pps": 1351987,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 16634857891
+ },
+ "orig": {
+ "rate_percent": 66.78397110399999,
+ "rate_pps": 1356956,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 16695992776
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 13507087,
+ "+37 (+0.0003%)"
+ ],
+ "lat_max_usec": 76,
+ "lat_avg_usec": 33,
+ "lat_min_usec": 7,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 13519878,
+ 13519878
+ ],
+ "lat_max_usec": 104,
+ "lat_avg_usec": 46,
+ "lat_min_usec": 7,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 2703894,
+ "overall": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 16510260736.0,
+ "pkt_rate": 1355967.5,
+ "max_delay_usec": 104,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 39.49980383846408,
+ "total_pkt_bytes": 41153266680,
+ "total_pkts": 27038940,
+ "min_delay_usec": 7
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 41153266680,
+ "total_pkts": 27038940,
+ "pkt_bit_rate": 16510253568.0,
+ "pkt_rate": 1355967.5
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 16510286848,
+ "pkt_rate": 1355970,
+ "max_delay_usec": 104,
+ "total_pkt_bytes": 20576012364,
+ "avg_delay_usec": 46,
+ "total_pkts": 13519062,
+ "min_delay_usec": 7
+ },
+ "tx": {
+ "total_pkt_bytes": 20577254316,
+ "total_pkts": 13519878,
+ "pkt_bit_rate": 16510161920,
+ "pkt_rate": 1355960
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 16510234624,
+ "pkt_rate": 1355965,
+ "max_delay_usec": 76,
+ "total_pkt_bytes": 20577254316,
+ "avg_delay_usec": 33,
+ "total_pkts": 13519878,
+ "min_delay_usec": 7
+ },
+ "tx": {
+ "total_pkt_bytes": 20576012364,
+ "total_pkts": 13519062,
+ "pkt_bit_rate": 16510345216,
+ "pkt_rate": 1355975
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 33268711776.0,
+ "theoretical_tx_rate_pps": 4063719.1157347206
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "5c5843684c864e02b3be78bf0c27b4f4"
+ },
+ "synthesis": {
+ "avg_delay_usec": 39.49980383846408,
+ "total_tx_rate": 2703894
+ }
+ },
+ {
+ "input": {
+ "rate": "90%",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_1518-fc_100k-rate_90%.json",
+ "frame_sizes": [
+ "1518"
+ ],
+ "duration_sec": "10",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback",
+ "restart": "true"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 02:31:15",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": "true",
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "2494d2b787c4476c90474945540b4645",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "3489317pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1518"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_1518-fc_100k-rate_90%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1518"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_1518-fc_100k-rate_90%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1518": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 85.545577856,
+ "rate_pps": 1738166,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 21386394464
+ },
+ "tx": {
+ "rate_percent": 85.545577856,
+ "rate_pps": 1738166,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 21386394464
+ },
+ "orig": {
+ "rate_percent": 85.865112736,
+ "rate_pps": 1744658,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 21466278184
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 171.0963135488,
+ "rate_pps": 3476436.0,
+ "rate_bps": 42774078387.0
+ },
+ "tx": {
+ "rate_percent": 171.0963135488,
+ "rate_pps": 3476436.0,
+ "rate_bps": 42774078387.0
+ },
+ "orig": {
+ "rate_percent": 171.730225472,
+ "rate_pps": 3489316.0,
+ "rate_bps": 42932556368.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 85.5507356928,
+ "rate_pps": 1738270,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 21387683923
+ },
+ "tx": {
+ "rate_percent": 85.5507356928,
+ "rate_pps": 1738270,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 21387683923
+ },
+ "orig": {
+ "rate_percent": 85.865112736,
+ "rate_pps": 1744658,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 21466278184
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 17366577,
+ "+5 (+0.0000%)"
+ ],
+ "lat_max_usec": 84,
+ "lat_avg_usec": 34,
+ "lat_min_usec": 7,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 17382708,
+ 17382708
+ ],
+ "lat_max_usec": 96,
+ "lat_avg_usec": 49,
+ "lat_min_usec": 8,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 3476436,
+ "overall": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 21135840256.0,
+ "pkt_rate": 1735860.5,
+ "max_delay_usec": 96,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 41.49977390643201,
+ "total_pkt_bytes": 52911368096,
+ "total_pkts": 34764368,
+ "min_delay_usec": 7
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 52911368096,
+ "total_pkts": 34764368,
+ "pkt_bit_rate": 21135740928.0,
+ "pkt_rate": 1735852.0
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 21135886336,
+ "pkt_rate": 1735864,
+ "max_delay_usec": 96,
+ "total_pkt_bytes": 26454886520,
+ "avg_delay_usec": 49,
+ "total_pkts": 17381660,
+ "min_delay_usec": 8
+ },
+ "tx": {
+ "total_pkt_bytes": 26456481576,
+ "total_pkts": 17382708,
+ "pkt_bit_rate": 21135585280,
+ "pkt_rate": 1735839
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 21135794176,
+ "pkt_rate": 1735857,
+ "max_delay_usec": 84,
+ "total_pkt_bytes": 26456481576,
+ "avg_delay_usec": 34,
+ "total_pkts": 17382708,
+ "min_delay_usec": 7
+ },
+ "tx": {
+ "total_pkt_bytes": 26454886520,
+ "total_pkts": 17381660,
+ "pkt_bit_rate": 21135896576,
+ "pkt_rate": 1735865
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 42774068544.0,
+ "theoretical_tx_rate_pps": 4063719.1157347206
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "2494d2b787c4476c90474945540b4645"
+ },
+ "synthesis": {
+ "avg_delay_usec": 41.49977390643201,
+ "total_tx_rate": 3476436
+ }
+ },
+ {
+ "input": {
+ "rate": "70%",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_9000-fc_100k-rate_70%.json",
+ "frame_sizes": [
+ "9000"
+ ],
+ "duration_sec": "10",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback",
+ "restart": "true"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 02:31:51",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": "true",
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "7c104183aa154d46944772ed88ae04c3",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "462795pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "9000"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_9000-fc_100k-rate_70%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "9000"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_9000-fc_100k-rate_70%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "9000": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 66.538736,
+ "rate_pps": 230525,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 16634684000
+ },
+ "tx": {
+ "rate_percent": 66.538736,
+ "rate_pps": 230525,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 16634684000
+ },
+ "orig": {
+ "rate_percent": 66.7905744,
+ "rate_pps": 231397,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 16697643600
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 133.08151296,
+ "rate_pps": 461064.0,
+ "rate_bps": 33270378240.0
+ },
+ "tx": {
+ "rate_percent": 133.08151296,
+ "rate_pps": 461064.0,
+ "rate_bps": 33270378240.0
+ },
+ "orig": {
+ "rate_percent": 133.5811488,
+ "rate_pps": 462794.0,
+ "rate_bps": 33395287200.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 66.54277696000001,
+ "rate_pps": 230539,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 16635694240
+ },
+ "tx": {
+ "rate_percent": 66.54277696000001,
+ "rate_pps": 230539,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 16635694240
+ },
+ "orig": {
+ "rate_percent": 66.7905744,
+ "rate_pps": 231397,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 16697643600
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 2303254,
+ "+55 (+0.0024%)"
+ ],
+ "lat_max_usec": 149,
+ "lat_avg_usec": 70,
+ "lat_min_usec": 14,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 2305390,
+ 2305390
+ ],
+ "lat_max_usec": 195,
+ "lat_avg_usec": 73,
+ "lat_min_usec": 14,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 461064,
+ "overall": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 16609682432.0,
+ "pkt_rate": 230587.0,
+ "max_delay_usec": 195,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 71.49995445317786,
+ "total_pkt_bytes": 41514202560,
+ "total_pkts": 4610640,
+ "min_delay_usec": 14
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 41514202560,
+ "total_pkts": 4610640,
+ "pkt_bit_rate": 16609573376.0,
+ "pkt_rate": 230585.5
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 16609541120,
+ "pkt_rate": 230585,
+ "max_delay_usec": 195,
+ "total_pkt_bytes": 20756471000,
+ "avg_delay_usec": 73,
+ "total_pkts": 2305250,
+ "min_delay_usec": 14
+ },
+ "tx": {
+ "total_pkt_bytes": 20757731560,
+ "total_pkts": 2305390,
+ "pkt_bit_rate": 16609261568,
+ "pkt_rate": 230581
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 16609823744,
+ "pkt_rate": 230589,
+ "max_delay_usec": 149,
+ "total_pkt_bytes": 20757731560,
+ "avg_delay_usec": 70,
+ "total_pkts": 2305390,
+ "min_delay_usec": 14
+ },
+ "tx": {
+ "total_pkt_bytes": 20756471000,
+ "total_pkts": 2305250,
+ "pkt_bit_rate": 16609885184,
+ "pkt_rate": 230590
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 33270378240.0,
+ "theoretical_tx_rate_pps": 692904.6563192905
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "7c104183aa154d46944772ed88ae04c3"
+ },
+ "synthesis": {
+ "avg_delay_usec": 71.49995445317786,
+ "total_tx_rate": 461064
+ }
+ },
+ {
+ "input": {
+ "rate": "90%",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_9000-fc_100k-rate_90%.json",
+ "frame_sizes": [
+ "9000"
+ ],
+ "duration_sec": "10",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback",
+ "restart": "true"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 02:32:27",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": "true",
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "539e9bb7f81444c6a2856b249554d42a",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "595022pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "9000"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_9000-fc_100k-rate_90%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "9000"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_9000-fc_100k-rate_90%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "9000": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 85.548248896,
+ "rate_pps": 296383,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 21387062224
+ },
+ "tx": {
+ "rate_percent": 85.548248896,
+ "rate_pps": 296383,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 21387062224
+ },
+ "orig": {
+ "rate_percent": 85.87357504,
+ "rate_pps": 297511,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 21468393760
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 171.101722176,
+ "rate_pps": 592785.0,
+ "rate_bps": 42775430544.0
+ },
+ "tx": {
+ "rate_percent": 171.101722176,
+ "rate_pps": 592785.0,
+ "rate_bps": 42775430544.0
+ },
+ "orig": {
+ "rate_percent": 171.74715008,
+ "rate_pps": 595022.0,
+ "rate_bps": 42936787520.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 85.55347328,
+ "rate_pps": 296402,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 21388368320
+ },
+ "tx": {
+ "rate_percent": 85.55347328,
+ "rate_pps": 296402,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 21388368320
+ },
+ "orig": {
+ "rate_percent": 85.87357504,
+ "rate_pps": 297511,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 21468393760
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 2961244,
+ "+41 (+0.0014%)"
+ ],
+ "lat_max_usec": 422,
+ "lat_avg_usec": 224,
+ "lat_min_usec": 29,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 2964020,
+ 2964020
+ ],
+ "lat_max_usec": 392,
+ "lat_avg_usec": 176,
+ "lat_min_usec": 16,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 592785,
+ "overall": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 21366905856.0,
+ "pkt_rate": 296630.0,
+ "max_delay_usec": 422,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 200.00073281095248,
+ "total_pkt_bytes": 53374442436,
+ "total_pkts": 5927859,
+ "min_delay_usec": 16
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 53374442436,
+ "total_pkts": 5927859,
+ "pkt_bit_rate": 21366993920.0,
+ "pkt_rate": 296631.0
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 21367107584,
+ "pkt_rate": 296633,
+ "max_delay_usec": 392,
+ "total_pkt_bytes": 26686406356,
+ "avg_delay_usec": 176,
+ "total_pkts": 2963839,
+ "min_delay_usec": 16
+ },
+ "tx": {
+ "total_pkt_bytes": 26688036080,
+ "total_pkts": 2964020,
+ "pkt_bit_rate": 21367209984,
+ "pkt_rate": 296634
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 21366704128,
+ "pkt_rate": 296627,
+ "max_delay_usec": 422,
+ "total_pkt_bytes": 26688036080,
+ "avg_delay_usec": 224,
+ "total_pkts": 2964020,
+ "min_delay_usec": 29
+ },
+ "tx": {
+ "total_pkt_bytes": 26686406356,
+ "total_pkts": 2963839,
+ "pkt_bit_rate": 21366777856,
+ "pkt_rate": 296628
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 42775365600.0,
+ "theoretical_tx_rate_pps": 692904.6563192905
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "539e9bb7f81444c6a2856b249554d42a"
+ },
+ "synthesis": {
+ "avg_delay_usec": 200.00073281095248,
+ "total_tx_rate": 592785
+ }
+ }
+ ],
+ "throughput": [
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "64"
+ ],
+ "duration_sec": "10",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 00:14:08",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "d35b641ccf884fd6a0c371913594ab90",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "64"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_128-rate_ndr-1.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "64"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_128-rate_ndr-1.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "warning": "WARNING: There is a significant difference between requested TX rate (74404760) and actual TX rate (16701232). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "64": {
+ "ndr": {
+ "load_percent_per_direction": 100.0,
+ "timestamp_sec": 1650845663.429861,
+ "stats": {
+ "total_tx_rate": 16701232,
+ "overall": {
+ "rx_pkts": 167012327,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 97,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 167012327,
+ "avg_delay_usec": 35.48017790327537,
+ "min_delay_usec": 6,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 83760820,
+ "min_delay_usec": 6,
+ "drop_pct": 0,
+ "max_delay_usec": 97,
+ "tx_pkts": 83251507,
+ "avg_delay_usec": 29,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 83251507,
+ "min_delay_usec": 6,
+ "drop_pct": 0,
+ "max_delay_usec": 92,
+ "tx_pkts": 83760820,
+ "avg_delay_usec": 42,
+ "drop_percentage": 0.0
+ },
+ "warning": "WARNING: There is a significant difference between requested TX rate (74404760) and actual TX rate (16701232). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 11223227904.0,
+ "theoretical_tx_rate_pps": 74404761.90476191
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 200.0,
+ "duration_sec": 10.0,
+ "l2frame_size": "64",
+ "rate_pps": 74404760,
+ "rate_bps": 50000000000.0,
+ "time_taken_sec": 12.489534616470337
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 74404760.0,
+ "rx_pkts": 167012327,
+ "time_ms": 1650845663429,
+ "drop_pct": 0,
+ "total_tx_pps": 16701232,
+ "tx_pps": 74404760,
+ "tx_pkts": 167012327,
+ "ndr_pps": 37202380,
+ "warning": "WARNING: There is a significant difference between requested TX rate (74404760) and actual TX rate (16701232). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "d35b641ccf884fd6a0c371913594ab90"
+ },
+ "synthesis": {
+ "avg_delay_usec": 35.48017790327537,
+ "total_tx_rate": 16701232
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "128"
+ ],
+ "duration_sec": "10",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 00:14:40",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "7f8f5bba535643418ac4efa4d3f94823",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "128"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_128-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "128"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_128-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "128": {
+ "ndr": {
+ "load_percent_per_direction": 100.0,
+ "timestamp_sec": 1650845695.5087018,
+ "stats": {
+ "total_tx_rate": 18016784,
+ "overall": {
+ "rx_pkts": 180167849,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 63,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 180167849,
+ "avg_delay_usec": 18.991852847174748,
+ "min_delay_usec": 5,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 90328567,
+ "min_delay_usec": 6,
+ "drop_pct": 0,
+ "max_delay_usec": 63,
+ "tx_pkts": 89839282,
+ "avg_delay_usec": 16,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 89839282,
+ "min_delay_usec": 5,
+ "drop_pct": 0,
+ "max_delay_usec": 55,
+ "tx_pkts": 90328567,
+ "avg_delay_usec": 22,
+ "drop_percentage": 0.0
+ },
+ "warning": "WARNING: There is a significant difference between requested TX rate (42229728) and actual TX rate (18016784). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 21331872256.0,
+ "theoretical_tx_rate_pps": 42229729.72972973
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 200.0,
+ "duration_sec": 10.0,
+ "l2frame_size": "128",
+ "rate_pps": 42229728,
+ "rate_bps": 50000000000.0,
+ "time_taken_sec": 12.489280939102173
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 42229728.0,
+ "rx_pkts": 180167849,
+ "time_ms": 1650845695508,
+ "drop_pct": 0,
+ "total_tx_pps": 18016784,
+ "tx_pps": 42229728,
+ "tx_pkts": 180167849,
+ "ndr_pps": 21114864,
+ "warning": "WARNING: There is a significant difference between requested TX rate (42229728) and actual TX rate (18016784). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ },
+ "warning": "WARNING: There is a significant difference between requested TX rate (42229728) and actual TX rate (18016784). The traffic generator may not have sufficient CPU to achieve the requested TX rate."
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "7f8f5bba535643418ac4efa4d3f94823"
+ },
+ "synthesis": {
+ "avg_delay_usec": 18.991852847174748,
+ "total_tx_rate": 18016784
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "256"
+ ],
+ "duration_sec": "10",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 00:15:44",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "d0df1174e1c64fbb9b686a68ccc7e668",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "256"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_128-rate_ndr-1.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "256"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_128-rate_ndr-1.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "warning": "WARNING: There is a significant difference between requested TX rate (22644926) and actual TX rate (15754775). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "256": {
+ "ndr": {
+ "load_percent_per_direction": 100.0,
+ "timestamp_sec": 1650845759.8291821,
+ "stats": {
+ "total_tx_rate": 15754775,
+ "overall": {
+ "rx_pkts": 157547756,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 72,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 157547756,
+ "avg_delay_usec": 28.504292190616795,
+ "min_delay_usec": 7,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 78909123,
+ "min_delay_usec": 7,
+ "drop_pct": 0,
+ "max_delay_usec": 72,
+ "tx_pkts": 78638633,
+ "avg_delay_usec": 31,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 78638633,
+ "min_delay_usec": 8,
+ "drop_pct": 0,
+ "max_delay_usec": 48,
+ "tx_pkts": 78909123,
+ "avg_delay_usec": 26,
+ "drop_percentage": 0.0
+ },
+ "warning": "WARNING: There is a significant difference between requested TX rate (22644926) and actual TX rate (15754775). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 34786543200.0,
+ "theoretical_tx_rate_pps": 22644927.536231883
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 200.0,
+ "duration_sec": 10.0,
+ "l2frame_size": "256",
+ "rate_pps": 22644926,
+ "rate_bps": 50000000000.0,
+ "time_taken_sec": 12.5189950466156
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 22644926.0,
+ "rx_pkts": 157547756,
+ "time_ms": 1650845759828,
+ "drop_pct": 0,
+ "total_tx_pps": 15754775,
+ "tx_pps": 22644926,
+ "tx_pkts": 157547756,
+ "ndr_pps": 11322463,
+ "warning": "WARNING: There is a significant difference between requested TX rate (22644926) and actual TX rate (15754775). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "d0df1174e1c64fbb9b686a68ccc7e668"
+ },
+ "synthesis": {
+ "avg_delay_usec": 28.504292190616795,
+ "total_tx_rate": 15754775
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "512"
+ ],
+ "duration_sec": "10",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 00:16:16",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "64366f2a65a647cca7f0b40bfb5fab09",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "512"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_128-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "512"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_128-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "512": {
+ "ndr": {
+ "load_percent_per_direction": 96.97265625,
+ "timestamp_sec": 1650845917.113052,
+ "stats": {
+ "total_tx_rate": 11045806,
+ "overall": {
+ "rx_pkts": 110458069,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 659,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 110458069,
+ "avg_delay_usec": 209.00381663380335,
+ "min_delay_usec": 12,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 55226186,
+ "min_delay_usec": 12,
+ "drop_pct": 0,
+ "max_delay_usec": 547,
+ "tx_pkts": 55231883,
+ "avg_delay_usec": 135,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 55231883,
+ "min_delay_usec": 12,
+ "drop_pct": 0,
+ "max_delay_usec": 659,
+ "tx_pkts": 55226186,
+ "avg_delay_usec": 283,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 47010950336.0,
+ "theoretical_tx_rate_pps": 11748120.30075188
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 193.9453125,
+ "duration_sec": 10.0,
+ "l2frame_size": "512",
+ "rate_pps": 11392464,
+ "rate_bps": 48486328124.0,
+ "time_taken_sec": 137.6620888710022
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 11740270.58724066,
+ "rx_pkts": 111822104,
+ "time_ms": 1650845791960,
+ "drop_pct": 74763,
+ "total_tx_pps": 11189686,
+ "tx_pps": 11748120,
+ "tx_pkts": 111896867,
+ "drop_percentage": 0.06681420311794789
+ },
+ {
+ "rx_pps": 5874060.0,
+ "rx_pkts": 58379346,
+ "time_ms": 1650845804458,
+ "drop_pct": 0,
+ "total_tx_pps": 5837934,
+ "tx_pps": 5874060,
+ "tx_pkts": 58379346,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 8811090.0,
+ "rx_pkts": 87569019,
+ "time_ms": 1650845817019,
+ "drop_pct": 0,
+ "total_tx_pps": 8756901,
+ "tx_pps": 8811090,
+ "tx_pkts": 87569019,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 10279604.0,
+ "rx_pkts": 102174125,
+ "time_ms": 1650845829521,
+ "drop_pct": 0,
+ "total_tx_pps": 10217412,
+ "tx_pps": 10279604,
+ "tx_pkts": 102174125,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 11013862.0,
+ "rx_pkts": 109461268,
+ "time_ms": 1650845842017,
+ "drop_pct": 0,
+ "total_tx_pps": 10946126,
+ "tx_pps": 11013862,
+ "tx_pkts": 109461268,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 11380990.0,
+ "rx_pkts": 110849710,
+ "time_ms": 1650845854579,
+ "drop_pct": 0,
+ "total_tx_pps": 11084971,
+ "tx_pps": 11380990,
+ "tx_pkts": 110849710,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 11564015.280748308,
+ "rx_pkts": 110849157,
+ "time_ms": 1650845867092,
+ "drop_pct": 5164,
+ "total_tx_pps": 11085432,
+ "tx_pps": 11564554,
+ "tx_pkts": 110854321,
+ "drop_percentage": 0.0046583660009067215
+ },
+ {
+ "rx_pps": 11472150.680780374,
+ "rx_pkts": 110840480,
+ "time_ms": 1650845879589,
+ "drop_pct": 6003,
+ "total_tx_pps": 11084648,
+ "tx_pps": 11472772,
+ "tx_pkts": 110846483,
+ "drop_percentage": 0.005415598075403078
+ },
+ {
+ "rx_pps": 11426262.302117322,
+ "rx_pkts": 110851902,
+ "time_ms": 1650845892109,
+ "drop_pct": 6012,
+ "total_tx_pps": 11085791,
+ "tx_pps": 11426882,
+ "tx_pkts": 110857914,
+ "drop_percentage": 0.005423158151794197
+ },
+ {
+ "rx_pps": 11402964.464785693,
+ "rx_pkts": 110844769,
+ "time_ms": 1650845904604,
+ "drop_pct": 9444,
+ "total_tx_pps": 11085421,
+ "tx_pps": 11403936,
+ "tx_pkts": 110854213,
+ "drop_percentage": 0.008519297322511324
+ },
+ {
+ "rx_pps": 11392464.0,
+ "rx_pkts": 110458069,
+ "time_ms": 1650845917112,
+ "drop_pct": 0,
+ "total_tx_pps": 11045806,
+ "tx_pps": 11392464,
+ "tx_pkts": 110458069,
+ "ndr_pps": 5696232,
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "64366f2a65a647cca7f0b40bfb5fab09"
+ },
+ "synthesis": {
+ "avg_delay_usec": 209.00381663380335,
+ "total_tx_rate": 11045806
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "768"
+ ],
+ "duration_sec": "10",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 00:28:09",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "88728d9ee6f543e1b8290c2e6e6e0d11",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "768"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_128-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "768"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_128-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "768": {
+ "ndr": {
+ "load_percent_per_direction": 95.60546875,
+ "timestamp_sec": 1650846629.6192143,
+ "stats": {
+ "total_tx_rate": 7537043,
+ "overall": {
+ "rx_pkts": 75370436,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 81,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 75370436,
+ "avg_delay_usec": 45.9999497150315,
+ "min_delay_usec": 9,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 37683323,
+ "min_delay_usec": 9,
+ "drop_pct": 0,
+ "max_delay_usec": 79,
+ "tx_pkts": 37687113,
+ "avg_delay_usec": 47,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 37687113,
+ "min_delay_usec": 14,
+ "drop_pct": 0,
+ "max_delay_usec": 81,
+ "tx_pkts": 37683323,
+ "avg_delay_usec": 45,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 47513519072.0,
+ "theoretical_tx_rate_pps": 7931472.081218274
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 191.2109375,
+ "duration_sec": 10.0,
+ "l2frame_size": "768",
+ "rate_pps": 7582920,
+ "rate_bps": 47802734374.0,
+ "time_taken_sec": 137.7126579284668
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 7866850.365150423,
+ "rx_pkts": 76167616,
+ "time_ms": 1650846504492,
+ "drop_pct": 625673,
+ "total_tx_pps": 7679328,
+ "tx_pps": 7931472,
+ "tx_pkts": 76793289,
+ "drop_percentage": 0.8147495805264963
+ },
+ {
+ "rx_pps": 3965736.0,
+ "rx_pkts": 39413470,
+ "time_ms": 1650846517007,
+ "drop_pct": 0,
+ "total_tx_pps": 3941347,
+ "tx_pps": 3965736,
+ "tx_pkts": 39413470,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 5948604.0,
+ "rx_pkts": 59120203,
+ "time_ms": 1650846529521,
+ "drop_pct": 0,
+ "total_tx_pps": 5912020,
+ "tx_pps": 5948604,
+ "tx_pkts": 59120203,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 6940038.0,
+ "rx_pkts": 68978427,
+ "time_ms": 1650846542024,
+ "drop_pct": 0,
+ "total_tx_pps": 6897842,
+ "tx_pps": 6940038,
+ "tx_pkts": 68978427,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 7435754.0,
+ "rx_pkts": 73900245,
+ "time_ms": 1650846554547,
+ "drop_pct": 0,
+ "total_tx_pps": 7390024,
+ "tx_pps": 7435754,
+ "tx_pkts": 73900245,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 7620933.009913207,
+ "rx_pkts": 75507422,
+ "time_ms": 1650846567096,
+ "drop_pct": 621017,
+ "total_tx_pps": 7612843,
+ "tx_pps": 7683612,
+ "tx_pkts": 76128439,
+ "drop_percentage": 0.8157490264577736
+ },
+ {
+ "rx_pps": 7559684.0,
+ "rx_pkts": 75135702,
+ "time_ms": 1650846579608,
+ "drop_pct": 0,
+ "total_tx_pps": 7513570,
+ "tx_pps": 7559684,
+ "tx_pkts": 75135702,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 7596700.373851032,
+ "rx_pkts": 75499812,
+ "time_ms": 1650846592122,
+ "drop_pct": 247942,
+ "total_tx_pps": 7574775,
+ "tx_pps": 7621648,
+ "tx_pkts": 75747754,
+ "drop_percentage": 0.32732587688342546
+ },
+ {
+ "rx_pps": 7590339.524822134,
+ "rx_pkts": 75444179,
+ "time_ms": 1650846604621,
+ "drop_pct": 3245,
+ "total_tx_pps": 7544742,
+ "tx_pps": 7590666,
+ "tx_pkts": 75447424,
+ "drop_percentage": 0.004301008341915027
+ },
+ {
+ "rx_pps": 7575174.0,
+ "rx_pkts": 75293443,
+ "time_ms": 1650846617119,
+ "drop_pct": 0,
+ "total_tx_pps": 7529344,
+ "tx_pps": 7575174,
+ "tx_pkts": 75293443,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 7582920.0,
+ "rx_pkts": 75370436,
+ "time_ms": 1650846629618,
+ "drop_pct": 0,
+ "total_tx_pps": 7537043,
+ "tx_pps": 7582920,
+ "tx_pkts": 75370436,
+ "ndr_pps": 3791460,
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "88728d9ee6f543e1b8290c2e6e6e0d11"
+ },
+ "synthesis": {
+ "avg_delay_usec": 45.9999497150315,
+ "total_tx_rate": 7537043
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "1024"
+ ],
+ "duration_sec": "10",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 00:32:54",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "bf2b37b1fdf341adb7ee11f081d946e2",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1024"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_128-rate_ndr-1.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1024"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_128-rate_ndr-1.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1024": {
+ "ndr": {
+ "load_percent_per_direction": 95.8984375,
+ "timestamp_sec": 1650846914.7221012,
+ "stats": {
+ "total_tx_rate": 5712627,
+ "overall": {
+ "rx_pkts": 57126277,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 102,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 57126277,
+ "avg_delay_usec": 49.5002764139522,
+ "min_delay_usec": 8,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 28561703,
+ "min_delay_usec": 8,
+ "drop_pct": 0,
+ "max_delay_usec": 102,
+ "tx_pkts": 28564574,
+ "avg_delay_usec": 44,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 28564574,
+ "min_delay_usec": 8,
+ "drop_pct": 0,
+ "max_delay_usec": 94,
+ "tx_pkts": 28561703,
+ "avg_delay_usec": 55,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 47711860704.0,
+ "theoretical_tx_rate_pps": 5986590.038314176
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 191.796875,
+ "duration_sec": 10.0,
+ "l2frame_size": "1024",
+ "rate_pps": 5741046,
+ "rate_bps": 47949218750.0,
+ "time_taken_sec": 137.80328631401062
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 5905471.915950395,
+ "rx_pkts": 57662777,
+ "time_ms": 1650846789487,
+ "drop_pct": 792061,
+ "total_tx_pps": 5845483,
+ "tx_pps": 5986590,
+ "tx_pkts": 58454838,
+ "drop_percentage": 1.3549964846365667
+ },
+ {
+ "rx_pps": 2993294.0,
+ "rx_pkts": 29748854,
+ "time_ms": 1650846802027,
+ "drop_pct": 0,
+ "total_tx_pps": 2974885,
+ "tx_pps": 2993294,
+ "tx_pkts": 29748854,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 4489942.0,
+ "rx_pkts": 44627778,
+ "time_ms": 1650846814534,
+ "drop_pct": 0,
+ "total_tx_pps": 4462777,
+ "tx_pps": 4489942,
+ "tx_pkts": 44627778,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 5238266.0,
+ "rx_pkts": 52060508,
+ "time_ms": 1650846827044,
+ "drop_pct": 0,
+ "total_tx_pps": 5206050,
+ "tx_pps": 5238266,
+ "tx_pkts": 52060508,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 5612428.0,
+ "rx_pkts": 55779118,
+ "time_ms": 1650846839558,
+ "drop_pct": 0,
+ "total_tx_pps": 5577911,
+ "tx_pps": 5612428,
+ "tx_pkts": 55779118,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 5751078.058987604,
+ "rx_pkts": 57157093,
+ "time_ms": 1650846852099,
+ "drop_pct": 481321,
+ "total_tx_pps": 5763841,
+ "tx_pps": 5799508,
+ "tx_pkts": 57638414,
+ "drop_percentage": 0.8350698199294658
+ },
+ {
+ "rx_pps": 5705968.0,
+ "rx_pkts": 56714474,
+ "time_ms": 1650846864604,
+ "drop_pct": 0,
+ "total_tx_pps": 5671447,
+ "tx_pps": 5705968,
+ "tx_pkts": 56714474,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 5750757.520096343,
+ "rx_pkts": 57153905,
+ "time_ms": 1650846877117,
+ "drop_pct": 19683,
+ "total_tx_pps": 5717358,
+ "tx_pps": 5752738,
+ "tx_pkts": 57173588,
+ "drop_percentage": 0.03442673564583702
+ },
+ {
+ "rx_pps": 5729352.0,
+ "rx_pkts": 56941164,
+ "time_ms": 1650846889640,
+ "drop_pct": 0,
+ "total_tx_pps": 5694116,
+ "tx_pps": 5729352,
+ "tx_pkts": 56941164,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 5741046.0,
+ "rx_pkts": 57126277,
+ "time_ms": 1650846902209,
+ "drop_pct": 0,
+ "total_tx_pps": 5712627,
+ "tx_pps": 5741046,
+ "tx_pkts": 57126277,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 5746066.120913432,
+ "rx_pkts": 57107283,
+ "time_ms": 1650846914721,
+ "drop_pct": 8208,
+ "total_tx_pps": 5711549,
+ "tx_pps": 5746892,
+ "tx_pkts": 57115491,
+ "ndr_pps": 2870523,
+ "drop_percentage": 0.014370882323326258
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "bf2b37b1fdf341adb7ee11f081d946e2"
+ },
+ "synthesis": {
+ "avg_delay_usec": 49.5002764139522,
+ "total_tx_rate": 5712627
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "1280"
+ ],
+ "duration_sec": "10",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 00:40:01",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "efd7195831c840da8ce6081eb537d3bb",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1280"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_128-rate_ndr-1.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1280"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_128-rate_ndr-1.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1280": {
+ "ndr": {
+ "load_percent_per_direction": 96.09375,
+ "timestamp_sec": 1650847342.0063174,
+ "stats": {
+ "total_tx_rate": 4591939,
+ "overall": {
+ "rx_pkts": 45919398,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 114,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 45919398,
+ "avg_delay_usec": 76.50007539297445,
+ "min_delay_usec": 7,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 22958545,
+ "min_delay_usec": 8,
+ "drop_pct": 0,
+ "max_delay_usec": 0,
+ "tx_pkts": 22960853,
+ "avg_delay_usec": 75,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 22960853,
+ "min_delay_usec": 7,
+ "drop_pct": 0,
+ "max_delay_usec": 114,
+ "tx_pkts": 22958545,
+ "avg_delay_usec": 78,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 47756165600.0,
+ "theoretical_tx_rate_pps": 4807692.307692308
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 192.1875,
+ "duration_sec": 10.0,
+ "l2frame_size": "1280",
+ "rate_pps": 4619890,
+ "rate_bps": 48046875000.0,
+ "time_taken_sec": 137.62104272842407
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 4726361.303264256,
+ "rx_pkts": 46391573,
+ "time_ms": 1650847216874,
+ "drop_pct": 798301,
+ "total_tx_pps": 4718987,
+ "tx_pps": 4807692,
+ "tx_pkts": 47189874,
+ "drop_percentage": 1.6916786003709186
+ },
+ {
+ "rx_pps": 2403846.0,
+ "rx_pkts": 23890625,
+ "time_ms": 1650847229398,
+ "drop_pct": 0,
+ "total_tx_pps": 2389062,
+ "tx_pps": 2403846,
+ "tx_pkts": 23890625,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 3605768.0,
+ "rx_pkts": 35835928,
+ "time_ms": 1650847241898,
+ "drop_pct": 0,
+ "total_tx_pps": 3583592,
+ "tx_pps": 3605768,
+ "tx_pkts": 35835928,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 4206730.0,
+ "rx_pkts": 41812793,
+ "time_ms": 1650847254402,
+ "drop_pct": 0,
+ "total_tx_pps": 4181279,
+ "tx_pps": 4206730,
+ "tx_pkts": 41812793,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 4507210.0,
+ "rx_pkts": 44794910,
+ "time_ms": 1650847266925,
+ "drop_pct": 0,
+ "total_tx_pps": 4479491,
+ "tx_pps": 4507210,
+ "tx_pkts": 44794910,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 4626551.174328503,
+ "rx_pkts": 45980982,
+ "time_ms": 1650847279421,
+ "drop_pct": 307088,
+ "total_tx_pps": 4628807,
+ "tx_pps": 4657450,
+ "tx_pkts": 46288070,
+ "drop_percentage": 0.663427963187923
+ },
+ {
+ "rx_pps": 4582330.0,
+ "rx_pkts": 45541488,
+ "time_ms": 1650847291945,
+ "drop_pct": 0,
+ "total_tx_pps": 4554148,
+ "tx_pps": 4582330,
+ "tx_pkts": 45541488,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 4619890.0,
+ "rx_pkts": 45919398,
+ "time_ms": 1650847304448,
+ "drop_pct": 0,
+ "total_tx_pps": 4591939,
+ "tx_pps": 4619890,
+ "tx_pkts": 45919398,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 4626459.929477386,
+ "rx_pkts": 45984700,
+ "time_ms": 1650847316968,
+ "drop_pct": 121362,
+ "total_tx_pps": 4610606,
+ "tx_pps": 4638670,
+ "tx_pkts": 46106062,
+ "drop_percentage": 0.26322352145364314
+ },
+ {
+ "rx_pps": 4626470.421255804,
+ "rx_pkts": 45980179,
+ "time_ms": 1650847329472,
+ "drop_pct": 27923,
+ "total_tx_pps": 4600810,
+ "tx_pps": 4629280,
+ "tx_pkts": 46008102,
+ "drop_percentage": 0.060691484295526905
+ },
+ {
+ "rx_pps": 4624386.171056487,
+ "rx_pkts": 45959463,
+ "time_ms": 1650847342005,
+ "drop_pct": 1986,
+ "total_tx_pps": 4596144,
+ "tx_pps": 4624586,
+ "tx_pkts": 45961449,
+ "ndr_pps": 2309945,
+ "drop_percentage": 0.00432101259470736
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "efd7195831c840da8ce6081eb537d3bb"
+ },
+ "synthesis": {
+ "avg_delay_usec": 76.50007539297445,
+ "total_tx_rate": 4591939
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "1518"
+ ],
+ "duration_sec": "10",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 00:44:46",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "779e1d4206d7447fac094ddc44eb2c29",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1518"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_128-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1518"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_128-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1518": {
+ "ndr": {
+ "load_percent_per_direction": 95.99609375,
+ "timestamp_sec": 1650847627.0343828,
+ "stats": {
+ "total_tx_rate": 3877409,
+ "overall": {
+ "rx_pkts": 38774090,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 127,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 38774090,
+ "avg_delay_usec": 90.0,
+ "min_delay_usec": 7,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 19386070,
+ "min_delay_usec": 8,
+ "drop_pct": 0,
+ "max_delay_usec": 122,
+ "tx_pkts": 19388020,
+ "avg_delay_usec": 90,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 19388020,
+ "min_delay_usec": 7,
+ "drop_pct": 0,
+ "max_delay_usec": 127,
+ "tx_pkts": 19386070,
+ "avg_delay_usec": 90,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 47707640336.0,
+ "theoretical_tx_rate_pps": 4063719.1157347206
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 191.9921875,
+ "duration_sec": 10.0,
+ "l2frame_size": "1518",
+ "rate_pps": 3901010,
+ "rate_bps": 47998046874.0,
+ "time_taken_sec": 137.63707971572876
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 3982058.717650659,
+ "rx_pkts": 39160327,
+ "time_ms": 1650847501905,
+ "drop_pct": 803053,
+ "total_tx_pps": 3996338,
+ "tx_pps": 4063718,
+ "tx_pkts": 39963380,
+ "drop_percentage": 2.0094721717732584
+ },
+ {
+ "rx_pps": 2031858.0,
+ "rx_pkts": 20193623,
+ "time_ms": 1650847514427,
+ "drop_pct": 0,
+ "total_tx_pps": 2019362,
+ "tx_pps": 2031858,
+ "tx_pkts": 20193623,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 3047788.0,
+ "rx_pkts": 30291967,
+ "time_ms": 1650847526954,
+ "drop_pct": 0,
+ "total_tx_pps": 3029196,
+ "tx_pps": 3047788,
+ "tx_pkts": 30291967,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 3555754.0,
+ "rx_pkts": 35338865,
+ "time_ms": 1650847539460,
+ "drop_pct": 0,
+ "total_tx_pps": 3533886,
+ "tx_pps": 3555754,
+ "tx_pkts": 35338865,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 3809736.0,
+ "rx_pkts": 37920208,
+ "time_ms": 1650847551974,
+ "drop_pct": 0,
+ "total_tx_pps": 3792020,
+ "tx_pps": 3809736,
+ "tx_pkts": 37920208,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 3905724.3403039556,
+ "rx_pkts": 38817042,
+ "time_ms": 1650847564492,
+ "drop_pct": 308110,
+ "total_tx_pps": 3912515,
+ "tx_pps": 3936726,
+ "tx_pkts": 39125152,
+ "drop_percentage": 0.787498538024849
+ },
+ {
+ "rx_pps": 3873232.0,
+ "rx_pkts": 38494117,
+ "time_ms": 1650847576998,
+ "drop_pct": 0,
+ "total_tx_pps": 3849411,
+ "tx_pps": 3873232,
+ "tx_pkts": 38494117,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 3904613.646950039,
+ "rx_pkts": 38806005,
+ "time_ms": 1650847589503,
+ "drop_pct": 3641,
+ "total_tx_pps": 3880964,
+ "tx_pps": 3904980,
+ "tx_pkts": 38809646,
+ "drop_percentage": 0.009381688253482137
+ },
+ {
+ "rx_pps": 3889106.0,
+ "rx_pkts": 38651881,
+ "time_ms": 1650847602006,
+ "drop_pct": 0,
+ "total_tx_pps": 3865188,
+ "tx_pps": 3889106,
+ "tx_pkts": 38651881,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 3897042.0,
+ "rx_pkts": 38730754,
+ "time_ms": 1650847614533,
+ "drop_pct": 0,
+ "total_tx_pps": 3873075,
+ "tx_pps": 3897042,
+ "tx_pkts": 38730754,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 3901010.0,
+ "rx_pkts": 38774090,
+ "time_ms": 1650847627033,
+ "drop_pct": 0,
+ "total_tx_pps": 3877409,
+ "tx_pps": 3901010,
+ "tx_pkts": 38774090,
+ "ndr_pps": 1950505,
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "779e1d4206d7447fac094ddc44eb2c29"
+ },
+ "synthesis": {
+ "avg_delay_usec": 90.0,
+ "total_tx_rate": 3877409
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "IMIX"
+ ],
+ "duration_sec": "10",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 00:51:54",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "b4b97675381e45d68bdac84b0319071d",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "IMIX"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_128-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "IMIX"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_128-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "warning": "WARNING: There is a significant difference between requested TX rate (16368398) and actual TX rate (14161735). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "IMIX": {
+ "ndr": {
+ "load_percent_per_direction": 100.0,
+ "timestamp_sec": 1650847929.3742573,
+ "stats": {
+ "total_tx_rate": 14161735,
+ "overall": {
+ "rx_pkts": 141617354,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 626,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 141617354,
+ "avg_delay_usec": 338.5356628538618,
+ "min_delay_usec": 7,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 70907706,
+ "min_delay_usec": 7,
+ "drop_pct": 0,
+ "max_delay_usec": 626,
+ "tx_pkts": 70709648,
+ "avg_delay_usec": 364,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 70709648,
+ "min_delay_usec": 7,
+ "drop_pct": 0,
+ "max_delay_usec": 613,
+ "tx_pkts": 70907706,
+ "avg_delay_usec": 313,
+ "drop_percentage": 0.0
+ },
+ "warning": "WARNING: There is a significant difference between requested TX rate (16368398) and actual TX rate (14161735). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 43259379846.666664,
+ "theoretical_tx_rate_pps": 16368398.079441292
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 200.0,
+ "duration_sec": 10.0,
+ "l2frame_size": "IMIX",
+ "rate_pps": 16368398,
+ "rate_bps": 50000000000.0,
+ "time_taken_sec": 12.501379013061523
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 16368398.0,
+ "rx_pkts": 141617354,
+ "time_ms": 1650847929373,
+ "drop_pct": 0,
+ "total_tx_pps": 14161735,
+ "tx_pps": 16368398,
+ "tx_pkts": 141617354,
+ "ndr_pps": 8184199,
+ "warning": "WARNING: There is a significant difference between requested TX rate (16368398) and actual TX rate (14161735). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "b4b97675381e45d68bdac84b0319071d"
+ },
+ "synthesis": {
+ "avg_delay_usec": 338.5356628538618,
+ "total_tx_rate": 14161735
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "9000"
+ ],
+ "duration_sec": "10",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 00:52:42",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "963406d7c07b4253af12344ca0127fe4",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "9000"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_128-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "9000"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_128-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "9000": {
+ "ndr": {
+ "load_percent_per_direction": 95.99609375,
+ "timestamp_sec": 1650848102.789528,
+ "stats": {
+ "total_tx_rate": 661069,
+ "overall": {
+ "rx_pkts": 6610694,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 546,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 6610694,
+ "avg_delay_usec": 477.49957311592397,
+ "min_delay_usec": 15,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 3305181,
+ "min_delay_usec": 15,
+ "drop_pct": 0,
+ "max_delay_usec": 546,
+ "tx_pkts": 3305513,
+ "avg_delay_usec": 486,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 3305513,
+ "min_delay_usec": 16,
+ "drop_pct": 0,
+ "max_delay_usec": 524,
+ "tx_pkts": 3305181,
+ "avg_delay_usec": 469,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 47702739040.0,
+ "theoretical_tx_rate_pps": 692904.6563192905
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 191.9921875,
+ "duration_sec": 10.0,
+ "l2frame_size": "9000",
+ "rate_pps": 665160,
+ "rate_bps": 47998046874.0,
+ "time_taken_sec": 137.69506430625916
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 668576.9554345435,
+ "rx_pkts": 6669405,
+ "time_ms": 1650847977603,
+ "drop_pct": 242675,
+ "total_tx_pps": 691208,
+ "tx_pps": 692904,
+ "tx_pkts": 6912080,
+ "drop_percentage": 3.510882397194477
+ },
+ {
+ "rx_pps": 346452.0,
+ "rx_pkts": 3443214,
+ "time_ms": 1650847990100,
+ "drop_pct": 0,
+ "total_tx_pps": 344321,
+ "tx_pps": 346452,
+ "tx_pkts": 3443214,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 519678.0,
+ "rx_pkts": 5164820,
+ "time_ms": 1650848002628,
+ "drop_pct": 0,
+ "total_tx_pps": 516482,
+ "tx_pps": 519678,
+ "tx_pkts": 5164820,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 606290.0,
+ "rx_pkts": 6025615,
+ "time_ms": 1650848015147,
+ "drop_pct": 0,
+ "total_tx_pps": 602561,
+ "tx_pps": 606290,
+ "tx_pkts": 6025615,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 649598.0,
+ "rx_pkts": 6456031,
+ "time_ms": 1650848027664,
+ "drop_pct": 0,
+ "total_tx_pps": 645603,
+ "tx_pps": 649598,
+ "tx_pkts": 6456031,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 665820.941861537,
+ "rx_pkts": 6616931,
+ "time_ms": 1650848040183,
+ "drop_pct": 53954,
+ "total_tx_pps": 667088,
+ "tx_pps": 671250,
+ "tx_pkts": 6670885,
+ "drop_percentage": 0.808798232918121
+ },
+ {
+ "rx_pps": 660424.0,
+ "rx_pkts": 6563956,
+ "time_ms": 1650848052688,
+ "drop_pct": 0,
+ "total_tx_pps": 656395,
+ "tx_pps": 660424,
+ "tx_pkts": 6563956,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 665769.8810895403,
+ "rx_pkts": 6616756,
+ "time_ms": 1650848065187,
+ "drop_pct": 677,
+ "total_tx_pps": 661743,
+ "tx_pps": 665838,
+ "tx_pkts": 6617433,
+ "drop_percentage": 0.010230553146514668
+ },
+ {
+ "rx_pps": 663130.0,
+ "rx_pkts": 6590521,
+ "time_ms": 1650848077706,
+ "drop_pct": 0,
+ "total_tx_pps": 659052,
+ "tx_pps": 663130,
+ "tx_pkts": 6590521,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 664484.0,
+ "rx_pkts": 6604642,
+ "time_ms": 1650848090288,
+ "drop_pct": 0,
+ "total_tx_pps": 660464,
+ "tx_pps": 664484,
+ "tx_pkts": 6604642,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 665160.0,
+ "rx_pkts": 6610694,
+ "time_ms": 1650848102788,
+ "drop_pct": 0,
+ "total_tx_pps": 661069,
+ "tx_pps": 665160,
+ "tx_pkts": 6610694,
+ "ndr_pps": 332580,
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "963406d7c07b4253af12344ca0127fe4"
+ },
+ "synthesis": {
+ "avg_delay_usec": 477.49957311592397,
+ "total_tx_rate": 661069
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "64"
+ ],
+ "duration_sec": "10",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 00:59:49",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "ddbeeb16db0b4920bd33f409fee876fe",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "64"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_10k-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "64"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_10k-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "warning": "WARNING: There is a significant difference between requested TX rate (74404760) and actual TX rate (16548126). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "64": {
+ "ndr": {
+ "load_percent_per_direction": 100.0,
+ "timestamp_sec": 1650848407.2528977,
+ "stats": {
+ "total_tx_rate": 16548126,
+ "overall": {
+ "rx_pkts": 165481260,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 97,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 165481260,
+ "avg_delay_usec": 62.48000978479376,
+ "min_delay_usec": 5,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 82995092,
+ "min_delay_usec": 7,
+ "drop_pct": 0,
+ "max_delay_usec": 97,
+ "tx_pkts": 82486168,
+ "avg_delay_usec": 56,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 82486168,
+ "min_delay_usec": 5,
+ "drop_pct": 0,
+ "max_delay_usec": 92,
+ "tx_pkts": 82995092,
+ "avg_delay_usec": 69,
+ "drop_percentage": 0.0
+ },
+ "warning": "WARNING: There is a significant difference between requested TX rate (74404760) and actual TX rate (16548126). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 11120340672.0,
+ "theoretical_tx_rate_pps": 74404761.90476191
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 200.0,
+ "duration_sec": 10.0,
+ "l2frame_size": "64",
+ "rate_pps": 74404760,
+ "rate_bps": 50000000000.0,
+ "time_taken_sec": 12.518044471740723
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 74404760.0,
+ "rx_pkts": 165481260,
+ "time_ms": 1650848407252,
+ "drop_pct": 0,
+ "total_tx_pps": 16548126,
+ "tx_pps": 74404760,
+ "tx_pkts": 165481260,
+ "ndr_pps": 37202380,
+ "warning": "WARNING: There is a significant difference between requested TX rate (74404760) and actual TX rate (16548126). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "ddbeeb16db0b4920bd33f409fee876fe"
+ },
+ "synthesis": {
+ "avg_delay_usec": 62.48000978479376,
+ "total_tx_rate": 16548126
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "128"
+ ],
+ "duration_sec": "10",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 01:00:44",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "a82a876e3fc54fa087802fe4f8d84f1b",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "128"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_10k-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "128"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_10k-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "128": {
+ "ndr": {
+ "load_percent_per_direction": 100.0,
+ "timestamp_sec": 1650848461.466436,
+ "stats": {
+ "total_tx_rate": 18007502,
+ "overall": {
+ "rx_pkts": 180075026,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 59,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 180075026,
+ "avg_delay_usec": 35.99551240381329,
+ "min_delay_usec": 5,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 90172197,
+ "min_delay_usec": 6,
+ "drop_pct": 0,
+ "max_delay_usec": 59,
+ "tx_pkts": 89902829,
+ "avg_delay_usec": 33,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 89902829,
+ "min_delay_usec": 5,
+ "drop_pct": 0,
+ "max_delay_usec": 58,
+ "tx_pkts": 90172197,
+ "avg_delay_usec": 39,
+ "drop_percentage": 0.0
+ },
+ "warning": "WARNING: There is a significant difference between requested TX rate (42229728) and actual TX rate (18007502). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 21320882368.0,
+ "theoretical_tx_rate_pps": 42229729.72972973
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 200.0,
+ "duration_sec": 10.0,
+ "l2frame_size": "128",
+ "rate_pps": 42229728,
+ "rate_bps": 50000000000.0,
+ "time_taken_sec": 12.491197109222412
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 42229728.0,
+ "rx_pkts": 180075026,
+ "time_ms": 1650848461465,
+ "drop_pct": 0,
+ "total_tx_pps": 18007502,
+ "tx_pps": 42229728,
+ "tx_pkts": 180075026,
+ "ndr_pps": 21114864,
+ "warning": "WARNING: There is a significant difference between requested TX rate (42229728) and actual TX rate (18007502). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ },
+ "warning": "WARNING: There is a significant difference between requested TX rate (42229728) and actual TX rate (18007502). The traffic generator may not have sufficient CPU to achieve the requested TX rate."
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "a82a876e3fc54fa087802fe4f8d84f1b"
+ },
+ "synthesis": {
+ "avg_delay_usec": 35.99551240381329,
+ "total_tx_rate": 18007502
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "256"
+ ],
+ "duration_sec": "10",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 01:01:38",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "cf10f85f2df3470fb233184b92aea608",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "256"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_10k-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "256"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_10k-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "warning": "WARNING: There is a significant difference between requested TX rate (22644926) and actual TX rate (15836292). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "256": {
+ "ndr": {
+ "load_percent_per_direction": 100.0,
+ "timestamp_sec": 1650848515.7108045,
+ "stats": {
+ "total_tx_rate": 15836292,
+ "overall": {
+ "rx_pkts": 158362920,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 52,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 158362920,
+ "avg_delay_usec": 30.001019203232676,
+ "min_delay_usec": 7,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 79262162,
+ "min_delay_usec": 7,
+ "drop_pct": 0,
+ "max_delay_usec": 52,
+ "tx_pkts": 79100758,
+ "avg_delay_usec": 31,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 79100758,
+ "min_delay_usec": 7,
+ "drop_pct": 0,
+ "max_delay_usec": 48,
+ "tx_pkts": 79262162,
+ "avg_delay_usec": 29,
+ "drop_percentage": 0.0
+ },
+ "warning": "WARNING: There is a significant difference between requested TX rate (22644926) and actual TX rate (15836292). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 34966532736.0,
+ "theoretical_tx_rate_pps": 22644927.536231883
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 200.0,
+ "duration_sec": 10.0,
+ "l2frame_size": "256",
+ "rate_pps": 22644926,
+ "rate_bps": 50000000000.0,
+ "time_taken_sec": 12.50765085220337
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 22644926.0,
+ "rx_pkts": 158362920,
+ "time_ms": 1650848515710,
+ "drop_pct": 0,
+ "total_tx_pps": 15836292,
+ "tx_pps": 22644926,
+ "tx_pkts": 158362920,
+ "ndr_pps": 11322463,
+ "warning": "WARNING: There is a significant difference between requested TX rate (22644926) and actual TX rate (15836292). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "cf10f85f2df3470fb233184b92aea608"
+ },
+ "synthesis": {
+ "avg_delay_usec": 30.001019203232676,
+ "total_tx_rate": 15836292
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "512"
+ ],
+ "duration_sec": "10",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 01:02:32",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "d1967af0759441ed88139b68c43d44e4",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "512"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_10k-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "512"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_10k-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "512": {
+ "ndr": {
+ "load_percent_per_direction": 100.0,
+ "timestamp_sec": 1650848569.8980005,
+ "stats": {
+ "total_tx_rate": 11105755,
+ "overall": {
+ "rx_pkts": 111057559,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 681,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 111057559,
+ "avg_delay_usec": 237.93781095080615,
+ "min_delay_usec": 11,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 55569890,
+ "min_delay_usec": 22,
+ "drop_pct": 0,
+ "max_delay_usec": 670,
+ "tx_pkts": 55487669,
+ "avg_delay_usec": 154,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 55487669,
+ "min_delay_usec": 11,
+ "drop_pct": 0,
+ "max_delay_usec": 681,
+ "tx_pkts": 55569890,
+ "avg_delay_usec": 322,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 47266093280.0,
+ "theoretical_tx_rate_pps": 11748120.30075188
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 200.0,
+ "duration_sec": 10.0,
+ "l2frame_size": "512",
+ "rate_pps": 11748120,
+ "rate_bps": 50000000000.0,
+ "time_taken_sec": 12.489594459533691
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 11748120.0,
+ "rx_pkts": 111057559,
+ "time_ms": 1650848569897,
+ "drop_pct": 0,
+ "total_tx_pps": 11105755,
+ "tx_pps": 11748120,
+ "tx_pkts": 111057559,
+ "ndr_pps": 5874060,
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "d1967af0759441ed88139b68c43d44e4"
+ },
+ "synthesis": {
+ "avg_delay_usec": 237.93781095080615,
+ "total_tx_rate": 11105755
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "768"
+ ],
+ "duration_sec": "10",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 01:05:33",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "18d99ccb52d7454da33eba941f8a8819",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "768"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_10k-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "768"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_10k-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "768": {
+ "ndr": {
+ "load_percent_per_direction": 95.60546875,
+ "timestamp_sec": 1650848875.7264826,
+ "stats": {
+ "total_tx_rate": 7537043,
+ "overall": {
+ "rx_pkts": 75370436,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 80,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 75370436,
+ "avg_delay_usec": 47.499673147704755,
+ "min_delay_usec": 10,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 37683323,
+ "min_delay_usec": 10,
+ "drop_pct": 0,
+ "max_delay_usec": 80,
+ "tx_pkts": 37687113,
+ "avg_delay_usec": 54,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 37687113,
+ "min_delay_usec": 12,
+ "drop_pct": 0,
+ "max_delay_usec": 79,
+ "tx_pkts": 37683323,
+ "avg_delay_usec": 41,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 47513519072.0,
+ "theoretical_tx_rate_pps": 7931472.081218274
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 191.2109375,
+ "duration_sec": 10.0,
+ "l2frame_size": "768",
+ "rate_pps": 7582920,
+ "rate_bps": 47802734374.0,
+ "time_taken_sec": 137.65466976165771
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 7867109.536873953,
+ "rx_pkts": 75914335,
+ "time_ms": 1650848750578,
+ "drop_pct": 621071,
+ "total_tx_pps": 7653540,
+ "tx_pps": 7931472,
+ "tx_pkts": 76535406,
+ "drop_percentage": 0.8114819434027697
+ },
+ {
+ "rx_pps": 3965736.0,
+ "rx_pkts": 39453125,
+ "time_ms": 1650848763085,
+ "drop_pct": 0,
+ "total_tx_pps": 3945312,
+ "tx_pps": 3965736,
+ "tx_pkts": 39453125,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 5948604.0,
+ "rx_pkts": 59120202,
+ "time_ms": 1650848775586,
+ "drop_pct": 0,
+ "total_tx_pps": 5912020,
+ "tx_pps": 5948604,
+ "tx_pkts": 59120202,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 6940038.0,
+ "rx_pkts": 68973579,
+ "time_ms": 1650848788099,
+ "drop_pct": 0,
+ "total_tx_pps": 6897357,
+ "tx_pps": 6940038,
+ "tx_pkts": 68973579,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 7435754.0,
+ "rx_pkts": 73900239,
+ "time_ms": 1650848800633,
+ "drop_pct": 0,
+ "total_tx_pps": 7390023,
+ "tx_pps": 7435754,
+ "tx_pkts": 73900239,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 7620916.349942744,
+ "rx_pkts": 75507249,
+ "time_ms": 1650848813170,
+ "drop_pct": 621182,
+ "total_tx_pps": 7612843,
+ "tx_pps": 7683612,
+ "tx_pkts": 76128431,
+ "drop_percentage": 0.8159658511811442
+ },
+ {
+ "rx_pps": 7559684.0,
+ "rx_pkts": 75131929,
+ "time_ms": 1650848825666,
+ "drop_pct": 0,
+ "total_tx_pps": 7513192,
+ "tx_pps": 7559684,
+ "tx_pkts": 75131929,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 7596717.342100184,
+ "rx_pkts": 75644305,
+ "time_ms": 1650848838182,
+ "drop_pct": 248247,
+ "total_tx_pps": 7589255,
+ "tx_pps": 7621648,
+ "tx_pkts": 75892552,
+ "drop_percentage": 0.3271032445977044
+ },
+ {
+ "rx_pps": 7590338.485813464,
+ "rx_pkts": 75436585,
+ "time_ms": 1650848850710,
+ "drop_pct": 3255,
+ "total_tx_pps": 7543984,
+ "tx_pps": 7590666,
+ "tx_pkts": 75439840,
+ "drop_percentage": 0.004314696319610434
+ },
+ {
+ "rx_pps": 7575174.0,
+ "rx_pkts": 75285867,
+ "time_ms": 1650848863217,
+ "drop_pct": 0,
+ "total_tx_pps": 7528586,
+ "tx_pps": 7575174,
+ "tx_pkts": 75285867,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 7582920.0,
+ "rx_pkts": 75370436,
+ "time_ms": 1650848875725,
+ "drop_pct": 0,
+ "total_tx_pps": 7537043,
+ "tx_pps": 7582920,
+ "tx_pkts": 75370436,
+ "ndr_pps": 3791460,
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "18d99ccb52d7454da33eba941f8a8819"
+ },
+ "synthesis": {
+ "avg_delay_usec": 47.499673147704755,
+ "total_tx_rate": 7537043
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "1024"
+ ],
+ "duration_sec": "10",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 01:17:35",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "f980c04f3b844edebf749e967b297a62",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1024"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_10k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1024"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_10k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1024": {
+ "ndr": {
+ "load_percent_per_direction": 95.8984375,
+ "timestamp_sec": 1650849598.2220418,
+ "stats": {
+ "total_tx_rate": 5706312,
+ "overall": {
+ "rx_pkts": 57062671,
+ "drop_percentage": 0.0007973625559875567,
+ "drop_pct": 455,
+ "max_delay_usec": 96,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 57063126,
+ "avg_delay_usec": 51.4996825858362,
+ "min_delay_usec": 9,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 28530128,
+ "min_delay_usec": 9,
+ "drop_pct": 0,
+ "max_delay_usec": 96,
+ "tx_pkts": 28532998,
+ "avg_delay_usec": 59,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 28532543,
+ "min_delay_usec": 11,
+ "drop_pct": 455,
+ "max_delay_usec": 89,
+ "tx_pkts": 28530128,
+ "avg_delay_usec": 44,
+ "drop_percentage": 0.0015948053229904893
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 47659117824.0,
+ "theoretical_tx_rate_pps": 5986590.038314176
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 191.796875,
+ "duration_sec": 10.0,
+ "l2frame_size": "1024",
+ "rate_pps": 5741046,
+ "rate_bps": 47949218750.0,
+ "time_taken_sec": 137.68057537078857
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 5905784.604263414,
+ "rx_pkts": 57472018,
+ "time_ms": 1650849473030,
+ "drop_pct": 786356,
+ "total_tx_pps": 5825837,
+ "tx_pps": 5986590,
+ "tx_pkts": 58258374,
+ "drop_percentage": 1.3497733390224727
+ },
+ {
+ "rx_pps": 2993294.0,
+ "rx_pkts": 29748857,
+ "time_ms": 1650849485555,
+ "drop_pct": 0,
+ "total_tx_pps": 2974885,
+ "tx_pps": 2993294,
+ "tx_pkts": 29748857,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 4489942.0,
+ "rx_pkts": 44627778,
+ "time_ms": 1650849498054,
+ "drop_pct": 0,
+ "total_tx_pps": 4462777,
+ "tx_pps": 4489942,
+ "tx_pkts": 44627778,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 5238266.0,
+ "rx_pkts": 52065746,
+ "time_ms": 1650849510553,
+ "drop_pct": 0,
+ "total_tx_pps": 5206574,
+ "tx_pps": 5238266,
+ "tx_pkts": 52065746,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 5612428.0,
+ "rx_pkts": 55779111,
+ "time_ms": 1650849523054,
+ "drop_pct": 0,
+ "total_tx_pps": 5577911,
+ "tx_pps": 5612428,
+ "tx_pkts": 55779111,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 5751042.570625828,
+ "rx_pkts": 57271760,
+ "time_ms": 1650849535577,
+ "drop_pct": 482643,
+ "total_tx_pps": 5775440,
+ "tx_pps": 5799508,
+ "tx_pkts": 57754403,
+ "drop_percentage": 0.8356817401436909
+ },
+ {
+ "rx_pps": 5705968.0,
+ "rx_pkts": 56708762,
+ "time_ms": 1650849548099,
+ "drop_pct": 0,
+ "total_tx_pps": 5670876,
+ "tx_pps": 5705968,
+ "tx_pkts": 56708762,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 5750684.6723701265,
+ "rx_pkts": 57153189,
+ "time_ms": 1650849560600,
+ "drop_pct": 20407,
+ "total_tx_pps": 5717359,
+ "tx_pps": 5752738,
+ "tx_pkts": 57173596,
+ "drop_percentage": 0.03569304963780833
+ },
+ {
+ "rx_pps": 5729352.0,
+ "rx_pkts": 56941171,
+ "time_ms": 1650849573113,
+ "drop_pct": 0,
+ "total_tx_pps": 5694117,
+ "tx_pps": 5729352,
+ "tx_pkts": 56941171,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 5741000.223048874,
+ "rx_pkts": 57062671,
+ "time_ms": 1650849585617,
+ "drop_pct": 455,
+ "total_tx_pps": 5706312,
+ "tx_pps": 5741046,
+ "tx_pkts": 57063126,
+ "drop_percentage": 0.0007973625559875567
+ },
+ {
+ "rx_pps": 5746113.109782579,
+ "rx_pkts": 57107742,
+ "time_ms": 1650849598221,
+ "drop_pct": 7741,
+ "total_tx_pps": 5711548,
+ "tx_pps": 5746892,
+ "tx_pkts": 57115483,
+ "ndr_pps": 2870523,
+ "drop_percentage": 0.013553242647006943
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "f980c04f3b844edebf749e967b297a62"
+ },
+ "synthesis": {
+ "avg_delay_usec": 51.4996825858362,
+ "total_tx_rate": 5706312
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "1280"
+ ],
+ "duration_sec": "10",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 01:20:00",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "a5da318377744c288afee82b6e83d7f4",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1280"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_10k-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1280"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_10k-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1280": {
+ "ndr": {
+ "load_percent_per_direction": 96.09375,
+ "timestamp_sec": 1650849742.814171,
+ "stats": {
+ "total_tx_rate": 4591478,
+ "overall": {
+ "rx_pkts": 45914783,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 113,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 45914783,
+ "avg_delay_usec": 76.0,
+ "min_delay_usec": 7,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 22956236,
+ "min_delay_usec": 7,
+ "drop_pct": 0,
+ "max_delay_usec": 113,
+ "tx_pkts": 22958547,
+ "avg_delay_usec": 76,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 22958547,
+ "min_delay_usec": 7,
+ "drop_pct": 0,
+ "max_delay_usec": 103,
+ "tx_pkts": 22956236,
+ "avg_delay_usec": 76,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 47751371200.0,
+ "theoretical_tx_rate_pps": 4807692.307692308
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 192.1875,
+ "duration_sec": 10.0,
+ "l2frame_size": "1280",
+ "rate_pps": 4619890,
+ "rate_bps": 48046875000.0,
+ "time_taken_sec": 137.75093936920166
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 4726682.774538362,
+ "rx_pkts": 46236280,
+ "time_ms": 1650849617552,
+ "drop_pct": 792430,
+ "total_tx_pps": 4702871,
+ "tx_pps": 4807692,
+ "tx_pkts": 47028710,
+ "drop_percentage": 1.6849919974415628
+ },
+ {
+ "rx_pps": 2403846.0,
+ "rx_pkts": 23888220,
+ "time_ms": 1650849630057,
+ "drop_pct": 0,
+ "total_tx_pps": 2388822,
+ "tx_pps": 2403846,
+ "tx_pkts": 23888220,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 3605768.0,
+ "rx_pkts": 35835928,
+ "time_ms": 1650849642637,
+ "drop_pct": 0,
+ "total_tx_pps": 3583592,
+ "tx_pps": 3605768,
+ "tx_pkts": 35835928,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 4206730.0,
+ "rx_pkts": 41808587,
+ "time_ms": 1650849655220,
+ "drop_pct": 0,
+ "total_tx_pps": 4180858,
+ "tx_pps": 4206730,
+ "tx_pkts": 41808587,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 4507210.0,
+ "rx_pkts": 44794909,
+ "time_ms": 1650849667733,
+ "drop_pct": 0,
+ "total_tx_pps": 4479490,
+ "tx_pps": 4507210,
+ "tx_pkts": 44794909,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 4626492.009806026,
+ "rx_pkts": 45980393,
+ "time_ms": 1650849680242,
+ "drop_pct": 307676,
+ "total_tx_pps": 4628806,
+ "tx_pps": 4657450,
+ "tx_pkts": 46288069,
+ "drop_percentage": 0.6646982832660399
+ },
+ {
+ "rx_pps": 4582330.0,
+ "rx_pkts": 45541488,
+ "time_ms": 1650849692745,
+ "drop_pct": 0,
+ "total_tx_pps": 4554148,
+ "tx_pps": 4582330,
+ "tx_pkts": 45541488,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 4619890.0,
+ "rx_pkts": 45914783,
+ "time_ms": 1650849705269,
+ "drop_pct": 0,
+ "total_tx_pps": 4591478,
+ "tx_pps": 4619890,
+ "tx_pkts": 45914783,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 4626391.745988317,
+ "rx_pkts": 46071925,
+ "time_ms": 1650849717790,
+ "drop_pct": 122273,
+ "total_tx_pps": 4619419,
+ "tx_pps": 4638670,
+ "tx_pkts": 46194198,
+ "drop_percentage": 0.2646934145279457
+ },
+ {
+ "rx_pps": 4626440.83932869,
+ "rx_pkts": 45979885,
+ "time_ms": 1650849730293,
+ "drop_pct": 28217,
+ "total_tx_pps": 4600810,
+ "tx_pps": 4629280,
+ "tx_pkts": 46008102,
+ "drop_percentage": 0.06133050217981172
+ },
+ {
+ "rx_pps": 4624386.070437684,
+ "rx_pkts": 45959462,
+ "time_ms": 1650849742813,
+ "drop_pct": 1987,
+ "total_tx_pps": 4596144,
+ "tx_pps": 4624586,
+ "tx_pkts": 45961449,
+ "ndr_pps": 2309945,
+ "drop_percentage": 0.004323188331159881
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "a5da318377744c288afee82b6e83d7f4"
+ },
+ "synthesis": {
+ "avg_delay_usec": 76.0,
+ "total_tx_rate": 4591478
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "1518"
+ ],
+ "duration_sec": "10",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 01:32:02",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "2a0a188162394858b0f91a93a609e85b",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1518"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_10k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1518"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_10k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1518": {
+ "ndr": {
+ "load_percent_per_direction": 95.99609375,
+ "timestamp_sec": 1650850465.3741472,
+ "stats": {
+ "total_tx_rate": 3877019,
+ "overall": {
+ "rx_pkts": 38770196,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 139,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 38770196,
+ "avg_delay_usec": 99.4996727383065,
+ "min_delay_usec": 8,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 19384122,
+ "min_delay_usec": 8,
+ "drop_pct": 0,
+ "max_delay_usec": 139,
+ "tx_pkts": 19386074,
+ "avg_delay_usec": 106,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 19386074,
+ "min_delay_usec": 12,
+ "drop_pct": 0,
+ "max_delay_usec": 139,
+ "tx_pkts": 19384122,
+ "avg_delay_usec": 93,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 47702841776.0,
+ "theoretical_tx_rate_pps": 4063719.1157347206
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 191.9921875,
+ "duration_sec": 10.0,
+ "l2frame_size": "1518",
+ "rate_pps": 3901010,
+ "rate_bps": 47998046874.0,
+ "time_taken_sec": 137.7311794757843
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 3982204.741901213,
+ "rx_pkts": 39030251,
+ "time_ms": 1650850340162,
+ "drop_pct": 798925,
+ "total_tx_pps": 3982917,
+ "tx_pps": 4063718,
+ "tx_pkts": 39829176,
+ "drop_percentage": 2.0058788060290276
+ },
+ {
+ "rx_pps": 2031858.0,
+ "rx_pkts": 20193624,
+ "time_ms": 1650850352678,
+ "drop_pct": 0,
+ "total_tx_pps": 2019362,
+ "tx_pps": 2031858,
+ "tx_pkts": 20193624,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 3047788.0,
+ "rx_pkts": 30308733,
+ "time_ms": 1650850365187,
+ "drop_pct": 0,
+ "total_tx_pps": 3030873,
+ "tx_pps": 3047788,
+ "tx_pkts": 30308733,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 3555754.0,
+ "rx_pkts": 35342421,
+ "time_ms": 1650850377693,
+ "drop_pct": 0,
+ "total_tx_pps": 3534242,
+ "tx_pps": 3555754,
+ "tx_pkts": 35342421,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 3809736.0,
+ "rx_pkts": 37863066,
+ "time_ms": 1650850390212,
+ "drop_pct": 0,
+ "total_tx_pps": 3786306,
+ "tx_pps": 3809736,
+ "tx_pkts": 37863066,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 3905550.3906702464,
+ "rx_pkts": 38819222,
+ "time_ms": 1650850402727,
+ "drop_pct": 309870,
+ "total_tx_pps": 3912909,
+ "tx_pps": 3936726,
+ "tx_pkts": 39129092,
+ "drop_percentage": 0.7919171750778168
+ },
+ {
+ "rx_pps": 3873232.0,
+ "rx_pkts": 38494120,
+ "time_ms": 1650850415300,
+ "drop_pct": 0,
+ "total_tx_pps": 3849412,
+ "tx_pps": 3873232,
+ "tx_pkts": 38494120,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 3904613.0432372405,
+ "rx_pkts": 38805999,
+ "time_ms": 1650850427820,
+ "drop_pct": 3647,
+ "total_tx_pps": 3880964,
+ "tx_pps": 3904980,
+ "tx_pkts": 38809646,
+ "drop_percentage": 0.009397148327506002
+ },
+ {
+ "rx_pps": 3889106.0,
+ "rx_pkts": 38799675,
+ "time_ms": 1650850440360,
+ "drop_pct": 0,
+ "total_tx_pps": 3879967,
+ "tx_pps": 3889106,
+ "tx_pkts": 38799675,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 3897042.0,
+ "rx_pkts": 38734654,
+ "time_ms": 1650850452876,
+ "drop_pct": 0,
+ "total_tx_pps": 3873465,
+ "tx_pps": 3897042,
+ "tx_pkts": 38734654,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 3901010.0,
+ "rx_pkts": 38770196,
+ "time_ms": 1650850465373,
+ "drop_pct": 0,
+ "total_tx_pps": 3877019,
+ "tx_pps": 3901010,
+ "tx_pkts": 38770196,
+ "ndr_pps": 1950505,
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "2a0a188162394858b0f91a93a609e85b"
+ },
+ "synthesis": {
+ "avg_delay_usec": 99.4996727383065,
+ "total_tx_rate": 3877019
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "IMIX"
+ ],
+ "duration_sec": "10",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 01:34:45",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "0983ac3addf84a478e6da408b3e21aca",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "IMIX"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_10k-rate_ndr-1.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "IMIX"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_10k-rate_ndr-1.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "warning": "WARNING: There is a significant difference between requested TX rate (16368398) and actual TX rate (14122958). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "IMIX": {
+ "ndr": {
+ "load_percent_per_direction": 100.0,
+ "timestamp_sec": 1650850502.7712622,
+ "stats": {
+ "total_tx_rate": 14122958,
+ "overall": {
+ "rx_pkts": 141229588,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 628,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 141229588,
+ "avg_delay_usec": 356.54005520429615,
+ "min_delay_usec": 20,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 70668670,
+ "min_delay_usec": 21,
+ "drop_pct": 0,
+ "max_delay_usec": 628,
+ "tx_pkts": 70560918,
+ "avg_delay_usec": 409,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 70560918,
+ "min_delay_usec": 20,
+ "drop_pct": 0,
+ "max_delay_usec": 603,
+ "tx_pkts": 70668670,
+ "avg_delay_usec": 304,
+ "drop_percentage": 0.0
+ },
+ "warning": "WARNING: There is a significant difference between requested TX rate (16368398) and actual TX rate (14122958). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 43140929037.33333,
+ "theoretical_tx_rate_pps": 16368398.079441292
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 200.0,
+ "duration_sec": 10.0,
+ "l2frame_size": "IMIX",
+ "rate_pps": 16368398,
+ "rate_bps": 50000000000.0,
+ "time_taken_sec": 12.55201530456543
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 16368398.0,
+ "rx_pkts": 141229588,
+ "time_ms": 1650850502770,
+ "drop_pct": 0,
+ "total_tx_pps": 14122958,
+ "tx_pps": 16368398,
+ "tx_pkts": 141229588,
+ "ndr_pps": 8184199,
+ "warning": "WARNING: There is a significant difference between requested TX rate (16368398) and actual TX rate (14122958). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "0983ac3addf84a478e6da408b3e21aca"
+ },
+ "synthesis": {
+ "avg_delay_usec": 356.54005520429615,
+ "total_tx_rate": 14122958
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "9000"
+ ],
+ "duration_sec": "10",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 01:37:47",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "debc5ad324ad481e9f7d2fcdbc47cb30",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "9000"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_10k-rate_ndr-1.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "9000"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_10k-rate_ndr-1.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "9000": {
+ "ndr": {
+ "load_percent_per_direction": 96.09375,
+ "timestamp_sec": 1650850810.5278695,
+ "stats": {
+ "total_tx_rate": 661743,
+ "overall": {
+ "rx_pkts": 6617433,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 566,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 6617433,
+ "avg_delay_usec": 490.9992497090639,
+ "min_delay_usec": 15,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 3308551,
+ "min_delay_usec": 15,
+ "drop_pct": 0,
+ "max_delay_usec": 566,
+ "tx_pkts": 3308882,
+ "avg_delay_usec": 506,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 3308882,
+ "min_delay_usec": 15,
+ "drop_pct": 0,
+ "max_delay_usec": 529,
+ "tx_pkts": 3308551,
+ "avg_delay_usec": 476,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 47751374880.0,
+ "theoretical_tx_rate_pps": 692904.6563192905
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 192.1875,
+ "duration_sec": 10.0,
+ "l2frame_size": "9000",
+ "rate_pps": 665838,
+ "rate_bps": 48046875000.0,
+ "time_taken_sec": 137.66692209243774
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 668814.8286232857,
+ "rx_pkts": 6651341,
+ "time_ms": 1650850685349,
+ "drop_pct": 239566,
+ "total_tx_pps": 689090,
+ "tx_pps": 692904,
+ "tx_pkts": 6890907,
+ "drop_percentage": 3.476552506077937
+ },
+ {
+ "rx_pps": 346452.0,
+ "rx_pkts": 3443214,
+ "time_ms": 1650850697851,
+ "drop_pct": 0,
+ "total_tx_pps": 344321,
+ "tx_pps": 346452,
+ "tx_pkts": 3443214,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 519678.0,
+ "rx_pkts": 5164821,
+ "time_ms": 1650850710355,
+ "drop_pct": 0,
+ "total_tx_pps": 516482,
+ "tx_pps": 519678,
+ "tx_pkts": 5164821,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 606290.0,
+ "rx_pkts": 6025614,
+ "time_ms": 1650850722872,
+ "drop_pct": 0,
+ "total_tx_pps": 602561,
+ "tx_pps": 606290,
+ "tx_pkts": 6025614,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 649598.0,
+ "rx_pkts": 6467074,
+ "time_ms": 1650850735425,
+ "drop_pct": 0,
+ "total_tx_pps": 646707,
+ "tx_pps": 649598,
+ "tx_pkts": 6467074,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 665952.2491003298,
+ "rx_pkts": 6619233,
+ "time_ms": 1650850747925,
+ "drop_pct": 52657,
+ "total_tx_pps": 667189,
+ "tx_pps": 671250,
+ "tx_pkts": 6671890,
+ "drop_percentage": 0.7892366330979678
+ },
+ {
+ "rx_pps": 660424.0,
+ "rx_pkts": 6563625,
+ "time_ms": 1650850760442,
+ "drop_pct": 0,
+ "total_tx_pps": 656362,
+ "tx_pps": 660424,
+ "tx_pkts": 6563625,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 665838.0,
+ "rx_pkts": 6617433,
+ "time_ms": 1650850772948,
+ "drop_pct": 0,
+ "total_tx_pps": 661743,
+ "tx_pps": 665838,
+ "tx_pkts": 6617433,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 665963.3876473027,
+ "rx_pkts": 6619344,
+ "time_ms": 1650850785467,
+ "drop_pct": 25650,
+ "total_tx_pps": 664499,
+ "tx_pps": 668544,
+ "tx_pkts": 6644994,
+ "drop_percentage": 0.38600486320980876
+ },
+ {
+ "rx_pps": 665953.6202723441,
+ "rx_pkts": 6619248,
+ "time_ms": 1650850797979,
+ "drop_pct": 12289,
+ "total_tx_pps": 663153,
+ "tx_pps": 667190,
+ "tx_pkts": 6631537,
+ "drop_percentage": 0.18531148962902566
+ },
+ {
+ "rx_pps": 665952.2454294527,
+ "rx_pkts": 6618569,
+ "time_ms": 1650850810527,
+ "drop_pct": 5583,
+ "total_tx_pps": 662415,
+ "tx_pps": 666514,
+ "tx_pkts": 6624152,
+ "ndr_pps": 332919,
+ "drop_percentage": 0.0842824862714503
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "debc5ad324ad481e9f7d2fcdbc47cb30"
+ },
+ "synthesis": {
+ "avg_delay_usec": 490.9992497090639,
+ "total_tx_rate": 661743
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "64"
+ ],
+ "duration_sec": "10",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 01:43:17",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "014622aafb2c426ab9df378f15c06fef",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "64"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_100k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "64"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_100k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "warning": "WARNING: There is a significant difference between requested TX rate (74404760) and actual TX rate (16765582). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "64": {
+ "ndr": {
+ "load_percent_per_direction": 100.0,
+ "timestamp_sec": 1650851015.0206628,
+ "stats": {
+ "total_tx_rate": 16765582,
+ "overall": {
+ "rx_pkts": 167655827,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 104,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 167655827,
+ "avg_delay_usec": 24.993023892930367,
+ "min_delay_usec": 5,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 83944872,
+ "min_delay_usec": 6,
+ "drop_pct": 0,
+ "max_delay_usec": 103,
+ "tx_pkts": 83710955,
+ "avg_delay_usec": 20,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 83710955,
+ "min_delay_usec": 5,
+ "drop_pct": 0,
+ "max_delay_usec": 104,
+ "tx_pkts": 83944872,
+ "avg_delay_usec": 30,
+ "drop_percentage": 0.0
+ },
+ "warning": "WARNING: There is a significant difference between requested TX rate (74404760) and actual TX rate (16765582). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 11266471104.0,
+ "theoretical_tx_rate_pps": 74404761.90476191
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 200.0,
+ "duration_sec": 10.0,
+ "l2frame_size": "64",
+ "rate_pps": 74404760,
+ "rate_bps": 50000000000.0,
+ "time_taken_sec": 12.508348226547241
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 74404760.0,
+ "rx_pkts": 167655827,
+ "time_ms": 1650851015020,
+ "drop_pct": 0,
+ "total_tx_pps": 16765582,
+ "tx_pps": 74404760,
+ "tx_pkts": 167655827,
+ "ndr_pps": 37202380,
+ "warning": "WARNING: There is a significant difference between requested TX rate (74404760) and actual TX rate (16765582). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "014622aafb2c426ab9df378f15c06fef"
+ },
+ "synthesis": {
+ "avg_delay_usec": 24.993023892930367,
+ "total_tx_rate": 16765582
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "128"
+ ],
+ "duration_sec": "10",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 01:44:17",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "a2341c441c5140a784a4749e86d5c19e",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "128"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_100k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "128"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_100k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "128": {
+ "ndr": {
+ "load_percent_per_direction": 100.0,
+ "timestamp_sec": 1650851075.266194,
+ "stats": {
+ "total_tx_rate": 18075556,
+ "overall": {
+ "rx_pkts": 180755561,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 61,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 180755561,
+ "avg_delay_usec": 20.503517144902666,
+ "min_delay_usec": 5,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 90468601,
+ "min_delay_usec": 6,
+ "drop_pct": 0,
+ "max_delay_usec": 61,
+ "tx_pkts": 90286960,
+ "avg_delay_usec": 24,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 90286960,
+ "min_delay_usec": 5,
+ "drop_pct": 0,
+ "max_delay_usec": 55,
+ "tx_pkts": 90468601,
+ "avg_delay_usec": 17,
+ "drop_percentage": 0.0
+ },
+ "warning": "WARNING: There is a significant difference between requested TX rate (42229728) and actual TX rate (18075556). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 21401458304.0,
+ "theoretical_tx_rate_pps": 42229729.72972973
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 200.0,
+ "duration_sec": 10.0,
+ "l2frame_size": "128",
+ "rate_pps": 42229728,
+ "rate_bps": 50000000000.0,
+ "time_taken_sec": 12.509921312332153
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 42229728.0,
+ "rx_pkts": 180755561,
+ "time_ms": 1650851075265,
+ "drop_pct": 0,
+ "total_tx_pps": 18075556,
+ "tx_pps": 42229728,
+ "tx_pkts": 180755561,
+ "ndr_pps": 21114864,
+ "warning": "WARNING: There is a significant difference between requested TX rate (42229728) and actual TX rate (18075556). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ },
+ "warning": "WARNING: There is a significant difference between requested TX rate (42229728) and actual TX rate (18075556). The traffic generator may not have sufficient CPU to achieve the requested TX rate."
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "a2341c441c5140a784a4749e86d5c19e"
+ },
+ "synthesis": {
+ "avg_delay_usec": 20.503517144902666,
+ "total_tx_rate": 18075556
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "256"
+ ],
+ "duration_sec": "10",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 01:45:17",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "81e85c0a6b464632850a5e5c7117f2b9",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "256"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_100k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "256"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_100k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "warning": "WARNING: There is a significant difference between requested TX rate (22644926) and actual TX rate (15904019). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "256": {
+ "ndr": {
+ "load_percent_per_direction": 100.0,
+ "timestamp_sec": 1650851135.4937232,
+ "stats": {
+ "total_tx_rate": 15904019,
+ "overall": {
+ "rx_pkts": 159040190,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 48,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 159040190,
+ "avg_delay_usec": 24.49913906667239,
+ "min_delay_usec": 6,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 79565736,
+ "min_delay_usec": 7,
+ "drop_pct": 0,
+ "max_delay_usec": 48,
+ "tx_pkts": 79474454,
+ "avg_delay_usec": 23,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 79474454,
+ "min_delay_usec": 6,
+ "drop_pct": 0,
+ "max_delay_usec": 44,
+ "tx_pkts": 79565736,
+ "avg_delay_usec": 26,
+ "drop_percentage": 0.0
+ },
+ "warning": "WARNING: There is a significant difference between requested TX rate (22644926) and actual TX rate (15904019). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 35116073952.0,
+ "theoretical_tx_rate_pps": 22644927.536231883
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 200.0,
+ "duration_sec": 10.0,
+ "l2frame_size": "256",
+ "rate_pps": 22644926,
+ "rate_bps": 50000000000.0,
+ "time_taken_sec": 12.490444898605347
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 22644926.0,
+ "rx_pkts": 159040190,
+ "time_ms": 1650851135493,
+ "drop_pct": 0,
+ "total_tx_pps": 15904019,
+ "tx_pps": 22644926,
+ "tx_pkts": 159040190,
+ "ndr_pps": 11322463,
+ "warning": "WARNING: There is a significant difference between requested TX rate (22644926) and actual TX rate (15904019). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "81e85c0a6b464632850a5e5c7117f2b9"
+ },
+ "synthesis": {
+ "avg_delay_usec": 24.49913906667239,
+ "total_tx_rate": 15904019
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "512"
+ ],
+ "duration_sec": "10",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 01:45:37",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "d11915d33a9248cdbc7f6b1fe526c0bc",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "512"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_100k-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "512"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_100k-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "512": {
+ "ndr": {
+ "load_percent_per_direction": 100.0,
+ "timestamp_sec": 1650851155.6128447,
+ "stats": {
+ "total_tx_rate": 11083895,
+ "overall": {
+ "rx_pkts": 110838959,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 751,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 110838959,
+ "avg_delay_usec": 244.54752861762262,
+ "min_delay_usec": 22,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 55446495,
+ "min_delay_usec": 24,
+ "drop_pct": 0,
+ "max_delay_usec": 751,
+ "tx_pkts": 55392464,
+ "avg_delay_usec": 342,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 55392464,
+ "min_delay_usec": 22,
+ "drop_pct": 0,
+ "max_delay_usec": 604,
+ "tx_pkts": 55446495,
+ "avg_delay_usec": 147,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 47173057120.0,
+ "theoretical_tx_rate_pps": 11748120.30075188
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 200.0,
+ "duration_sec": 10.0,
+ "l2frame_size": "512",
+ "rate_pps": 11748120,
+ "rate_bps": 50000000000.0,
+ "time_taken_sec": 12.493241786956787
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 11748120.0,
+ "rx_pkts": 110838959,
+ "time_ms": 1650851155612,
+ "drop_pct": 0,
+ "total_tx_pps": 11083895,
+ "tx_pps": 11748120,
+ "tx_pkts": 110838959,
+ "ndr_pps": 5874060,
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "d11915d33a9248cdbc7f6b1fe526c0bc"
+ },
+ "synthesis": {
+ "avg_delay_usec": 244.54752861762262,
+ "total_tx_rate": 11083895
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "768"
+ ],
+ "duration_sec": "10",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 01:50:46",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "3dfdb6dff0ef4590ae98f24d2b98b4a7",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "768"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_100k-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "768"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_100k-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "768": {
+ "ndr": {
+ "load_percent_per_direction": 95.60546875,
+ "timestamp_sec": 1650851589.8598213,
+ "stats": {
+ "total_tx_rate": 7536285,
+ "overall": {
+ "rx_pkts": 75362853,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 85,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 75362853,
+ "avg_delay_usec": 48.99969802098654,
+ "min_delay_usec": 11,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 37679530,
+ "min_delay_usec": 11,
+ "drop_pct": 0,
+ "max_delay_usec": 85,
+ "tx_pkts": 37683323,
+ "avg_delay_usec": 55,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 37683323,
+ "min_delay_usec": 13,
+ "drop_pct": 0,
+ "max_delay_usec": 81,
+ "tx_pkts": 37679530,
+ "avg_delay_usec": 43,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 47508740640.0,
+ "theoretical_tx_rate_pps": 7931472.081218274
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 191.2109375,
+ "duration_sec": 10.0,
+ "l2frame_size": "768",
+ "rate_pps": 7582920,
+ "rate_bps": 47802734374.0,
+ "time_taken_sec": 137.68758368492126
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 7867019.991496668,
+ "rx_pkts": 75782125,
+ "time_ms": 1650851464683,
+ "drop_pct": 620859,
+ "total_tx_pps": 7640298,
+ "tx_pps": 7931472,
+ "tx_pkts": 76402984,
+ "drop_percentage": 0.8126109315311559
+ },
+ {
+ "rx_pps": 3965736.0,
+ "rx_pkts": 39413476,
+ "time_ms": 1650851477177,
+ "drop_pct": 0,
+ "total_tx_pps": 3941347,
+ "tx_pps": 3965736,
+ "tx_pkts": 39413476,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 5948604.0,
+ "rx_pkts": 59120203,
+ "time_ms": 1650851489700,
+ "drop_pct": 0,
+ "total_tx_pps": 5912020,
+ "tx_pps": 5948604,
+ "tx_pkts": 59120203,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 6940038.0,
+ "rx_pkts": 68973557,
+ "time_ms": 1650851502199,
+ "drop_pct": 0,
+ "total_tx_pps": 6897355,
+ "tx_pps": 6940038,
+ "tx_pkts": 68973557,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 7435754.0,
+ "rx_pkts": 73900239,
+ "time_ms": 1650851514716,
+ "drop_pct": 0,
+ "total_tx_pps": 7390023,
+ "tx_pps": 7435754,
+ "tx_pkts": 73900239,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 7620954.625306049,
+ "rx_pkts": 75507656,
+ "time_ms": 1650851527233,
+ "drop_pct": 620803,
+ "total_tx_pps": 7612845,
+ "tx_pps": 7683612,
+ "tx_pkts": 76128459,
+ "drop_percentage": 0.8154677083375614
+ },
+ {
+ "rx_pps": 7559684.0,
+ "rx_pkts": 75131929,
+ "time_ms": 1650851539732,
+ "drop_pct": 0,
+ "total_tx_pps": 7513192,
+ "tx_pps": 7559684,
+ "tx_pkts": 75131929,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 7596741.430266551,
+ "rx_pkts": 75500232,
+ "time_ms": 1650851552229,
+ "drop_pct": 247534,
+ "total_tx_pps": 7574776,
+ "tx_pps": 7621648,
+ "tx_pkts": 75747766,
+ "drop_percentage": 0.3267871952817724
+ },
+ {
+ "rx_pps": 7590337.479512263,
+ "rx_pkts": 75436549,
+ "time_ms": 1650851564806,
+ "drop_pct": 3265,
+ "total_tx_pps": 7543981,
+ "tx_pps": 7590666,
+ "tx_pkts": 75439814,
+ "drop_percentage": 0.004327953406671973
+ },
+ {
+ "rx_pps": 7575174.0,
+ "rx_pkts": 75285893,
+ "time_ms": 1650851577332,
+ "drop_pct": 0,
+ "total_tx_pps": 7528589,
+ "tx_pps": 7575174,
+ "tx_pkts": 75285893,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 7582920.0,
+ "rx_pkts": 75362853,
+ "time_ms": 1650851589858,
+ "drop_pct": 0,
+ "total_tx_pps": 7536285,
+ "tx_pps": 7582920,
+ "tx_pkts": 75362853,
+ "ndr_pps": 3791460,
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "3dfdb6dff0ef4590ae98f24d2b98b4a7"
+ },
+ "synthesis": {
+ "avg_delay_usec": 48.99969802098654,
+ "total_tx_rate": 7536285
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "1024"
+ ],
+ "duration_sec": "10",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 02:02:49",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "df31248f2daf41788e5aeb35599600ec",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1024"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_100k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1024"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_100k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1024": {
+ "ndr": {
+ "load_percent_per_direction": 95.8984375,
+ "timestamp_sec": 1650852312.436391,
+ "stats": {
+ "total_tx_rate": 5706025,
+ "overall": {
+ "rx_pkts": 57060256,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 100,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 57060256,
+ "avg_delay_usec": 49.50055346754841,
+ "min_delay_usec": 9,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 28527257,
+ "min_delay_usec": 9,
+ "drop_pct": 0,
+ "max_delay_usec": 96,
+ "tx_pkts": 28532999,
+ "avg_delay_usec": 44,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 28532999,
+ "min_delay_usec": 10,
+ "drop_pct": 0,
+ "max_delay_usec": 100,
+ "tx_pkts": 28527257,
+ "avg_delay_usec": 55,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 47656720800.0,
+ "theoretical_tx_rate_pps": 5986590.038314176
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 191.796875,
+ "duration_sec": 10.0,
+ "l2frame_size": "1024",
+ "rate_pps": 5741046,
+ "rate_bps": 47949218750.0,
+ "time_taken_sec": 137.73684573173523
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 5905630.69286569,
+ "rx_pkts": 57462293,
+ "time_ms": 1650852187211,
+ "drop_pct": 787741,
+ "total_tx_pps": 5825003,
+ "tx_pps": 5986590,
+ "tx_pkts": 58250034,
+ "drop_percentage": 1.3523442750265176
+ },
+ {
+ "rx_pps": 2993294.0,
+ "rx_pkts": 29748852,
+ "time_ms": 1650852199712,
+ "drop_pct": 0,
+ "total_tx_pps": 2974885,
+ "tx_pps": 2993294,
+ "tx_pkts": 29748852,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 4489942.0,
+ "rx_pkts": 44623288,
+ "time_ms": 1650852212213,
+ "drop_pct": 0,
+ "total_tx_pps": 4462328,
+ "tx_pps": 4489942,
+ "tx_pkts": 44623288,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 5238266.0,
+ "rx_pkts": 52060508,
+ "time_ms": 1650852224756,
+ "drop_pct": 0,
+ "total_tx_pps": 5206050,
+ "tx_pps": 5238266,
+ "tx_pkts": 52060508,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 5612428.0,
+ "rx_pkts": 55779125,
+ "time_ms": 1650852237260,
+ "drop_pct": 0,
+ "total_tx_pps": 5577912,
+ "tx_pps": 5612428,
+ "tx_pkts": 55779125,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 5751065.368412055,
+ "rx_pkts": 57156952,
+ "time_ms": 1650852249774,
+ "drop_pct": 481447,
+ "total_tx_pps": 5763839,
+ "tx_pps": 5799508,
+ "tx_pkts": 57638399,
+ "drop_percentage": 0.8352886415183045
+ },
+ {
+ "rx_pps": 5705968.0,
+ "rx_pkts": 56868528,
+ "time_ms": 1650852262305,
+ "drop_pct": 0,
+ "total_tx_pps": 5686852,
+ "tx_pps": 5705968,
+ "tx_pkts": 56868528,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 5750731.258995378,
+ "rx_pkts": 57159387,
+ "time_ms": 1650852274851,
+ "drop_pct": 19946,
+ "total_tx_pps": 5717933,
+ "tx_pps": 5752738,
+ "tx_pkts": 57179333,
+ "drop_percentage": 0.034883233073040566
+ },
+ {
+ "rx_pps": 5729352.0,
+ "rx_pkts": 56941156,
+ "time_ms": 1650852287414,
+ "drop_pct": 0,
+ "total_tx_pps": 5694115,
+ "tx_pps": 5729352,
+ "tx_pkts": 56941156,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 5741046.0,
+ "rx_pkts": 57060256,
+ "time_ms": 1650852299929,
+ "drop_pct": 0,
+ "total_tx_pps": 5706025,
+ "tx_pps": 5741046,
+ "tx_pkts": 57060256,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 5745777.043226499,
+ "rx_pkts": 57104416,
+ "time_ms": 1650852312435,
+ "drop_pct": 11081,
+ "total_tx_pps": 5711549,
+ "tx_pps": 5746892,
+ "tx_pkts": 57115497,
+ "ndr_pps": 2870523,
+ "drop_percentage": 0.019401039266103207
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "df31248f2daf41788e5aeb35599600ec"
+ },
+ "synthesis": {
+ "avg_delay_usec": 49.50055346754841,
+ "total_tx_rate": 5706025
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "1280"
+ ],
+ "duration_sec": "10",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 02:05:13",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "3483e5ac90f647c18792824df335576f",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1280"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_100k-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1280"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_100k-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1280": {
+ "ndr": {
+ "load_percent_per_direction": 96.09375,
+ "timestamp_sec": 1650852456.8429823,
+ "stats": {
+ "total_tx_rate": 4591477,
+ "overall": {
+ "rx_pkts": 45914773,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 115,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 45914773,
+ "avg_delay_usec": 72.0000503323843,
+ "min_delay_usec": 8,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 22956231,
+ "min_delay_usec": 8,
+ "drop_pct": 0,
+ "max_delay_usec": 113,
+ "tx_pkts": 22958542,
+ "avg_delay_usec": 71,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 22958542,
+ "min_delay_usec": 8,
+ "drop_pct": 0,
+ "max_delay_usec": 115,
+ "tx_pkts": 22956231,
+ "avg_delay_usec": 73,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 47751360800.0,
+ "theoretical_tx_rate_pps": 4807692.307692308
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 192.1875,
+ "duration_sec": 10.0,
+ "l2frame_size": "1280",
+ "rate_pps": 4619890,
+ "rate_bps": 48046875000.0,
+ "time_taken_sec": 137.65410780906677
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 4726559.564871196,
+ "rx_pkts": 46152394,
+ "time_ms": 1650852331691,
+ "drop_pct": 792216,
+ "total_tx_pps": 4694461,
+ "tx_pps": 4807692,
+ "tx_pkts": 46944610,
+ "drop_percentage": 1.6875547586826263
+ },
+ {
+ "rx_pps": 2403846.0,
+ "rx_pkts": 23888223,
+ "time_ms": 1650852344191,
+ "drop_pct": 0,
+ "total_tx_pps": 2388822,
+ "tx_pps": 2403846,
+ "tx_pkts": 23888223,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 3605768.0,
+ "rx_pkts": 35835922,
+ "time_ms": 1650852356692,
+ "drop_pct": 0,
+ "total_tx_pps": 3583592,
+ "tx_pps": 3605768,
+ "tx_pkts": 35835922,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 4206730.0,
+ "rx_pkts": 41808587,
+ "time_ms": 1650852369206,
+ "drop_pct": 0,
+ "total_tx_pps": 4180858,
+ "tx_pps": 4206730,
+ "tx_pkts": 41808587,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 4507210.0,
+ "rx_pkts": 44794900,
+ "time_ms": 1650852381776,
+ "drop_pct": 0,
+ "total_tx_pps": 4479490,
+ "tx_pps": 4507210,
+ "tx_pkts": 44794900,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 4626532.86170713,
+ "rx_pkts": 45980800,
+ "time_ms": 1650852394280,
+ "drop_pct": 307270,
+ "total_tx_pps": 4628807,
+ "tx_pps": 4657450,
+ "tx_pkts": 46288070,
+ "drop_percentage": 0.6638211530530437
+ },
+ {
+ "rx_pps": 4582330.0,
+ "rx_pkts": 45541498,
+ "time_ms": 1650852406785,
+ "drop_pct": 0,
+ "total_tx_pps": 4554149,
+ "tx_pps": 4582330,
+ "tx_pkts": 45541498,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 4619890.0,
+ "rx_pkts": 45914773,
+ "time_ms": 1650852419279,
+ "drop_pct": 0,
+ "total_tx_pps": 4591477,
+ "tx_pps": 4619890,
+ "tx_pkts": 45914773,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 4626430.527562457,
+ "rx_pkts": 45979781,
+ "time_ms": 1650852431782,
+ "drop_pct": 121642,
+ "total_tx_pps": 4610142,
+ "tx_pps": 4638670,
+ "tx_pkts": 46101423,
+ "drop_percentage": 0.26385736509695157
+ },
+ {
+ "rx_pps": 4626442.952323484,
+ "rx_pkts": 45979906,
+ "time_ms": 1650852444306,
+ "drop_pct": 28196,
+ "total_tx_pps": 4600810,
+ "tx_pps": 4629280,
+ "tx_pkts": 46008102,
+ "drop_percentage": 0.06128485804521995
+ },
+ {
+ "rx_pps": 4624386.291771492,
+ "rx_pkts": 45964089,
+ "time_ms": 1650852456842,
+ "drop_pct": 1985,
+ "total_tx_pps": 4596607,
+ "tx_pps": 4624586,
+ "tx_pkts": 45966074,
+ "ndr_pps": 2309945,
+ "drop_percentage": 0.004318402306883986
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "3483e5ac90f647c18792824df335576f"
+ },
+ "synthesis": {
+ "avg_delay_usec": 72.0000503323843,
+ "total_tx_rate": 4591477
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "1518"
+ ],
+ "duration_sec": "10",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 02:17:16",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "e5fdb1f38f334e048d5a301c6045cc2d",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1518"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_100k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1518"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_100k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1518": {
+ "ndr": {
+ "load_percent_per_direction": 95.99609375,
+ "timestamp_sec": 1650853179.382297,
+ "stats": {
+ "total_tx_rate": 3877019,
+ "overall": {
+ "rx_pkts": 38769903,
+ "drop_percentage": 0.0007557351528478215,
+ "drop_pct": 293,
+ "max_delay_usec": 150,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 38770196,
+ "avg_delay_usec": 94.9999144181506,
+ "min_delay_usec": 7,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 19384122,
+ "min_delay_usec": 7,
+ "drop_pct": 0,
+ "max_delay_usec": 150,
+ "tx_pkts": 19386074,
+ "avg_delay_usec": 97,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 19385781,
+ "min_delay_usec": 11,
+ "drop_pct": 293,
+ "max_delay_usec": 136,
+ "tx_pkts": 19384122,
+ "avg_delay_usec": 93,
+ "drop_percentage": 0.0015115464089629645
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 47702841776.0,
+ "theoretical_tx_rate_pps": 4063719.1157347206
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 191.9921875,
+ "duration_sec": 10.0,
+ "l2frame_size": "1518",
+ "rate_pps": 3901010,
+ "rate_bps": 47998046874.0,
+ "time_taken_sec": 137.64107275009155
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 3982055.7006684523,
+ "rx_pkts": 38963118,
+ "time_ms": 1650853054249,
+ "drop_pct": 799039,
+ "total_tx_pps": 3976215,
+ "tx_pps": 4063718,
+ "tx_pkts": 39762157,
+ "drop_percentage": 2.009546413691792
+ },
+ {
+ "rx_pps": 2031858.0,
+ "rx_pkts": 20191592,
+ "time_ms": 1650853066752,
+ "drop_pct": 0,
+ "total_tx_pps": 2019159,
+ "tx_pps": 2031858,
+ "tx_pkts": 20191592,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 3047788.0,
+ "rx_pkts": 30290447,
+ "time_ms": 1650853079251,
+ "drop_pct": 0,
+ "total_tx_pps": 3029044,
+ "tx_pps": 3047788,
+ "tx_pkts": 30290447,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 3555754.0,
+ "rx_pkts": 35338864,
+ "time_ms": 1650853091784,
+ "drop_pct": 0,
+ "total_tx_pps": 3533886,
+ "tx_pps": 3555754,
+ "tx_pkts": 35338864,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 3809736.0,
+ "rx_pkts": 37863067,
+ "time_ms": 1650853104288,
+ "drop_pct": 0,
+ "total_tx_pps": 3786306,
+ "tx_pps": 3809736,
+ "tx_pkts": 37863067,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 3905544.608185896,
+ "rx_pkts": 38817602,
+ "time_ms": 1650853116791,
+ "drop_pct": 309915,
+ "total_tx_pps": 3912751,
+ "tx_pps": 3936726,
+ "tx_pkts": 39127517,
+ "drop_percentage": 0.7920640606967214
+ },
+ {
+ "rx_pps": 3873232.0,
+ "rx_pkts": 38563838,
+ "time_ms": 1650853129321,
+ "drop_pct": 0,
+ "total_tx_pps": 3856383,
+ "tx_pps": 3873232,
+ "tx_pkts": 38563838,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 3904454.7698652036,
+ "rx_pkts": 38804426,
+ "time_ms": 1650853141834,
+ "drop_pct": 5220,
+ "total_tx_pps": 3880964,
+ "tx_pps": 3904980,
+ "tx_pkts": 38809646,
+ "drop_percentage": 0.013450264400762635
+ },
+ {
+ "rx_pps": 3889106.0,
+ "rx_pkts": 38651888,
+ "time_ms": 1650853154337,
+ "drop_pct": 0,
+ "total_tx_pps": 3865188,
+ "tx_pps": 3889106,
+ "tx_pkts": 38651888,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 3897042.0,
+ "rx_pkts": 38732706,
+ "time_ms": 1650853166869,
+ "drop_pct": 0,
+ "total_tx_pps": 3873270,
+ "tx_pps": 3897042,
+ "tx_pkts": 38732706,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 3900980.518696114,
+ "rx_pkts": 38769903,
+ "time_ms": 1650853179381,
+ "drop_pct": 293,
+ "total_tx_pps": 3877019,
+ "tx_pps": 3901010,
+ "tx_pkts": 38770196,
+ "ndr_pps": 1950505,
+ "drop_percentage": 0.0007557351528478215
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "e5fdb1f38f334e048d5a301c6045cc2d"
+ },
+ "synthesis": {
+ "avg_delay_usec": 94.9999144181506,
+ "total_tx_rate": 3877019
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "IMIX"
+ ],
+ "duration_sec": "10",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 02:20:20",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "4b1b0ab83b55448bb34da88ed0446e02",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "IMIX"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_100k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "IMIX"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_100k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "warning": "WARNING: There is a significant difference between requested TX rate (16368398) and actual TX rate (14094667). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "IMIX": {
+ "ndr": {
+ "load_percent_per_direction": 100.0,
+ "timestamp_sec": 1650853238.9316306,
+ "stats": {
+ "total_tx_rate": 14094667,
+ "overall": {
+ "rx_pkts": 140946676,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 629,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 140946676,
+ "avg_delay_usec": 330.48077658816163,
+ "min_delay_usec": 13,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 70508526,
+ "min_delay_usec": 14,
+ "drop_pct": 0,
+ "max_delay_usec": 629,
+ "tx_pkts": 70438150,
+ "avg_delay_usec": 292,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 70438150,
+ "min_delay_usec": 13,
+ "drop_pct": 0,
+ "max_delay_usec": 558,
+ "tx_pkts": 70508526,
+ "avg_delay_usec": 369,
+ "drop_percentage": 0.0
+ },
+ "warning": "WARNING: There is a significant difference between requested TX rate (16368398) and actual TX rate (14094667). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 43054509462.666664,
+ "theoretical_tx_rate_pps": 16368398.079441292
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 200.0,
+ "duration_sec": 10.0,
+ "l2frame_size": "IMIX",
+ "rate_pps": 16368398,
+ "rate_bps": 50000000000.0,
+ "time_taken_sec": 12.508249044418335
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 16368398.0,
+ "rx_pkts": 140946676,
+ "time_ms": 1650853238931,
+ "drop_pct": 0,
+ "total_tx_pps": 14094667,
+ "tx_pps": 16368398,
+ "tx_pkts": 140946676,
+ "ndr_pps": 8184199,
+ "warning": "WARNING: There is a significant difference between requested TX rate (16368398) and actual TX rate (14094667). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "4b1b0ab83b55448bb34da88ed0446e02"
+ },
+ "synthesis": {
+ "avg_delay_usec": 330.48077658816163,
+ "total_tx_rate": 14094667
+ }
+ },
+ {
+ "input": {
+ "rate": "ndr",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "9000"
+ ],
+ "duration_sec": "10",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc18_loopback"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-04-25 02:25:30",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:07.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "EXT",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn1ter",
+ "name": "net_nfvbench_vn1ter",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1",
+ "name": "net_nfvbench_vn1",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": true,
+ "request_id": "37942b1f63cd4ab8a26e5fc2f6ace237",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "9000"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_100k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": true,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "9000"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2505,
+ 2505
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc18_loopback",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "flavor_nfvbench_dpdk",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_100k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "EXT": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "9000": {
+ "ndr": {
+ "load_percent_per_direction": 95.99609375,
+ "timestamp_sec": 1650853673.125213,
+ "stats": {
+ "total_tx_rate": 661136,
+ "overall": {
+ "rx_pkts": 6611360,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 538,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 6611360,
+ "avg_delay_usec": 477.99959584714793,
+ "min_delay_usec": 15,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 3305513,
+ "min_delay_usec": 15,
+ "drop_pct": 0,
+ "max_delay_usec": 538,
+ "tx_pkts": 3305847,
+ "avg_delay_usec": 486,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 3305847,
+ "min_delay_usec": 15,
+ "drop_pct": 0,
+ "max_delay_usec": 524,
+ "tx_pkts": 3305513,
+ "avg_delay_usec": 470,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 47707573760.0,
+ "theoretical_tx_rate_pps": 692904.6563192905
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 191.9921875,
+ "duration_sec": 10.0,
+ "l2frame_size": "9000",
+ "rate_pps": 665160,
+ "rate_bps": 47998046874.0,
+ "time_taken_sec": 137.65885472297668
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 668428.2262058704,
+ "rx_pkts": 6638764,
+ "time_ms": 1650853547957,
+ "drop_pct": 243091,
+ "total_tx_pps": 688185,
+ "tx_pps": 692904,
+ "tx_pkts": 6881855,
+ "drop_percentage": 3.532347019807886
+ },
+ {
+ "rx_pps": 346452.0,
+ "rx_pkts": 3443493,
+ "time_ms": 1650853560502,
+ "drop_pct": 0,
+ "total_tx_pps": 344349,
+ "tx_pps": 346452,
+ "tx_pkts": 3443493,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 519678.0,
+ "rx_pkts": 5165340,
+ "time_ms": 1650853573032,
+ "drop_pct": 0,
+ "total_tx_pps": 516534,
+ "tx_pps": 519678,
+ "tx_pkts": 5165340,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 606290.0,
+ "rx_pkts": 6025616,
+ "time_ms": 1650853585552,
+ "drop_pct": 0,
+ "total_tx_pps": 602561,
+ "tx_pps": 606290,
+ "tx_pkts": 6025616,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 649598.0,
+ "rx_pkts": 6456032,
+ "time_ms": 1650853598052,
+ "drop_pct": 0,
+ "total_tx_pps": 645603,
+ "tx_pps": 649598,
+ "tx_pkts": 6456032,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 665605.0071570089,
+ "rx_pkts": 6618445,
+ "time_ms": 1650853610556,
+ "drop_pct": 56131,
+ "total_tx_pps": 667457,
+ "tx_pps": 671250,
+ "tx_pkts": 6674576,
+ "drop_percentage": 0.8409672764232514
+ },
+ {
+ "rx_pps": 660424.0,
+ "rx_pkts": 6563625,
+ "time_ms": 1650853623059,
+ "drop_pct": 0,
+ "total_tx_pps": 656362,
+ "tx_pps": 660424,
+ "tx_pkts": 6563625,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 665581.9509880405,
+ "rx_pkts": 6615554,
+ "time_ms": 1650853635567,
+ "drop_pct": 2545,
+ "total_tx_pps": 661809,
+ "tx_pps": 665838,
+ "tx_pkts": 6618099,
+ "drop_percentage": 0.03845515154729477
+ },
+ {
+ "rx_pps": 663130.0,
+ "rx_pkts": 6590519,
+ "time_ms": 1650853648084,
+ "drop_pct": 0,
+ "total_tx_pps": 659051,
+ "tx_pps": 663130,
+ "tx_pkts": 6590519,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 664484.0,
+ "rx_pkts": 6604641,
+ "time_ms": 1650853660605,
+ "drop_pct": 0,
+ "total_tx_pps": 660464,
+ "tx_pps": 664484,
+ "tx_pkts": 6604641,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 665160.0,
+ "rx_pkts": 6611360,
+ "time_ms": 1650853673124,
+ "drop_pct": 0,
+ "total_tx_pps": 661136,
+ "tx_pps": 665160,
+ "tx_pkts": 6611360,
+ "ndr_pps": 332580,
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "37942b1f63cd4ab8a26e5fc2f6ace237"
+ },
+ "synthesis": {
+ "avg_delay_usec": 477.99959584714793,
+ "total_tx_rate": 661136
+ }
+ }
+ ]
+ },
+ "fail_tests": 0,
+ "total_tests": 1,
+ "pass_tests": 1
+ }
+ },
+ {
+ "project_name": "nfvbench",
+ "scenario": "basic",
+ "stop_date": "2022-03-29 04:00:23",
+ "case_name": "characterization",
+ "build_tag": "I2DSIKVWY5C8",
+ "version": "unknown",
+ "pod_name": "AMICAL",
+ "criteria": "PASS",
+ "installer": "unknown",
+ "_id": "62428459c0d88e001ca15662",
+ "start_date": "2022-03-29 00:16:03",
+ "details": {
+ "tests": [
+ {
+ "status": "passed",
+ "elements": [
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.1 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.0001163482666015625,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "64 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "64"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.00010013580322265625,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.560585021972656e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.655952453613281e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 5.030165672302246,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 441.4675030708313,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012564659118652344,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002872943878173828,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:17",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.2 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.942054748535156e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.00011372566223144531,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.465217590332031e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.202957153320312e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.00823521614074707,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.396630525589,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.000118255615234375,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002837181091308594,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:18",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.3 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.894371032714844e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "256 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "256"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.584426879882812e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.226799011230469e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 0.00010609626770019531,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007856607437133789,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.39697003364563,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.000118255615234375,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00032806396484375,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:19",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.4 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010061264038085938,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "512 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "512"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.560585021972656e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.417533874511719e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.489059448242188e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007916927337646484,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.39968848228455,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.0001201629638671875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0003211498260498047,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:20",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.5 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010061264038085938,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "768 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "768"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.250640869140625e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.250640869140625e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.417533874511719e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007905721664428711,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.40395522117615,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011658668518066406,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00028514862060546875,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:21",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.6 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.942054748535156e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1024 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1024"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.441375732421875e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 0.00011348724365234375,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.107589721679688e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007941484451293945,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.4135231971741,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011992454528808594,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0003170967102050781,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:22",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.7 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.775161743164062e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1280 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1280"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.465217590332031e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.274482727050781e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.5367431640625e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007906198501586914,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.40963220596313,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.0001239776611328125,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00029730796813964844,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:23",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.8 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.0001232624053955078,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1518 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1518"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.72747802734375e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.298324584960938e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 8.988380432128906e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007907390594482422,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.4113304615021,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012087821960449219,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00028133392333984375,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:24",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.9 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.822845458984375e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "IMIX frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "IMIX"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.00011849403381347656,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.298324584960938e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.179115295410156e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008216381072998047,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.4068977832794,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012040138244628906,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00032019615173339844,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:25",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.10 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.0001010894775390625,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "9000 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "9000"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.465217590332031e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.226799011230469e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.5367431640625e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007925271987915039,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.404554605484,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011920928955078125,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0003101825714111328,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:26",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.11 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.965896606445312e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "64 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "64"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.560585021972656e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.5367431640625e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.965896606445312e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007976293563842773,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.5729796886444,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011754035949707031,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00028586387634277344,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:27",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.12 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.584426879882812e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.441375732421875e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.5367431640625e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.202957153320312e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008101701736450195,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.4532768726349,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011944770812988281,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00033020973205566406,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:28",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.13 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.775161743164062e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "256 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "256"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.393692016601562e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.393692016601562e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.274482727050781e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007899761199951172,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.41574001312256,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011801719665527344,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0003037452697753906,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:29",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.14 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.775161743164062e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "512 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "512"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.417533874511719e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.226799011230469e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.34600830078125e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008031368255615234,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.4325096607208,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011944770812988281,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00031256675720214844,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:30",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.15 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.870529174804688e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "768 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "768"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.560585021972656e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.322166442871094e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.512901306152344e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007970094680786133,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.82969641685486,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012087821960449219,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00031185150146484375,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:31",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.16 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.775161743164062e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1024 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1024"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.655952453613281e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 0.00011396408081054688,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.274482727050781e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008100748062133789,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.4229202270508,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.0001201629638671875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002961158752441406,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:32",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.17 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.655952453613281e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1280 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1280"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.560585021972656e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.369850158691406e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.393692016601562e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008043766021728516,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.42792868614197,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011777877807617188,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0003020763397216797,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:33",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.18 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.942054748535156e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1518 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1518"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.34600830078125e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.202957153320312e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 0.0001125335693359375,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.00787210464477539,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 443.48774886131287,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011992454528808594,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0003151893615722656,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:34",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.19 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.894371032714844e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "IMIX frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "IMIX"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.489059448242188e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.417533874511719e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.441375732421875e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008165359497070312,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.4371497631073,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012183189392089844,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002982616424560547,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:35",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.20 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00011897087097167969,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "9000 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "9000"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.679794311523438e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.441375732421875e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.34600830078125e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007880926132202148,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.4218900203705,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012063980102539062,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00030922889709472656,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:36",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.21 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.846687316894531e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "64 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "64"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.584426879882812e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.322166442871094e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.274482727050781e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008101463317871094,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.5446517467499,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011968612670898438,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002968311309814453,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:37",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.22 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.846687316894531e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.489059448242188e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 0.00011539459228515625,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.226799011230469e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007904767990112305,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 443.58557987213135,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.000118255615234375,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00030350685119628906,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:38",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.23 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.799003601074219e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "256 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "256"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.417533874511719e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.274482727050781e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.512901306152344e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008047819137573242,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.51229333877563,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011873245239257812,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002970695495605469,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:39",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.24 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.965896606445312e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "512 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "512"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.584426879882812e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.465217590332031e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 0.00011205673217773438,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008028507232666016,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.4921851158142,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012063980102539062,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002834796905517578,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:40",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.25 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.679794311523438e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "768 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "768"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.00011658668518066406,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.369850158691406e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.250640869140625e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007831335067749023,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.44814562797546,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.000118255615234375,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002892017364501953,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:41",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.26 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010085105895996094,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1024 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1024"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.00010704994201660156,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.322166442871094e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 0.00011205673217773438,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008156299591064453,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.425315618515,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012135505676269531,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002989768981933594,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:42",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.27 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00011754035949707031,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1280 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1280"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.703636169433594e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.369850158691406e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 0.00010848045349121094,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008181095123291016,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.497309923172,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.000118255615234375,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002830028533935547,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:43",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.28 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.560585021972656e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1518 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1518"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.608268737792969e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.417533874511719e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.1552734375e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008019685745239258,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.43971967697144,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012063980102539062,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002837181091308594,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:44",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.29 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010013580322265625,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "IMIX frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "IMIX"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.560585021972656e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.393692016601562e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.822845458984375e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008020877838134766,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.46456599235535,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011920928955078125,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.000316619873046875,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:45",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.30 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010132789611816406,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "9000 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "9000"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.465217590332031e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.298324584960938e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 0.00011324882507324219,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007940530776977539,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.47153663635254,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011730194091796875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00028133392333984375,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:46",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.1 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:51",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010395050048828125,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "TRex is restarted",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:52",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:99"
+ },
+ "result": {
+ "duration": 0.00010609626770019531,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "64 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:53",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "64"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.5367431640625e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:54",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.179115295410156e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "70% rate of previous scenario",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:55",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage_rate",
+ "value": "70%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:129"
+ },
+ "result": {
+ "duration": 0.00024056434631347656,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:56",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007750511169433594,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:57",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 40.1791934967041,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:58",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011968612670898438,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:62",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.2 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:51",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.72747802734375e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "TRex is restarted",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:52",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:99"
+ },
+ "result": {
+ "duration": 0.00011229515075683594,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "64 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:53",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "64"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.560585021972656e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:54",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.298324584960938e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "90% rate of previous scenario",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:55",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage_rate",
+ "value": "90%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:129"
+ },
+ "result": {
+ "duration": 0.0002522468566894531,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:56",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008098125457763672,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:57",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 40.174768686294556,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:58",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012159347534179688,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:63",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.3 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:51",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010180473327636719,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "TRex is restarted",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:52",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:99"
+ },
+ "result": {
+ "duration": 9.250640869140625e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "768 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:53",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "768"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.489059448242188e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:54",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 0.0001163482666015625,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "70% rate of previous scenario",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:55",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage_rate",
+ "value": "70%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:129"
+ },
+ "result": {
+ "duration": 0.00023174285888671875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:56",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008144855499267578,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:57",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 38.25333619117737,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:58",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012159347534179688,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:64",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.4 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:51",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010204315185546875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "TRex is restarted",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:52",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:99"
+ },
+ "result": {
+ "duration": 9.489059448242188e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "768 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:53",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "768"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.560585021972656e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:54",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 0.0001163482666015625,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "90% rate of previous scenario",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:55",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage_rate",
+ "value": "90%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:129"
+ },
+ "result": {
+ "duration": 0.0002396106719970703,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:56",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008252859115600586,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:57",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 38.2523250579834,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:58",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00013947486877441406,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:65",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.5 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:51",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010085105895996094,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "TRex is restarted",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:52",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:99"
+ },
+ "result": {
+ "duration": 9.107589721679688e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1518 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:53",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1518"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.00010061264038085938,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:54",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 0.00010085105895996094,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "70% rate of previous scenario",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:55",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage_rate",
+ "value": "70%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:129"
+ },
+ "result": {
+ "duration": 0.00022912025451660156,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:56",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.00817418098449707,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:57",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 40.25585341453552,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:58",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.0001220703125,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:66",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.6 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:51",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.942054748535156e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "TRex is restarted",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:52",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:99"
+ },
+ "result": {
+ "duration": 0.00010895729064941406,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1518 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:53",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1518"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.512901306152344e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:54",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.322166442871094e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "90% rate of previous scenario",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:55",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage_rate",
+ "value": "90%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:129"
+ },
+ "result": {
+ "duration": 0.0002522468566894531,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:56",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008129119873046875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:57",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 38.25064826011658,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:58",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012230873107910156,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:67",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.7 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:51",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.918212890625e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "TRex is restarted",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:52",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:99"
+ },
+ "result": {
+ "duration": 9.655952453613281e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "9000 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:53",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "9000"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.5367431640625e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:54",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.465217590332031e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "70% rate of previous scenario",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:55",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage_rate",
+ "value": "70%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:129"
+ },
+ "result": {
+ "duration": 0.00023627281188964844,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:56",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008117198944091797,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:57",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 40.175238370895386,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:58",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011992454528808594,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:68",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.8 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:51",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.846687316894531e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "TRex is restarted",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:52",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:99"
+ },
+ "result": {
+ "duration": 0.00011420249938964844,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "9000 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:53",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "9000"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.489059448242188e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:54",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.179115295410156e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "90% rate of previous scenario",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:55",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage_rate",
+ "value": "90%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:129"
+ },
+ "result": {
+ "duration": 0.0002562999725341797,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:56",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.00825643539428711,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:57",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 38.24060845375061,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:58",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012087821960449219,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:69",
+ "type": "scenario"
+ }
+ ],
+ "name": "characterization",
+ "keyword": "Feature",
+ "tags": [
+ "characterization"
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:2"
+ }
+ ],
+ "skip_tests": 0,
+ "links": [
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/xtesting.log",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_768-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_128-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1518-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_512-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_64-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_9000-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1280-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1024-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_64-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_64-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_768-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_128-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_IMIX-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_256-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_9000-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/output.html",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1024-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_512-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_256-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_256-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1024-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_128-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_9000-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_64-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-latency-fs_64-fc_100k-rate_70%.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1280-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_256-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_512-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_768-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_768-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_512-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_IMIX-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_64-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1024-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1280-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_128-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_128-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_9000-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_9000-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_IMIX-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_768-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1280-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_IMIX-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_IMIX-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_IMIX-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1518-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/behave_tests.log",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_128-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-latency-fs_9000-fc_100k-rate_70%.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_512-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_9000-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_768-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/campaign_result.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_9000-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_512-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_256-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_128-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-latency-fs_768-fc_100k-rate_90%.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_IMIX-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1280-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_64-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1518-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/TESTS-characterization-full.xml",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-latency-fs_1518-fc_100k-rate_90%.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1518-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_9000-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_256-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_64-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1024-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1518-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_9000-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1024-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1024-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_256-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_IMIX-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_512-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1024-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1280-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1280-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_768-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_512-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1518-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_768-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-latency-fs_64-fc_100k-rate_90%.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_256-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1518-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-latency-fs_768-fc_100k-rate_70%.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_256-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench.log",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1518-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_64-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-latency-fs_9000-fc_100k-rate_90%.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_IMIX-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1518-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1280-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_512-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_128-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_768-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-latency-fs_1518-fc_100k-rate_70%.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1024-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_64-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_128-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/output.json",
+ "http://172.20.73.203:8181/I2DSIKVWY5C8/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-27/characterization/nfvbench-throughput-fs_1280-fc_10k-rate_ndr-1.json"
+ ],
+ "results": {
+ "latency": [
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_64-fc_100k-rate_70%.json",
+ "frame_sizes": [
+ "64"
+ ],
+ "rate": "70%",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic",
+ "restart": "true"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 03:55:31",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": "true",
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "31dfef5b7f0d4cefa8f78348321335f6",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "404397pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "64"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_64-fc_100k-rate_70%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "64"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_64-fc_100k-rate_70%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "64": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 0.5412860544,
+ "rate_pps": 201371,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 135321513
+ },
+ "tx": {
+ "rate_percent": 0.5414158848,
+ "rate_pps": 201419,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 135353971
+ },
+ "orig": {
+ "rate_percent": 0.5435095679999999,
+ "rate_pps": 202198,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 135877392
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 1.0825922688,
+ "rate_pps": 402749.0,
+ "rate_bps": 270648066.0
+ },
+ "tx": {
+ "rate_percent": 1.0828642944000002,
+ "rate_pps": 402850.0,
+ "rate_bps": 270716073.0
+ },
+ "orig": {
+ "rate_percent": 1.0870191359999999,
+ "rate_pps": 404396.0,
+ "rate_bps": 271754784.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 0.5413062144,
+ "rate_pps": 201378,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 135326553
+ },
+ "tx": {
+ "rate_percent": 0.5414484096000001,
+ "rate_pps": 201431,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 135362102
+ },
+ "orig": {
+ "rate_percent": 0.5435095679999999,
+ "rate_pps": 202198,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 135877392
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9936,
+ "-1 (-0.0101%)"
+ ],
+ "lat_max_usec": 913,
+ "lat_avg_usec": 72,
+ "lat_min_usec": 31,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9937,
+ 9937
+ ],
+ "lat_max_usec": 10880,
+ "lat_avg_usec": 72,
+ "lat_min_usec": 30,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 402851,
+ "overall": {
+ "drop_rate_percent": 0.02512093171847776,
+ "rx": {
+ "dropped_pkts": 1012,
+ "pkt_bit_rate": 109573400.0,
+ "pkt_rate": 201421.0,
+ "max_delay_usec": 10880,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 72.0,
+ "total_pkt_bytes": 273870068,
+ "total_pkts": 4027501,
+ "min_delay_usec": 30
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 273938884,
+ "total_pkts": 4028513,
+ "pkt_bit_rate": 109576132.0,
+ "pkt_rate": 201426.5
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.023978350974548694,
+ "rx": {
+ "dropped_pkts": 483,
+ "pkt_bit_rate": 109577136,
+ "pkt_rate": 201428,
+ "max_delay_usec": 10880,
+ "total_pkt_bytes": 136932484,
+ "avg_delay_usec": 72,
+ "total_pkts": 2013713,
+ "min_delay_usec": 30
+ },
+ "tx": {
+ "total_pkt_bytes": 136973556,
+ "total_pkts": 2014317,
+ "pkt_bit_rate": 109577000,
+ "pkt_rate": 201428
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.02626358110134267,
+ "rx": {
+ "dropped_pkts": 529,
+ "pkt_bit_rate": 109569664,
+ "pkt_rate": 201414,
+ "max_delay_usec": 913,
+ "total_pkt_bytes": 136937584,
+ "avg_delay_usec": 72,
+ "total_pkts": 2013788,
+ "min_delay_usec": 31
+ },
+ "tx": {
+ "total_pkt_bytes": 136965328,
+ "total_pkts": 2014196,
+ "pkt_bit_rate": 109575264,
+ "pkt_rate": 201425
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 270715872.0,
+ "theoretical_tx_rate_pps": 74404761.90476191
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "31dfef5b7f0d4cefa8f78348321335f6"
+ },
+ "synthesis": {
+ "avg_delay_usec": 72.0,
+ "total_tx_rate": 402851
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_64-fc_100k-rate_90%.json",
+ "frame_sizes": [
+ "64"
+ ],
+ "rate": "90%",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic",
+ "restart": "true"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 03:56:11",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": "true",
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "4d3fa821db7a40a2bc3cab131ccc1635",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "519939pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "64"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_64-fc_100k-rate_90%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "64"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_64-fc_100k-rate_90%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "64": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 0.6960530304,
+ "rate_pps": 258948,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 174013257
+ },
+ "tx": {
+ "rate_percent": 0.6961078655999999,
+ "rate_pps": 258968,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 174026966
+ },
+ "orig": {
+ "rate_percent": 0.698798016,
+ "rate_pps": 259969,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 174699504
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 1.3921789055999998,
+ "rate_pps": 517923.0,
+ "rate_bps": 348044725.0
+ },
+ "tx": {
+ "rate_percent": 1.3922579327999998,
+ "rate_pps": 517952.0,
+ "rate_bps": 348064482.0
+ },
+ "orig": {
+ "rate_percent": 1.397596032,
+ "rate_pps": 519938.0,
+ "rate_bps": 349399008.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 0.6961258751999999,
+ "rate_pps": 258975,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 174031468
+ },
+ "tx": {
+ "rate_percent": 0.6961500671999998,
+ "rate_pps": 258984,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 174037516
+ },
+ "orig": {
+ "rate_percent": 0.698798016,
+ "rate_pps": 259969,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 174699504
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9936,
+ 9936
+ ],
+ "lat_max_usec": 826,
+ "lat_avg_usec": 86,
+ "lat_min_usec": 32,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9938,
+ 9938
+ ],
+ "lat_max_usec": 2343,
+ "lat_avg_usec": 82,
+ "lat_min_usec": 31,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 517953,
+ "overall": {
+ "drop_rate_percent": 0.005676189600950356,
+ "rx": {
+ "dropped_pkts": 294,
+ "pkt_bit_rate": 141229784.0,
+ "pkt_rate": 259613.5,
+ "max_delay_usec": 2343,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 84.00010464861909,
+ "total_pkt_bytes": 352188116,
+ "total_pkts": 5179237,
+ "min_delay_usec": 31
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 352208108,
+ "total_pkts": 5179531,
+ "pkt_bit_rate": 141223456.0,
+ "pkt_rate": 259601.5
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.007876922316556519,
+ "rx": {
+ "dropped_pkts": 204,
+ "pkt_bit_rate": 141232784,
+ "pkt_rate": 259619,
+ "max_delay_usec": 2343,
+ "total_pkt_bytes": 176084844,
+ "avg_delay_usec": 82,
+ "total_pkts": 2589483,
+ "min_delay_usec": 31
+ },
+ "tx": {
+ "total_pkt_bytes": 176109392,
+ "total_pkts": 2589844,
+ "pkt_bit_rate": 141216336,
+ "pkt_rate": 259588
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0034753234657315733,
+ "rx": {
+ "dropped_pkts": 90,
+ "pkt_bit_rate": 141226784,
+ "pkt_rate": 259608,
+ "max_delay_usec": 826,
+ "total_pkt_bytes": 176103272,
+ "avg_delay_usec": 86,
+ "total_pkts": 2589754,
+ "min_delay_usec": 32
+ },
+ "tx": {
+ "total_pkt_bytes": 176098716,
+ "total_pkts": 2589687,
+ "pkt_bit_rate": 141230576,
+ "pkt_rate": 259615
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 348064416.0,
+ "theoretical_tx_rate_pps": 74404761.90476191
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "4d3fa821db7a40a2bc3cab131ccc1635"
+ },
+ "synthesis": {
+ "avg_delay_usec": 84.00010464861909,
+ "total_tx_rate": 517953
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_768-fc_100k-rate_70%.json",
+ "frame_sizes": [
+ "768"
+ ],
+ "rate": "70%",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic",
+ "restart": "true"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 03:56:51",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": "true",
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "d72d4f4bfee344328eab1bb6f1ad4f3d",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "323313pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "768"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_768-fc_100k-rate_70%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "768"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_768-fc_100k-rate_70%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "768": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 4.0606182144,
+ "rate_pps": 161033,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1015154553
+ },
+ "tx": {
+ "rate_percent": 4.0606182144,
+ "rate_pps": 161033,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1015154553
+ },
+ "orig": {
+ "rate_percent": 4.076330304,
+ "rate_pps": 161656,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1019082576
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 8.121481024,
+ "rate_pps": 322076.0,
+ "rate_bps": 2030370255.0
+ },
+ "tx": {
+ "rate_percent": 8.121481024,
+ "rate_pps": 322076.0,
+ "rate_bps": 2030370255.0
+ },
+ "orig": {
+ "rate_percent": 8.152660608,
+ "rate_pps": 323312.0,
+ "rate_bps": 2038165152.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 4.0608628096,
+ "rate_pps": 161043,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1015215702
+ },
+ "tx": {
+ "rate_percent": 4.0608628096,
+ "rate_pps": 161043,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1015215702
+ },
+ "orig": {
+ "rate_percent": 4.076330304,
+ "rate_pps": 161656,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1019082576
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9937,
+ 9937
+ ],
+ "lat_max_usec": 319,
+ "lat_avg_usec": 127,
+ "lat_min_usec": 37,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9938,
+ 9938
+ ],
+ "lat_max_usec": 5029,
+ "lat_avg_usec": 131,
+ "lat_min_usec": 49,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 322076,
+ "overall": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 996376192.0,
+ "pkt_rate": 161330.0,
+ "max_delay_usec": 5029,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 128.99993976586308,
+ "total_pkt_bytes": 2486430580,
+ "total_pkts": 3220765,
+ "min_delay_usec": 37
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 2486430580,
+ "total_pkts": 3220765,
+ "pkt_bit_rate": 996371424.0,
+ "pkt_rate": 161329.0
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 996389184,
+ "pkt_rate": 161332,
+ "max_delay_usec": 5029,
+ "total_pkt_bytes": 1243177848,
+ "avg_delay_usec": 131,
+ "total_pkts": 1610334,
+ "min_delay_usec": 49
+ },
+ "tx": {
+ "total_pkt_bytes": 1243252732,
+ "total_pkts": 1610431,
+ "pkt_bit_rate": 996370048,
+ "pkt_rate": 161329
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 996363200,
+ "pkt_rate": 161328,
+ "max_delay_usec": 319,
+ "total_pkt_bytes": 1243252732,
+ "avg_delay_usec": 127,
+ "total_pkts": 1610431,
+ "min_delay_usec": 37
+ },
+ "tx": {
+ "total_pkt_bytes": 1243177848,
+ "total_pkts": 1610334,
+ "pkt_bit_rate": 996372800,
+ "pkt_rate": 161329
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 2030367104.0,
+ "theoretical_tx_rate_pps": 7931472.081218274
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "d72d4f4bfee344328eab1bb6f1ad4f3d"
+ },
+ "synthesis": {
+ "avg_delay_usec": 128.99993976586308,
+ "total_tx_rate": 322076
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_768-fc_100k-rate_90%.json",
+ "frame_sizes": [
+ "768"
+ ],
+ "rate": "90%",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic",
+ "restart": "true"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 03:57:29",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": "true",
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "fe186736edcd4ccf8aef444a8035ae7a",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "415688pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "768"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_768-fc_100k-rate_90%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "768"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_768-fc_100k-rate_90%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "768": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 5.223822208,
+ "rate_pps": 207163,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1305955552
+ },
+ "tx": {
+ "rate_percent": 5.2242786176000005,
+ "rate_pps": 207181,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1306069654
+ },
+ "orig": {
+ "rate_percent": 5.240994304,
+ "rate_pps": 207844,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1310248576
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 10.447904140799999,
+ "rate_pps": 414336.0,
+ "rate_bps": 2611976035.0
+ },
+ "tx": {
+ "rate_percent": 10.4488699136,
+ "rate_pps": 414374.0,
+ "rate_bps": 2612217478.0
+ },
+ "orig": {
+ "rate_percent": 10.481988608,
+ "rate_pps": 415688.0,
+ "rate_bps": 2620497152.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 5.224081932799999,
+ "rate_pps": 207173,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1306020483
+ },
+ "tx": {
+ "rate_percent": 5.224591296,
+ "rate_pps": 207193,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1306147824
+ },
+ "orig": {
+ "rate_percent": 5.240994304,
+ "rate_pps": 207844,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1310248576
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9947,
+ 9947
+ ],
+ "lat_max_usec": 5273,
+ "lat_avg_usec": 150,
+ "lat_min_usec": 38,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9948,
+ 9948
+ ],
+ "lat_max_usec": 11188,
+ "lat_avg_usec": 145,
+ "lat_min_usec": 37,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 414374,
+ "overall": {
+ "drop_rate_percent": 0.009242844517979626,
+ "rx": {
+ "dropped_pkts": 383,
+ "pkt_bit_rate": 1203150656.0,
+ "pkt_rate": 194810.0,
+ "max_delay_usec": 11188,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 147.50006214758398,
+ "total_pkt_bytes": 3198676236,
+ "total_pkts": 4143363,
+ "min_delay_usec": 37
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 3198971912,
+ "total_pkts": 4143746,
+ "pkt_bit_rate": 1203347648.0,
+ "pkt_rate": 194842.0
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.008735795283153188,
+ "rx": {
+ "dropped_pkts": 181,
+ "pkt_bit_rate": 1195129344,
+ "pkt_rate": 193511,
+ "max_delay_usec": 11188,
+ "total_pkt_bytes": 1599298360,
+ "avg_delay_usec": 145,
+ "total_pkts": 2071630,
+ "min_delay_usec": 37
+ },
+ "tx": {
+ "total_pkt_bytes": 1599533820,
+ "total_pkts": 2071935,
+ "pkt_bit_rate": 1205016576,
+ "pkt_rate": 195112
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.009749924100219567,
+ "rx": {
+ "dropped_pkts": 202,
+ "pkt_bit_rate": 1211171968,
+ "pkt_rate": 196109,
+ "max_delay_usec": 5273,
+ "total_pkt_bytes": 1599377876,
+ "avg_delay_usec": 150,
+ "total_pkts": 2071733,
+ "min_delay_usec": 38
+ },
+ "tx": {
+ "total_pkt_bytes": 1599438092,
+ "total_pkts": 2071811,
+ "pkt_bit_rate": 1201678720,
+ "pkt_rate": 194572
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 2612213696.0,
+ "theoretical_tx_rate_pps": 7931472.081218274
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "fe186736edcd4ccf8aef444a8035ae7a"
+ },
+ "synthesis": {
+ "avg_delay_usec": 147.50006214758398,
+ "total_tx_rate": 414374
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_1518-fc_100k-rate_70%.json",
+ "frame_sizes": [
+ "1518"
+ ],
+ "rate": "70%",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic",
+ "restart": "true"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 03:58:09",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": "true",
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "3e05e243e2d848f58e131d186c909bc7",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "353369pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1518"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_1518-fc_100k-rate_70%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1518"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_1518-fc_100k-rate_70%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1518": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 8.6621931776,
+ "rate_pps": 176003,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 2165548294
+ },
+ "tx": {
+ "rate_percent": 8.6621931776,
+ "rate_pps": 176003,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 2165548294
+ },
+ "orig": {
+ "rate_percent": 8.695704352,
+ "rate_pps": 176684,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 2173926088
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 17.324908044800004,
+ "rate_pps": 352017.0,
+ "rate_bps": 4331227010.0
+ },
+ "tx": {
+ "rate_percent": 17.324908044800004,
+ "rate_pps": 352017.0,
+ "rate_bps": 4331227010.0
+ },
+ "orig": {
+ "rate_percent": 17.391408704,
+ "rate_pps": 353368.0,
+ "rate_bps": 4347852176.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 8.662714867200002,
+ "rate_pps": 176014,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 2165678716
+ },
+ "tx": {
+ "rate_percent": 8.662714867200002,
+ "rate_pps": 176014,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 2165678716
+ },
+ "orig": {
+ "rate_percent": 8.695704352,
+ "rate_pps": 176684,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 2173926088
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9936,
+ 9936
+ ],
+ "lat_max_usec": 327,
+ "lat_avg_usec": 135,
+ "lat_min_usec": 43,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9937,
+ 9937
+ ],
+ "lat_max_usec": 4259,
+ "lat_avg_usec": 130,
+ "lat_min_usec": 44,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 352017,
+ "overall": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 2147925760.0,
+ "pkt_rate": 176406.5,
+ "max_delay_usec": 4259,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 132.50007528028414,
+ "total_pkt_bytes": 5357710916,
+ "total_pkts": 3520178,
+ "min_delay_usec": 43
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 5357710916,
+ "total_pkts": 3520178,
+ "pkt_bit_rate": 2148198656.0,
+ "pkt_rate": 176428.5
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 2147965440,
+ "pkt_rate": 176410,
+ "max_delay_usec": 4259,
+ "total_pkt_bytes": 2678774792,
+ "avg_delay_usec": 130,
+ "total_pkts": 1760036,
+ "min_delay_usec": 44
+ },
+ "tx": {
+ "total_pkt_bytes": 2678936124,
+ "total_pkts": 1760142,
+ "pkt_bit_rate": 2148139008,
+ "pkt_rate": 176424
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 2147886080,
+ "pkt_rate": 176403,
+ "max_delay_usec": 327,
+ "total_pkt_bytes": 2678936124,
+ "avg_delay_usec": 135,
+ "total_pkts": 1760142,
+ "min_delay_usec": 43
+ },
+ "tx": {
+ "total_pkt_bytes": 2678774792,
+ "total_pkts": 1760036,
+ "pkt_bit_rate": 2148258304,
+ "pkt_rate": 176433
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 4331217168.0,
+ "theoretical_tx_rate_pps": 4063719.1157347206
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "3e05e243e2d848f58e131d186c909bc7"
+ },
+ "synthesis": {
+ "avg_delay_usec": 132.50007528028414,
+ "total_tx_rate": 352017
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_1518-fc_100k-rate_90%.json",
+ "frame_sizes": [
+ "1518"
+ ],
+ "rate": "90%",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic",
+ "restart": "true"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 03:58:48",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": "true",
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "7910b7f29a8f4eae96799809b0c39463",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "454332pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1518"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_1518-fc_100k-rate_90%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1518"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_1518-fc_100k-rate_90%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1518": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 11.1438755264,
+ "rate_pps": 226427,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 2785968881
+ },
+ "tx": {
+ "rate_percent": 11.144554707200001,
+ "rate_pps": 226441,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 2786138676
+ },
+ "orig": {
+ "rate_percent": 11.180201856,
+ "rate_pps": 227166,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 2795050464
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 22.289040512,
+ "rate_pps": 452881.0,
+ "rate_bps": 5572260127.0
+ },
+ "tx": {
+ "rate_percent": 22.289778752,
+ "rate_pps": 452896.0,
+ "rate_bps": 5572444687.0
+ },
+ "orig": {
+ "rate_percent": 22.360403712,
+ "rate_pps": 454332.0,
+ "rate_bps": 5590100928.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 11.145164985600001,
+ "rate_pps": 226454,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 2786291246
+ },
+ "tx": {
+ "rate_percent": 11.145224044799999,
+ "rate_pps": 226455,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 2786306011
+ },
+ "orig": {
+ "rate_percent": 11.180201856,
+ "rate_pps": 227166,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 2795050464
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9948,
+ "-2 (-0.0201%)"
+ ],
+ "lat_max_usec": 205,
+ "lat_avg_usec": 100,
+ "lat_min_usec": 38,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9949,
+ 9949
+ ],
+ "lat_max_usec": 5711,
+ "lat_avg_usec": 106,
+ "lat_min_usec": 38,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 452897,
+ "overall": {
+ "drop_rate_percent": 0.003312011340326829,
+ "rx": {
+ "dropped_pkts": 150,
+ "pkt_bit_rate": 2634780672.0,
+ "pkt_rate": 216390.5,
+ "max_delay_usec": 5711,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 102.9998264448576,
+ "total_pkt_bytes": 6892864040,
+ "total_pkts": 4528820,
+ "min_delay_usec": 38
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 6893092340,
+ "total_pkts": 4528970,
+ "pkt_bit_rate": 2645309568.0,
+ "pkt_rate": 217255.5
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.006093917872533785,
+ "rx": {
+ "dropped_pkts": 138,
+ "pkt_bit_rate": 2509765376,
+ "pkt_rate": 206123,
+ "max_delay_usec": 5711,
+ "total_pkt_bytes": 3446232638,
+ "avg_delay_usec": 106,
+ "total_pkts": 2264279,
+ "min_delay_usec": 38
+ },
+ "tx": {
+ "total_pkt_bytes": 3446649666,
+ "total_pkts": 2264553,
+ "pkt_bit_rate": 2530603776,
+ "pkt_rate": 207835
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0005299377279008239,
+ "rx": {
+ "dropped_pkts": 12,
+ "pkt_bit_rate": 2759795968,
+ "pkt_rate": 226658,
+ "max_delay_usec": 205,
+ "total_pkt_bytes": 3446631402,
+ "avg_delay_usec": 100,
+ "total_pkts": 2264541,
+ "min_delay_usec": 38
+ },
+ "tx": {
+ "total_pkt_bytes": 3446442674,
+ "total_pkts": 2264417,
+ "pkt_bit_rate": 2760015360,
+ "pkt_rate": 226676
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 5572444688.0,
+ "theoretical_tx_rate_pps": 4063719.1157347206
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "7910b7f29a8f4eae96799809b0c39463"
+ },
+ "synthesis": {
+ "avg_delay_usec": 102.9998264448576,
+ "total_tx_rate": 452897
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_9000-fc_100k-rate_70%.json",
+ "frame_sizes": [
+ "9000"
+ ],
+ "rate": "70%",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic",
+ "restart": "true"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 03:59:26",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": "true",
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "422174a3acbd45169f09f61c00aee4d4",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "183573pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "9000"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_9000-fc_100k-rate_70%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "9000"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_9000-fc_100k-rate_70%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "9000": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 26.392404543999998,
+ "rate_pps": 91437,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 6598101136
+ },
+ "tx": {
+ "rate_percent": 26.392404543999998,
+ "rate_pps": 91437,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 6598101136
+ },
+ "orig": {
+ "rate_percent": 26.49325536,
+ "rate_pps": 91786,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 6623313840
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 52.786425472,
+ "rate_pps": 182879.0,
+ "rate_bps": 13196606368.0
+ },
+ "tx": {
+ "rate_percent": 52.786425472,
+ "rate_pps": 182879.0,
+ "rate_bps": 13196606368.0
+ },
+ "orig": {
+ "rate_percent": 52.98651072,
+ "rate_pps": 183572.0,
+ "rate_bps": 13246627680.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 26.394020928,
+ "rate_pps": 91442,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 6598505232
+ },
+ "tx": {
+ "rate_percent": 26.394020928,
+ "rate_pps": 91442,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 6598505232
+ },
+ "orig": {
+ "rate_percent": 26.49325536,
+ "rate_pps": 91786,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 6623313840
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9937,
+ 9937
+ ],
+ "lat_max_usec": 7076,
+ "lat_avg_usec": 465,
+ "lat_min_usec": 117,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9938,
+ 9938
+ ],
+ "lat_max_usec": 7737,
+ "lat_avg_usec": 470,
+ "lat_min_usec": 130,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 182879,
+ "overall": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 6309462016.0,
+ "pkt_rate": 87592.0,
+ "max_delay_usec": 7737,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 467.4999234469854,
+ "total_pkt_bytes": 16466497192,
+ "total_pkts": 1828798,
+ "min_delay_usec": 117
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 16466497192,
+ "total_pkts": 1828798,
+ "pkt_bit_rate": 6308925440.0,
+ "pkt_rate": 87584.5
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 6276257280,
+ "pkt_rate": 87131,
+ "max_delay_usec": 7737,
+ "total_pkt_bytes": 8232996484,
+ "avg_delay_usec": 470,
+ "total_pkts": 914371,
+ "min_delay_usec": 130
+ },
+ "tx": {
+ "total_pkt_bytes": 8233500708,
+ "total_pkts": 914427,
+ "pkt_bit_rate": 6310474240,
+ "pkt_rate": 87606
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 6342666752,
+ "pkt_rate": 88053,
+ "max_delay_usec": 7076,
+ "total_pkt_bytes": 8233500708,
+ "avg_delay_usec": 465,
+ "total_pkts": 914427,
+ "min_delay_usec": 117
+ },
+ "tx": {
+ "total_pkt_bytes": 8232996484,
+ "total_pkts": 914371,
+ "pkt_bit_rate": 6307376640,
+ "pkt_rate": 87563
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 13196548640.0,
+ "theoretical_tx_rate_pps": 692904.6563192905
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "422174a3acbd45169f09f61c00aee4d4"
+ },
+ "synthesis": {
+ "avg_delay_usec": 467.4999234469854,
+ "total_tx_rate": 182879
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_9000-fc_100k-rate_90%.json",
+ "frame_sizes": [
+ "9000"
+ ],
+ "rate": "90%",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic",
+ "restart": "true"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 04:00:06",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": "true",
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "f14fd151f22a41f7b5185e37d548ad45",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "236023pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "9000"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_9000-fc_100k-rate_90%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "9000"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_9000-fc_100k-rate_90%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "9000": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 33.929862912,
+ "rate_pps": 117550,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 8482465728
+ },
+ "tx": {
+ "rate_percent": 33.93338432,
+ "rate_pps": 117563,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 8483346080
+ },
+ "orig": {
+ "rate_percent": 34.062839360000005,
+ "rate_pps": 118011,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 8515709840
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 67.86532543999999,
+ "rate_pps": 235120.0,
+ "rate_bps": 16966331360.0
+ },
+ "tx": {
+ "rate_percent": 67.868846848,
+ "rate_pps": 235133.0,
+ "rate_bps": 16967211712.0
+ },
+ "orig": {
+ "rate_percent": 68.12567872000001,
+ "rate_pps": 236022.0,
+ "rate_bps": 17031419680.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 33.935462528,
+ "rate_pps": 117570,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 8483865632
+ },
+ "tx": {
+ "rate_percent": 33.935462528,
+ "rate_pps": 117570,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 8483865632
+ },
+ "orig": {
+ "rate_percent": 34.062839360000005,
+ "rate_pps": 118011,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 8515709840
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9937,
+ 9937
+ ],
+ "lat_max_usec": 4884,
+ "lat_avg_usec": 544,
+ "lat_min_usec": 229,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9939,
+ 9939
+ ],
+ "lat_max_usec": 8447,
+ "lat_avg_usec": 520,
+ "lat_min_usec": 229,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 235133,
+ "overall": {
+ "drop_rate_percent": 0.005188548448283782,
+ "rx": {
+ "dropped_pkts": 122,
+ "pkt_bit_rate": 8485221632.0,
+ "pkt_rate": 117797.5,
+ "max_delay_usec": 8447,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 532.000990128487,
+ "total_pkt_bytes": 21170294840,
+ "total_pkts": 2351210,
+ "min_delay_usec": 229
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 21171393328,
+ "total_pkts": 2351332,
+ "pkt_bit_rate": 8486891520.0,
+ "pkt_rate": 117820.5
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.010376779149818577,
+ "rx": {
+ "dropped_pkts": 122,
+ "pkt_bit_rate": 8483412992,
+ "pkt_rate": 117772,
+ "max_delay_usec": 8447,
+ "total_pkt_bytes": 10584274032,
+ "avg_delay_usec": 520,
+ "total_pkts": 1175508,
+ "min_delay_usec": 229
+ },
+ "tx": {
+ "total_pkt_bytes": 10586020808,
+ "total_pkts": 1175702,
+ "pkt_bit_rate": 8486368256,
+ "pkt_rate": 117813
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 8487030272,
+ "pkt_rate": 117823,
+ "max_delay_usec": 4884,
+ "total_pkt_bytes": 10586020808,
+ "avg_delay_usec": 544,
+ "total_pkts": 1175702,
+ "min_delay_usec": 229
+ },
+ "tx": {
+ "total_pkt_bytes": 10585372520,
+ "total_pkts": 1175630,
+ "pkt_bit_rate": 8487414784,
+ "pkt_rate": 117828
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 16967197280.0,
+ "theoretical_tx_rate_pps": 692904.6563192905
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "f14fd151f22a41f7b5185e37d548ad45"
+ },
+ "synthesis": {
+ "avg_delay_usec": 532.000990128487,
+ "total_tx_rate": 235133
+ }
+ }
+ ],
+ "throughput": [
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "64"
+ ],
+ "rate": "ndr",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 00:21:09",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "2f9d3285d24c4aa38cce7d6e7e01cee8",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "64"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_128-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "64"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_128-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "64": {
+ "ndr": {
+ "load_percent_per_direction": 0.48828125,
+ "timestamp_sec": 1648513409.8775496,
+ "stats": {
+ "total_tx_rate": 361069,
+ "overall": {
+ "rx_pkts": 3610699,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 1893,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 3610699,
+ "avg_delay_usec": 91.50007602406072,
+ "min_delay_usec": 28,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1805258,
+ "min_delay_usec": 28,
+ "drop_pct": 0,
+ "max_delay_usec": 990,
+ "tx_pkts": 1805441,
+ "avg_delay_usec": 90,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1805441,
+ "min_delay_usec": 32,
+ "drop_pct": 0,
+ "max_delay_usec": 1893,
+ "tx_pkts": 1805258,
+ "avg_delay_usec": 93,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 242638368.0,
+ "theoretical_tx_rate_pps": 74404761.90476191
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 0.9765625,
+ "duration_sec": 10.0,
+ "l2frame_size": "64",
+ "rate_pps": 363304,
+ "rate_bps": 244140624.0,
+ "time_taken_sec": 137.65262913703918
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 706488.1334367159,
+ "rx_pkts": 4041557,
+ "time_ms": 1648513284731,
+ "drop_pct": 421600523,
+ "total_tx_pps": 42564208,
+ "tx_pps": 74404760,
+ "tx_pkts": 425642080,
+ "warning": "WARNING: There is a significant difference between requested TX rate (74404760) and actual TX rate (42564208). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 99.05047992435334
+ },
+ {
+ "rx_pps": 518432.56253104715,
+ "rx_pkts": 5152442,
+ "time_ms": 1648513297224,
+ "drop_pct": 364583410,
+ "total_tx_pps": 36973585,
+ "tx_pps": 37202380,
+ "tx_pkts": 369735852,
+ "drop_percentage": 98.60645323624175
+ },
+ {
+ "rx_pps": 606695.2079490544,
+ "rx_pkts": 6029034,
+ "time_ms": 1648513309723,
+ "drop_pct": 178820303,
+ "total_tx_pps": 18484933,
+ "tx_pps": 18601190,
+ "tx_pkts": 184849337,
+ "drop_percentage": 96.73840647856909
+ },
+ {
+ "rx_pps": 490524.8337800907,
+ "rx_pkts": 4874836,
+ "time_ms": 1648513322260,
+ "drop_pct": 87554471,
+ "total_tx_pps": 9242930,
+ "tx_pps": 9300594,
+ "tx_pkts": 92429307,
+ "drop_percentage": 94.72587628510512
+ },
+ {
+ "rx_pps": 1794968.8359250196,
+ "rx_pkts": 17837503,
+ "time_ms": 1648513334800,
+ "drop_pct": 28374814,
+ "total_tx_pps": 4621231,
+ "tx_pps": 4650296,
+ "tx_pkts": 46212317,
+ "drop_percentage": 61.40097671363243
+ },
+ {
+ "rx_pps": 1920709.0456904878,
+ "rx_pkts": 19088969,
+ "time_ms": 1648513347304,
+ "drop_pct": 4019517,
+ "total_tx_pps": 2310848,
+ "tx_pps": 2325148,
+ "tx_pkts": 23108486,
+ "drop_percentage": 17.394116602879134
+ },
+ {
+ "rx_pps": 1161713.5081454054,
+ "rx_pkts": 11545692,
+ "time_ms": 1648513359821,
+ "drop_pct": 8552,
+ "total_tx_pps": 1155424,
+ "tx_pps": 1162574,
+ "tx_pkts": 11554244,
+ "drop_percentage": 0.07401609313426305
+ },
+ {
+ "rx_pps": 581251.9908500996,
+ "rx_pkts": 5776774,
+ "time_ms": 1648513372321,
+ "drop_pct": 338,
+ "total_tx_pps": 577711,
+ "tx_pps": 581286,
+ "tx_pkts": 5777112,
+ "drop_percentage": 0.005850674177686014
+ },
+ {
+ "rx_pps": 290642.0,
+ "rx_pkts": 2888548,
+ "time_ms": 1648513384819,
+ "drop_pct": 0,
+ "total_tx_pps": 288854,
+ "tx_pps": 290642,
+ "tx_pkts": 2888548,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 435944.8824348059,
+ "rx_pkts": 4332640,
+ "time_ms": 1648513397325,
+ "drop_pct": 190,
+ "total_tx_pps": 433283,
+ "tx_pps": 435964,
+ "tx_pkts": 4332830,
+ "drop_percentage": 0.0043851247337190705
+ },
+ {
+ "rx_pps": 363304.0,
+ "rx_pkts": 3610699,
+ "time_ms": 1648513409876,
+ "drop_pct": 0,
+ "total_tx_pps": 361069,
+ "tx_pps": 363304,
+ "tx_pkts": 3610699,
+ "ndr_pps": 181652,
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "2f9d3285d24c4aa38cce7d6e7e01cee8"
+ },
+ "synthesis": {
+ "avg_delay_usec": 91.50007602406072,
+ "total_tx_rate": 361069
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "128"
+ ],
+ "rate": "ndr",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 00:28:22",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "a2a3552c4052460aae598a9a2f15a5af",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "128"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_128-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "128"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_128-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "128": {
+ "ndr": {
+ "load_percent_per_direction": 1.5625,
+ "timestamp_sec": 1648513842.6383016,
+ "stats": {
+ "total_tx_rate": 655714,
+ "overall": {
+ "rx_pkts": 6557144,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 297,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 6557144,
+ "avg_delay_usec": 144.50047810449183,
+ "min_delay_usec": 32,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 3278407,
+ "min_delay_usec": 32,
+ "drop_pct": 0,
+ "max_delay_usec": 297,
+ "tx_pkts": 3278737,
+ "avg_delay_usec": 135,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 3278737,
+ "min_delay_usec": 35,
+ "drop_pct": 0,
+ "max_delay_usec": 285,
+ "tx_pkts": 3278407,
+ "avg_delay_usec": 154,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 776365376.0,
+ "theoretical_tx_rate_pps": 42229729.72972973
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 3.125,
+ "duration_sec": 10.0,
+ "l2frame_size": "128",
+ "rate_pps": 659838,
+ "rate_bps": 781250000.0,
+ "time_taken_sec": 137.85558819770813
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 437885.75742536853,
+ "rx_pkts": 4035817,
+ "time_ms": 1648513717287,
+ "drop_pct": 385178610,
+ "total_tx_pps": 38921442,
+ "tx_pps": 42229728,
+ "tx_pkts": 389214427,
+ "drop_percentage": 98.96308648394475
+ },
+ {
+ "rx_pps": 514776.8413086158,
+ "rx_pkts": 5125891,
+ "time_ms": 1648513729860,
+ "drop_pct": 205125392,
+ "total_tx_pps": 21025128,
+ "tx_pps": 21114864,
+ "tx_pkts": 210251283,
+ "drop_percentage": 97.5620167797026
+ },
+ {
+ "rx_pps": 432863.9814335654,
+ "rx_pkts": 4301586,
+ "time_ms": 1648513742365,
+ "drop_pct": 100612899,
+ "total_tx_pps": 10491448,
+ "tx_pps": 10557432,
+ "tx_pkts": 104914485,
+ "drop_percentage": 95.89991219992167
+ },
+ {
+ "rx_pps": 464230.29844768636,
+ "rx_pkts": 4613753,
+ "time_ms": 1648513754871,
+ "drop_pct": 47848768,
+ "total_tx_pps": 5246252,
+ "tx_pps": 5278716,
+ "tx_pkts": 52462521,
+ "drop_percentage": 91.20562086598926
+ },
+ {
+ "rx_pps": 2260538.697414863,
+ "rx_pkts": 22466366,
+ "time_ms": 1648513767378,
+ "drop_pct": 3764896,
+ "total_tx_pps": 2623126,
+ "tx_pps": 2639358,
+ "tx_pkts": 26231262,
+ "drop_percentage": 14.352706324232512
+ },
+ {
+ "rx_pps": 1312938.9549736879,
+ "rx_pkts": 13048644,
+ "time_ms": 1648513780029,
+ "drop_pct": 66976,
+ "total_tx_pps": 1311562,
+ "tx_pps": 1319678,
+ "tx_pkts": 13115620,
+ "drop_percentage": 0.510658283786813
+ },
+ {
+ "rx_pps": 659838.0,
+ "rx_pkts": 6557144,
+ "time_ms": 1648513792527,
+ "drop_pct": 0,
+ "total_tx_pps": 655714,
+ "tx_pps": 659838,
+ "tx_pkts": 6557144,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 988639.1634389523,
+ "rx_pkts": 9825098,
+ "time_ms": 1648513805064,
+ "drop_pct": 11119,
+ "total_tx_pps": 983621,
+ "tx_pps": 989758,
+ "tx_pkts": 9836217,
+ "drop_percentage": 0.11304142639390734
+ },
+ {
+ "rx_pps": 824644.053266355,
+ "rx_pkts": 8195727,
+ "time_ms": 1648513817582,
+ "drop_pct": 1530,
+ "total_tx_pps": 819725,
+ "tx_pps": 824798,
+ "tx_pkts": 8197257,
+ "drop_percentage": 0.018664780181955987
+ },
+ {
+ "rx_pps": 741931.4226302601,
+ "rx_pkts": 7373687,
+ "time_ms": 1648513830132,
+ "drop_pct": 3842,
+ "total_tx_pps": 737752,
+ "tx_pps": 742318,
+ "tx_pkts": 7377529,
+ "drop_percentage": 0.05207705723691496
+ },
+ {
+ "rx_pps": 700991.5684744361,
+ "rx_pkts": 6966807,
+ "time_ms": 1648513842637,
+ "drop_pct": 859,
+ "total_tx_pps": 696766,
+ "tx_pps": 701078,
+ "tx_pkts": 6967666,
+ "ndr_pps": 329919,
+ "drop_percentage": 0.012328375097198975
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "a2a3552c4052460aae598a9a2f15a5af"
+ },
+ "synthesis": {
+ "avg_delay_usec": 144.50047810449183,
+ "total_tx_rate": 655714
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "256"
+ ],
+ "rate": "ndr",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 00:30:46",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "b5ded3ef32b240bb8264ea8b1a53b1c7",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "256"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_128-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "256"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_128-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "256": {
+ "ndr": {
+ "load_percent_per_direction": 1.46484375,
+ "timestamp_sec": 1648513986.98413,
+ "stats": {
+ "total_tx_rate": 330004,
+ "overall": {
+ "rx_pkts": 3300040,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 1086,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 3300040,
+ "avg_delay_usec": 139.50062878025722,
+ "min_delay_usec": 31,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1649937,
+ "min_delay_usec": 31,
+ "drop_pct": 0,
+ "max_delay_usec": 293,
+ "tx_pkts": 1650103,
+ "avg_delay_usec": 127,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1650103,
+ "min_delay_usec": 32,
+ "drop_pct": 0,
+ "max_delay_usec": 1086,
+ "tx_pkts": 1649937,
+ "avg_delay_usec": 152,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 728648832.0,
+ "theoretical_tx_rate_pps": 22644927.536231883
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 2.9296875,
+ "duration_sec": 10.0,
+ "l2frame_size": "256",
+ "rate_pps": 331712,
+ "rate_bps": 732421874.0,
+ "time_taken_sec": 137.723162651062
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 414547.50338899135,
+ "rx_pkts": 3772754,
+ "time_ms": 1648513861746,
+ "drop_pct": 202316378,
+ "total_tx_pps": 20608913,
+ "tx_pps": 22644926,
+ "tx_pkts": 206089132,
+ "drop_percentage": 98.16935810084347
+ },
+ {
+ "rx_pps": 483450.9476070763,
+ "rx_pkts": 4804294,
+ "time_ms": 1648513874342,
+ "drop_pct": 107712677,
+ "total_tx_pps": 11251697,
+ "tx_pps": 11322462,
+ "tx_pkts": 112516971,
+ "drop_percentage": 95.73016056395618
+ },
+ {
+ "rx_pps": 824045.7574638664,
+ "rx_pkts": 8189779,
+ "time_ms": 1648513886844,
+ "drop_pct": 48074357,
+ "total_tx_pps": 5626413,
+ "tx_pps": 5661230,
+ "tx_pkts": 56264136,
+ "drop_percentage": 85.4440508959384
+ },
+ {
+ "rx_pps": 2016586.653705108,
+ "rx_pkts": 20041847,
+ "time_ms": 1648513899359,
+ "drop_pct": 8090211,
+ "total_tx_pps": 2813205,
+ "tx_pps": 2830614,
+ "tx_pkts": 28132058,
+ "drop_percentage": 28.757977820179384
+ },
+ {
+ "rx_pps": 1392997.5749045208,
+ "rx_pkts": 13842915,
+ "time_ms": 1648513911857,
+ "drop_pct": 221690,
+ "total_tx_pps": 1406460,
+ "tx_pps": 1415306,
+ "tx_pkts": 14064605,
+ "drop_percentage": 1.5762262786619319
+ },
+ {
+ "rx_pps": 707431.7454844667,
+ "rx_pkts": 7030812,
+ "time_ms": 1648513924415,
+ "drop_pct": 2189,
+ "total_tx_pps": 703300,
+ "tx_pps": 707652,
+ "tx_pkts": 7033001,
+ "drop_percentage": 0.03112469342745721
+ },
+ {
+ "rx_pps": 353821.1698142399,
+ "rx_pkts": 3516100,
+ "time_ms": 1648513936917,
+ "drop_pct": 48,
+ "total_tx_pps": 351614,
+ "tx_pps": 353826,
+ "tx_pkts": 3516148,
+ "drop_percentage": 0.001365130250490025
+ },
+ {
+ "rx_pps": 176912.0,
+ "rx_pkts": 1758241,
+ "time_ms": 1648513949440,
+ "drop_pct": 0,
+ "total_tx_pps": 175824,
+ "tx_pps": 176912,
+ "tx_pkts": 1758241,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 265368.99381318525,
+ "rx_pkts": 2637373,
+ "time_ms": 1648513961956,
+ "drop_pct": 10,
+ "total_tx_pps": 263738,
+ "tx_pps": 265370,
+ "tx_pkts": 2637383,
+ "drop_percentage": 0.0003791637392066302
+ },
+ {
+ "rx_pps": 309598.0,
+ "rx_pkts": 3076942,
+ "time_ms": 1648513974476,
+ "drop_pct": 0,
+ "total_tx_pps": 307694,
+ "tx_pps": 309598,
+ "tx_pkts": 3076942,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 331712.0,
+ "rx_pkts": 3300040,
+ "time_ms": 1648513986983,
+ "drop_pct": 0,
+ "total_tx_pps": 330004,
+ "tx_pps": 331712,
+ "tx_pkts": 3300040,
+ "ndr_pps": 165856,
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "b5ded3ef32b240bb8264ea8b1a53b1c7"
+ },
+ "synthesis": {
+ "avg_delay_usec": 139.50062878025722,
+ "total_tx_rate": 330004
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "512"
+ ],
+ "rate": "ndr",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 00:38:00",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "14a1559a15b240baba4ced0f0074e6b2",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "512"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_128-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "512"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_128-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "512": {
+ "ndr": {
+ "load_percent_per_direction": 3.515625,
+ "timestamp_sec": 1648514420.241935,
+ "stats": {
+ "total_tx_rate": 410478,
+ "overall": {
+ "rx_pkts": 4104780,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 2294,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 4104780,
+ "avg_delay_usec": 102.50042657584572,
+ "min_delay_usec": 25,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 2052287,
+ "min_delay_usec": 25,
+ "drop_pct": 0,
+ "max_delay_usec": 178,
+ "tx_pkts": 2052493,
+ "avg_delay_usec": 94,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 2052493,
+ "min_delay_usec": 32,
+ "drop_pct": 0,
+ "max_delay_usec": 2294,
+ "tx_pkts": 2052287,
+ "avg_delay_usec": 111,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 1746994368.0,
+ "theoretical_tx_rate_pps": 11748120.30075188
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 7.03125,
+ "duration_sec": 10.0,
+ "l2frame_size": "512",
+ "rate_pps": 413018,
+ "rate_bps": 1757812500.0,
+ "time_taken_sec": 137.53734683990479
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 524663.0616057739,
+ "rx_pkts": 4997001,
+ "time_ms": 1648514295209,
+ "drop_pct": 106894557,
+ "total_tx_pps": 11189155,
+ "tx_pps": 11748120,
+ "tx_pkts": 111891558,
+ "drop_percentage": 95.53406790528379
+ },
+ {
+ "rx_pps": 544892.1971034479,
+ "rx_pkts": 5414866,
+ "time_ms": 1648514307703,
+ "drop_pct": 52958603,
+ "total_tx_pps": 5837346,
+ "tx_pps": 5874060,
+ "tx_pkts": 58373469,
+ "drop_percentage": 90.72375499903903
+ },
+ {
+ "rx_pps": 1890962.4682001427,
+ "rx_pkts": 18793332,
+ "time_ms": 1648514320196,
+ "drop_pct": 10396343,
+ "total_tx_pps": 2918967,
+ "tx_pps": 2937030,
+ "tx_pkts": 29189675,
+ "drop_percentage": 35.61650823450415
+ },
+ {
+ "rx_pps": 1457857.666167266,
+ "rx_pkts": 14488922,
+ "time_ms": 1648514332694,
+ "drop_pct": 105908,
+ "total_tx_pps": 1459483,
+ "tx_pps": 1468514,
+ "tx_pkts": 14594830,
+ "drop_percentage": 0.7256542213920957
+ },
+ {
+ "rx_pps": 734180.9171085032,
+ "rx_pkts": 7304369,
+ "time_ms": 1648514345200,
+ "drop_pct": 747,
+ "total_tx_pps": 730511,
+ "tx_pps": 734256,
+ "tx_pkts": 7305116,
+ "drop_percentage": 0.010225710310418069
+ },
+ {
+ "rx_pps": 367128.0,
+ "rx_pkts": 3648705,
+ "time_ms": 1648514357697,
+ "drop_pct": 0,
+ "total_tx_pps": 364870,
+ "tx_pps": 367128,
+ "tx_pkts": 3648705,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 549710.0929020192,
+ "rx_pkts": 5462911,
+ "time_ms": 1648514370202,
+ "drop_pct": 9758,
+ "total_tx_pps": 547266,
+ "tx_pps": 550692,
+ "tx_pkts": 5472669,
+ "drop_percentage": 0.17830422413634006
+ },
+ {
+ "rx_pps": 458905.1702994093,
+ "rx_pkts": 4560831,
+ "time_ms": 1648514382706,
+ "drop_pct": 48,
+ "total_tx_pps": 456087,
+ "tx_pps": 458910,
+ "tx_pkts": 4560879,
+ "drop_percentage": 0.0010524287094658728
+ },
+ {
+ "rx_pps": 413018.0,
+ "rx_pkts": 4104780,
+ "time_ms": 1648514395211,
+ "drop_pct": 0,
+ "total_tx_pps": 410478,
+ "tx_pps": 413018,
+ "tx_pkts": 4104780,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 435770.00100064784,
+ "rx_pkts": 4335260,
+ "time_ms": 1648514407739,
+ "drop_pct": 1930,
+ "total_tx_pps": 433719,
+ "tx_pps": 435964,
+ "tx_pkts": 4337190,
+ "drop_percentage": 0.04449885755523738
+ },
+ {
+ "rx_pps": 424408.48645580024,
+ "rx_pkts": 4217987,
+ "time_ms": 1648514420241,
+ "drop_pct": 830,
+ "total_tx_pps": 421881,
+ "tx_pps": 424492,
+ "tx_pkts": 4218817,
+ "ndr_pps": 206509,
+ "drop_percentage": 0.019673761625593145
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "14a1559a15b240baba4ced0f0074e6b2"
+ },
+ "synthesis": {
+ "avg_delay_usec": 102.50042657584572,
+ "total_tx_rate": 410478
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "768"
+ ],
+ "rate": "ndr",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 00:50:01",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "8dd3beb2954d49b59cfca0b597a08ad2",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "768"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_128-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "768"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_128-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "768": {
+ "ndr": {
+ "load_percent_per_direction": 5.46875,
+ "timestamp_sec": 1648515142.0455678,
+ "stats": {
+ "total_tx_rate": 431865,
+ "overall": {
+ "rx_pkts": 4318624,
+ "drop_percentage": 0.0006715056754965032,
+ "drop_pct": 29,
+ "max_delay_usec": 4023,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 4318653,
+ "avg_delay_usec": 116.9997614981068,
+ "min_delay_usec": 31,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 2159209,
+ "min_delay_usec": 31,
+ "drop_pct": 9,
+ "max_delay_usec": 2684,
+ "tx_pkts": 2159435,
+ "avg_delay_usec": 122,
+ "drop_percentage": 0.0004167756843804051
+ },
+ "0": {
+ "rx_pkts": 2159415,
+ "min_delay_usec": 31,
+ "drop_pct": 20,
+ "max_delay_usec": 4023,
+ "tx_pkts": 2159218,
+ "avg_delay_usec": 112,
+ "drop_percentage": 0.0009262612668104841
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 2722476960.0,
+ "theoretical_tx_rate_pps": 7931472.081218274
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 10.9375,
+ "duration_sec": 10.0,
+ "l2frame_size": "768",
+ "rate_pps": 433752,
+ "rate_bps": 2734375000.0,
+ "time_taken_sec": 137.69723057746887
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 1902578.374437825,
+ "rx_pkts": 18430452,
+ "time_ms": 1648515016843,
+ "drop_pct": 58402448,
+ "total_tx_pps": 7683290,
+ "tx_pps": 7931472,
+ "tx_pkts": 76832900,
+ "drop_percentage": 76.01229160945377
+ },
+ {
+ "rx_pps": 1725307.3463774815,
+ "rx_pkts": 17171122,
+ "time_ms": 1648515029432,
+ "drop_pct": 22297867,
+ "total_tx_pps": 3946898,
+ "tx_pps": 3965736,
+ "tx_pkts": 39468989,
+ "drop_percentage": 56.49464950825064
+ },
+ {
+ "rx_pps": 1801127.1402490556,
+ "rx_pkts": 17898703,
+ "time_ms": 1648515041929,
+ "drop_pct": 1806050,
+ "total_tx_pps": 1970475,
+ "tx_pps": 1982868,
+ "tx_pkts": 19704753,
+ "drop_percentage": 9.16555513281491
+ },
+ {
+ "rx_pps": 988562.2393063733,
+ "rx_pkts": 9824828,
+ "time_ms": 1648515054424,
+ "drop_pct": 28541,
+ "total_tx_pps": 985336,
+ "tx_pps": 991434,
+ "tx_pkts": 9853369,
+ "drop_percentage": 0.28965727356805576
+ },
+ {
+ "rx_pps": 495697.1842930203,
+ "rx_pkts": 4926489,
+ "time_ms": 1648515066934,
+ "drop_pct": 187,
+ "total_tx_pps": 492667,
+ "tx_pps": 495716,
+ "tx_pkts": 4926676,
+ "drop_percentage": 0.00379566263338608
+ },
+ {
+ "rx_pps": 247858.0,
+ "rx_pkts": 2463092,
+ "time_ms": 1648515079432,
+ "drop_pct": 0,
+ "total_tx_pps": 246309,
+ "tx_pps": 247858,
+ "tx_pkts": 2463092,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 371783.78616389656,
+ "rx_pkts": 3694602,
+ "time_ms": 1648515091948,
+ "drop_pct": 22,
+ "total_tx_pps": 369462,
+ "tx_pps": 371786,
+ "tx_pkts": 3694624,
+ "drop_percentage": 0.0005954597815636991
+ },
+ {
+ "rx_pps": 433749.0873307024,
+ "rx_pkts": 4318624,
+ "time_ms": 1648515104463,
+ "drop_pct": 29,
+ "total_tx_pps": 431865,
+ "tx_pps": 433752,
+ "tx_pkts": 4318653,
+ "drop_percentage": 0.0006715056754965032
+ },
+ {
+ "rx_pps": 463811.53496571037,
+ "rx_pkts": 4609129,
+ "time_ms": 1648515117017,
+ "drop_pct": 9167,
+ "total_tx_pps": 461829,
+ "tx_pps": 464734,
+ "tx_pkts": 4618296,
+ "drop_percentage": 0.19849312387079562
+ },
+ {
+ "rx_pps": 449083.4088627579,
+ "rx_pkts": 4462768,
+ "time_ms": 1648515129513,
+ "drop_pct": 1576,
+ "total_tx_pps": 446434,
+ "tx_pps": 449242,
+ "tx_pkts": 4464344,
+ "drop_percentage": 0.03530193909788314
+ },
+ {
+ "rx_pps": 441182.37132601463,
+ "rx_pkts": 4384693,
+ "time_ms": 1648515142044,
+ "drop_pct": 3117,
+ "total_tx_pps": 438781,
+ "tx_pps": 441496,
+ "tx_pkts": 4387810,
+ "ndr_pps": 216876,
+ "drop_percentage": 0.07103771585369467
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "8dd3beb2954d49b59cfca0b597a08ad2"
+ },
+ "synthesis": {
+ "avg_delay_usec": 116.9997614981068,
+ "total_tx_rate": 431865
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "1024"
+ ],
+ "rate": "ndr",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 00:52:26",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "75405003766f40e9b542c75124035b57",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1024"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_128-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1024"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_128-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1024": {
+ "ndr": {
+ "load_percent_per_direction": 6.73828125,
+ "timestamp_sec": 1648515286.889274,
+ "stats": {
+ "total_tx_rate": 401294,
+ "overall": {
+ "rx_pkts": 4012912,
+ "drop_percentage": 0.0008472578499685767,
+ "drop_pct": 34,
+ "max_delay_usec": 328,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 4012946,
+ "avg_delay_usec": 111.00076054496087,
+ "min_delay_usec": 34,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 2006238,
+ "min_delay_usec": 34,
+ "drop_pct": 34,
+ "max_delay_usec": 326,
+ "tx_pkts": 2006674,
+ "avg_delay_usec": 104,
+ "drop_percentage": 0.001694345967506431
+ },
+ "0": {
+ "rx_pkts": 2006674,
+ "min_delay_usec": 34,
+ "drop_pct": 0,
+ "max_delay_usec": 328,
+ "tx_pkts": 2006272,
+ "avg_delay_usec": 118,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 3351607488.0,
+ "theoretical_tx_rate_pps": 5986590.038314176
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 13.4765625,
+ "duration_sec": 10.0,
+ "l2frame_size": "1024",
+ "rate_pps": 403392,
+ "rate_bps": 3369140624.0,
+ "time_taken_sec": 137.79849529266357
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 1930795.241663838,
+ "rx_pkts": 18852856,
+ "time_ms": 1648515161575,
+ "drop_pct": 39601980,
+ "total_tx_pps": 5845483,
+ "tx_pps": 5986590,
+ "tx_pkts": 58454836,
+ "drop_percentage": 67.74799607683443
+ },
+ {
+ "rx_pps": 1762189.8584894312,
+ "rx_pkts": 17511764,
+ "time_ms": 1648515174131,
+ "drop_pct": 12234099,
+ "total_tx_pps": 2974586,
+ "tx_pps": 2993294,
+ "tx_pkts": 29745863,
+ "drop_percentage": 41.12874116309888
+ },
+ {
+ "rx_pps": 1462161.4284772114,
+ "rx_pkts": 14531695,
+ "time_ms": 1648515186630,
+ "drop_pct": 342725,
+ "total_tx_pps": 1487442,
+ "tx_pps": 1496646,
+ "tx_pkts": 14874420,
+ "drop_percentage": 2.3041234548977374
+ },
+ {
+ "rx_pps": 747018.4838640236,
+ "rx_pkts": 7424246,
+ "time_ms": 1648515199145,
+ "drop_pct": 12955,
+ "total_tx_pps": 743720,
+ "tx_pps": 748322,
+ "tx_pkts": 7437201,
+ "drop_percentage": 0.17419187675578487
+ },
+ {
+ "rx_pps": 374159.8993711233,
+ "rx_pkts": 3718216,
+ "time_ms": 1648515211671,
+ "drop_pct": 1,
+ "total_tx_pps": 371821,
+ "tx_pps": 374160,
+ "tx_pkts": 3718217,
+ "drop_percentage": 2.689461104610086e-05
+ },
+ {
+ "rx_pps": 560771.4296064666,
+ "rx_pkts": 5578275,
+ "time_ms": 1648515224196,
+ "drop_pct": 4681,
+ "total_tx_pps": 558295,
+ "tx_pps": 561242,
+ "tx_pkts": 5582956,
+ "drop_percentage": 0.0838444723547884
+ },
+ {
+ "rx_pps": 467650.58381987753,
+ "rx_pkts": 4647748,
+ "time_ms": 1648515236753,
+ "drop_pct": 511,
+ "total_tx_pps": 464825,
+ "tx_pps": 467702,
+ "tx_pkts": 4648259,
+ "drop_percentage": 0.010993363321622138
+ },
+ {
+ "rx_pps": 420590.6668502663,
+ "rx_pkts": 4179622,
+ "time_ms": 1648515249317,
+ "drop_pct": 3392,
+ "total_tx_pps": 418301,
+ "tx_pps": 420932,
+ "tx_pkts": 4183014,
+ "drop_percentage": 0.08108985530528943
+ },
+ {
+ "rx_pps": 397542.8805052174,
+ "rx_pkts": 3950585,
+ "time_ms": 1648515261830,
+ "drop_pct": 31,
+ "total_tx_pps": 395061,
+ "tx_pps": 397546,
+ "tx_pkts": 3950616,
+ "drop_percentage": 0.0007846877550235204
+ },
+ {
+ "rx_pps": 409151.5902254465,
+ "rx_pkts": 4067378,
+ "time_ms": 1648515274351,
+ "drop_pct": 859,
+ "total_tx_pps": 406823,
+ "tx_pps": 409238,
+ "tx_pkts": 4068237,
+ "drop_percentage": 0.02111479739258062
+ },
+ {
+ "rx_pps": 403388.5822296139,
+ "rx_pkts": 4012912,
+ "time_ms": 1648515286888,
+ "drop_pct": 34,
+ "total_tx_pps": 401294,
+ "tx_pps": 403392,
+ "tx_pkts": 4012946,
+ "ndr_pps": 201696,
+ "drop_percentage": 0.0008472578499685767
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "75405003766f40e9b542c75124035b57"
+ },
+ "synthesis": {
+ "avg_delay_usec": 111.00076054496087,
+ "total_tx_rate": 401294
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "1280"
+ ],
+ "rate": "ndr",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 00:59:40",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "f6fbe0374ea244fabde658db4f3248c1",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1280"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_128-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1280"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_128-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1280": {
+ "ndr": {
+ "load_percent_per_direction": 8.3984375,
+ "timestamp_sec": 1648515720.6989858,
+ "stats": {
+ "total_tx_rate": 401408,
+ "overall": {
+ "rx_pkts": 4014082,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 1461,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 4014082,
+ "avg_delay_usec": 129.00015096851533,
+ "min_delay_usec": 33,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 2006940,
+ "min_delay_usec": 36,
+ "drop_pct": 0,
+ "max_delay_usec": 615,
+ "tx_pkts": 2007142,
+ "avg_delay_usec": 126,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 2007142,
+ "min_delay_usec": 33,
+ "drop_pct": 0,
+ "max_delay_usec": 1461,
+ "tx_pkts": 2006940,
+ "avg_delay_usec": 132,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 4174643200.0,
+ "theoretical_tx_rate_pps": 4807692.307692308
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 16.796875,
+ "duration_sec": 10.0,
+ "l2frame_size": "1280",
+ "rate_pps": 403770,
+ "rate_bps": 4199218750.0,
+ "time_taken_sec": 137.7598237991333
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 1782209.6840959138,
+ "rx_pkts": 17492199,
+ "time_ms": 1648515595424,
+ "drop_pct": 29694788,
+ "total_tx_pps": 4718698,
+ "tx_pps": 4807692,
+ "tx_pkts": 47186987,
+ "drop_percentage": 62.93003619832731
+ },
+ {
+ "rx_pps": 1746211.0920846344,
+ "rx_pkts": 17352973,
+ "time_ms": 1648515608019,
+ "drop_pct": 6535247,
+ "total_tx_pps": 2388822,
+ "tx_pps": 2403846,
+ "tx_pkts": 23888220,
+ "drop_percentage": 27.357613920166507
+ },
+ {
+ "rx_pps": 1194285.0711804812,
+ "rx_pkts": 11868211,
+ "time_ms": 1648515620524,
+ "drop_pct": 75892,
+ "total_tx_pps": 1194410,
+ "tx_pps": 1201922,
+ "tx_pkts": 11944103,
+ "drop_percentage": 0.6353930470961276
+ },
+ {
+ "rx_pps": 600176.2805216585,
+ "rx_pkts": 5964855,
+ "time_ms": 1648515633020,
+ "drop_pct": 7789,
+ "total_tx_pps": 597264,
+ "tx_pps": 600960,
+ "tx_pkts": 5972644,
+ "drop_percentage": 0.13041125504885273
+ },
+ {
+ "rx_pps": 300480.0,
+ "rx_pkts": 2986022,
+ "time_ms": 1648515645545,
+ "drop_pct": 0,
+ "total_tx_pps": 298602,
+ "tx_pps": 300480,
+ "tx_pkts": 2986022,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 450690.71758913517,
+ "rx_pkts": 4478832,
+ "time_ms": 1648515658043,
+ "drop_pct": 291,
+ "total_tx_pps": 447912,
+ "tx_pps": 450720,
+ "tx_pkts": 4479123,
+ "drop_percentage": 0.006496807522365427
+ },
+ {
+ "rx_pps": 375598.59119610087,
+ "rx_pkts": 3732514,
+ "time_ms": 1648515670558,
+ "drop_pct": 14,
+ "total_tx_pps": 373252,
+ "tx_pps": 375600,
+ "tx_pkts": 3732528,
+ "drop_percentage": 0.0003750809103106527
+ },
+ {
+ "rx_pps": 413028.79315219715,
+ "rx_pkts": 4104889,
+ "time_ms": 1648515683111,
+ "drop_pct": 1304,
+ "total_tx_pps": 410619,
+ "tx_pps": 413160,
+ "tx_pkts": 4106193,
+ "drop_percentage": 0.03175690962407271
+ },
+ {
+ "rx_pps": 394380.0,
+ "rx_pkts": 3919155,
+ "time_ms": 1648515695623,
+ "drop_pct": 0,
+ "total_tx_pps": 391915,
+ "tx_pps": 394380,
+ "tx_pkts": 3919155,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 403770.0,
+ "rx_pkts": 4014082,
+ "time_ms": 1648515708195,
+ "drop_pct": 0,
+ "total_tx_pps": 401408,
+ "tx_pps": 403770,
+ "tx_pkts": 4014082,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 408041.4893278549,
+ "rx_pkts": 4055321,
+ "time_ms": 1648515720698,
+ "drop_pct": 4219,
+ "total_tx_pps": 405954,
+ "tx_pps": 408466,
+ "tx_pkts": 4059540,
+ "ndr_pps": 201885,
+ "drop_percentage": 0.10392803125477271
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "f6fbe0374ea244fabde658db4f3248c1"
+ },
+ "synthesis": {
+ "avg_delay_usec": 129.00015096851533,
+ "total_tx_rate": 401408
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "1518"
+ ],
+ "rate": "ndr",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 01:11:42",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "aa22a77595534177821bc1ddb05bf7d5",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1518"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_128-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1518"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_128-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1518": {
+ "ndr": {
+ "load_percent_per_direction": 10.3515625,
+ "timestamp_sec": 1648516442.9958127,
+ "stats": {
+ "total_tx_rate": 418029,
+ "overall": {
+ "rx_pkts": 4180291,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 614,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 4180291,
+ "avg_delay_usec": 133.0,
+ "min_delay_usec": 35,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 2090041,
+ "min_delay_usec": 35,
+ "drop_pct": 0,
+ "max_delay_usec": 614,
+ "tx_pkts": 2090250,
+ "avg_delay_usec": 133,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 2090250,
+ "min_delay_usec": 35,
+ "drop_pct": 0,
+ "max_delay_usec": 256,
+ "tx_pkts": 2090041,
+ "avg_delay_usec": 133,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 5143428816.0,
+ "theoretical_tx_rate_pps": 4063719.1157347206
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 20.703125,
+ "duration_sec": 10.0,
+ "l2frame_size": "1518",
+ "rate_pps": 420658,
+ "rate_bps": 5175781250.0,
+ "time_taken_sec": 137.71833491325378
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 1525365.0868388722,
+ "rx_pkts": 15001649,
+ "time_ms": 1648516317782,
+ "drop_pct": 24964174,
+ "total_tx_pps": 3996582,
+ "tx_pps": 4063718,
+ "tx_pkts": 39965823,
+ "drop_percentage": 62.46380563713151
+ },
+ {
+ "rx_pps": 1496120.4701008687,
+ "rx_pkts": 14867698,
+ "time_ms": 1648516330341,
+ "drop_pct": 5323892,
+ "total_tx_pps": 2019159,
+ "tx_pps": 2031858,
+ "tx_pkts": 20191590,
+ "drop_percentage": 26.36687848752872
+ },
+ {
+ "rx_pps": 1014361.6676065021,
+ "rx_pkts": 10081237,
+ "time_ms": 1648516342836,
+ "drop_pct": 15567,
+ "total_tx_pps": 1009680,
+ "tx_pps": 1015928,
+ "tx_pkts": 10096804,
+ "drop_percentage": 0.1541775001277632
+ },
+ {
+ "rx_pps": 507610.12378570484,
+ "rx_pkts": 5044885,
+ "time_ms": 1648516355360,
+ "drop_pct": 3517,
+ "total_tx_pps": 504840,
+ "tx_pps": 507964,
+ "tx_pkts": 5048402,
+ "drop_percentage": 0.06966560903826596
+ },
+ {
+ "rx_pps": 253982.0,
+ "rx_pkts": 2532329,
+ "time_ms": 1648516367908,
+ "drop_pct": 0,
+ "total_tx_pps": 253232,
+ "tx_pps": 253982,
+ "tx_pkts": 2532329,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 380972.0,
+ "rx_pkts": 3786292,
+ "time_ms": 1648516380404,
+ "drop_pct": 0,
+ "total_tx_pps": 378629,
+ "tx_pps": 380972,
+ "tx_pkts": 3786292,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 444318.68175264477,
+ "rx_pkts": 4415863,
+ "time_ms": 1648516392915,
+ "drop_pct": 1484,
+ "total_tx_pps": 441734,
+ "tx_pps": 444468,
+ "tx_pkts": 4417347,
+ "drop_percentage": 0.03359482512920085
+ },
+ {
+ "rx_pps": 412715.9748437487,
+ "rx_pkts": 4101366,
+ "time_ms": 1648516405442,
+ "drop_pct": 40,
+ "total_tx_pps": 410140,
+ "tx_pps": 412720,
+ "tx_pkts": 4101406,
+ "drop_percentage": 0.0009752753080285151
+ },
+ {
+ "rx_pps": 428567.63523947,
+ "rx_pkts": 4258894,
+ "time_ms": 1648516417960,
+ "drop_pct": 262,
+ "total_tx_pps": 425915,
+ "tx_pps": 428594,
+ "tx_pkts": 4259156,
+ "drop_percentage": 0.006151453480454813
+ },
+ {
+ "rx_pps": 420658.0,
+ "rx_pkts": 4180291,
+ "time_ms": 1648516430479,
+ "drop_pct": 0,
+ "total_tx_pps": 418029,
+ "tx_pps": 420658,
+ "tx_pkts": 4180291,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 424617.3467837369,
+ "rx_pkts": 4220060,
+ "time_ms": 1648516442994,
+ "drop_pct": 86,
+ "total_tx_pps": 422014,
+ "tx_pps": 424626,
+ "tx_pkts": 4220146,
+ "ndr_pps": 210329,
+ "drop_percentage": 0.0020378441883290295
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "aa22a77595534177821bc1ddb05bf7d5"
+ },
+ "synthesis": {
+ "avg_delay_usec": 133.0,
+ "total_tx_rate": 418029
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "IMIX"
+ ],
+ "rate": "ndr",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 01:14:06",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "e3cbe4a347a44a80b2c84296b1c8d3cf",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "IMIX"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_128-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "IMIX"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_128-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "IMIX": {
+ "ndr": {
+ "load_percent_per_direction": 3.125,
+ "timestamp_sec": 1648516587.0061436,
+ "stats": {
+ "total_tx_rate": 508366,
+ "overall": {
+ "rx_pkts": 5083660,
+ "drop_percentage": 9.835423852673218e-05,
+ "drop_pct": 5,
+ "max_delay_usec": 735,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 5083665,
+ "avg_delay_usec": 99.00010228850867,
+ "min_delay_usec": 32,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 2541700,
+ "min_delay_usec": 32,
+ "drop_pct": 5,
+ "max_delay_usec": 218,
+ "tx_pkts": 2541960,
+ "avg_delay_usec": 97,
+ "drop_percentage": 0.0001966986105210153
+ },
+ "0": {
+ "rx_pkts": 2541960,
+ "min_delay_usec": 32,
+ "drop_pct": 0,
+ "max_delay_usec": 735,
+ "tx_pkts": 2541705,
+ "avg_delay_usec": 101,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 1552888674.6666665,
+ "theoretical_tx_rate_pps": 16368398.079441292
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 6.25,
+ "duration_sec": 10.0,
+ "l2frame_size": "IMIX",
+ "rate_pps": 511512,
+ "rate_bps": 1562500000.0,
+ "time_taken_sec": 137.71221041679382
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 455021.45509677904,
+ "rx_pkts": 3962322,
+ "time_ms": 1648516461799,
+ "drop_pct": 138573514,
+ "total_tx_pps": 14253583,
+ "tx_pps": 16368398,
+ "tx_pkts": 142535836,
+ "warning": "WARNING: There is a significant difference between requested TX rate (16368398) and actual TX rate (14253583). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 97.22012224350374
+ },
+ {
+ "rx_pps": 368832.99054765597,
+ "rx_pkts": 3665647,
+ "time_ms": 1648516474296,
+ "drop_pct": 77673012,
+ "total_tx_pps": 8133865,
+ "tx_pps": 8184198,
+ "tx_pkts": 81338659,
+ "drop_percentage": 95.49335206030382
+ },
+ {
+ "rx_pps": 895765.8838221595,
+ "rx_pkts": 8911528,
+ "time_ms": 1648516486861,
+ "drop_pct": 31798714,
+ "total_tx_pps": 4071024,
+ "tx_pps": 4092098,
+ "tx_pkts": 40710242,
+ "drop_percentage": 78.10986237812097
+ },
+ {
+ "rx_pps": 1927743.5317661166,
+ "rx_pkts": 19156957,
+ "time_ms": 1648516499376,
+ "drop_pct": 1175651,
+ "total_tx_pps": 2033260,
+ "tx_pps": 2046048,
+ "tx_pkts": 20332608,
+ "drop_percentage": 5.782096423636358
+ },
+ {
+ "rx_pps": 1015634.8922179102,
+ "rx_pkts": 10093386,
+ "time_ms": 1648516511872,
+ "drop_pct": 73433,
+ "total_tx_pps": 1016681,
+ "tx_pps": 1023024,
+ "tx_pkts": 10166819,
+ "drop_percentage": 0.7222809809046468
+ },
+ {
+ "rx_pps": 511511.4969062674,
+ "rx_pkts": 5083660,
+ "time_ms": 1648516524370,
+ "drop_pct": 5,
+ "total_tx_pps": 508366,
+ "tx_pps": 511512,
+ "tx_pkts": 5083665,
+ "drop_percentage": 9.83542385267322e-05
+ },
+ {
+ "rx_pps": 764384.46739517,
+ "rx_pkts": 7596838,
+ "time_ms": 1648516536965,
+ "drop_pct": 28658,
+ "total_tx_pps": 762549,
+ "tx_pps": 767268,
+ "tx_pkts": 7625496,
+ "drop_percentage": 0.37581817628649994
+ },
+ {
+ "rx_pps": 638742.7197819274,
+ "rx_pkts": 6348150,
+ "time_ms": 1648516549474,
+ "drop_pct": 6433,
+ "total_tx_pps": 635458,
+ "tx_pps": 639390,
+ "tx_pkts": 6354583,
+ "drop_percentage": 0.1012340227517683
+ },
+ {
+ "rx_pps": 575150.7598381079,
+ "rx_pkts": 5716139,
+ "time_ms": 1648516561991,
+ "drop_pct": 2974,
+ "total_tx_pps": 571911,
+ "tx_pps": 575450,
+ "tx_pkts": 5719113,
+ "drop_percentage": 0.0520010707954188
+ },
+ {
+ "rx_pps": 543090.4042744632,
+ "rx_pkts": 5397508,
+ "time_ms": 1648516574506,
+ "drop_pct": 3872,
+ "total_tx_pps": 540138,
+ "tx_pps": 543480,
+ "tx_pkts": 5401380,
+ "drop_percentage": 0.0716853841055434
+ },
+ {
+ "rx_pps": 526619.007327005,
+ "rx_pkts": 5233808,
+ "time_ms": 1648516587005,
+ "drop_pct": 8716,
+ "total_tx_pps": 524252,
+ "tx_pps": 527496,
+ "tx_pkts": 5242524,
+ "ndr_pps": 255756,
+ "drop_percentage": 0.16625579587236988
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "e3cbe4a347a44a80b2c84296b1c8d3cf"
+ },
+ "synthesis": {
+ "avg_delay_usec": 99.00010228850867,
+ "total_tx_rate": 508366
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "9000"
+ ],
+ "rate": "ndr",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 01:23:45",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "925d13e8fb154949ba8e787ba0a1729c",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "9000"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_128-rate_ndr-1.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "9000"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_128-rate_ndr-1.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "9000": {
+ "ndr": {
+ "load_percent_per_direction": 38.57421875,
+ "timestamp_sec": 1648517165.4413407,
+ "stats": {
+ "total_tx_rate": 265611,
+ "overall": {
+ "rx_pkts": 2656117,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 7688,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2656117,
+ "avg_delay_usec": 830.5011435866718,
+ "min_delay_usec": 66,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1327991,
+ "min_delay_usec": 67,
+ "drop_pct": 0,
+ "max_delay_usec": 7688,
+ "tx_pkts": 1328126,
+ "avg_delay_usec": 808,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1328126,
+ "min_delay_usec": 66,
+ "drop_pct": 0,
+ "max_delay_usec": 7031,
+ "tx_pkts": 1327991,
+ "avg_delay_usec": 853,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 19166489760.0,
+ "theoretical_tx_rate_pps": 692904.6563192905
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 77.1484375,
+ "duration_sec": 10.0,
+ "l2frame_size": "9000",
+ "rate_pps": 267282,
+ "rate_bps": 19287109374.0,
+ "time_taken_sec": 137.70768356323242
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 276705.98480457405,
+ "rx_pkts": 2760287,
+ "time_ms": 1648517040238,
+ "drop_pct": 4151793,
+ "total_tx_pps": 691208,
+ "tx_pps": 692904,
+ "tx_pkts": 6912080,
+ "drop_percentage": 60.06575444728649
+ },
+ {
+ "rx_pps": 276650.0833531569,
+ "rx_pkts": 2749212,
+ "time_ms": 1648517052754,
+ "drop_pct": 693657,
+ "total_tx_pps": 344286,
+ "tx_pps": 346452,
+ "tx_pkts": 3442869,
+ "drop_percentage": 20.147644304793474
+ },
+ {
+ "rx_pps": 173226.0,
+ "rx_pkts": 1721435,
+ "time_ms": 1648517065249,
+ "drop_pct": 0,
+ "total_tx_pps": 172143,
+ "tx_pps": 173226,
+ "tx_pkts": 1721435,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 259838.0,
+ "rx_pkts": 2582402,
+ "time_ms": 1648517077745,
+ "drop_pct": 0,
+ "total_tx_pps": 258240,
+ "tx_pps": 259838,
+ "tx_pkts": 2582402,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 276923.8456588822,
+ "rx_pkts": 2751933,
+ "time_ms": 1648517090242,
+ "drop_pct": 260563,
+ "total_tx_pps": 301249,
+ "tx_pps": 303144,
+ "tx_pkts": 3012496,
+ "drop_percentage": 8.649405675559404
+ },
+ {
+ "rx_pps": 276921.0901351833,
+ "rx_pkts": 2752181,
+ "time_ms": 1648517102831,
+ "drop_pct": 45428,
+ "total_tx_pps": 279760,
+ "tx_pps": 281492,
+ "tx_pkts": 2797609,
+ "drop_percentage": 1.623815193617121
+ },
+ {
+ "rx_pps": 270625.96228536376,
+ "rx_pkts": 2689347,
+ "time_ms": 1648517115325,
+ "drop_pct": 378,
+ "total_tx_pps": 268972,
+ "tx_pps": 270664,
+ "tx_pkts": 2689725,
+ "drop_percentage": 0.014053481303850765
+ },
+ {
+ "rx_pps": 265251.6987348664,
+ "rx_pkts": 2641378,
+ "time_ms": 1648517127933,
+ "drop_pct": 3,
+ "total_tx_pps": 264138,
+ "tx_pps": 265252,
+ "tx_pkts": 2641381,
+ "drop_percentage": 0.00011357695084503144
+ },
+ {
+ "rx_pps": 267950.35221095104,
+ "rx_pkts": 2662760,
+ "time_ms": 1648517140447,
+ "drop_pct": 76,
+ "total_tx_pps": 266283,
+ "tx_pps": 267958,
+ "tx_pkts": 2662836,
+ "drop_percentage": 0.0028540999145272184
+ },
+ {
+ "rx_pps": 266604.0,
+ "rx_pkts": 2649380,
+ "time_ms": 1648517152942,
+ "drop_pct": 0,
+ "total_tx_pps": 264938,
+ "tx_pps": 266604,
+ "tx_pkts": 2649380,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 267282.0,
+ "rx_pkts": 2656117,
+ "time_ms": 1648517165440,
+ "drop_pct": 0,
+ "total_tx_pps": 265611,
+ "tx_pps": 267282,
+ "tx_pkts": 2656117,
+ "ndr_pps": 133641,
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "925d13e8fb154949ba8e787ba0a1729c"
+ },
+ "synthesis": {
+ "avg_delay_usec": 830.5011435866718,
+ "total_tx_rate": 265611
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "64"
+ ],
+ "rate": "ndr",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 01:33:26",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "0b4fd1e0bc074c0aa72dfedbb7e468e7",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "64"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_10k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "64"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_10k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "64": {
+ "ndr": {
+ "load_percent_per_direction": 0.390625,
+ "timestamp_sec": 1648517749.4090943,
+ "stats": {
+ "total_tx_rate": 288883,
+ "overall": {
+ "rx_pkts": 2888837,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 6981,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2888837,
+ "avg_delay_usec": 137.00045173888316,
+ "min_delay_usec": 32,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1444346,
+ "min_delay_usec": 32,
+ "drop_pct": 0,
+ "max_delay_usec": 1012,
+ "tx_pkts": 1444491,
+ "avg_delay_usec": 128,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1444491,
+ "min_delay_usec": 34,
+ "drop_pct": 0,
+ "max_delay_usec": 6981,
+ "tx_pkts": 1444346,
+ "avg_delay_usec": 146,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 194129376.0,
+ "theoretical_tx_rate_pps": 74404761.90476191
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 0.78125,
+ "duration_sec": 10.0,
+ "l2frame_size": "64",
+ "rate_pps": 290642,
+ "rate_bps": 195312500.0,
+ "time_taken_sec": 137.5828468799591
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 2047350.5854726303,
+ "rx_pkts": 11677335,
+ "time_ms": 1648517624315,
+ "drop_pct": 412700060,
+ "total_tx_pps": 42437739,
+ "tx_pps": 74404760,
+ "tx_pkts": 424377395,
+ "warning": "WARNING: There is a significant difference between requested TX rate (74404760) and actual TX rate (42437739). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 97.24836074268282
+ },
+ {
+ "rx_pps": 1881821.855161189,
+ "rx_pkts": 18700581,
+ "time_ms": 1648517636807,
+ "drop_pct": 350997602,
+ "total_tx_pps": 36969818,
+ "tx_pps": 37202380,
+ "tx_pkts": 369698183,
+ "drop_percentage": 94.94166272383329
+ },
+ {
+ "rx_pps": 1463366.1136056492,
+ "rx_pkts": 14543665,
+ "time_ms": 1648517649302,
+ "drop_pct": 170324273,
+ "total_tx_pps": 18486793,
+ "tx_pps": 18601190,
+ "tx_pkts": 184867938,
+ "drop_percentage": 92.13294357185939
+ },
+ {
+ "rx_pps": 656372.1947024872,
+ "rx_pkts": 6523357,
+ "time_ms": 1648517661819,
+ "drop_pct": 85910624,
+ "total_tx_pps": 9243398,
+ "tx_pps": 9300594,
+ "tx_pkts": 92433981,
+ "drop_percentage": 92.94268522308911
+ },
+ {
+ "rx_pps": 599368.4857455855,
+ "rx_pkts": 5963417,
+ "time_ms": 1648517674327,
+ "drop_pct": 40304705,
+ "total_tx_pps": 4626812,
+ "tx_pps": 4650296,
+ "tx_pkts": 46268122,
+ "drop_percentage": 87.11117559515382
+ },
+ {
+ "rx_pps": 1877894.057540158,
+ "rx_pkts": 18663453,
+ "time_ms": 1648517686824,
+ "drop_pct": 4445034,
+ "total_tx_pps": 2310848,
+ "tx_pps": 2325148,
+ "tx_pkts": 23108487,
+ "drop_percentage": 19.235504254346033
+ },
+ {
+ "rx_pps": 1160361.5937588983,
+ "rx_pkts": 11532254,
+ "time_ms": 1648517699350,
+ "drop_pct": 21988,
+ "total_tx_pps": 1155424,
+ "tx_pps": 1162574,
+ "tx_pkts": 11554242,
+ "drop_percentage": 0.19030240149029248
+ },
+ {
+ "rx_pps": 580852.4675486998,
+ "rx_pkts": 5778614,
+ "time_ms": 1648517711861,
+ "drop_pct": 4313,
+ "total_tx_pps": 578292,
+ "tx_pps": 581286,
+ "tx_pkts": 5782927,
+ "drop_percentage": 0.07458160893263913
+ },
+ {
+ "rx_pps": 290642.0,
+ "rx_pkts": 2888837,
+ "time_ms": 1648517724365,
+ "drop_pct": 0,
+ "total_tx_pps": 288883,
+ "tx_pps": 290642,
+ "tx_pkts": 2888837,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 435844.4649357429,
+ "rx_pkts": 4331643,
+ "time_ms": 1648517736892,
+ "drop_pct": 1188,
+ "total_tx_pps": 433283,
+ "tx_pps": 435964,
+ "tx_pkts": 4332831,
+ "drop_percentage": 0.027418563059579293
+ },
+ {
+ "rx_pps": 363213.11655764753,
+ "rx_pkts": 3616807,
+ "time_ms": 1648517749408,
+ "drop_pct": 905,
+ "total_tx_pps": 361771,
+ "tx_pps": 363304,
+ "tx_pkts": 3617712,
+ "ndr_pps": 145321,
+ "drop_percentage": 0.025015811098285327
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "0b4fd1e0bc074c0aa72dfedbb7e468e7"
+ },
+ "synthesis": {
+ "avg_delay_usec": 137.00045173888316,
+ "total_tx_rate": 288883
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "128"
+ ],
+ "rate": "ndr",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 01:35:53",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "e4caccec03ec4be698325c5827dab2bf",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "128"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_10k-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "128"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_10k-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "128": {
+ "ndr": {
+ "load_percent_per_direction": 0.87890625,
+ "timestamp_sec": 1648517895.4561322,
+ "stats": {
+ "total_tx_rate": 368857,
+ "overall": {
+ "rx_pkts": 3688572,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 1614,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 3688572,
+ "avg_delay_usec": 103.5,
+ "min_delay_usec": 30,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1844286,
+ "min_delay_usec": 32,
+ "drop_pct": 0,
+ "max_delay_usec": 1614,
+ "tx_pkts": 1844286,
+ "avg_delay_usec": 111,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1844286,
+ "min_delay_usec": 30,
+ "drop_pct": 0,
+ "max_delay_usec": 224,
+ "tx_pkts": 1844286,
+ "avg_delay_usec": 96,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 436726688.0,
+ "theoretical_tx_rate_pps": 42229729.72972973
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 1.7578125,
+ "duration_sec": 10.0,
+ "l2frame_size": "128",
+ "rate_pps": 371158,
+ "rate_bps": 439453124.0,
+ "time_taken_sec": 137.57411217689514
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 661956.5610575142,
+ "rx_pkts": 6065560,
+ "time_ms": 1648517770397,
+ "drop_pct": 380888757,
+ "total_tx_pps": 38695431,
+ "tx_pps": 42229728,
+ "tx_pkts": 386954317,
+ "drop_percentage": 98.43248679921047
+ },
+ {
+ "rx_pps": 567627.3405718297,
+ "rx_pkts": 5641365,
+ "time_ms": 1648517782894,
+ "drop_pct": 204208736,
+ "total_tx_pps": 20985010,
+ "tx_pps": 21114864,
+ "tx_pkts": 209850101,
+ "drop_percentage": 97.31171680493973
+ },
+ {
+ "rx_pps": 513718.6314666125,
+ "rx_pkts": 5105078,
+ "time_ms": 1648517795390,
+ "drop_pct": 99809384,
+ "total_tx_pps": 10491446,
+ "tx_pps": 10557432,
+ "tx_pkts": 104914462,
+ "drop_percentage": 95.13405692343922
+ },
+ {
+ "rx_pps": 505008.19312182645,
+ "rx_pkts": 5018722,
+ "time_ms": 1648517807887,
+ "drop_pct": 47440641,
+ "total_tx_pps": 5245936,
+ "tx_pps": 5278716,
+ "tx_pkts": 52459363,
+ "drop_percentage": 90.4331243976409
+ },
+ {
+ "rx_pps": 1941280.9663658948,
+ "rx_pkts": 19293422,
+ "time_ms": 1648517820385,
+ "drop_pct": 6937839,
+ "total_tx_pps": 2623126,
+ "tx_pps": 2639358,
+ "tx_pkts": 26231261,
+ "drop_percentage": 26.448743733669534
+ },
+ {
+ "rx_pps": 1314375.0871652274,
+ "rx_pkts": 13062917,
+ "time_ms": 1648517832902,
+ "drop_pct": 52703,
+ "total_tx_pps": 1311562,
+ "tx_pps": 1319678,
+ "tx_pkts": 13115620,
+ "drop_percentage": 0.4018338439204551
+ },
+ {
+ "rx_pps": 659815.2578716066,
+ "rx_pkts": 6556917,
+ "time_ms": 1648517845416,
+ "drop_pct": 226,
+ "total_tx_pps": 655714,
+ "tx_pps": 659838,
+ "tx_pkts": 6557143,
+ "drop_percentage": 0.003446623018592091
+ },
+ {
+ "rx_pps": 329918.0,
+ "rx_pkts": 3278728,
+ "time_ms": 1648517857923,
+ "drop_pct": 0,
+ "total_tx_pps": 327872,
+ "tx_pps": 329918,
+ "tx_pkts": 3278728,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 494566.5692195298,
+ "rx_pkts": 4915004,
+ "time_ms": 1648517870430,
+ "drop_pct": 3095,
+ "total_tx_pps": 491809,
+ "tx_pps": 494878,
+ "tx_pkts": 4918099,
+ "drop_percentage": 0.06293081940806804
+ },
+ {
+ "rx_pps": 412387.6352223387,
+ "rx_pkts": 4098103,
+ "time_ms": 1648517882937,
+ "drop_pct": 103,
+ "total_tx_pps": 409820,
+ "tx_pps": 412398,
+ "tx_pkts": 4098206,
+ "drop_percentage": 0.0025132948416941464
+ },
+ {
+ "rx_pps": 371158.0,
+ "rx_pkts": 3688572,
+ "time_ms": 1648517895455,
+ "drop_pct": 0,
+ "total_tx_pps": 368857,
+ "tx_pps": 371158,
+ "tx_pkts": 3688572,
+ "ndr_pps": 185579,
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "e4caccec03ec4be698325c5827dab2bf"
+ },
+ "synthesis": {
+ "avg_delay_usec": 103.5,
+ "total_tx_rate": 368857
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "256"
+ ],
+ "rate": "ndr",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 01:48:05",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "ee681f4905724c8286ee3b3d00a51486",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "256"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_10k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "256"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_10k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "256": {
+ "ndr": {
+ "load_percent_per_direction": 1.66015625,
+ "timestamp_sec": 1648518627.9241369,
+ "stats": {
+ "total_tx_rate": 373628,
+ "overall": {
+ "rx_pkts": 3736281,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 4593,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 3736281,
+ "avg_delay_usec": 95.50017517419059,
+ "min_delay_usec": 28,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1868047,
+ "min_delay_usec": 31,
+ "drop_pct": 0,
+ "max_delay_usec": 4593,
+ "tx_pkts": 1868234,
+ "avg_delay_usec": 92,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1868234,
+ "min_delay_usec": 28,
+ "drop_pct": 0,
+ "max_delay_usec": 3016,
+ "tx_pkts": 1868047,
+ "avg_delay_usec": 99,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 824970624.0,
+ "theoretical_tx_rate_pps": 22644927.536231883
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 3.3203125,
+ "duration_sec": 10.0,
+ "l2frame_size": "256",
+ "rate_pps": 375940,
+ "rate_bps": 830078124.0,
+ "time_taken_sec": 137.58922338485718
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 501930.18889277824,
+ "rx_pkts": 4559930,
+ "time_ms": 1648518502852,
+ "drop_pct": 201164451,
+ "total_tx_pps": 20572438,
+ "tx_pps": 22644926,
+ "tx_pkts": 205724381,
+ "drop_percentage": 97.78347613548051
+ },
+ {
+ "rx_pps": 504259.6138228798,
+ "rx_pkts": 5011082,
+ "time_ms": 1648518515348,
+ "drop_pct": 107505931,
+ "total_tx_pps": 11251701,
+ "tx_pps": 11322462,
+ "tx_pkts": 112517013,
+ "drop_percentage": 95.54637839523878
+ },
+ {
+ "rx_pps": 508840.8943619289,
+ "rx_pkts": 5056862,
+ "time_ms": 1648518527848,
+ "drop_pct": 51204455,
+ "total_tx_pps": 5626131,
+ "tx_pps": 5661230,
+ "tx_pkts": 56261317,
+ "drop_percentage": 91.0118314507284
+ },
+ {
+ "rx_pps": 2110054.1102349525,
+ "rx_pkts": 20968663,
+ "time_ms": 1648518540374,
+ "drop_pct": 7160564,
+ "total_tx_pps": 2812922,
+ "tx_pps": 2830614,
+ "tx_pkts": 28129227,
+ "drop_percentage": 25.45595725044275
+ },
+ {
+ "rx_pps": 1401072.2638491914,
+ "rx_pkts": 13924558,
+ "time_ms": 1648518552869,
+ "drop_pct": 141462,
+ "total_tx_pps": 1406602,
+ "tx_pps": 1415306,
+ "tx_pkts": 14066020,
+ "drop_percentage": 1.0057002620499615
+ },
+ {
+ "rx_pps": 707351.0491778756,
+ "rx_pkts": 7030009,
+ "time_ms": 1648518565377,
+ "drop_pct": 2991,
+ "total_tx_pps": 703300,
+ "tx_pps": 707652,
+ "tx_pkts": 7033000,
+ "drop_percentage": 0.04252808189961609
+ },
+ {
+ "rx_pps": 353826.0,
+ "rx_pkts": 3516148,
+ "time_ms": 1648518577896,
+ "drop_pct": 0,
+ "total_tx_pps": 351614,
+ "tx_pps": 353826,
+ "tx_pkts": 3516148,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 530715.4490277573,
+ "rx_pkts": 5274519,
+ "time_ms": 1648518590390,
+ "drop_pct": 244,
+ "total_tx_pps": 527476,
+ "tx_pps": 530740,
+ "tx_pkts": 5274763,
+ "drop_percentage": 0.004625800249224468
+ },
+ {
+ "rx_pps": 442276.26473113475,
+ "rx_pkts": 4395565,
+ "time_ms": 1648518602909,
+ "drop_pct": 57,
+ "total_tx_pps": 439562,
+ "tx_pps": 442282,
+ "tx_pkts": 4395622,
+ "drop_percentage": 0.0012967448065370499
+ },
+ {
+ "rx_pps": 397842.9019229471,
+ "rx_pkts": 3953965,
+ "time_ms": 1648518615425,
+ "drop_pct": 2098,
+ "total_tx_pps": 395606,
+ "tx_pps": 398054,
+ "tx_pkts": 3956063,
+ "drop_percentage": 0.053032522485107036
+ },
+ {
+ "rx_pps": 375940.0,
+ "rx_pkts": 3736281,
+ "time_ms": 1648518627923,
+ "drop_pct": 0,
+ "total_tx_pps": 373628,
+ "tx_pps": 375940,
+ "tx_pkts": 3736281,
+ "ndr_pps": 187970,
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "ee681f4905724c8286ee3b3d00a51486"
+ },
+ "synthesis": {
+ "avg_delay_usec": 95.50017517419059,
+ "total_tx_rate": 373628
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "512"
+ ],
+ "rate": "ndr",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 01:52:58",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "b053f4a4365e4c55832ccb06c7c724b9",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "512"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_10k-rate_ndr-1.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "512"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_10k-rate_ndr-1.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "512": {
+ "ndr": {
+ "load_percent_per_direction": 3.7109375,
+ "timestamp_sec": 1648518920.992039,
+ "stats": {
+ "total_tx_rate": 433239,
+ "overall": {
+ "rx_pkts": 4332356,
+ "drop_percentage": 0.0009232766349151833,
+ "drop_pct": 40,
+ "max_delay_usec": 1014,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 4332396,
+ "avg_delay_usec": 101.0000410861896,
+ "min_delay_usec": 32,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 2166089,
+ "min_delay_usec": 32,
+ "drop_pct": 0,
+ "max_delay_usec": 479,
+ "tx_pkts": 2166307,
+ "avg_delay_usec": 100,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 2166267,
+ "min_delay_usec": 32,
+ "drop_pct": 40,
+ "max_delay_usec": 1014,
+ "tx_pkts": 2166089,
+ "avg_delay_usec": 102,
+ "drop_percentage": 0.0018466461904381585
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 1843865184.0,
+ "theoretical_tx_rate_pps": 11748120.30075188
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 7.421875,
+ "duration_sec": 10.0,
+ "l2frame_size": "512",
+ "rate_pps": 435964,
+ "rate_bps": 1855468750.0,
+ "time_taken_sec": 137.70669722557068
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 446864.20539699425,
+ "rx_pkts": 4242076,
+ "time_ms": 1648518795780,
+ "drop_pct": 107282672,
+ "total_tx_pps": 11152474,
+ "tx_pps": 11748120,
+ "tx_pkts": 111524748,
+ "drop_percentage": 96.19629178628585
+ },
+ {
+ "rx_pps": 453288.54645233817,
+ "rx_pkts": 4513168,
+ "time_ms": 1648518808397,
+ "drop_pct": 53971918,
+ "total_tx_pps": 5848508,
+ "tx_pps": 5874060,
+ "tx_pkts": 58485086,
+ "drop_percentage": 92.28321558764571
+ },
+ {
+ "rx_pps": 1908433.4598655603,
+ "rx_pkts": 18965061,
+ "time_ms": 1648518820891,
+ "drop_pct": 10221680,
+ "total_tx_pps": 2918674,
+ "tx_pps": 2937030,
+ "tx_pkts": 29186741,
+ "drop_percentage": 35.0216558950518
+ },
+ {
+ "rx_pps": 1449595.552333988,
+ "rx_pkts": 14406806,
+ "time_ms": 1648518833387,
+ "drop_pct": 188021,
+ "total_tx_pps": 1459482,
+ "tx_pps": 1468514,
+ "tx_pkts": 14594827,
+ "drop_percentage": 1.2882715225058852
+ },
+ {
+ "rx_pps": 733549.2536779855,
+ "rx_pkts": 7290381,
+ "time_ms": 1648518845904,
+ "drop_pct": 7024,
+ "total_tx_pps": 729740,
+ "tx_pps": 734256,
+ "tx_pkts": 7297405,
+ "drop_percentage": 0.09625339418601545
+ },
+ {
+ "rx_pps": 367128.0,
+ "rx_pkts": 3648336,
+ "time_ms": 1648518858416,
+ "drop_pct": 0,
+ "total_tx_pps": 364833,
+ "tx_pps": 367128,
+ "tx_pkts": 3648336,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 550658.6029747013,
+ "rx_pkts": 5474100,
+ "time_ms": 1648518870921,
+ "drop_pct": 332,
+ "total_tx_pps": 547443,
+ "tx_pps": 550692,
+ "tx_pkts": 5474432,
+ "drop_percentage": 0.0060645561037199845
+ },
+ {
+ "rx_pps": 458889.171916203,
+ "rx_pkts": 4560672,
+ "time_ms": 1648518883444,
+ "drop_pct": 207,
+ "total_tx_pps": 456087,
+ "tx_pps": 458910,
+ "tx_pkts": 4560879,
+ "drop_percentage": 0.004538598809571576
+ },
+ {
+ "rx_pps": 413014.7801994796,
+ "rx_pkts": 4104749,
+ "time_ms": 1648518895947,
+ "drop_pct": 32,
+ "total_tx_pps": 410478,
+ "tx_pps": 413018,
+ "tx_pkts": 4104781,
+ "drop_percentage": 0.0007795787400107339
+ },
+ {
+ "rx_pps": 435959.9748462513,
+ "rx_pkts": 4332356,
+ "time_ms": 1648518908443,
+ "drop_pct": 40,
+ "total_tx_pps": 433239,
+ "tx_pps": 435964,
+ "tx_pkts": 4332396,
+ "drop_percentage": 0.0009232766349151831
+ },
+ {
+ "rx_pps": 447372.79906432977,
+ "rx_pkts": 4446218,
+ "time_ms": 1648518920991,
+ "drop_pct": 648,
+ "total_tx_pps": 444686,
+ "tx_pps": 447438,
+ "tx_pkts": 4446866,
+ "ndr_pps": 217982,
+ "drop_percentage": 0.01457206041288404
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "b053f4a4365e4c55832ccb06c7c724b9"
+ },
+ "synthesis": {
+ "avg_delay_usec": 101.0000410861896,
+ "total_tx_rate": 433239
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "768"
+ ],
+ "rate": "ndr",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 02:00:18",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "a2cda8a229d34cc78999eccf910d02ea",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "768"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_10k-rate_ndr-1.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "768"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_10k-rate_ndr-1.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "768": {
+ "ndr": {
+ "load_percent_per_direction": 6.25,
+ "timestamp_sec": 1648519360.7870374,
+ "stats": {
+ "total_tx_rate": 492618,
+ "overall": {
+ "rx_pkts": 4926143,
+ "drop_percentage": 0.0007510890791647889,
+ "drop_pct": 37,
+ "max_delay_usec": 1171,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 4926180,
+ "avg_delay_usec": 100.00029982889251,
+ "min_delay_usec": 31,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 2462966,
+ "min_delay_usec": 31,
+ "drop_pct": 0,
+ "max_delay_usec": 245,
+ "tx_pkts": 2463214,
+ "avg_delay_usec": 93,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 2463177,
+ "min_delay_usec": 36,
+ "drop_pct": 37,
+ "max_delay_usec": 1171,
+ "tx_pkts": 2462966,
+ "avg_delay_usec": 107,
+ "drop_percentage": 0.0015022537866945787
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 3105463872.0,
+ "theoretical_tx_rate_pps": 7931472.081218274
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 12.5,
+ "duration_sec": 10.0,
+ "l2frame_size": "768",
+ "rate_pps": 495716,
+ "rate_bps": 3125000000.0,
+ "time_taken_sec": 137.70255613327026
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 1843706.9440757327,
+ "rx_pkts": 17791743,
+ "time_ms": 1648519235591,
+ "drop_pct": 58746837,
+ "total_tx_pps": 7653858,
+ "tx_pps": 7931472,
+ "tx_pkts": 76538580,
+ "drop_percentage": 76.75454261105968
+ },
+ {
+ "rx_pps": 1698570.5446705262,
+ "rx_pkts": 16879548,
+ "time_ms": 1648519248098,
+ "drop_pct": 22529961,
+ "total_tx_pps": 3940950,
+ "tx_pps": 3965736,
+ "tx_pkts": 39409509,
+ "drop_percentage": 57.168844706996985
+ },
+ {
+ "rx_pps": 1646922.9614271468,
+ "rx_pkts": 16367945,
+ "time_ms": 1648519260593,
+ "drop_pct": 3338790,
+ "total_tx_pps": 1970673,
+ "tx_pps": 1982868,
+ "tx_pkts": 19706735,
+ "drop_percentage": 16.942380358796118
+ },
+ {
+ "rx_pps": 990847.8365151717,
+ "rx_pkts": 9846551,
+ "time_ms": 1648519273128,
+ "drop_pct": 5825,
+ "total_tx_pps": 985237,
+ "tx_pps": 991434,
+ "tx_pkts": 9852376,
+ "drop_percentage": 0.0591227943391523
+ },
+ {
+ "rx_pps": 495712.27673126035,
+ "rx_pkts": 4926143,
+ "time_ms": 1648519285633,
+ "drop_pct": 37,
+ "total_tx_pps": 492618,
+ "tx_pps": 495716,
+ "tx_pkts": 4926180,
+ "drop_percentage": 0.0007510890791647889
+ },
+ {
+ "rx_pps": 742526.9561696775,
+ "rx_pkts": 7378863,
+ "time_ms": 1648519298137,
+ "drop_pct": 10405,
+ "total_tx_pps": 738926,
+ "tx_pps": 743574,
+ "tx_pkts": 7389268,
+ "drop_percentage": 0.14081232403534424
+ },
+ {
+ "rx_pps": 619264.736291264,
+ "rx_pkts": 6154255,
+ "time_ms": 1648519310675,
+ "drop_pct": 3789,
+ "total_tx_pps": 615804,
+ "tx_pps": 619646,
+ "tx_pkts": 6158044,
+ "drop_percentage": 0.061529277803146584
+ },
+ {
+ "rx_pps": 557659.6729669784,
+ "rx_pkts": 5541746,
+ "time_ms": 1648519323177,
+ "drop_pct": 202,
+ "total_tx_pps": 554194,
+ "tx_pps": 557680,
+ "tx_pkts": 5541948,
+ "drop_percentage": 0.0036449277402097603
+ },
+ {
+ "rx_pps": 526580.6667255119,
+ "rx_pkts": 5232898,
+ "time_ms": 1648519335711,
+ "drop_pct": 1166,
+ "total_tx_pps": 523406,
+ "tx_pps": 526698,
+ "tx_pkts": 5234064,
+ "drop_percentage": 0.022277144490399813
+ },
+ {
+ "rx_pps": 511050.9183162957,
+ "rx_pkts": 5078571,
+ "time_ms": 1648519348208,
+ "drop_pct": 1561,
+ "total_tx_pps": 508013,
+ "tx_pps": 511208,
+ "tx_pkts": 5080132,
+ "drop_percentage": 0.030727548024342674
+ },
+ {
+ "rx_pps": 503409.6729808145,
+ "rx_pkts": 5002636,
+ "time_ms": 1648519360786,
+ "drop_pct": 520,
+ "total_tx_pps": 500315,
+ "tx_pps": 503462,
+ "tx_pkts": 5003156,
+ "ndr_pps": 247858,
+ "drop_percentage": 0.010393439660886048
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "a2cda8a229d34cc78999eccf910d02ea"
+ },
+ "synthesis": {
+ "avg_delay_usec": 100.00029982889251,
+ "total_tx_rate": 492618
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "1024"
+ ],
+ "rate": "ndr",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 02:05:11",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "fc9128efed9440d785de14f69b0676de",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1024"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_10k-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1024"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_10k-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1024": {
+ "ndr": {
+ "load_percent_per_direction": 6.15234375,
+ "timestamp_sec": 1648519653.779957,
+ "stats": {
+ "total_tx_rate": 366012,
+ "overall": {
+ "rx_pkts": 3660123,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 2524,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 3660123,
+ "avg_delay_usec": 137.0001010894989,
+ "min_delay_usec": 33,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1829969,
+ "min_delay_usec": 39,
+ "drop_pct": 0,
+ "max_delay_usec": 968,
+ "tx_pkts": 1830154,
+ "avg_delay_usec": 135,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1830154,
+ "min_delay_usec": 33,
+ "drop_pct": 0,
+ "max_delay_usec": 2524,
+ "tx_pkts": 1829969,
+ "avg_delay_usec": 139,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 3056932224.0,
+ "theoretical_tx_rate_pps": 5986590.038314176
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 12.3046875,
+ "duration_sec": 10.0,
+ "l2frame_size": "1024",
+ "rate_pps": 368314,
+ "rate_bps": 3076171874.0,
+ "time_taken_sec": 137.631765127182
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 1700403.2178862838,
+ "rx_pkts": 16546247,
+ "time_ms": 1648519528631,
+ "drop_pct": 41707934,
+ "total_tx_pps": 5825418,
+ "tx_pps": 5986590,
+ "tx_pkts": 58254181,
+ "drop_percentage": 71.59646446664489
+ },
+ {
+ "rx_pps": 1777997.9131810525,
+ "rx_pkts": 17668853,
+ "time_ms": 1648519541226,
+ "drop_pct": 12077004,
+ "total_tx_pps": 2974585,
+ "tx_pps": 2993294,
+ "tx_pkts": 29745857,
+ "drop_percentage": 40.60062549214837
+ },
+ {
+ "rx_pps": 1465627.2355720846,
+ "rx_pkts": 14564672,
+ "time_ms": 1648519553730,
+ "drop_pct": 308249,
+ "total_tx_pps": 1487292,
+ "tx_pps": 1496646,
+ "tx_pkts": 14872921,
+ "drop_percentage": 2.072551854474316
+ },
+ {
+ "rx_pps": 747534.5177112543,
+ "rx_pkts": 7428999,
+ "time_ms": 1648519566245,
+ "drop_pct": 7826,
+ "total_tx_pps": 743682,
+ "tx_pps": 748322,
+ "tx_pkts": 7436825,
+ "drop_percentage": 0.10523307997700632
+ },
+ {
+ "rx_pps": 374133.28379134706,
+ "rx_pkts": 3725059,
+ "time_ms": 1648519578761,
+ "drop_pct": 266,
+ "total_tx_pps": 372532,
+ "tx_pps": 374160,
+ "tx_pkts": 3725325,
+ "drop_percentage": 0.007140316616671028
+ },
+ {
+ "rx_pps": 187080.0,
+ "rx_pkts": 1859296,
+ "time_ms": 1648519591256,
+ "drop_pct": 0,
+ "total_tx_pps": 185929,
+ "tx_pps": 187080,
+ "tx_pkts": 1859296,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 280620.0,
+ "rx_pkts": 2788944,
+ "time_ms": 1648519603755,
+ "drop_pct": 0,
+ "total_tx_pps": 278894,
+ "tx_pps": 280620,
+ "tx_pkts": 2788944,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 327386.98143813567,
+ "rx_pkts": 3253738,
+ "time_ms": 1648519616247,
+ "drop_pct": 30,
+ "total_tx_pps": 325376,
+ "tx_pps": 327390,
+ "tx_pkts": 3253768,
+ "drop_percentage": 0.0009220079612314092
+ },
+ {
+ "rx_pps": 350776.0,
+ "rx_pkts": 3485838,
+ "time_ms": 1648519628760,
+ "drop_pct": 0,
+ "total_tx_pps": 348583,
+ "tx_pps": 350776,
+ "tx_pkts": 3485838,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 362468.0,
+ "rx_pkts": 3602027,
+ "time_ms": 1648519641273,
+ "drop_pct": 0,
+ "total_tx_pps": 360202,
+ "tx_pps": 362468,
+ "tx_pkts": 3602027,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 368314.0,
+ "rx_pkts": 3660123,
+ "time_ms": 1648519653779,
+ "drop_pct": 0,
+ "total_tx_pps": 366012,
+ "tx_pps": 368314,
+ "tx_pkts": 3660123,
+ "ndr_pps": 184157,
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "fc9128efed9440d785de14f69b0676de"
+ },
+ "synthesis": {
+ "avg_delay_usec": 137.0001010894989,
+ "total_tx_rate": 366012
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "1280"
+ ],
+ "rate": "ndr",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 02:17:23",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "e329e7ec82084f7186e94e7d1c71663a",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1280"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_10k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1280"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_10k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1280": {
+ "ndr": {
+ "load_percent_per_direction": 6.8359375,
+ "timestamp_sec": 1648520386.142867,
+ "stats": {
+ "total_tx_rate": 326596,
+ "overall": {
+ "rx_pkts": 3265961,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 4719,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 3265961,
+ "avg_delay_usec": 245.0000499087405,
+ "min_delay_usec": 36,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1632899,
+ "min_delay_usec": 36,
+ "drop_pct": 0,
+ "max_delay_usec": 725,
+ "tx_pkts": 1633062,
+ "avg_delay_usec": 244,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1633062,
+ "min_delay_usec": 36,
+ "drop_pct": 0,
+ "max_delay_usec": 4719,
+ "tx_pkts": 1632899,
+ "avg_delay_usec": 246,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 3396598400.0,
+ "theoretical_tx_rate_pps": 4807692.307692308
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 13.671875,
+ "duration_sec": 10.0,
+ "l2frame_size": "1280",
+ "rate_pps": 328650,
+ "rate_bps": 3417968750.0,
+ "time_taken_sec": 137.8278579711914
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 1535106.7095401918,
+ "rx_pkts": 15014376,
+ "time_ms": 1648520260799,
+ "drop_pct": 32008085,
+ "total_tx_pps": 4702246,
+ "tx_pps": 4807692,
+ "tx_pkts": 47022461,
+ "drop_percentage": 68.06977839802983
+ },
+ {
+ "rx_pps": 1523422.5772190758,
+ "rx_pkts": 15139014,
+ "time_ms": 1648520273342,
+ "drop_pct": 8749209,
+ "total_tx_pps": 2388822,
+ "tx_pps": 2403846,
+ "tx_pkts": 23888223,
+ "drop_percentage": 36.62561673172592
+ },
+ {
+ "rx_pps": 1179882.5947820866,
+ "rx_pkts": 11736883,
+ "time_ms": 1648520285887,
+ "drop_pct": 219237,
+ "total_tx_pps": 1195612,
+ "tx_pps": 1201922,
+ "tx_pkts": 11956120,
+ "drop_percentage": 1.8336801571078243
+ },
+ {
+ "rx_pps": 600894.1953235778,
+ "rx_pkts": 5971989,
+ "time_ms": 1648520298395,
+ "drop_pct": 654,
+ "total_tx_pps": 597264,
+ "tx_pps": 600960,
+ "tx_pkts": 5972643,
+ "drop_percentage": 0.010949926188456267
+ },
+ {
+ "rx_pps": 300480.0,
+ "rx_pkts": 2986172,
+ "time_ms": 1648520310891,
+ "drop_pct": 0,
+ "total_tx_pps": 298617,
+ "tx_pps": 300480,
+ "tx_pkts": 2986172,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 450712.05910630024,
+ "rx_pkts": 4483910,
+ "time_ms": 1648520323438,
+ "drop_pct": 79,
+ "total_tx_pps": 448398,
+ "tx_pps": 450720,
+ "tx_pkts": 4483989,
+ "drop_percentage": 0.0017618241257951347
+ },
+ {
+ "rx_pps": 375548.77991538175,
+ "rx_pkts": 3732019,
+ "time_ms": 1648520335959,
+ "drop_pct": 509,
+ "total_tx_pps": 373252,
+ "tx_pps": 375600,
+ "tx_pkts": 3732528,
+ "drop_percentage": 0.013636870239151588
+ },
+ {
+ "rx_pps": 338015.5471880093,
+ "rx_pkts": 3359032,
+ "time_ms": 1648520348460,
+ "drop_pct": 243,
+ "total_tx_pps": 335927,
+ "tx_pps": 338040,
+ "tx_pkts": 3359275,
+ "drop_percentage": 0.007233703700947377
+ },
+ {
+ "rx_pps": 319260.0,
+ "rx_pkts": 3172967,
+ "time_ms": 1648520361037,
+ "drop_pct": 0,
+ "total_tx_pps": 317296,
+ "tx_pps": 319260,
+ "tx_pkts": 3172967,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 328650.0,
+ "rx_pkts": 3265961,
+ "time_ms": 1648520373554,
+ "drop_pct": 0,
+ "total_tx_pps": 326596,
+ "tx_pps": 328650,
+ "tx_pkts": 3265961,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 333339.37153865054,
+ "rx_pkts": 3312896,
+ "time_ms": 1648520386142,
+ "drop_pct": 46,
+ "total_tx_pps": 331294,
+ "tx_pps": 333344,
+ "tx_pkts": 3312942,
+ "ndr_pps": 164325,
+ "drop_percentage": 0.0013884939730306174
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "e329e7ec82084f7186e94e7d1c71663a"
+ },
+ "synthesis": {
+ "avg_delay_usec": 245.0000499087405,
+ "total_tx_rate": 326596
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "1518"
+ ],
+ "rate": "ndr",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 02:22:16",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "1e8206de26514ff6a4931f6250fde24a",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1518"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_10k-rate_ndr-1.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1518"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_10k-rate_ndr-1.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1518": {
+ "ndr": {
+ "load_percent_per_direction": 9.375,
+ "timestamp_sec": 1648520679.0839975,
+ "stats": {
+ "total_tx_rate": 378591,
+ "overall": {
+ "rx_pkts": 3785894,
+ "drop_percentage": 0.00047544686722776435,
+ "drop_pct": 18,
+ "max_delay_usec": 3658,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 3785912,
+ "avg_delay_usec": 170.99981827277784,
+ "min_delay_usec": 34,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1892861,
+ "min_delay_usec": 34,
+ "drop_pct": 0,
+ "max_delay_usec": 3658,
+ "tx_pkts": 1893051,
+ "avg_delay_usec": 175,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1893033,
+ "min_delay_usec": 35,
+ "drop_pct": 18,
+ "max_delay_usec": 3371,
+ "tx_pkts": 1892861,
+ "avg_delay_usec": 167,
+ "drop_percentage": 0.0009509414584589149
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 4658183664.0,
+ "theoretical_tx_rate_pps": 4063719.1157347206
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 18.75,
+ "duration_sec": 10.0,
+ "l2frame_size": "1518",
+ "rate_pps": 380972,
+ "rate_bps": 4687500000.0,
+ "time_taken_sec": 137.66561269760132
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 1541559.265878926,
+ "rx_pkts": 15109078,
+ "time_ms": 1648520553914,
+ "drop_pct": 24720096,
+ "total_tx_pps": 3982917,
+ "tx_pps": 4063718,
+ "tx_pkts": 39829174,
+ "drop_percentage": 62.06529916989993
+ },
+ {
+ "rx_pps": 1494377.2278385973,
+ "rx_pkts": 14850376,
+ "time_ms": 1648520566411,
+ "drop_pct": 5341216,
+ "total_tx_pps": 2019159,
+ "tx_pps": 2031858,
+ "tx_pkts": 20191592,
+ "drop_percentage": 26.452673964489772
+ },
+ {
+ "rx_pps": 1015244.8303578512,
+ "rx_pkts": 10088998,
+ "time_ms": 1648520578933,
+ "drop_pct": 6789,
+ "total_tx_pps": 1009578,
+ "tx_pps": 1015928,
+ "tx_pkts": 10095787,
+ "drop_percentage": 0.06724587196619738
+ },
+ {
+ "rx_pps": 507229.30857634713,
+ "rx_pkts": 5040594,
+ "time_ms": 1648520591432,
+ "drop_pct": 7301,
+ "total_tx_pps": 504789,
+ "tx_pps": 507964,
+ "tx_pkts": 5047895,
+ "drop_percentage": 0.1446345456868655
+ },
+ {
+ "rx_pps": 253982.0,
+ "rx_pkts": 2523948,
+ "time_ms": 1648520603928,
+ "drop_pct": 0,
+ "total_tx_pps": 252394,
+ "tx_pps": 253982,
+ "tx_pkts": 2523948,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 380970.18868056097,
+ "rx_pkts": 3785894,
+ "time_ms": 1648520616532,
+ "drop_pct": 18,
+ "total_tx_pps": 378591,
+ "tx_pps": 380972,
+ "tx_pkts": 3785912,
+ "drop_percentage": 0.0004754468672277644
+ },
+ {
+ "rx_pps": 444179.12352550065,
+ "rx_pkts": 4414476,
+ "time_ms": 1648520629047,
+ "drop_pct": 2871,
+ "total_tx_pps": 441734,
+ "tx_pps": 444468,
+ "tx_pkts": 4417347,
+ "drop_percentage": 0.06499376209294855
+ },
+ {
+ "rx_pps": 412677.0336150762,
+ "rx_pkts": 4101185,
+ "time_ms": 1648520641544,
+ "drop_pct": 427,
+ "total_tx_pps": 410161,
+ "tx_pps": 412720,
+ "tx_pkts": 4101612,
+ "drop_percentage": 0.01041054102630868
+ },
+ {
+ "rx_pps": 396730.1338174792,
+ "rx_pkts": 3944491,
+ "time_ms": 1648520654065,
+ "drop_pct": 1152,
+ "total_tx_pps": 394564,
+ "tx_pps": 396846,
+ "tx_pkts": 3945643,
+ "drop_percentage": 0.02919676209935871
+ },
+ {
+ "rx_pps": 388894.5031521723,
+ "rx_pkts": 3864641,
+ "time_ms": 1648520666566,
+ "drop_pct": 154,
+ "total_tx_pps": 386479,
+ "tx_pps": 388910,
+ "tx_pkts": 3864795,
+ "drop_percentage": 0.00398468741550328
+ },
+ {
+ "rx_pps": 384931.5345935888,
+ "rx_pkts": 3825258,
+ "time_ms": 1648520679083,
+ "drop_pct": 104,
+ "total_tx_pps": 382536,
+ "tx_pps": 384942,
+ "tx_pkts": 3825362,
+ "ndr_pps": 190486,
+ "drop_percentage": 0.002718696949465175
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "1e8206de26514ff6a4931f6250fde24a"
+ },
+ "synthesis": {
+ "avg_delay_usec": 170.99981827277784,
+ "total_tx_rate": 378591
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "IMIX"
+ ],
+ "rate": "ndr",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 02:27:13",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "6717811fb0a041bdae28c1780610969e",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "IMIX"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_10k-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "IMIX"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_10k-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "IMIX": {
+ "ndr": {
+ "load_percent_per_direction": 2.05078125,
+ "timestamp_sec": 1648520976.011313,
+ "stats": {
+ "total_tx_rate": 333616,
+ "overall": {
+ "rx_pkts": 3336161,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 698,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 3336161,
+ "avg_delay_usec": 122.49997497123191,
+ "min_delay_usec": 28,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1667997,
+ "min_delay_usec": 30,
+ "drop_pct": 0,
+ "max_delay_usec": 698,
+ "tx_pkts": 1668164,
+ "avg_delay_usec": 123,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1668164,
+ "min_delay_usec": 28,
+ "drop_pct": 0,
+ "max_delay_usec": 279,
+ "tx_pkts": 1667997,
+ "avg_delay_usec": 122,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 1019085674.6666666,
+ "theoretical_tx_rate_pps": 16368398.079441292
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 4.1015625,
+ "duration_sec": 10.0,
+ "l2frame_size": "IMIX",
+ "rate_pps": 335680,
+ "rate_bps": 1025390624.0,
+ "time_taken_sec": 137.6751914024353
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 480024.2862919867,
+ "rx_pkts": 4168384,
+ "time_ms": 1648520850833,
+ "drop_pct": 137969775,
+ "total_tx_pps": 14213815,
+ "tx_pps": 16368398,
+ "tx_pkts": 142138159,
+ "warning": "WARNING: There is a significant difference between requested TX rate (16368398) and actual TX rate (14213815). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 97.0673716127138
+ },
+ {
+ "rx_pps": 429860.8379715359,
+ "rx_pkts": 4272172,
+ "time_ms": 1648520863348,
+ "drop_pct": 77066481,
+ "total_tx_pps": 8133865,
+ "tx_pps": 8184198,
+ "tx_pkts": 81338653,
+ "drop_percentage": 94.74767304051618
+ },
+ {
+ "rx_pps": 527546.4558752577,
+ "rx_pkts": 5242915,
+ "time_ms": 1648520875895,
+ "drop_pct": 35425583,
+ "total_tx_pps": 4066849,
+ "tx_pps": 4092098,
+ "tx_pkts": 40668498,
+ "drop_percentage": 87.1081666207589
+ },
+ {
+ "rx_pps": 1892052.775002597,
+ "rx_pkts": 18802280,
+ "time_ms": 1648520888389,
+ "drop_pct": 1530328,
+ "total_tx_pps": 2033260,
+ "tx_pps": 2046048,
+ "tx_pkts": 20332608,
+ "drop_percentage": 7.526471763976367
+ },
+ {
+ "rx_pps": 1018805.8604937441,
+ "rx_pkts": 10125407,
+ "time_ms": 1648520900966,
+ "drop_pct": 41922,
+ "total_tx_pps": 1016732,
+ "tx_pps": 1023024,
+ "tx_pkts": 10167329,
+ "drop_percentage": 0.4123206793052531
+ },
+ {
+ "rx_pps": 511505.0566071885,
+ "rx_pkts": 5083084,
+ "time_ms": 1648520913485,
+ "drop_pct": 69,
+ "total_tx_pps": 508315,
+ "tx_pps": 511512,
+ "tx_pkts": 5083153,
+ "drop_percentage": 0.0013574252043957757
+ },
+ {
+ "rx_pps": 255756.0,
+ "rx_pkts": 2541833,
+ "time_ms": 1648520925981,
+ "drop_pct": 0,
+ "total_tx_pps": 254183,
+ "tx_pps": 255756,
+ "tx_pkts": 2541833,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 383623.4350406216,
+ "rx_pkts": 3812647,
+ "time_ms": 1648520938480,
+ "drop_pct": 105,
+ "total_tx_pps": 381275,
+ "tx_pps": 383634,
+ "tx_pkts": 3812752,
+ "drop_percentage": 0.0027539163313008556
+ },
+ {
+ "rx_pps": 319694.0,
+ "rx_pkts": 3182880,
+ "time_ms": 1648520951016,
+ "drop_pct": 0,
+ "total_tx_pps": 318288,
+ "tx_pps": 319694,
+ "tx_pkts": 3182880,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 351650.215240727,
+ "rx_pkts": 3494880,
+ "time_ms": 1648520963515,
+ "drop_pct": 137,
+ "total_tx_pps": 349501,
+ "tx_pps": 351664,
+ "tx_pkts": 3495017,
+ "drop_percentage": 0.003919866484197359
+ },
+ {
+ "rx_pps": 335680.0,
+ "rx_pkts": 3336161,
+ "time_ms": 1648520976010,
+ "drop_pct": 0,
+ "total_tx_pps": 333616,
+ "tx_pps": 335680,
+ "tx_pkts": 3336161,
+ "ndr_pps": 167840,
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "6717811fb0a041bdae28c1780610969e"
+ },
+ "synthesis": {
+ "avg_delay_usec": 122.49997497123191,
+ "total_tx_rate": 333616
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "9000"
+ ],
+ "rate": "ndr",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 02:36:59",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "a76995ed43ce4a1f8ff2e21b1a4d2fd9",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "9000"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_10k-rate_ndr-1.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "9000"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_10k-rate_ndr-1.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "9000": {
+ "ndr": {
+ "load_percent_per_direction": 39.0625,
+ "timestamp_sec": 1648521561.8428352,
+ "stats": {
+ "total_tx_rate": 268972,
+ "overall": {
+ "rx_pkts": 2689705,
+ "drop_percentage": 0.0007435704393571834,
+ "drop_pct": 20,
+ "max_delay_usec": 6516,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2689725,
+ "avg_delay_usec": 1027.9918745736056,
+ "min_delay_usec": 68,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1344775,
+ "min_delay_usec": 74,
+ "drop_pct": 20,
+ "max_delay_usec": 5878,
+ "tx_pkts": 1344930,
+ "avg_delay_usec": 1169,
+ "drop_percentage": 0.0014870662413657217
+ },
+ "0": {
+ "rx_pkts": 1344930,
+ "min_delay_usec": 68,
+ "drop_pct": 0,
+ "max_delay_usec": 6516,
+ "tx_pkts": 1344795,
+ "avg_delay_usec": 887,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 19409019520.0,
+ "theoretical_tx_rate_pps": 692904.6563192905
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 78.125,
+ "duration_sec": 10.0,
+ "l2frame_size": "9000",
+ "rate_pps": 270664,
+ "rate_bps": 19531250000.0,
+ "time_taken_sec": 137.58718967437744
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 278405.0005646744,
+ "rx_pkts": 2768644,
+ "time_ms": 1648521436741,
+ "drop_pct": 4122053,
+ "total_tx_pps": 689069,
+ "tx_pps": 692904,
+ "tx_pkts": 6890697,
+ "drop_percentage": 59.8205522605333
+ },
+ {
+ "rx_pps": 276331.9562142758,
+ "rx_pkts": 2746187,
+ "time_ms": 1648521449255,
+ "drop_pct": 696853,
+ "total_tx_pps": 344304,
+ "tx_pps": 346452,
+ "tx_pkts": 3443040,
+ "drop_percentage": 20.23946860913611
+ },
+ {
+ "rx_pps": 173226.0,
+ "rx_pkts": 1721607,
+ "time_ms": 1648521461778,
+ "drop_pct": 0,
+ "total_tx_pps": 172160,
+ "tx_pps": 173226,
+ "tx_pkts": 1721607,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 259837.29559799578,
+ "rx_pkts": 2582135,
+ "time_ms": 1648521474298,
+ "drop_pct": 7,
+ "total_tx_pps": 258214,
+ "tx_pps": 259838,
+ "tx_pkts": 2582142,
+ "drop_percentage": 0.00027109275942221615
+ },
+ {
+ "rx_pps": 276937.05630908126,
+ "rx_pkts": 2752342,
+ "time_ms": 1648521486796,
+ "drop_pct": 260458,
+ "total_tx_pps": 301280,
+ "tx_pps": 303144,
+ "tx_pkts": 3012800,
+ "drop_percentage": 8.6450477960701
+ },
+ {
+ "rx_pps": 276792.8929701584,
+ "rx_pkts": 2755614,
+ "time_ms": 1648521499312,
+ "drop_pct": 46782,
+ "total_tx_pps": 280239,
+ "tx_pps": 281492,
+ "tx_pkts": 2802396,
+ "drop_percentage": 1.6693572214633479
+ },
+ {
+ "rx_pps": 270661.98742250603,
+ "rx_pkts": 2689705,
+ "time_ms": 1648521511811,
+ "drop_pct": 20,
+ "total_tx_pps": 268972,
+ "tx_pps": 270664,
+ "tx_pkts": 2689725,
+ "drop_percentage": 0.0007435704393571834
+ },
+ {
+ "rx_pps": 276052.0403556816,
+ "rx_pkts": 2743544,
+ "time_ms": 1648521524310,
+ "drop_pct": 258,
+ "total_tx_pps": 274380,
+ "tx_pps": 276078,
+ "tx_pkts": 2743802,
+ "drop_percentage": 0.009403010858655253
+ },
+ {
+ "rx_pps": 273364.7554496673,
+ "rx_pkts": 2716837,
+ "time_ms": 1648521536836,
+ "drop_pct": 72,
+ "total_tx_pps": 271690,
+ "tx_pps": 273372,
+ "tx_pkts": 2716909,
+ "drop_percentage": 0.0026500703556872904
+ },
+ {
+ "rx_pps": 271980.0648314645,
+ "rx_pkts": 2702940,
+ "time_ms": 1648521549342,
+ "drop_pct": 377,
+ "total_tx_pps": 270331,
+ "tx_pps": 272018,
+ "tx_pkts": 2703317,
+ "drop_percentage": 0.013945830252241968
+ },
+ {
+ "rx_pps": 271298.2308444215,
+ "rx_pkts": 2696299,
+ "time_ms": 1648521561842,
+ "drop_pct": 435,
+ "total_tx_pps": 269673,
+ "tx_pps": 271342,
+ "tx_pkts": 2696734,
+ "ndr_pps": 135332,
+ "drop_percentage": 0.016130623190867176
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "a76995ed43ce4a1f8ff2e21b1a4d2fd9"
+ },
+ "synthesis": {
+ "avg_delay_usec": 1027.9918745736056,
+ "total_tx_rate": 268972
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "64"
+ ],
+ "rate": "ndr",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 02:44:19",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "859cf30e41754c5983e562fb7bf0fb6d",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "64"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_100k-rate_ndr-1.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "64"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_100k-rate_ndr-1.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "64": {
+ "ndr": {
+ "load_percent_per_direction": 0.78125,
+ "timestamp_sec": 1648522002.495307,
+ "stats": {
+ "total_tx_rate": 577711,
+ "overall": {
+ "rx_pkts": 5777113,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 275,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 5777113,
+ "avg_delay_usec": 119.99994997501346,
+ "min_delay_usec": 30,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 2888412,
+ "min_delay_usec": 30,
+ "drop_pct": 0,
+ "max_delay_usec": 260,
+ "tx_pkts": 2888701,
+ "avg_delay_usec": 121,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 2888701,
+ "min_delay_usec": 32,
+ "drop_pct": 0,
+ "max_delay_usec": 275,
+ "tx_pkts": 2888412,
+ "avg_delay_usec": 119,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 388221792.0,
+ "theoretical_tx_rate_pps": 74404761.90476191
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 1.5625,
+ "duration_sec": 10.0,
+ "l2frame_size": "64",
+ "rate_pps": 581286,
+ "rate_bps": 390625000.0,
+ "time_taken_sec": 137.66614270210266
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 1044485.5784527424,
+ "rx_pkts": 5973011,
+ "time_ms": 1648521877346,
+ "drop_pct": 419519173,
+ "total_tx_pps": 42549218,
+ "tx_pps": 74404760,
+ "tx_pkts": 425492184,
+ "warning": "WARNING: There is a significant difference between requested TX rate (74404760) and actual TX rate (42549218). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 98.59621134662252
+ },
+ {
+ "rx_pps": 1656555.9939682153,
+ "rx_pkts": 16462060,
+ "time_ms": 1648521889844,
+ "drop_pct": 353237373,
+ "total_tx_pps": 36969943,
+ "tx_pps": 37202380,
+ "tx_pkts": 369699433,
+ "drop_percentage": 95.54717737422118
+ },
+ {
+ "rx_pps": 966647.7521170629,
+ "rx_pkts": 9607013,
+ "time_ms": 1648521902362,
+ "drop_pct": 175260612,
+ "total_tx_pps": 18486762,
+ "tx_pps": 18601190,
+ "tx_pkts": 184867625,
+ "drop_percentage": 94.80330155158319
+ },
+ {
+ "rx_pps": 1951565.285508652,
+ "rx_pkts": 19395621,
+ "time_ms": 1648521914859,
+ "drop_pct": 73038282,
+ "total_tx_pps": 9243390,
+ "tx_pps": 9300594,
+ "tx_pkts": 92433903,
+ "drop_percentage": 79.01676725692303
+ },
+ {
+ "rx_pps": 1716942.598940512,
+ "rx_pkts": 17062118,
+ "time_ms": 1648521927407,
+ "drop_pct": 29150201,
+ "total_tx_pps": 4621231,
+ "tx_pps": 4650296,
+ "tx_pkts": 46212319,
+ "drop_percentage": 63.07885349791687
+ },
+ {
+ "rx_pps": 1580289.032741088,
+ "rx_pkts": 15705705,
+ "time_ms": 1648521939922,
+ "drop_pct": 7402782,
+ "total_tx_pps": 2310848,
+ "tx_pps": 2325148,
+ "tx_pkts": 23108487,
+ "drop_percentage": 32.03490561714404
+ },
+ {
+ "rx_pps": 1161510.1511160529,
+ "rx_pkts": 11542509,
+ "time_ms": 1648521952469,
+ "drop_pct": 10572,
+ "total_tx_pps": 1155308,
+ "tx_pps": 1162574,
+ "tx_pkts": 11553081,
+ "drop_percentage": 0.09150805746103571
+ },
+ {
+ "rx_pps": 581286.0,
+ "rx_pkts": 5777113,
+ "time_ms": 1648521964985,
+ "drop_pct": 0,
+ "total_tx_pps": 577711,
+ "tx_pps": 581286,
+ "tx_pkts": 5777113,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 871909.7756240192,
+ "rx_pkts": 8665477,
+ "time_ms": 1648521977483,
+ "drop_pct": 201,
+ "total_tx_pps": 866567,
+ "tx_pps": 871930,
+ "tx_pkts": 8665678,
+ "drop_percentage": 0.0023194953701256844
+ },
+ {
+ "rx_pps": 726593.5108987914,
+ "rx_pkts": 7221253,
+ "time_ms": 1648521989998,
+ "drop_pct": 144,
+ "total_tx_pps": 722139,
+ "tx_pps": 726608,
+ "tx_pkts": 7221397,
+ "drop_percentage": 0.001994073999809178
+ },
+ {
+ "rx_pps": 653890.8427914827,
+ "rx_pkts": 6498043,
+ "time_ms": 1648522002494,
+ "drop_pct": 568,
+ "total_tx_pps": 649861,
+ "tx_pps": 653948,
+ "tx_pkts": 6498611,
+ "ndr_pps": 290643,
+ "drop_percentage": 0.008740329279595286
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "859cf30e41754c5983e562fb7bf0fb6d"
+ },
+ "synthesis": {
+ "avg_delay_usec": 119.99994997501346,
+ "total_tx_rate": 577711
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "128"
+ ],
+ "rate": "ndr",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 02:54:07",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "d00c9abb62b94d448a46ffa181ddab5e",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "128"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_100k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "128"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_100k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "128": {
+ "ndr": {
+ "load_percent_per_direction": 1.5625,
+ "timestamp_sec": 1648522591.145952,
+ "stats": {
+ "total_tx_rate": 655780,
+ "overall": {
+ "rx_pkts": 6557739,
+ "drop_percentage": 0.0009454388750131332,
+ "drop_pct": 62,
+ "max_delay_usec": 957,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 6557801,
+ "avg_delay_usec": 138.4995528184333,
+ "min_delay_usec": 32,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 3278674,
+ "min_delay_usec": 34,
+ "drop_pct": 62,
+ "max_delay_usec": 321,
+ "tx_pkts": 3279065,
+ "avg_delay_usec": 146,
+ "drop_percentage": 0.0018907828908545576
+ },
+ "0": {
+ "rx_pkts": 3279065,
+ "min_delay_usec": 32,
+ "drop_pct": 0,
+ "max_delay_usec": 957,
+ "tx_pkts": 3278736,
+ "avg_delay_usec": 131,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 776443520.0,
+ "theoretical_tx_rate_pps": 42229729.72972973
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 3.125,
+ "duration_sec": 10.0,
+ "l2frame_size": "128",
+ "rate_pps": 659838,
+ "rate_bps": 781250000.0,
+ "time_taken_sec": 137.81604623794556
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 575195.7927175488,
+ "rx_pkts": 5266904,
+ "time_ms": 1648522465816,
+ "drop_pct": 381418684,
+ "total_tx_pps": 38668558,
+ "tx_pps": 42229728,
+ "tx_pkts": 386685588,
+ "drop_percentage": 98.63793630705472
+ },
+ {
+ "rx_pps": 567278.3196453974,
+ "rx_pkts": 5637329,
+ "time_ms": 1648522478320,
+ "drop_pct": 204191658,
+ "total_tx_pps": 20982898,
+ "tx_pps": 21114864,
+ "tx_pkts": 209828987,
+ "drop_percentage": 97.31336976811502
+ },
+ {
+ "rx_pps": 566897.9693114288,
+ "rx_pkts": 5633553,
+ "time_ms": 1648522490823,
+ "drop_pct": 99281010,
+ "total_tx_pps": 10491456,
+ "tx_pps": 10557432,
+ "tx_pkts": 104914563,
+ "drop_percentage": 94.63034221474096
+ },
+ {
+ "rx_pps": 639383.528283698,
+ "rx_pkts": 6368581,
+ "time_ms": 1648522503423,
+ "drop_pct": 46210081,
+ "total_tx_pps": 5257866,
+ "tx_pps": 5278716,
+ "tx_pkts": 52578662,
+ "drop_percentage": 87.88751794406636
+ },
+ {
+ "rx_pps": 1855352.6709109098,
+ "rx_pkts": 18437572,
+ "time_ms": 1648522515925,
+ "drop_pct": 7791055,
+ "total_tx_pps": 2622862,
+ "tx_pps": 2639358,
+ "tx_pkts": 26228627,
+ "drop_percentage": 29.704395125219477
+ },
+ {
+ "rx_pps": 1315331.5523658819,
+ "rx_pkts": 13071766,
+ "time_ms": 1648522528443,
+ "drop_pct": 43195,
+ "total_tx_pps": 1311496,
+ "tx_pps": 1319678,
+ "tx_pkts": 13114961,
+ "drop_percentage": 0.32935667898669313
+ },
+ {
+ "rx_pps": 659831.761635036,
+ "rx_pkts": 6557739,
+ "time_ms": 1648522540951,
+ "drop_pct": 62,
+ "total_tx_pps": 655780,
+ "tx_pps": 659838,
+ "tx_pkts": 6557801,
+ "drop_percentage": 0.0009454388750131332
+ },
+ {
+ "rx_pps": 987585.841691004,
+ "rx_pkts": 9815124,
+ "time_ms": 1648522553600,
+ "drop_pct": 21588,
+ "total_tx_pps": 983671,
+ "tx_pps": 989758,
+ "tx_pkts": 9836712,
+ "drop_percentage": 0.21946357685372916
+ },
+ {
+ "rx_pps": 824593.6227131974,
+ "rx_pkts": 8194402,
+ "time_ms": 1648522566129,
+ "drop_pct": 2031,
+ "total_tx_pps": 819643,
+ "tx_pps": 824798,
+ "tx_pkts": 8196433,
+ "drop_percentage": 0.02477907157906372
+ },
+ {
+ "rx_pps": 742228.248068629,
+ "rx_pkts": 7376639,
+ "time_ms": 1648522578649,
+ "drop_pct": 892,
+ "total_tx_pps": 737753,
+ "tx_pps": 742318,
+ "tx_pkts": 7377531,
+ "drop_percentage": 0.012090765867334208
+ },
+ {
+ "rx_pps": 700873.6432437552,
+ "rx_pkts": 6965634,
+ "time_ms": 1648522591145,
+ "drop_pct": 2031,
+ "total_tx_pps": 696766,
+ "tx_pps": 701078,
+ "tx_pkts": 6967665,
+ "ndr_pps": 329919,
+ "drop_percentage": 0.029148932963912588
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "d00c9abb62b94d448a46ffa181ddab5e"
+ },
+ "synthesis": {
+ "avg_delay_usec": 138.4995528184333,
+ "total_tx_rate": 655780
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "256"
+ ],
+ "rate": "ndr",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 03:01:28",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "00c68a9f42064b53b7e9abb957d13033",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "256"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_100k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "256"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_100k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "256": {
+ "ndr": {
+ "load_percent_per_direction": 2.34375,
+ "timestamp_sec": 1648523031.8611252,
+ "stats": {
+ "total_tx_rate": 527476,
+ "overall": {
+ "rx_pkts": 5274760,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 2258,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 5274760,
+ "avg_delay_usec": 135.49841149170769,
+ "min_delay_usec": 30,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 2637247,
+ "min_delay_usec": 30,
+ "drop_pct": 0,
+ "max_delay_usec": 251,
+ "tx_pkts": 2637513,
+ "avg_delay_usec": 167,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 2637513,
+ "min_delay_usec": 30,
+ "drop_pct": 0,
+ "max_delay_usec": 2258,
+ "tx_pkts": 2637247,
+ "avg_delay_usec": 104,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 1164667008.0,
+ "theoretical_tx_rate_pps": 22644927.536231883
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 4.6875,
+ "duration_sec": 10.0,
+ "l2frame_size": "256",
+ "rate_pps": 530740,
+ "rate_bps": 1171875000.0,
+ "time_taken_sec": 137.57874631881714
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 632951.7633188012,
+ "rx_pkts": 5732879,
+ "time_ms": 1648522906769,
+ "drop_pct": 199370619,
+ "total_tx_pps": 20510349,
+ "tx_pps": 22644926,
+ "tx_pkts": 205103498,
+ "drop_percentage": 97.20488482356356
+ },
+ {
+ "rx_pps": 525347.9116271588,
+ "rx_pkts": 5220542,
+ "time_ms": 1648522919288,
+ "drop_pct": 107294207,
+ "total_tx_pps": 11251474,
+ "tx_pps": 11322462,
+ "tx_pkts": 112514749,
+ "drop_percentage": 95.36012651994629
+ },
+ {
+ "rx_pps": 618995.2907265456,
+ "rx_pkts": 6151267,
+ "time_ms": 1648522931785,
+ "drop_pct": 50107218,
+ "total_tx_pps": 5625848,
+ "tx_pps": 5661230,
+ "tx_pkts": 56258485,
+ "drop_percentage": 89.06606354579225
+ },
+ {
+ "rx_pps": 1708283.2963459694,
+ "rx_pkts": 16977774,
+ "time_ms": 1648522944283,
+ "drop_pct": 11154284,
+ "total_tx_pps": 2813205,
+ "tx_pps": 2830614,
+ "tx_pkts": 28132058,
+ "drop_percentage": 39.649726301573814
+ },
+ {
+ "rx_pps": 1360731.7774735298,
+ "rx_pkts": 13523635,
+ "time_ms": 1648522956800,
+ "drop_pct": 542386,
+ "total_tx_pps": 1406602,
+ "tx_pps": 1415306,
+ "tx_pkts": 14066021,
+ "drop_percentage": 3.8560016368523833
+ },
+ {
+ "rx_pps": 707523.1949731325,
+ "rx_pkts": 7031012,
+ "time_ms": 1648522969304,
+ "drop_pct": 1280,
+ "total_tx_pps": 703229,
+ "tx_pps": 707652,
+ "tx_pkts": 7032292,
+ "drop_percentage": 0.01820174702643178
+ },
+ {
+ "rx_pps": 353826.0,
+ "rx_pkts": 3522871,
+ "time_ms": 1648522981825,
+ "drop_pct": 0,
+ "total_tx_pps": 352287,
+ "tx_pps": 353826,
+ "tx_pkts": 3522871,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 530740.0,
+ "rx_pkts": 5274760,
+ "time_ms": 1648522994322,
+ "drop_pct": 0,
+ "total_tx_pps": 527476,
+ "tx_pps": 530740,
+ "tx_pkts": 5274760,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 619168.936279166,
+ "rx_pkts": 6154233,
+ "time_ms": 1648523006848,
+ "drop_pct": 269,
+ "total_tx_pps": 615450,
+ "tx_pps": 619196,
+ "tx_pkts": 6154502,
+ "drop_percentage": 0.004370784183675625
+ },
+ {
+ "rx_pps": 574945.8616487811,
+ "rx_pkts": 5713528,
+ "time_ms": 1648523019362,
+ "drop_pct": 220,
+ "total_tx_pps": 571374,
+ "tx_pps": 574968,
+ "tx_pkts": 5713748,
+ "drop_percentage": 0.0038503623190942267
+ },
+ {
+ "rx_pps": 552739.5964496398,
+ "rx_pkts": 5493404,
+ "time_ms": 1648523031860,
+ "drop_pct": 1137,
+ "total_tx_pps": 549454,
+ "tx_pps": 552854,
+ "tx_pkts": 5494541,
+ "ndr_pps": 265370,
+ "drop_percentage": 0.0206932662801133
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "00c68a9f42064b53b7e9abb957d13033"
+ },
+ "synthesis": {
+ "avg_delay_usec": 135.49841149170769,
+ "total_tx_rate": 527476
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "512"
+ ],
+ "rate": "ndr",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 03:08:48",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "b4eddc7398da473da06f59d26481dd90",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "512"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_100k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "512"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_100k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "512": {
+ "ndr": {
+ "load_percent_per_direction": 3.61328125,
+ "timestamp_sec": 1648523471.325121,
+ "stats": {
+ "total_tx_rate": 421839,
+ "overall": {
+ "rx_pkts": 4218391,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 964,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 4218391,
+ "avg_delay_usec": 91.49982327385015,
+ "min_delay_usec": 32,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 2109089,
+ "min_delay_usec": 32,
+ "drop_pct": 0,
+ "max_delay_usec": 964,
+ "tx_pkts": 2109302,
+ "avg_delay_usec": 95,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 2109302,
+ "min_delay_usec": 32,
+ "drop_pct": 0,
+ "max_delay_usec": 234,
+ "tx_pkts": 2109089,
+ "avg_delay_usec": 88,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 1795346784.0,
+ "theoretical_tx_rate_pps": 11748120.30075188
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 7.2265625,
+ "duration_sec": 10.0,
+ "l2frame_size": "512",
+ "rate_pps": 424492,
+ "rate_bps": 1806640624.0,
+ "time_taken_sec": 137.6849229335785
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 563084.4500570935,
+ "rx_pkts": 5335501,
+ "time_ms": 1648523346125,
+ "drop_pct": 105983691,
+ "total_tx_pps": 11131919,
+ "tx_pps": 11748120,
+ "tx_pkts": 111319192,
+ "drop_percentage": 95.20702503841386
+ },
+ {
+ "rx_pps": 637290.2801695273,
+ "rx_pkts": 6333073,
+ "time_ms": 1648523358659,
+ "drop_pct": 52040406,
+ "total_tx_pps": 5837347,
+ "tx_pps": 5874060,
+ "tx_pkts": 58373479,
+ "drop_percentage": 89.15076999265368
+ },
+ {
+ "rx_pps": 1745105.2638676804,
+ "rx_pkts": 17342859,
+ "time_ms": 1648523371158,
+ "drop_pct": 11845350,
+ "total_tx_pps": 2918820,
+ "tx_pps": 2937030,
+ "tx_pkts": 29188209,
+ "drop_percentage": 40.582654454749175
+ },
+ {
+ "rx_pps": 1410723.9011671874,
+ "rx_pkts": 14020482,
+ "time_ms": 1648523383738,
+ "drop_pct": 574347,
+ "total_tx_pps": 1459482,
+ "tx_pps": 1468514,
+ "tx_pkts": 14594829,
+ "drop_percentage": 3.935277350628774
+ },
+ {
+ "rx_pps": 734025.8600312393,
+ "rx_pkts": 7313468,
+ "time_ms": 1648523396281,
+ "drop_pct": 2293,
+ "total_tx_pps": 731576,
+ "tx_pps": 734256,
+ "tx_pkts": 7315761,
+ "drop_percentage": 0.03134328745840658
+ },
+ {
+ "rx_pps": 367128.0,
+ "rx_pkts": 3648704,
+ "time_ms": 1648523408795,
+ "drop_pct": 0,
+ "total_tx_pps": 364870,
+ "tx_pps": 367128,
+ "tx_pkts": 3648704,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 550589.7713038774,
+ "rx_pkts": 5472037,
+ "time_ms": 1648523421294,
+ "drop_pct": 1016,
+ "total_tx_pps": 547305,
+ "tx_pps": 550692,
+ "tx_pkts": 5473053,
+ "drop_percentage": 0.01856367917504179
+ },
+ {
+ "rx_pps": 458654.12648746,
+ "rx_pkts": 4558336,
+ "time_ms": 1648523433810,
+ "drop_pct": 2543,
+ "total_tx_pps": 456087,
+ "tx_pps": 458910,
+ "tx_pkts": 4560879,
+ "drop_percentage": 0.05575679600357738
+ },
+ {
+ "rx_pps": 413015.98762516497,
+ "rx_pkts": 4104762,
+ "time_ms": 1648523446308,
+ "drop_pct": 20,
+ "total_tx_pps": 410478,
+ "tx_pps": 413018,
+ "tx_pkts": 4104782,
+ "drop_percentage": 0.00048723659380693054
+ },
+ {
+ "rx_pps": 435949.3084804507,
+ "rx_pkts": 4332336,
+ "time_ms": 1648523458810,
+ "drop_pct": 146,
+ "total_tx_pps": 433248,
+ "tx_pps": 435964,
+ "tx_pkts": 4332482,
+ "drop_percentage": 0.0033698928235593364
+ },
+ {
+ "rx_pps": 424492.0,
+ "rx_pkts": 4218391,
+ "time_ms": 1648523471324,
+ "drop_pct": 0,
+ "total_tx_pps": 421839,
+ "tx_pps": 424492,
+ "tx_pkts": 4218391,
+ "ndr_pps": 212246,
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "b4eddc7398da473da06f59d26481dd90"
+ },
+ "synthesis": {
+ "avg_delay_usec": 91.49982327385015,
+ "total_tx_rate": 421839
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "768"
+ ],
+ "rate": "ndr",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 03:13:41",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "23114778f5174c1a8a3ff5e0156d0214",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "768"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_100k-rate_ndr-1.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "768"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_100k-rate_ndr-1.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "768": {
+ "ndr": {
+ "load_percent_per_direction": 5.859375,
+ "timestamp_sec": 1648523764.1071556,
+ "stats": {
+ "total_tx_rate": 461876,
+ "overall": {
+ "rx_pkts": 4618724,
+ "drop_percentage": 0.0008227312860026129,
+ "drop_pct": 38,
+ "max_delay_usec": 4782,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 4618762,
+ "avg_delay_usec": 105.0,
+ "min_delay_usec": 33,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 2309249,
+ "min_delay_usec": 33,
+ "drop_pct": 16,
+ "max_delay_usec": 2687,
+ "tx_pkts": 2309497,
+ "avg_delay_usec": 105,
+ "drop_percentage": 0.000692791547250332
+ },
+ "0": {
+ "rx_pkts": 2309475,
+ "min_delay_usec": 33,
+ "drop_pct": 22,
+ "max_delay_usec": 4782,
+ "tx_pkts": 2309265,
+ "avg_delay_usec": 105,
+ "drop_percentage": 0.0009526840791334039
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 2911666304.0,
+ "theoretical_tx_rate_pps": 7931472.081218274
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 11.71875,
+ "duration_sec": 10.0,
+ "l2frame_size": "768",
+ "rate_pps": 464734,
+ "rate_bps": 2929687500.0,
+ "time_taken_sec": 137.67143726348877
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 955878.5749151269,
+ "rx_pkts": 9207107,
+ "time_ms": 1648523638974,
+ "drop_pct": 67189533,
+ "total_tx_pps": 7639664,
+ "tx_pps": 7931472,
+ "tx_pkts": 76396640,
+ "drop_percentage": 87.9482828040605
+ },
+ {
+ "rx_pps": 972237.1870658809,
+ "rx_pkts": 9662578,
+ "time_ms": 1648523651488,
+ "drop_pct": 29750884,
+ "total_tx_pps": 3941346,
+ "tx_pps": 3965736,
+ "tx_pkts": 39413462,
+ "drop_percentage": 75.48406683990359
+ },
+ {
+ "rx_pps": 1578290.234876225,
+ "rx_pkts": 15684261,
+ "time_ms": 1648523663985,
+ "drop_pct": 4020492,
+ "total_tx_pps": 1970475,
+ "tx_pps": 1982868,
+ "tx_pkts": 19704753,
+ "drop_percentage": 20.40366605965576
+ },
+ {
+ "rx_pps": 991198.3508095556,
+ "rx_pkts": 9851027,
+ "time_ms": 1648523676482,
+ "drop_pct": 2342,
+ "total_tx_pps": 985336,
+ "tx_pps": 991434,
+ "tx_pkts": 9853369,
+ "drop_percentage": 0.023768520188374147
+ },
+ {
+ "rx_pps": 495674.5408910233,
+ "rx_pkts": 4925767,
+ "time_ms": 1648523688978,
+ "drop_pct": 412,
+ "total_tx_pps": 492617,
+ "tx_pps": 495716,
+ "tx_pkts": 4926179,
+ "drop_percentage": 0.00836348009278591
+ },
+ {
+ "rx_pps": 247858.0,
+ "rx_pkts": 2463338,
+ "time_ms": 1648523701524,
+ "drop_pct": 0,
+ "total_tx_pps": 246333,
+ "tx_pps": 247858,
+ "tx_pkts": 2463338,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 371786.0,
+ "rx_pkts": 3698343,
+ "time_ms": 1648523714031,
+ "drop_pct": 0,
+ "total_tx_pps": 369834,
+ "tx_pps": 371786,
+ "tx_pkts": 3698343,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 433750.39284890535,
+ "rx_pkts": 4318204,
+ "time_ms": 1648523726546,
+ "drop_pct": 16,
+ "total_tx_pps": 431822,
+ "tx_pps": 433752,
+ "tx_pkts": 4318220,
+ "drop_percentage": 0.00037052303958575524
+ },
+ {
+ "rx_pps": 464730.17648798524,
+ "rx_pkts": 4618724,
+ "time_ms": 1648523739092,
+ "drop_pct": 38,
+ "total_tx_pps": 461876,
+ "tx_pps": 464734,
+ "tx_pkts": 4618762,
+ "drop_percentage": 0.0008227312860026128
+ },
+ {
+ "rx_pps": 480195.32365105936,
+ "rx_pkts": 4772423,
+ "time_ms": 1648523751589,
+ "drop_pct": 285,
+ "total_tx_pps": 477270,
+ "tx_pps": 480224,
+ "tx_pkts": 4772708,
+ "drop_percentage": 0.005971452684723222
+ },
+ {
+ "rx_pps": 472303.0115781439,
+ "rx_pkts": 4693985,
+ "time_ms": 1648523764106,
+ "drop_pct": 1759,
+ "total_tx_pps": 469574,
+ "tx_pps": 472480,
+ "tx_pkts": 4695744,
+ "ndr_pps": 232367,
+ "drop_percentage": 0.03745945264477791
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "23114778f5174c1a8a3ff5e0156d0214"
+ },
+ "synthesis": {
+ "avg_delay_usec": 105.0,
+ "total_tx_rate": 461876
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "1024"
+ ],
+ "rate": "ndr",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 03:18:34",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "fbf5ac38628f451fa3ca8b356e8c75b2",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1024"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_100k-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1024"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_100k-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1024": {
+ "ndr": {
+ "load_percent_per_direction": 6.640625,
+ "timestamp_sec": 1648524057.2266753,
+ "stats": {
+ "total_tx_rate": 395081,
+ "overall": {
+ "rx_pkts": 3950815,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 5009,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 3950815,
+ "avg_delay_usec": 135.49999860788216,
+ "min_delay_usec": 32,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1975407,
+ "min_delay_usec": 32,
+ "drop_pct": 0,
+ "max_delay_usec": 1872,
+ "tx_pkts": 1975408,
+ "avg_delay_usec": 141,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1975408,
+ "min_delay_usec": 35,
+ "drop_pct": 0,
+ "max_delay_usec": 5009,
+ "tx_pkts": 1975407,
+ "avg_delay_usec": 130,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 3299716512.0,
+ "theoretical_tx_rate_pps": 5986590.038314176
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 13.28125,
+ "duration_sec": 10.0,
+ "l2frame_size": "1024",
+ "rate_pps": 397546,
+ "rate_bps": 3320312500.0,
+ "time_taken_sec": 137.57492899894714
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 1528705.606599547,
+ "rx_pkts": 14848752,
+ "time_ms": 1648523932137,
+ "drop_pct": 43300698,
+ "total_tx_pps": 5814945,
+ "tx_pps": 5986590,
+ "tx_pkts": 58149450,
+ "drop_percentage": 74.46450138393398
+ },
+ {
+ "rx_pps": 1577883.6850487113,
+ "rx_pkts": 15680218,
+ "time_ms": 1648523944639,
+ "drop_pct": 14065639,
+ "total_tx_pps": 2974585,
+ "tx_pps": 2993294,
+ "tx_pkts": 29745857,
+ "drop_percentage": 47.286043901844884
+ },
+ {
+ "rx_pps": 1403083.656451526,
+ "rx_pkts": 13943147,
+ "time_ms": 1648523957150,
+ "drop_pct": 929776,
+ "total_tx_pps": 1487292,
+ "tx_pps": 1496646,
+ "tx_pkts": 14872923,
+ "drop_percentage": 6.25146785201537
+ },
+ {
+ "rx_pps": 748312.0377400354,
+ "rx_pkts": 7436354,
+ "time_ms": 1648523969710,
+ "drop_pct": 99,
+ "total_tx_pps": 743645,
+ "tx_pps": 748322,
+ "tx_pkts": 7436453,
+ "drop_percentage": 0.0013312798453778971
+ },
+ {
+ "rx_pps": 374160.0,
+ "rx_pkts": 3718217,
+ "time_ms": 1648523982208,
+ "drop_pct": 0,
+ "total_tx_pps": 371821,
+ "tx_pps": 374160,
+ "tx_pkts": 3718217,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 561003.6221851375,
+ "rx_pkts": 5575257,
+ "time_ms": 1648523994704,
+ "drop_pct": 2369,
+ "total_tx_pps": 557762,
+ "tx_pps": 561242,
+ "tx_pkts": 5577626,
+ "drop_percentage": 0.042473267300460804
+ },
+ {
+ "rx_pps": 467630.352253285,
+ "rx_pkts": 4647080,
+ "time_ms": 1648524007203,
+ "drop_pct": 712,
+ "total_tx_pps": 464779,
+ "tx_pps": 467702,
+ "tx_pkts": 4647792,
+ "drop_percentage": 0.015319102059644665
+ },
+ {
+ "rx_pps": 420890.9516613151,
+ "rx_pkts": 4183446,
+ "time_ms": 1648524019707,
+ "drop_pct": 408,
+ "total_tx_pps": 418385,
+ "tx_pps": 420932,
+ "tx_pkts": 4183854,
+ "drop_percentage": 0.00975177432099686
+ },
+ {
+ "rx_pps": 397546.0,
+ "rx_pkts": 3950815,
+ "time_ms": 1648524032233,
+ "drop_pct": 0,
+ "total_tx_pps": 395081,
+ "tx_pps": 397546,
+ "tx_pkts": 3950815,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 409232.9685563975,
+ "rx_pkts": 4066755,
+ "time_ms": 1648524044730,
+ "drop_pct": 50,
+ "total_tx_pps": 406680,
+ "tx_pps": 409238,
+ "tx_pkts": 4066805,
+ "drop_percentage": 0.0012294663747093849
+ },
+ {
+ "rx_pps": 403269.836569411,
+ "rx_pkts": 4007497,
+ "time_ms": 1648524057225,
+ "drop_pct": 1214,
+ "total_tx_pps": 400871,
+ "tx_pps": 403392,
+ "tx_pkts": 4008711,
+ "ndr_pps": 198773,
+ "drop_percentage": 0.030284048912480845
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "fbf5ac38628f451fa3ca8b356e8c75b2"
+ },
+ "synthesis": {
+ "avg_delay_usec": 135.49999860788216,
+ "total_tx_rate": 395081
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "1280"
+ ],
+ "rate": "ndr",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 03:30:47",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "786f3740545f4a40a9dc01f9dffc595c",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1280"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_100k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1280"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_100k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1280": {
+ "ndr": {
+ "load_percent_per_direction": 11.5234375,
+ "timestamp_sec": 1648524790.37032,
+ "stats": {
+ "total_tx_rate": 551101,
+ "overall": {
+ "rx_pkts": 5510977,
+ "drop_percentage": 0.0007076735033975586,
+ "drop_pct": 39,
+ "max_delay_usec": 3562,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 5511016,
+ "avg_delay_usec": 147.99948230595047,
+ "min_delay_usec": 32,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 2755330,
+ "min_delay_usec": 32,
+ "drop_pct": 39,
+ "max_delay_usec": 1593,
+ "tx_pkts": 2755647,
+ "avg_delay_usec": 157,
+ "drop_percentage": 0.0014152756140390988
+ },
+ "0": {
+ "rx_pkts": 2755647,
+ "min_delay_usec": 34,
+ "drop_pct": 0,
+ "max_delay_usec": 3562,
+ "tx_pkts": 2755369,
+ "avg_delay_usec": 139,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 5731450400.0,
+ "theoretical_tx_rate_pps": 4807692.307692308
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 23.046875,
+ "duration_sec": 10.0,
+ "l2frame_size": "1280",
+ "rate_pps": 554010,
+ "rate_bps": 5761718750.0,
+ "time_taken_sec": 137.65743374824524
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 1615487.8462332233,
+ "rx_pkts": 15772944,
+ "time_ms": 1648524665199,
+ "drop_pct": 31167339,
+ "total_tx_pps": 4694028,
+ "tx_pps": 4807692,
+ "tx_pkts": 46940283,
+ "drop_percentage": 66.3978506478114
+ },
+ {
+ "rx_pps": 1489092.605554872,
+ "rx_pkts": 14797858,
+ "time_ms": 1648524677694,
+ "drop_pct": 9090362,
+ "total_tx_pps": 2388822,
+ "tx_pps": 2403846,
+ "tx_pkts": 23888220,
+ "drop_percentage": 38.05374364435693
+ },
+ {
+ "rx_pps": 1181454.0274231592,
+ "rx_pkts": 11741884,
+ "time_ms": 1648524690189,
+ "drop_pct": 203421,
+ "total_tx_pps": 1194530,
+ "tx_pps": 1201922,
+ "tx_pkts": 11945305,
+ "drop_percentage": 1.7029368442245718
+ },
+ {
+ "rx_pps": 600838.4525039338,
+ "rx_pkts": 5971434,
+ "time_ms": 1648524702817,
+ "drop_pct": 1208,
+ "total_tx_pps": 597264,
+ "tx_pps": 600960,
+ "tx_pkts": 5972642,
+ "drop_percentage": 0.020225555122841785
+ },
+ {
+ "rx_pps": 300480.0,
+ "rx_pkts": 2986322,
+ "time_ms": 1648524715333,
+ "drop_pct": 0,
+ "total_tx_pps": 298632,
+ "tx_pps": 300480,
+ "tx_pkts": 2986322,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 450719.39622668474,
+ "rx_pkts": 4479026,
+ "time_ms": 1648524727826,
+ "drop_pct": 6,
+ "total_tx_pps": 447903,
+ "tx_pps": 450720,
+ "tx_pkts": 4479032,
+ "drop_percentage": 0.00013395751582038261
+ },
+ {
+ "rx_pps": 525840.0,
+ "rx_pkts": 5225536,
+ "time_ms": 1648524740327,
+ "drop_pct": 0,
+ "total_tx_pps": 522553,
+ "tx_pps": 525840,
+ "tx_pkts": 5225536,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 562993.5002502074,
+ "rx_pkts": 5595314,
+ "time_ms": 1648524752854,
+ "drop_pct": 4040,
+ "total_tx_pps": 559935,
+ "tx_pps": 563400,
+ "tx_pkts": 5599354,
+ "drop_percentage": 0.07215118029686995
+ },
+ {
+ "rx_pps": 544616.0833552305,
+ "rx_pkts": 5423016,
+ "time_ms": 1648524765370,
+ "drop_pct": 39,
+ "total_tx_pps": 542305,
+ "tx_pps": 544620,
+ "tx_pkts": 5423055,
+ "drop_percentage": 0.0007191518433797923
+ },
+ {
+ "rx_pps": 554006.0794180238,
+ "rx_pkts": 5510977,
+ "time_ms": 1648524777872,
+ "drop_pct": 39,
+ "total_tx_pps": 551101,
+ "tx_pps": 554010,
+ "tx_pkts": 5511016,
+ "drop_percentage": 0.0007076735033975586
+ },
+ {
+ "rx_pps": 558698.1513422158,
+ "rx_pkts": 5552345,
+ "time_ms": 1648524790369,
+ "drop_pct": 78,
+ "total_tx_pps": 555242,
+ "tx_pps": 558706,
+ "tx_pkts": 5552423,
+ "ndr_pps": 277005,
+ "drop_percentage": 0.0014047921060769326
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "786f3740545f4a40a9dc01f9dffc595c"
+ },
+ "synthesis": {
+ "avg_delay_usec": 147.99948230595047,
+ "total_tx_rate": 551101
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "1518"
+ ],
+ "rate": "ndr",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 03:38:06",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "b9b765f0842945868ef0d452b85570ed",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1518"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_100k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1518"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_100k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1518": {
+ "ndr": {
+ "load_percent_per_direction": 12.5,
+ "timestamp_sec": 1648525229.1659203,
+ "stats": {
+ "total_tx_rate": 504814,
+ "overall": {
+ "rx_pkts": 5048100,
+ "drop_percentage": 0.0009706528075934367,
+ "drop_pct": 49,
+ "max_delay_usec": 311,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 5048149,
+ "avg_delay_usec": 148.00011410233554,
+ "min_delay_usec": 35,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 2524026,
+ "min_delay_usec": 35,
+ "drop_pct": 49,
+ "max_delay_usec": 311,
+ "tx_pkts": 2524074,
+ "avg_delay_usec": 136,
+ "drop_percentage": 0.001941305999744857
+ },
+ "0": {
+ "rx_pkts": 2524074,
+ "min_delay_usec": 39,
+ "drop_pct": 0,
+ "max_delay_usec": 303,
+ "tx_pkts": 2524075,
+ "avg_delay_usec": 160,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 6211231456.0,
+ "theoretical_tx_rate_pps": 4063719.1157347206
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 25.0,
+ "duration_sec": 10.0,
+ "l2frame_size": "1518",
+ "rate_pps": 507964,
+ "rate_bps": 6250000000.0,
+ "time_taken_sec": 137.6200978755951
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 1348830.8736421221,
+ "rx_pkts": 13196248,
+ "time_ms": 1648525104030,
+ "drop_pct": 26561020,
+ "total_tx_pps": 3975726,
+ "tx_pps": 4063718,
+ "tx_pkts": 39757268,
+ "drop_percentage": 66.80796074820836
+ },
+ {
+ "rx_pps": 1451865.4390061933,
+ "rx_pkts": 14429367,
+ "time_ms": 1648525116526,
+ "drop_pct": 5764257,
+ "total_tx_pps": 2019362,
+ "tx_pps": 2031858,
+ "tx_pkts": 20193624,
+ "drop_percentage": 28.544935767844347
+ },
+ {
+ "rx_pps": 1014023.4973269543,
+ "rx_pkts": 10076861,
+ "time_ms": 1648525129050,
+ "drop_pct": 18926,
+ "total_tx_pps": 1009578,
+ "tx_pps": 1015928,
+ "tx_pkts": 10095787,
+ "drop_percentage": 0.18746433537078389
+ },
+ {
+ "rx_pps": 507959.0694331724,
+ "rx_pkts": 5048100,
+ "time_ms": 1648525141631,
+ "drop_pct": 49,
+ "total_tx_pps": 504814,
+ "tx_pps": 507964,
+ "tx_pkts": 5048149,
+ "drop_percentage": 0.0009706528075934367
+ },
+ {
+ "rx_pps": 761678.3540363008,
+ "rx_pkts": 7569942,
+ "time_ms": 1648525154127,
+ "drop_pct": 2660,
+ "total_tx_pps": 757260,
+ "tx_pps": 761946,
+ "tx_pkts": 7572602,
+ "drop_percentage": 0.03512663150658123
+ },
+ {
+ "rx_pps": 634872.7798972944,
+ "rx_pkts": 6309050,
+ "time_ms": 1648525166633,
+ "drop_pct": 827,
+ "total_tx_pps": 630987,
+ "tx_pps": 634956,
+ "tx_pkts": 6309877,
+ "drop_percentage": 0.013106436147645985
+ },
+ {
+ "rx_pps": 571211.9497838132,
+ "rx_pkts": 5676421,
+ "time_ms": 1648525179164,
+ "drop_pct": 2465,
+ "total_tx_pps": 567888,
+ "tx_pps": 571460,
+ "tx_pkts": 5678886,
+ "drop_percentage": 0.04340640048065765
+ },
+ {
+ "rx_pps": 539692.3793376087,
+ "rx_pkts": 5363734,
+ "time_ms": 1648525191676,
+ "drop_pct": 195,
+ "total_tx_pps": 536392,
+ "tx_pps": 539712,
+ "tx_pkts": 5363929,
+ "drop_percentage": 0.0036353948756592414
+ },
+ {
+ "rx_pps": 523781.9497057231,
+ "rx_pkts": 5205085,
+ "time_ms": 1648525204173,
+ "drop_pct": 557,
+ "total_tx_pps": 520564,
+ "tx_pps": 523838,
+ "tx_pkts": 5205642,
+ "drop_percentage": 0.010699929038531654
+ },
+ {
+ "rx_pps": 515844.6541285334,
+ "rx_pkts": 5126210,
+ "time_ms": 1648525216667,
+ "drop_pct": 550,
+ "total_tx_pps": 512676,
+ "tx_pps": 515900,
+ "tx_pkts": 5126760,
+ "drop_percentage": 0.010728023156925622
+ },
+ {
+ "rx_pps": 511849.2830473219,
+ "rx_pkts": 5086504,
+ "time_ms": 1648525229165,
+ "drop_pct": 822,
+ "total_tx_pps": 508732,
+ "tx_pps": 511932,
+ "tx_pkts": 5087326,
+ "ndr_pps": 253982,
+ "drop_percentage": 0.016157800777854614
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "b9b765f0842945868ef0d452b85570ed"
+ },
+ "synthesis": {
+ "avg_delay_usec": 148.00011410233554,
+ "total_tx_rate": 504814
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "IMIX"
+ ],
+ "rate": "ndr",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 03:40:32",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "14202ba37ebc4fdea8f16b0278600b2d",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "IMIX"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_100k-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "IMIX"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_100k-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "IMIX": {
+ "ndr": {
+ "load_percent_per_direction": 2.34375,
+ "timestamp_sec": 1648525375.443067,
+ "stats": {
+ "total_tx_rate": 381275,
+ "overall": {
+ "rx_pkts": 3812745,
+ "drop_percentage": 0.0001311389417087404,
+ "drop_pct": 5,
+ "max_delay_usec": 4320,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 3812750,
+ "avg_delay_usec": 101.9999483311892,
+ "min_delay_usec": 31,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1906274,
+ "min_delay_usec": 31,
+ "drop_pct": 5,
+ "max_delay_usec": 4320,
+ "tx_pkts": 1906471,
+ "avg_delay_usec": 103,
+ "drop_percentage": 0.00026226467646242715
+ },
+ "0": {
+ "rx_pkts": 1906471,
+ "min_delay_usec": 33,
+ "drop_pct": 0,
+ "max_delay_usec": 1815,
+ "tx_pkts": 1906279,
+ "avg_delay_usec": 101,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 1164668033.3333333,
+ "theoretical_tx_rate_pps": 16368398.079441292
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 4.6875,
+ "duration_sec": 10.0,
+ "l2frame_size": "IMIX",
+ "rate_pps": 383634,
+ "rate_bps": 1171875000.0,
+ "time_taken_sec": 137.6155240535736
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 771093.2513239763,
+ "rx_pkts": 6682599,
+ "time_ms": 1648525250355,
+ "drop_pct": 135172410,
+ "total_tx_pps": 14185500,
+ "tx_pps": 16368398,
+ "tx_pkts": 141855009,
+ "warning": "WARNING: There is a significant difference between requested TX rate (16368398) and actual TX rate (14185500). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 95.28913427371465
+ },
+ {
+ "rx_pps": 680193.3374204193,
+ "rx_pkts": 6760101,
+ "time_ms": 1648525262852,
+ "drop_pct": 74578545,
+ "total_tx_pps": 8133864,
+ "tx_pps": 8184198,
+ "tx_pkts": 81338646,
+ "drop_percentage": 91.68894328533572
+ },
+ {
+ "rx_pps": 1311747.3568787286,
+ "rx_pkts": 13036804,
+ "time_ms": 1648525275367,
+ "drop_pct": 27632521,
+ "total_tx_pps": 4066932,
+ "tx_pps": 4092098,
+ "tx_pkts": 40669325,
+ "drop_percentage": 67.94438068495113
+ },
+ {
+ "rx_pps": 1590695.3692736912,
+ "rx_pkts": 15809129,
+ "time_ms": 1648525287882,
+ "drop_pct": 4525523,
+ "total_tx_pps": 2033465,
+ "tx_pps": 2046048,
+ "tx_pkts": 20334652,
+ "drop_percentage": 22.255227185594325
+ },
+ {
+ "rx_pps": 1019699.6569069418,
+ "rx_pkts": 10134290,
+ "time_ms": 1648525300401,
+ "drop_pct": 33039,
+ "total_tx_pps": 1016732,
+ "tx_pps": 1023024,
+ "tx_pkts": 10167329,
+ "drop_percentage": 0.32495260062893605
+ },
+ {
+ "rx_pps": 511492.9830606495,
+ "rx_pkts": 5083477,
+ "time_ms": 1648525312928,
+ "drop_pct": 189,
+ "total_tx_pps": 508366,
+ "tx_pps": 511512,
+ "tx_pkts": 5083666,
+ "drop_percentage": 0.0037177894849897693
+ },
+ {
+ "rx_pps": 255756.0,
+ "rx_pkts": 2541834,
+ "time_ms": 1648525325435,
+ "drop_pct": 0,
+ "total_tx_pps": 254183,
+ "tx_pps": 255756,
+ "tx_pkts": 2541834,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 383633.4969064324,
+ "rx_pkts": 3812745,
+ "time_ms": 1648525337929,
+ "drop_pct": 5,
+ "total_tx_pps": 381275,
+ "tx_pps": 383634,
+ "tx_pkts": 3812750,
+ "drop_percentage": 0.0001311389417087404
+ },
+ {
+ "rx_pps": 447538.0591777257,
+ "rx_pkts": 4456812,
+ "time_ms": 1648525350446,
+ "drop_pct": 338,
+ "total_tx_pps": 445715,
+ "tx_pps": 447572,
+ "tx_pkts": 4457150,
+ "drop_percentage": 0.007583321180575031
+ },
+ {
+ "rx_pps": 415568.9970519043,
+ "rx_pkts": 4130135,
+ "time_ms": 1648525362946,
+ "drop_pct": 328,
+ "total_tx_pps": 413046,
+ "tx_pps": 415602,
+ "tx_pkts": 4130463,
+ "drop_percentage": 0.00794099838202158
+ },
+ {
+ "rx_pps": 399576.8469448261,
+ "rx_pkts": 3971198,
+ "time_ms": 1648525375442,
+ "drop_pct": 409,
+ "total_tx_pps": 397160,
+ "tx_pps": 399618,
+ "tx_pkts": 3971607,
+ "ndr_pps": 191817,
+ "drop_percentage": 0.010298098477518043
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "14202ba37ebc4fdea8f16b0278600b2d"
+ },
+ "synthesis": {
+ "avg_delay_usec": 101.9999483311892,
+ "total_tx_rate": 381275
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "9000"
+ ],
+ "rate": "ndr",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-29 03:52:45",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "2410629fde18450796d4b2a0329b7475",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "9000"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_100k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "9000"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2519,
+ 2504
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_100k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "9000": {
+ "ndr": {
+ "load_percent_per_direction": 38.0859375,
+ "timestamp_sec": 1648526108.2238886,
+ "stats": {
+ "total_tx_rate": 262248,
+ "overall": {
+ "rx_pkts": 2622479,
+ "drop_percentage": 0.00038131713803184685,
+ "drop_pct": 10,
+ "max_delay_usec": 6043,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2622489,
+ "avg_delay_usec": 797.498445936078,
+ "min_delay_usec": 77,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1311168,
+ "min_delay_usec": 77,
+ "drop_pct": 10,
+ "max_delay_usec": 5571,
+ "tx_pkts": 1311311,
+ "avg_delay_usec": 826,
+ "drop_percentage": 0.0007625956008910168
+ },
+ "0": {
+ "rx_pkts": 1311311,
+ "min_delay_usec": 78,
+ "drop_pct": 0,
+ "max_delay_usec": 6043,
+ "tx_pkts": 1311178,
+ "avg_delay_usec": 769,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 18923815680.0,
+ "theoretical_tx_rate_pps": 692904.6563192905
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 76.171875,
+ "duration_sec": 10.0,
+ "l2frame_size": "9000",
+ "rate_pps": 263898,
+ "rate_bps": 19042968750.0,
+ "time_taken_sec": 137.70801401138306
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 275136.87051549257,
+ "rx_pkts": 2732413,
+ "time_ms": 1648525983002,
+ "drop_pct": 4148889,
+ "total_tx_pps": 688130,
+ "tx_pps": 692904,
+ "tx_pkts": 6881302,
+ "drop_percentage": 60.2922092359847
+ },
+ {
+ "rx_pps": 276450.51010692323,
+ "rx_pkts": 2747283,
+ "time_ms": 1648525995501,
+ "drop_pct": 695654,
+ "total_tx_pps": 344293,
+ "tx_pps": 346452,
+ "tx_pkts": 3442937,
+ "drop_percentage": 20.2052491811497
+ },
+ {
+ "rx_pps": 173226.0,
+ "rx_pkts": 1721608,
+ "time_ms": 1648526007998,
+ "drop_pct": 0,
+ "total_tx_pps": 172160,
+ "tx_pps": 173226,
+ "tx_pkts": 1721608,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 259838.0,
+ "rx_pkts": 2582273,
+ "time_ms": 1648526020514,
+ "drop_pct": 0,
+ "total_tx_pps": 258227,
+ "tx_pps": 259838,
+ "tx_pkts": 2582273,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 276532.862184301,
+ "rx_pkts": 2748324,
+ "time_ms": 1648526033023,
+ "drop_pct": 264475,
+ "total_tx_pps": 301279,
+ "tx_pps": 303144,
+ "tx_pkts": 3012799,
+ "drop_percentage": 8.77838183031792
+ },
+ {
+ "rx_pps": 276802.02633522433,
+ "rx_pkts": 2750861,
+ "time_ms": 1648526045525,
+ "drop_pct": 46609,
+ "total_tx_pps": 279747,
+ "tx_pps": 281492,
+ "tx_pkts": 2797470,
+ "drop_percentage": 1.6661125945944013
+ },
+ {
+ "rx_pps": 270650.71832178126,
+ "rx_pkts": 2689863,
+ "time_ms": 1648526058023,
+ "drop_pct": 132,
+ "total_tx_pps": 268999,
+ "tx_pps": 270664,
+ "tx_pkts": 2689995,
+ "drop_percentage": 0.004907072317978286
+ },
+ {
+ "rx_pps": 265244.0511173625,
+ "rx_pkts": 2636129,
+ "time_ms": 1648526070614,
+ "drop_pct": 79,
+ "total_tx_pps": 263620,
+ "tx_pps": 265252,
+ "tx_pkts": 2636208,
+ "drop_percentage": 0.0029967286344628344
+ },
+ {
+ "rx_pps": 262543.7987422155,
+ "rx_pkts": 2609030,
+ "time_ms": 1648526083208,
+ "drop_pct": 2,
+ "total_tx_pps": 260903,
+ "tx_pps": 262544,
+ "tx_pkts": 2609032,
+ "drop_percentage": 7.665678305210515e-05
+ },
+ {
+ "rx_pps": 263896.99371169903,
+ "rx_pkts": 2622479,
+ "time_ms": 1648526095706,
+ "drop_pct": 10,
+ "total_tx_pps": 262248,
+ "tx_pps": 263898,
+ "tx_pkts": 2622489,
+ "drop_percentage": 0.00038131713803184685
+ },
+ {
+ "rx_pps": 264566.1509460084,
+ "rx_pkts": 2629127,
+ "time_ms": 1648526108223,
+ "drop_pct": 78,
+ "total_tx_pps": 262920,
+ "tx_pps": 264574,
+ "tx_pkts": 2629205,
+ "ndr_pps": 131949,
+ "drop_percentage": 0.0029666762386348724
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "2410629fde18450796d4b2a0329b7475"
+ },
+ "synthesis": {
+ "avg_delay_usec": 797.498445936078,
+ "total_tx_rate": 262248
+ }
+ }
+ ]
+ },
+ "fail_tests": 0,
+ "total_tests": 1,
+ "pass_tests": 1
+ }
+ }
+ ]
+}
diff --git a/test/ut_behave_tests/test_data/project=nfvbench&case=characterization&criteria=PASS&page=2.json b/test/ut_behave_tests/test_data/project=nfvbench&case=characterization&criteria=PASS&page=2.json
new file mode 100644
index 0000000..c0ddacf
--- /dev/null
+++ b/test/ut_behave_tests/test_data/project=nfvbench&case=characterization&criteria=PASS&page=2.json
@@ -0,0 +1,25065 @@
+{
+ "pagination": {
+ "current_page": 2,
+ "total_pages": 2
+ },
+ "results": [
+ {
+ "project_name": "nfvbench",
+ "scenario": "os-nosdn-nofeature-noha",
+ "stop_date": "2022-03-03 08:10:22",
+ "case_name": "characterization",
+ "build_tag": "GUB6K4FMHSH1",
+ "version": "unknown",
+ "pod_name": "AMICAL",
+ "criteria": "PASS",
+ "installer": "unknown",
+ "_id": "622077f1c0d88e001ce40a5e",
+ "start_date": "2022-03-03 04:25:55",
+ "details": {
+ "tests": [
+ {
+ "status": "passed",
+ "elements": [
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.1 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00011944770812988281,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "64 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "64"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.870529174804688e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.512901306152344e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.655952453613281e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 20.04898452758789,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 441.4580554962158,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.0001373291015625,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002956390380859375,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:17",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.2 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.894371032714844e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.00010991096496582031,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.703636169433594e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.369850158691406e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007940292358398438,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.3887722492218,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011849403381347656,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00028204917907714844,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:18",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.3 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.846687316894531e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "256 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "256"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.655952453613281e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.226799011230469e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.226799011230469e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007737398147583008,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.3920896053314,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012111663818359375,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00031113624572753906,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:19",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.4 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.799003601074219e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "512 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "512"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.560585021972656e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.393692016601562e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.584426879882812e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007782936096191406,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.3988313674927,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012111663818359375,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00032019615173339844,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:20",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.5 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.72747802734375e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "768 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "768"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.441375732421875e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.274482727050781e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.417533874511719e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007817983627319336,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.39960050582886,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00013256072998046875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002803802490234375,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:21",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.6 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00012063980102539062,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1024 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1024"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.322166442871094e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.179115295410156e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.036064147949219e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007714271545410156,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.40483140945435,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00014662742614746094,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002925395965576172,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:22",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.7 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010037422180175781,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1280 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1280"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.393692016601562e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.322166442871094e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 0.00011348724365234375,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007891654968261719,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.40072679519653,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012135505676269531,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00030994415283203125,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:23",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.8 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.965896606445312e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1518 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1518"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.5367431640625e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.34600830078125e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.679794311523438e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007767915725708008,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.39458751678467,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00013685226440429688,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00031065940856933594,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:24",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.9 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.0001201629638671875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "IMIX frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "IMIX"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.00010800361633300781,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.34600830078125e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.298324584960938e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007948875427246094,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.39232301712036,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.0001227855682373047,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00029540061950683594,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:25",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.10 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.703636169433594e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "9000 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "9000"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.799003601074219e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.274482727050781e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.274482727050781e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.0077228546142578125,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 433.4036717414856,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011873245239257812,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002994537353515625,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:26",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.11 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.72747802734375e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "64 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "64"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.489059448242188e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.775161743164062e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.465217590332031e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007776737213134766,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.41271233558655,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012230873107910156,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002951622009277344,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:27",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.12 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.799003601074219e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.465217590332031e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.465217590332031e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.202957153320312e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007769107818603516,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.44420289993286,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012922286987304688,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0003147125244140625,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:28",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.13 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00011992454528808594,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "256 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "256"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.632110595703125e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.417533874511719e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 0.00010967254638671875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007972955703735352,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.41557693481445,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.0001201629638671875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002875328063964844,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:29",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.14 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00011610984802246094,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "512 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "512"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.489059448242188e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.202957153320312e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.131431579589844e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007865667343139648,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.4459092617035,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00013709068298339844,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0003178119659423828,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:30",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.15 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010061264038085938,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "768 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "768"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.608268737792969e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.417533874511719e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.608268737792969e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007863044738769531,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.40875816345215,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011682510375976562,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002982616424560547,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:31",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.16 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.751319885253906e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1024 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1024"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.393692016601562e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.393692016601562e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.465217590332031e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007781267166137695,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.41113471984863,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00014781951904296875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002956390380859375,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:32",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.17 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.655952453613281e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1280 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1280"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.00010752677917480469,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.512901306152344e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.179115295410156e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.00796818733215332,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.41015791893005,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012063980102539062,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00030732154846191406,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:33",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.18 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.775161743164062e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1518 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1518"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.417533874511719e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.202957153320312e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.393692016601562e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007746458053588867,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.46103525161743,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012159347534179688,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002970695495605469,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:34",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.19 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.846687316894531e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "IMIX frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "IMIX"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.942054748535156e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.799003601074219e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.560585021972656e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007760763168334961,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.40750312805176,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012063980102539062,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0003159046173095703,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:35",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.20 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010085105895996094,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "9000 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "9000"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.632110595703125e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "10k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "10k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.489059448242188e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.655952453613281e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.0077402591705322266,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.42182779312134,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011897087097167969,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00030732154846191406,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:36",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.21 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.775161743164062e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "64 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "64"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.417533874511719e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.226799011230469e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 0.00011372566223144531,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007884979248046875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.4939408302307,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012111663818359375,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0003120899200439453,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:37",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.22 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010085105895996094,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "128 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "128"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.584426879882812e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 0.00011324882507324219,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.393692016601562e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007754087448120117,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.453311920166,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.0001404285430908203,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0003037452697753906,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:38",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.23 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.918212890625e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "256 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "256"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.679794311523438e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.369850158691406e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.179115295410156e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007740497589111328,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.5027401447296,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00013017654418945312,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0002994537353515625,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:39",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.24 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.751319885253906e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "512 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "512"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.00010919570922851562,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.369850158691406e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 0.00010466575622558594,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007869720458984375,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.4968614578247,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012063980102539062,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0003190040588378906,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:40",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.25 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010085105895996094,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "768 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "768"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.441375732421875e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.369850158691406e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.608268737792969e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007755756378173828,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.41006350517273,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011754035949707031,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00030159950256347656,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:41",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.26 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010013580322265625,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1024 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1024"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.703636169433594e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 0.00011706352233886719,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.417533874511719e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.0077631473541259766,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.4135572910309,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011944770812988281,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00028061866760253906,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:42",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.27 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00012302398681640625,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1280 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1280"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.584426879882812e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.584426879882812e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 0.00011610984802246094,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007807254791259766,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.4129407405853,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011730194091796875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00029850006103515625,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:43",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.28 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.632110595703125e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1518 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1518"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.441375732421875e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.226799011230469e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.465217590332031e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007798910140991211,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.42279505729675,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.0001201629638671875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00031757354736328125,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:44",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.29 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.870529174804688e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "IMIX frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "IMIX"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.489059448242188e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.417533874511719e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.584426879882812e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007747650146484375,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.46680998802185,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011920928955078125,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00030684471130371094,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:45",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size and flow count -- @1.30 Frame sizes and flow counts",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.870529174804688e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "9000 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "9000"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.5367431640625e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.417533874511719e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.512901306152344e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008136987686157227,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 441.5627624988556,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.0001380443572998047,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0003027915954589844,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:46",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.1 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:51",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.846687316894531e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "TRex is restarted",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:52",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:99"
+ },
+ "result": {
+ "duration": 9.1552734375e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "64 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:53",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "64"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.00012063980102539062,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:54",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.584426879882812e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "70% rate of previous scenario",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:55",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage_rate",
+ "value": "70%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:129"
+ },
+ "result": {
+ "duration": 0.00023174285888671875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:56",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007772684097290039,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:57",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 40.20964193344116,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:58",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.0001323223114013672,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:62",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.2 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:51",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010061264038085938,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "TRex is restarted",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:52",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:99"
+ },
+ "result": {
+ "duration": 9.489059448242188e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "64 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:53",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "64"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.00010657310485839844,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:54",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.250640869140625e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "90% rate of previous scenario",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:55",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage_rate",
+ "value": "90%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:129"
+ },
+ "result": {
+ "duration": 0.00022912025451660156,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:56",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008083343505859375,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:57",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 40.24647831916809,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:58",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00013446807861328125,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:63",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.3 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:51",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.942054748535156e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "TRex is restarted",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:52",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:99"
+ },
+ "result": {
+ "duration": 9.393692016601562e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "768 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:53",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "768"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.00010704994201660156,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:54",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.441375732421875e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "70% rate of previous scenario",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:55",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage_rate",
+ "value": "70%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:129"
+ },
+ "result": {
+ "duration": 0.000244140625,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:56",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008151054382324219,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:57",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 38.257242918014526,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:58",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.0001327991485595703,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:64",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.4 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:51",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.846687316894531e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "TRex is restarted",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:52",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:99"
+ },
+ "result": {
+ "duration": 9.369850158691406e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "768 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:53",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "768"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.00010466575622558594,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:54",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.322166442871094e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "90% rate of previous scenario",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:55",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage_rate",
+ "value": "90%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:129"
+ },
+ "result": {
+ "duration": 0.00023818016052246094,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:56",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008000850677490234,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:57",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 38.23027515411377,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:58",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00013971328735351562,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:65",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.5 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:51",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010228157043457031,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "TRex is restarted",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:52",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:99"
+ },
+ "result": {
+ "duration": 9.799003601074219e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1518 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:53",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1518"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.00011301040649414062,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:54",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 0.00010156631469726562,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "70% rate of previous scenario",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:55",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage_rate",
+ "value": "70%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:129"
+ },
+ "result": {
+ "duration": 0.00023365020751953125,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:56",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007997751235961914,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:57",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 40.18446683883667,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:58",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00013399124145507812,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:66",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.6 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:51",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.989738464355469e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "TRex is restarted",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:52",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:99"
+ },
+ "result": {
+ "duration": 9.489059448242188e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1518 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:53",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1518"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.00012946128845214844,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:54",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.608268737792969e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "90% rate of previous scenario",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:55",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage_rate",
+ "value": "90%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:129"
+ },
+ "result": {
+ "duration": 0.00023436546325683594,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:56",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.007965087890625,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:57",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 40.255555391311646,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:58",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00013446807861328125,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:67",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.7 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:51",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010013580322265625,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "TRex is restarted",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:52",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:99"
+ },
+ "result": {
+ "duration": 9.608268737792969e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "9000 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:53",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "9000"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.00010895729064941406,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:54",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.72747802734375e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "70% rate of previous scenario",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:55",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage_rate",
+ "value": "70%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:129"
+ },
+ "result": {
+ "duration": 0.00023174285888671875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:56",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008159637451171875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:57",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 38.21106767654419,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:58",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.0001327991485595703,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:68",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.8 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:51",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010037422180175781,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "TRex is restarted",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:52",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:99"
+ },
+ "result": {
+ "duration": 0.00011754035949707031,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "9000 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:53",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "9000"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.00010704994201660156,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:54",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.751319885253906e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "90% rate of previous scenario",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:55",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage_rate",
+ "value": "90%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:129"
+ },
+ "result": {
+ "duration": 0.00027060508728027344,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:56",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008315563201904297,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:57",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 38.238194704055786,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:58",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00013208389282226562,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:69",
+ "type": "scenario"
+ }
+ ],
+ "name": "characterization",
+ "keyword": "Feature",
+ "tags": [
+ "characterization"
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/characterization-full.feature:2"
+ }
+ ],
+ "skip_tests": 0,
+ "links": [
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/xtesting.log",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_768-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_128-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1518-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_512-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_64-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_9000-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1280-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1024-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_64-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_64-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_768-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_128-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_IMIX-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_256-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_9000-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/output.html",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1024-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_512-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_256-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_256-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1024-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_128-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_9000-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_64-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-latency-fs_64-fc_100k-rate_70%.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1280-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_256-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_512-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_768-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_768-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_512-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_IMIX-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_64-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1024-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1280-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_128-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_128-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_9000-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_9000-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_IMIX-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_768-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1280-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_IMIX-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_IMIX-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_IMIX-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1518-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/behave_tests.log",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_128-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-latency-fs_9000-fc_100k-rate_70%.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_512-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_9000-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_768-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/campaign_result.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_9000-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_512-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_256-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_128-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-latency-fs_768-fc_100k-rate_90%.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_IMIX-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1280-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_64-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1518-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/TESTS-characterization-full.xml",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-latency-fs_1518-fc_100k-rate_90%.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1518-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_9000-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_256-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_64-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1024-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1518-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_9000-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1024-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1024-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_256-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_IMIX-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_512-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1024-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1280-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1280-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_768-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_512-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1518-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_768-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-latency-fs_64-fc_100k-rate_90%.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_256-fc_128-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1518-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-latency-fs_768-fc_100k-rate_70%.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_256-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench.log",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1518-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_64-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-latency-fs_9000-fc_100k-rate_90%.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_IMIX-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1518-fc_10k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1280-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_512-fc_128-rate_ndr-2.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_128-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_768-fc_128-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-latency-fs_1518-fc_100k-rate_70%.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1024-fc_10k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_64-fc_10k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_128-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/output.json",
+ "http://172.20.73.203:8181/GUB6K4FMHSH1/nfvbench-amical-e2e-intensive-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_characterization-run-7/characterization/nfvbench-throughput-fs_1280-fc_10k-rate_ndr-1.json"
+ ],
+ "results": {
+ "latency": [
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_64-fc_100k-rate_70%.json",
+ "frame_sizes": [
+ "64"
+ ],
+ "rate": "70%",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive",
+ "restart": "true"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 08:05:30",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": "true",
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "05da7928f54347d98272aae0eb8ccf68",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "202197pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "64"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_64-fc_100k-rate_70%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "64"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_64-fc_100k-rate_70%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "64": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 0.2706993408,
+ "rate_pps": 100706,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 67674835
+ },
+ "tx": {
+ "rate_percent": 0.2707356288,
+ "rate_pps": 100720,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 67683907
+ },
+ "orig": {
+ "rate_percent": 0.271752768,
+ "rate_pps": 101098,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 67938192
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 0.5414347008,
+ "rate_pps": 201426.0,
+ "rate_bps": 135358675.0
+ },
+ "tx": {
+ "rate_percent": 0.5414709888,
+ "rate_pps": 201440.0,
+ "rate_bps": 135367747.0
+ },
+ "orig": {
+ "rate_percent": 0.543505536,
+ "rate_pps": 202196.0,
+ "rate_bps": 135876384.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 0.27073536,
+ "rate_pps": 100720,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 67683840
+ },
+ "tx": {
+ "rate_percent": 0.27073536,
+ "rate_pps": 100720,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 67683840
+ },
+ "orig": {
+ "rate_percent": 0.271752768,
+ "rate_pps": 101098,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 67938192
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 1006353,
+ "-127 (-0.0126%)"
+ ],
+ "lat_max_usec": 6319,
+ "lat_avg_usec": 343,
+ "lat_min_usec": 55,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 1007200,
+ 1007200
+ ],
+ "lat_max_usec": 16679,
+ "lat_avg_usec": 332,
+ "lat_min_usec": 39,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 201440,
+ "overall": {
+ "drop_rate_percent": 0.006701744091667946,
+ "rx": {
+ "dropped_pkts": 135,
+ "pkt_bit_rate": 54798412.0,
+ "pkt_rate": 100732.0,
+ "max_delay_usec": 16679,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 337.50036589010585,
+ "total_pkt_bytes": 136970088,
+ "total_pkts": 2014266,
+ "min_delay_usec": 39
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 136979268,
+ "total_pkts": 2014401,
+ "pkt_bit_rate": 54796758.0,
+ "pkt_rate": 100728.5
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.01340349483717236,
+ "rx": {
+ "dropped_pkts": 135,
+ "pkt_bit_rate": 54797180,
+ "pkt_rate": 100730,
+ "max_delay_usec": 16679,
+ "total_pkt_bytes": 68480488,
+ "avg_delay_usec": 332,
+ "total_pkts": 1007066,
+ "min_delay_usec": 39
+ },
+ "tx": {
+ "total_pkt_bytes": 68489600,
+ "total_pkts": 1007200,
+ "pkt_bit_rate": 54796540,
+ "pkt_rate": 100728
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 54799644,
+ "pkt_rate": 100734,
+ "max_delay_usec": 6319,
+ "total_pkt_bytes": 68489600,
+ "avg_delay_usec": 343,
+ "total_pkts": 1007200,
+ "min_delay_usec": 55
+ },
+ "tx": {
+ "total_pkt_bytes": 68489668,
+ "total_pkts": 1007201,
+ "pkt_bit_rate": 54796976,
+ "pkt_rate": 100729
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 135367680.0,
+ "theoretical_tx_rate_pps": 74404761.90476191
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "05da7928f54347d98272aae0eb8ccf68"
+ },
+ "synthesis": {
+ "avg_delay_usec": 337.50036589010585,
+ "total_tx_rate": 201440
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_64-fc_100k-rate_90%.json",
+ "frame_sizes": [
+ "64"
+ ],
+ "rate": "90%",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive",
+ "restart": "true"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 08:06:11",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": "true",
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "2eb5c2020c5149db9e10bab584e2dbf6",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "259968pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "64"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_64-fc_100k-rate_90%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "64"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_64-fc_100k-rate_90%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "64": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 0.34818819840000004,
+ "rate_pps": 129534,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 87047049
+ },
+ "tx": {
+ "rate_percent": 0.3481965312,
+ "rate_pps": 129537,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 87049132
+ },
+ "orig": {
+ "rate_percent": 0.349396992,
+ "rate_pps": 129984,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 87349248
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 0.696405696,
+ "rate_pps": 259079.0,
+ "rate_bps": 174101423.0
+ },
+ "tx": {
+ "rate_percent": 0.6964140288,
+ "rate_pps": 259082.0,
+ "rate_bps": 174103506.0
+ },
+ "orig": {
+ "rate_percent": 0.698793984,
+ "rate_pps": 259968.0,
+ "rate_bps": 174698496.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 0.3482174976,
+ "rate_pps": 129545,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 87054374
+ },
+ "tx": {
+ "rate_percent": 0.3482174976,
+ "rate_pps": 129545,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 87054374
+ },
+ "orig": {
+ "rate_percent": 0.349396992,
+ "rate_pps": 129984,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 87349248
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 1294246,
+ "+14 (+0.0011%)"
+ ],
+ "lat_max_usec": 5982,
+ "lat_avg_usec": 438,
+ "lat_min_usec": 53,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 1295452,
+ 1295452
+ ],
+ "lat_max_usec": 12890,
+ "lat_avg_usec": 403,
+ "lat_min_usec": 79,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 259082,
+ "overall": {
+ "drop_rate_percent": 0.0011965296009843964,
+ "rx": {
+ "dropped_pkts": 31,
+ "pkt_bit_rate": 70518144.0,
+ "pkt_rate": 129628.0,
+ "max_delay_usec": 12890,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 420.50073626049146,
+ "total_pkt_bytes": 176174060,
+ "total_pkts": 2590795,
+ "min_delay_usec": 53
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 176176168,
+ "total_pkts": 2590826,
+ "pkt_bit_rate": 70546464.0,
+ "pkt_rate": 129680.5
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.0023929871581502052,
+ "rx": {
+ "dropped_pkts": 31,
+ "pkt_bit_rate": 70304360,
+ "pkt_rate": 129235,
+ "max_delay_usec": 12890,
+ "total_pkt_bytes": 88083324,
+ "avg_delay_usec": 403,
+ "total_pkts": 1295343,
+ "min_delay_usec": 79
+ },
+ "tx": {
+ "total_pkt_bytes": 88090736,
+ "total_pkts": 1295452,
+ "pkt_bit_rate": 70660064,
+ "pkt_rate": 129889
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 70731928,
+ "pkt_rate": 130021,
+ "max_delay_usec": 5982,
+ "total_pkt_bytes": 88090736,
+ "avg_delay_usec": 438,
+ "total_pkts": 1295452,
+ "min_delay_usec": 53
+ },
+ "tx": {
+ "total_pkt_bytes": 88085432,
+ "total_pkts": 1295374,
+ "pkt_bit_rate": 70432864,
+ "pkt_rate": 129472
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 174103104.0,
+ "theoretical_tx_rate_pps": 74404761.90476191
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "2eb5c2020c5149db9e10bab584e2dbf6"
+ },
+ "synthesis": {
+ "avg_delay_usec": 420.50073626049146,
+ "total_tx_rate": 259082
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_768-fc_100k-rate_70%.json",
+ "frame_sizes": [
+ "768"
+ ],
+ "rate": "70%",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive",
+ "restart": "true"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 08:06:50",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": "true",
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "694c371f3fce42c4ba547b3cc5cbc030",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "204764pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "768"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_768-fc_100k-rate_70%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "768"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_768-fc_100k-rate_70%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "768": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 2.5720017408,
+ "rate_pps": 101998,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 643000435
+ },
+ "tx": {
+ "rate_percent": 2.5720017408,
+ "rate_pps": 101998,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 643000435
+ },
+ "orig": {
+ "rate_percent": 2.5816645119999997,
+ "rate_pps": 102382,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 645416128
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 5.14400096,
+ "rate_pps": 203996.0,
+ "rate_bps": 1286000239.0
+ },
+ "tx": {
+ "rate_percent": 5.14400096,
+ "rate_pps": 203996.0,
+ "rate_bps": 1286000239.0
+ },
+ "orig": {
+ "rate_percent": 5.163329023999999,
+ "rate_pps": 204764.0,
+ "rate_bps": 1290832256.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 2.5719992192,
+ "rate_pps": 101998,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 642999804
+ },
+ "tx": {
+ "rate_percent": 2.5719992192,
+ "rate_pps": 101998,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 642999804
+ },
+ "orig": {
+ "rate_percent": 2.5816645119999997,
+ "rate_pps": 102382,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 645416128
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 1019120,
+ "+16 (+0.0016%)"
+ ],
+ "lat_max_usec": 6400,
+ "lat_avg_usec": 441,
+ "lat_min_usec": 34,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 1019987,
+ 1019987
+ ],
+ "lat_max_usec": 12992,
+ "lat_avg_usec": 416,
+ "lat_min_usec": 39,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 203997,
+ "overall": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 593093792.0,
+ "pkt_rate": 96031.5,
+ "max_delay_usec": 12992,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 428.4999938724739,
+ "total_pkt_bytes": 1574860700,
+ "total_pkts": 2039975,
+ "min_delay_usec": 34
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 1574860700,
+ "total_pkts": 2039975,
+ "pkt_bit_rate": 593058368.0,
+ "pkt_rate": 96025.5
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 589896256,
+ "pkt_rate": 95514,
+ "max_delay_usec": 12992,
+ "total_pkt_bytes": 787430736,
+ "avg_delay_usec": 416,
+ "total_pkts": 1019988,
+ "min_delay_usec": 39
+ },
+ "tx": {
+ "total_pkt_bytes": 787429964,
+ "total_pkts": 1019987,
+ "pkt_bit_rate": 593190528,
+ "pkt_rate": 96047
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 596291328,
+ "pkt_rate": 96549,
+ "max_delay_usec": 6400,
+ "total_pkt_bytes": 787429964,
+ "avg_delay_usec": 441,
+ "total_pkts": 1019987,
+ "min_delay_usec": 34
+ },
+ "tx": {
+ "total_pkt_bytes": 787430736,
+ "total_pkts": 1019988,
+ "pkt_bit_rate": 592926208,
+ "pkt_rate": 96004
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 1285997088.0,
+ "theoretical_tx_rate_pps": 7931472.081218274
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "694c371f3fce42c4ba547b3cc5cbc030"
+ },
+ "synthesis": {
+ "avg_delay_usec": 428.4999938724739,
+ "total_tx_rate": 203997
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_768-fc_100k-rate_90%.json",
+ "frame_sizes": [
+ "768"
+ ],
+ "rate": "90%",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive",
+ "restart": "true"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 08:07:28",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": "true",
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "9d22db1a0cf34ca0874e09eb8b37c51e",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "263268pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "768"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_768-fc_100k-rate_90%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "768"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_768-fc_100k-rate_90%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "768": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 3.3066320768,
+ "rate_pps": 131132,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 826658019
+ },
+ "tx": {
+ "rate_percent": 3.306674944,
+ "rate_pps": 131134,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 826668736
+ },
+ "orig": {
+ "rate_percent": 3.3192829440000002,
+ "rate_pps": 131634,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 829820736
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 6.613438144,
+ "rate_pps": 262271.0,
+ "rate_bps": 1653359535.0
+ },
+ "tx": {
+ "rate_percent": 6.6135490944,
+ "rate_pps": 262275.0,
+ "rate_bps": 1653387273.0
+ },
+ "orig": {
+ "rate_percent": 6.6385658880000005,
+ "rate_pps": 263268.0,
+ "rate_bps": 1659641472.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 3.3068060672,
+ "rate_pps": 131139,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 826701516
+ },
+ "tx": {
+ "rate_percent": 3.306874150399999,
+ "rate_pps": 131141,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 826718537
+ },
+ "orig": {
+ "rate_percent": 3.3192829440000002,
+ "rate_pps": 131634,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 829820736
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 1310232,
+ "-6 (-0.0005%)"
+ ],
+ "lat_max_usec": 1676,
+ "lat_avg_usec": 349,
+ "lat_min_usec": 51,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 1311419,
+ "-27 (-0.0021%)"
+ ],
+ "lat_max_usec": 17335,
+ "lat_avg_usec": 357,
+ "lat_min_usec": 74,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 262275,
+ "overall": {
+ "drop_rate_percent": 0.0016776226866441024,
+ "rx": {
+ "dropped_pkts": 44,
+ "pkt_bit_rate": 812587744.0,
+ "pkt_rate": 131571.5,
+ "max_delay_usec": 17335,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 352.9998947655388,
+ "total_pkt_bytes": 2024735980,
+ "total_pkts": 2622715,
+ "min_delay_usec": 51
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 2024769948,
+ "total_pkts": 2622759,
+ "pkt_bit_rate": 812466528.0,
+ "pkt_rate": 131551.5
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.0012963057573513882,
+ "rx": {
+ "dropped_pkts": 17,
+ "pkt_bit_rate": 812597184,
+ "pkt_rate": 131573,
+ "max_delay_usec": 17335,
+ "total_pkt_bytes": 1012341356,
+ "avg_delay_usec": 357,
+ "total_pkts": 1311323,
+ "min_delay_usec": 74
+ },
+ "tx": {
+ "total_pkt_bytes": 1012415468,
+ "total_pkts": 1311419,
+ "pkt_bit_rate": 812396480,
+ "pkt_rate": 131540
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.002058962587887199,
+ "rx": {
+ "dropped_pkts": 27,
+ "pkt_bit_rate": 812578304,
+ "pkt_rate": 131570,
+ "max_delay_usec": 1676,
+ "total_pkt_bytes": 1012394624,
+ "avg_delay_usec": 349,
+ "total_pkts": 1311392,
+ "min_delay_usec": 51
+ },
+ "tx": {
+ "total_pkt_bytes": 1012354480,
+ "total_pkts": 1311340,
+ "pkt_bit_rate": 812536576,
+ "pkt_rate": 131563
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 1653381600.0,
+ "theoretical_tx_rate_pps": 7931472.081218274
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "9d22db1a0cf34ca0874e09eb8b37c51e"
+ },
+ "synthesis": {
+ "avg_delay_usec": 352.9998947655388,
+ "total_tx_rate": 262275
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_1518-fc_100k-rate_70%.json",
+ "frame_sizes": [
+ "1518"
+ ],
+ "rate": "70%",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive",
+ "restart": "true"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 08:08:07",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": "true",
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "89248933cb70463792a0aa738f17d3e6",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "182233pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1518"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_1518-fc_100k-rate_70%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1518"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_1518-fc_100k-rate_70%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1518": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 4.4675971648,
+ "rate_pps": 90775,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1116899291
+ },
+ "tx": {
+ "rate_percent": 4.4675971648,
+ "rate_pps": 90775,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1116899291
+ },
+ "orig": {
+ "rate_percent": 4.484389664,
+ "rate_pps": 91116,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1121097416
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 8.9354650176,
+ "rate_pps": 181555.0,
+ "rate_bps": 2233866254.0
+ },
+ "tx": {
+ "rate_percent": 8.9354650176,
+ "rate_pps": 181555.0,
+ "rate_bps": 2233866254.0
+ },
+ "orig": {
+ "rate_percent": 8.968779328,
+ "rate_pps": 182232.0,
+ "rate_bps": 2242194832.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 4.4678678528,
+ "rate_pps": 90780,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1116966963
+ },
+ "tx": {
+ "rate_percent": 4.4678678528,
+ "rate_pps": 90780,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1116966963
+ },
+ "orig": {
+ "rate_percent": 4.484389664,
+ "rate_pps": 91116,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1121097416
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 906957,
+ "+6 (+0.0007%)"
+ ],
+ "lat_max_usec": 4973,
+ "lat_avg_usec": 370,
+ "lat_min_usec": 59,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 907808,
+ 907808
+ ],
+ "lat_max_usec": 6675,
+ "lat_avg_usec": 341,
+ "lat_min_usec": 92,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 181556,
+ "overall": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 1108165952.0,
+ "pkt_rate": 91011.5,
+ "max_delay_usec": 6675,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 355.5004392581687,
+ "total_pkt_bytes": 2763283842,
+ "total_pkts": 1815561,
+ "min_delay_usec": 59
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 2763283842,
+ "total_pkts": 1815561,
+ "pkt_bit_rate": 1107904704.0,
+ "pkt_rate": 90990.0
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 1108101888,
+ "pkt_rate": 91006,
+ "max_delay_usec": 6675,
+ "total_pkt_bytes": 1381600066,
+ "avg_delay_usec": 341,
+ "total_pkts": 907753,
+ "min_delay_usec": 92
+ },
+ "tx": {
+ "total_pkt_bytes": 1381683776,
+ "total_pkts": 907808,
+ "pkt_bit_rate": 1107890432,
+ "pkt_rate": 90989
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 1108230016,
+ "pkt_rate": 91017,
+ "max_delay_usec": 4973,
+ "total_pkt_bytes": 1381683776,
+ "avg_delay_usec": 370,
+ "total_pkts": 907808,
+ "min_delay_usec": 59
+ },
+ "tx": {
+ "total_pkt_bytes": 1381600066,
+ "total_pkts": 907753,
+ "pkt_bit_rate": 1107918976,
+ "pkt_rate": 90991
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 2233865024.0,
+ "theoretical_tx_rate_pps": 4063719.1157347206
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "89248933cb70463792a0aa738f17d3e6"
+ },
+ "synthesis": {
+ "avg_delay_usec": 355.5004392581687,
+ "total_tx_rate": 181556
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_1518-fc_100k-rate_90%.json",
+ "frame_sizes": [
+ "1518"
+ ],
+ "rate": "90%",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive",
+ "restart": "true"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 08:08:48",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": "true",
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "3d0cbc23b6c14f59b503bd29f8e47bf0",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "234299pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1518"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_1518-fc_100k-rate_90%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1518"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_1518-fc_100k-rate_90%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1518": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 5.7440633408,
+ "rate_pps": 116711,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1436015835
+ },
+ "tx": {
+ "rate_percent": 5.7440633408,
+ "rate_pps": 116711,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1436015835
+ },
+ "orig": {
+ "rate_percent": 5.765629792,
+ "rate_pps": 117149,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1441407448
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 11.4884711936,
+ "rate_pps": 233429.0,
+ "rate_bps": 2872117798.0
+ },
+ "tx": {
+ "rate_percent": 11.4884711936,
+ "rate_pps": 233429.0,
+ "rate_bps": 2872117798.0
+ },
+ "orig": {
+ "rate_percent": 11.531259584,
+ "rate_pps": 234298.0,
+ "rate_bps": 2882814896.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 5.7444078528,
+ "rate_pps": 116718,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1436101963
+ },
+ "tx": {
+ "rate_percent": 5.7444078528,
+ "rate_pps": 116718,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1436101963
+ },
+ "orig": {
+ "rate_percent": 5.765629792,
+ "rate_pps": 117149,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1441407448
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 1166133,
+ "+27 (+0.0023%)"
+ ],
+ "lat_max_usec": 658,
+ "lat_avg_usec": 325,
+ "lat_min_usec": 69,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 1167183,
+ 1167183
+ ],
+ "lat_max_usec": 11556,
+ "lat_avg_usec": 331,
+ "lat_min_usec": 66,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 233429,
+ "overall": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 1423834560.0,
+ "pkt_rate": 116937.0,
+ "max_delay_usec": 11556,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 327.99991003711614,
+ "total_pkt_bytes": 3552798512,
+ "total_pkts": 2334296,
+ "min_delay_usec": 66
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 3552798512,
+ "total_pkts": 2334296,
+ "pkt_bit_rate": 1424474880.0,
+ "pkt_rate": 116990.0
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 1423956992,
+ "pkt_rate": 116947,
+ "max_delay_usec": 11556,
+ "total_pkt_bytes": 1776345986,
+ "avg_delay_usec": 331,
+ "total_pkts": 1167113,
+ "min_delay_usec": 66
+ },
+ "tx": {
+ "total_pkt_bytes": 1776452526,
+ "total_pkts": 1167183,
+ "pkt_bit_rate": 1424533632,
+ "pkt_rate": 116994
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 1423712128,
+ "pkt_rate": 116927,
+ "max_delay_usec": 658,
+ "total_pkt_bytes": 1776452526,
+ "avg_delay_usec": 325,
+ "total_pkts": 1167183,
+ "min_delay_usec": 69
+ },
+ "tx": {
+ "total_pkt_bytes": 1776345986,
+ "total_pkts": 1167113,
+ "pkt_bit_rate": 1424416128,
+ "pkt_rate": 116986
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 2872110416.0,
+ "theoretical_tx_rate_pps": 4063719.1157347206
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "3d0cbc23b6c14f59b503bd29f8e47bf0"
+ },
+ "synthesis": {
+ "avg_delay_usec": 327.99991003711614,
+ "total_tx_rate": 233429
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_9000-fc_100k-rate_70%.json",
+ "frame_sizes": [
+ "9000"
+ ],
+ "rate": "70%",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive",
+ "restart": "true"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 08:09:28",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": "true",
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "1b492bc88b2c49cb88be084019d3b19a",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "107335pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "9000"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_9000-fc_100k-rate_70%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "9000"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_9000-fc_100k-rate_70%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "9000": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 15.432253056,
+ "rate_pps": 53465,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 3858063264
+ },
+ "tx": {
+ "rate_percent": 15.432253056,
+ "rate_pps": 53465,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 3858063264
+ },
+ "orig": {
+ "rate_percent": 15.4905872,
+ "rate_pps": 53667,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 3872646800
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 30.865487488,
+ "rate_pps": 106933.0,
+ "rate_bps": 7716371872.0
+ },
+ "tx": {
+ "rate_percent": 30.865487488,
+ "rate_pps": 106933.0,
+ "rate_bps": 7716371872.0
+ },
+ "orig": {
+ "rate_percent": 30.9811744,
+ "rate_pps": 107334.0,
+ "rate_bps": 7745293600.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 15.433234432,
+ "rate_pps": 53468,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 3858308608
+ },
+ "tx": {
+ "rate_percent": 15.433234432,
+ "rate_pps": 53468,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 3858308608
+ },
+ "orig": {
+ "rate_percent": 15.4905872,
+ "rate_pps": 53667,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 3872646800
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 534208,
+ "+4 (+0.0007%)"
+ ],
+ "lat_max_usec": 5196,
+ "lat_avg_usec": 342,
+ "lat_min_usec": 65,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 534688,
+ 534688
+ ],
+ "lat_max_usec": 14076,
+ "lat_avg_usec": 332,
+ "lat_min_usec": 74,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 106934,
+ "overall": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 3860001152.0,
+ "pkt_rate": 53586.5,
+ "max_delay_usec": 14076,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 337.00015897626764,
+ "total_pkt_bytes": 9628355368,
+ "total_pkts": 1069342,
+ "min_delay_usec": 65
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 9628355368,
+ "total_pkts": 1069342,
+ "pkt_bit_rate": 3860356864.0,
+ "pkt_rate": 53592.0
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 3860253696,
+ "pkt_rate": 53590,
+ "max_delay_usec": 14076,
+ "total_pkt_bytes": 4814024616,
+ "avg_delay_usec": 332,
+ "total_pkts": 534654,
+ "min_delay_usec": 74
+ },
+ "tx": {
+ "total_pkt_bytes": 4814330752,
+ "total_pkts": 534688,
+ "pkt_bit_rate": 3860350464,
+ "pkt_rate": 53592
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 3859748608,
+ "pkt_rate": 53583,
+ "max_delay_usec": 5196,
+ "total_pkt_bytes": 4814330752,
+ "avg_delay_usec": 342,
+ "total_pkts": 534688,
+ "min_delay_usec": 65
+ },
+ "tx": {
+ "total_pkt_bytes": 4814024616,
+ "total_pkts": 534654,
+ "pkt_bit_rate": 3860363264,
+ "pkt_rate": 53592
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 7716357440.0,
+ "theoretical_tx_rate_pps": 692904.6563192905
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "1b492bc88b2c49cb88be084019d3b19a"
+ },
+ "synthesis": {
+ "avg_delay_usec": 337.00015897626764,
+ "total_tx_rate": 106934
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_9000-fc_100k-rate_90%.json",
+ "frame_sizes": [
+ "9000"
+ ],
+ "rate": "90%",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive",
+ "restart": "true"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 08:10:06",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": "true",
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "6f821bed4865456680f826839bab1081",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "138003pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "9000"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_9000-fc_100k-rate_90%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "9000"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-latency-fs_9000-fc_100k-rate_90%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "9000": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 19.841806336,
+ "rate_pps": 68742,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 4960451584
+ },
+ "tx": {
+ "rate_percent": 19.841806336,
+ "rate_pps": 68742,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 4960451584
+ },
+ "orig": {
+ "rate_percent": 19.916592960000003,
+ "rate_pps": 69001,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 4979148240
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 39.684853824,
+ "rate_pps": 137488.0,
+ "rate_bps": 9921213456.0
+ },
+ "tx": {
+ "rate_percent": 39.684853824,
+ "rate_pps": 137488.0,
+ "rate_bps": 9921213456.0
+ },
+ "orig": {
+ "rate_percent": 39.833185920000005,
+ "rate_pps": 138002.0,
+ "rate_bps": 9958296480.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 19.843047488,
+ "rate_pps": 68746,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 4960761872
+ },
+ "tx": {
+ "rate_percent": 19.843047488,
+ "rate_pps": 68746,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 4960761872
+ },
+ "orig": {
+ "rate_percent": 19.916592960000003,
+ "rate_pps": 69001,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 4979148240
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 686848,
+ "+12 (+0.0017%)"
+ ],
+ "lat_max_usec": 921,
+ "lat_avg_usec": 473,
+ "lat_min_usec": 102,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 687467,
+ 687467
+ ],
+ "lat_max_usec": 23660,
+ "lat_avg_usec": 471,
+ "lat_min_usec": 82,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 137489,
+ "overall": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 4886032128.0,
+ "pkt_rate": 67831.0,
+ "max_delay_usec": 23660,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 472.00003127520654,
+ "total_pkt_bytes": 12379518564,
+ "total_pkts": 1374891,
+ "min_delay_usec": 82
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 12379518564,
+ "total_pkts": 1374891,
+ "pkt_bit_rate": 4885754880.0,
+ "pkt_rate": 67827.0
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 4860832768,
+ "pkt_rate": 67481,
+ "max_delay_usec": 23660,
+ "total_pkt_bytes": 6189565696,
+ "avg_delay_usec": 471,
+ "total_pkts": 687424,
+ "min_delay_usec": 82
+ },
+ "tx": {
+ "total_pkt_bytes": 6189952868,
+ "total_pkts": 687467,
+ "pkt_bit_rate": 4887348736,
+ "pkt_rate": 67849
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 4911231488,
+ "pkt_rate": 68181,
+ "max_delay_usec": 921,
+ "total_pkt_bytes": 6189952868,
+ "avg_delay_usec": 473,
+ "total_pkts": 687467,
+ "min_delay_usec": 102
+ },
+ "tx": {
+ "total_pkt_bytes": 6189565696,
+ "total_pkts": 687424,
+ "pkt_bit_rate": 4884161024,
+ "pkt_rate": 67805
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 9921206240.0,
+ "theoretical_tx_rate_pps": 692904.6563192905
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "6f821bed4865456680f826839bab1081"
+ },
+ "synthesis": {
+ "avg_delay_usec": 472.00003127520654,
+ "total_tx_rate": 137489
+ }
+ }
+ ],
+ "throughput": [
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "64"
+ ],
+ "rate": "ndr",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 04:26:27",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "7dca1c234a4544fa8b4600aeca81a251",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "64"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_128-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "64"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_128-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "64": {
+ "ndr": {
+ "load_percent_per_direction": 0.29296875,
+ "timestamp_sec": 1646281727.2934198,
+ "stats": {
+ "total_tx_rate": 216641,
+ "overall": {
+ "rx_pkts": 2166416,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 3395,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2166416,
+ "avg_delay_usec": 345.5001269377627,
+ "min_delay_usec": 48,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1083153,
+ "min_delay_usec": 48,
+ "drop_pct": 0,
+ "max_delay_usec": 2779,
+ "tx_pkts": 1083263,
+ "avg_delay_usec": 343,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1083263,
+ "min_delay_usec": 58,
+ "drop_pct": 0,
+ "max_delay_usec": 3395,
+ "tx_pkts": 1083153,
+ "avg_delay_usec": 348,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 145582752.0,
+ "theoretical_tx_rate_pps": 74404761.90476191
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 0.5859375,
+ "duration_sec": 10.0,
+ "l2frame_size": "64",
+ "rate_pps": 217982,
+ "rate_bps": 146484374.0,
+ "time_taken_sec": 137.62811660766602
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 1420502.8540113333,
+ "rx_pkts": 5016530,
+ "time_ms": 1646281602204,
+ "drop_pct": 257745146,
+ "total_tx_pps": 26276167,
+ "tx_pps": 74404760,
+ "tx_pkts": 262761676,
+ "warning": "WARNING: There is a significant difference between requested TX rate (74404760) and actual TX rate (26276167). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 98.09084411533438
+ },
+ {
+ "rx_pps": 672601.1499390049,
+ "rx_pkts": 4822778,
+ "time_ms": 1646281614702,
+ "drop_pct": 261930884,
+ "total_tx_pps": 26675366,
+ "tx_pps": 37202380,
+ "tx_pkts": 266753662,
+ "warning": "WARNING: There is a significant difference between requested TX rate (37202380) and actual TX rate (26675366). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 98.19204806268039
+ },
+ {
+ "rx_pps": 504874.7734901166,
+ "rx_pkts": 5017597,
+ "time_ms": 1646281627207,
+ "drop_pct": 179846611,
+ "total_tx_pps": 18486420,
+ "tx_pps": 18601190,
+ "tx_pkts": 184864208,
+ "drop_percentage": 97.28579314823344
+ },
+ {
+ "rx_pps": 526090.9624989077,
+ "rx_pkts": 5239077,
+ "time_ms": 1646281639732,
+ "drop_pct": 87380891,
+ "total_tx_pps": 9261996,
+ "tx_pps": 9300594,
+ "tx_pkts": 92619968,
+ "drop_percentage": 94.34346921821437
+ },
+ {
+ "rx_pps": 338831.07121923624,
+ "rx_pkts": 3367405,
+ "time_ms": 1646281652234,
+ "drop_pct": 42848634,
+ "total_tx_pps": 4621603,
+ "tx_pps": 4650296,
+ "tx_pkts": 46216039,
+ "drop_percentage": 92.71377410772914
+ },
+ {
+ "rx_pps": 187871.99985494502,
+ "rx_pkts": 1867166,
+ "time_ms": 1646281664732,
+ "drop_pct": 21241319,
+ "total_tx_pps": 2310848,
+ "tx_pps": 2325148,
+ "tx_pkts": 23108485,
+ "drop_percentage": 91.9199982171051
+ },
+ {
+ "rx_pps": 291240.3958426355,
+ "rx_pkts": 2894493,
+ "time_ms": 1646281677251,
+ "drop_pct": 8659750,
+ "total_tx_pps": 1155424,
+ "tx_pps": 1162574,
+ "tx_pkts": 11554243,
+ "drop_percentage": 74.94865738932442
+ },
+ {
+ "rx_pps": 534014.7450349748,
+ "rx_pkts": 5307629,
+ "time_ms": 1646281689761,
+ "drop_pct": 469834,
+ "total_tx_pps": 577746,
+ "tx_pps": 581286,
+ "tx_pkts": 5777463,
+ "drop_percentage": 8.132185355405998
+ },
+ {
+ "rx_pps": 290481.83102404187,
+ "rx_pkts": 2887245,
+ "time_ms": 1646281702271,
+ "drop_pct": 1592,
+ "total_tx_pps": 288883,
+ "tx_pps": 290642,
+ "tx_pkts": 2888837,
+ "drop_percentage": 0.05510868214440621
+ },
+ {
+ "rx_pps": 145320.0,
+ "rx_pkts": 1444265,
+ "time_ms": 1646281714791,
+ "drop_pct": 0,
+ "total_tx_pps": 144426,
+ "tx_pps": 145320,
+ "tx_pkts": 1444265,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 217982.0,
+ "rx_pkts": 2166416,
+ "time_ms": 1646281727292,
+ "drop_pct": 0,
+ "total_tx_pps": 216641,
+ "tx_pps": 217982,
+ "tx_pkts": 2166416,
+ "ndr_pps": 108991,
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "7dca1c234a4544fa8b4600aeca81a251"
+ },
+ "synthesis": {
+ "avg_delay_usec": 345.5001269377627,
+ "total_tx_rate": 216641
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "128"
+ ],
+ "rate": "ndr",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 04:38:28",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "471b575695a34aeb896904338ee56c9e",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "128"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_128-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "128"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_128-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "128": {
+ "ndr": {
+ "load_percent_per_direction": 0.48828125,
+ "timestamp_sec": 1646282448.6252708,
+ "stats": {
+ "total_tx_rate": 204950,
+ "overall": {
+ "rx_pkts": 2049506,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 4734,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2049506,
+ "avg_delay_usec": 402.9975642911023,
+ "min_delay_usec": 50,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1024701,
+ "min_delay_usec": 50,
+ "drop_pct": 0,
+ "max_delay_usec": 2923,
+ "tx_pkts": 1024805,
+ "avg_delay_usec": 451,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1024805,
+ "min_delay_usec": 70,
+ "drop_pct": 0,
+ "max_delay_usec": 4734,
+ "tx_pkts": 1024701,
+ "avg_delay_usec": 355,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 242660800.0,
+ "theoretical_tx_rate_pps": 42229729.72972973
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 0.9765625,
+ "duration_sec": 10.0,
+ "l2frame_size": "128",
+ "rate_pps": 206198,
+ "rate_bps": 244140624.0,
+ "time_taken_sec": 137.57624626159668
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 611597.2644258632,
+ "rx_pkts": 3719633,
+ "time_ms": 1646282323560,
+ "drop_pct": 253114560,
+ "total_tx_pps": 25683419,
+ "tx_pps": 42229728,
+ "tx_pkts": 256834193,
+ "warning": "WARNING: There is a significant difference between requested TX rate (42229728) and actual TX rate (25683419). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 98.55173761851873
+ },
+ {
+ "rx_pps": 386189.1189369173,
+ "rx_pkts": 3838141,
+ "time_ms": 1646282336056,
+ "drop_pct": 206011959,
+ "total_tx_pps": 20985010,
+ "tx_pps": 21114864,
+ "tx_pkts": 209850100,
+ "drop_percentage": 98.17100825779926
+ },
+ {
+ "rx_pps": 535360.03343522,
+ "rx_pkts": 5320676,
+ "time_ms": 1646282348558,
+ "drop_pct": 99604368,
+ "total_tx_pps": 10492504,
+ "tx_pps": 10557432,
+ "tx_pkts": 104925044,
+ "drop_percentage": 94.92906955559629
+ },
+ {
+ "rx_pps": 475850.8644810261,
+ "rx_pkts": 4729244,
+ "time_ms": 1646282361060,
+ "drop_pct": 47733277,
+ "total_tx_pps": 5246252,
+ "tx_pps": 5278716,
+ "tx_pkts": 52462521,
+ "drop_percentage": 90.98548085403674
+ },
+ {
+ "rx_pps": 481740.3899527563,
+ "rx_pkts": 4788259,
+ "time_ms": 1646282373570,
+ "drop_pct": 21445642,
+ "total_tx_pps": 2623390,
+ "tx_pps": 2639358,
+ "tx_pkts": 26233901,
+ "drop_percentage": 81.74781935786065
+ },
+ {
+ "rx_pps": 162404.72992262442,
+ "rx_pkts": 1614222,
+ "time_ms": 1646282386070,
+ "drop_pct": 11502719,
+ "total_tx_pps": 1311694,
+ "tx_pps": 1319678,
+ "tx_pkts": 13116941,
+ "drop_percentage": 87.69360935602288
+ },
+ {
+ "rx_pps": 528791.9306016571,
+ "rx_pkts": 5256987,
+ "time_ms": 1646282398572,
+ "drop_pct": 1302795,
+ "total_tx_pps": 655978,
+ "tx_pps": 659838,
+ "tx_pkts": 6559782,
+ "drop_percentage": 19.86033987105059
+ },
+ {
+ "rx_pps": 329883.78962649574,
+ "rx_pkts": 3278552,
+ "time_ms": 1646282411079,
+ "drop_pct": 340,
+ "total_tx_pps": 327889,
+ "tx_pps": 329918,
+ "tx_pkts": 3278892,
+ "drop_percentage": 0.010369356477736992
+ },
+ {
+ "rx_pps": 164958.0,
+ "rx_pkts": 1639603,
+ "time_ms": 1646282423587,
+ "drop_pct": 0,
+ "total_tx_pps": 163960,
+ "tx_pps": 164958,
+ "tx_pkts": 1639603,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 247433.07018056748,
+ "rx_pkts": 2459364,
+ "time_ms": 1646282436086,
+ "drop_pct": 49,
+ "total_tx_pps": 245941,
+ "tx_pps": 247438,
+ "tx_pkts": 2459413,
+ "drop_percentage": 0.001992345327929876
+ },
+ {
+ "rx_pps": 206198.0,
+ "rx_pkts": 2049506,
+ "time_ms": 1646282448624,
+ "drop_pct": 0,
+ "total_tx_pps": 204950,
+ "tx_pps": 206198,
+ "tx_pkts": 2049506,
+ "ndr_pps": 103099,
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "471b575695a34aeb896904338ee56c9e"
+ },
+ "synthesis": {
+ "avg_delay_usec": 402.9975642911023,
+ "total_tx_rate": 204950
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "256"
+ ],
+ "rate": "ndr",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 04:43:16",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "d3d2bdbb46a848a6bd1d9fceccf3e984",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "256"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_128-rate_ndr-1.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "256"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_128-rate_ndr-1.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "256": {
+ "ndr": {
+ "load_percent_per_direction": 1.171875,
+ "timestamp_sec": 1646282737.0682218,
+ "stats": {
+ "total_tx_rate": 263738,
+ "overall": {
+ "rx_pkts": 2637364,
+ "drop_percentage": 0.0006445788454531218,
+ "drop_pct": 17,
+ "max_delay_usec": 3483,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2637381,
+ "avg_delay_usec": 391.5000284374853,
+ "min_delay_usec": 43,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1318607,
+ "min_delay_usec": 51,
+ "drop_pct": 17,
+ "max_delay_usec": 3483,
+ "tx_pkts": 1318757,
+ "avg_delay_usec": 391,
+ "drop_percentage": 0.0012890926834890734
+ },
+ "0": {
+ "rx_pkts": 1318757,
+ "min_delay_usec": 43,
+ "drop_pct": 0,
+ "max_delay_usec": 2612,
+ "tx_pkts": 1318624,
+ "avg_delay_usec": 392,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 582333504.0,
+ "theoretical_tx_rate_pps": 22644927.536231883
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 2.34375,
+ "duration_sec": 10.0,
+ "l2frame_size": "256",
+ "rate_pps": 265370,
+ "rate_bps": 585937500.0,
+ "time_taken_sec": 137.64893245697021
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 522344.1460825948,
+ "rx_pkts": 4754897,
+ "time_ms": 1646282611907,
+ "drop_pct": 201381788,
+ "total_tx_pps": 20613668,
+ "tx_pps": 22644926,
+ "tx_pkts": 206136685,
+ "drop_percentage": 97.69332809441464
+ },
+ {
+ "rx_pps": 491622.4395108708,
+ "rx_pkts": 4886235,
+ "time_ms": 1646282624425,
+ "drop_pct": 107647705,
+ "total_tx_pps": 11253394,
+ "tx_pps": 11322462,
+ "tx_pkts": 112533940,
+ "drop_percentage": 95.6579899361917
+ },
+ {
+ "rx_pps": 470777.2330404413,
+ "rx_pkts": 4678820,
+ "time_ms": 1646282636925,
+ "drop_pct": 51585320,
+ "total_tx_pps": 5626414,
+ "tx_pps": 5661230,
+ "tx_pkts": 56264140,
+ "drop_percentage": 91.68418818807147
+ },
+ {
+ "rx_pps": 414425.7781120188,
+ "rx_pkts": 4118771,
+ "time_ms": 1646282649423,
+ "drop_pct": 24013289,
+ "total_tx_pps": 2813206,
+ "tx_pps": 2830614,
+ "tx_pkts": 28132060,
+ "drop_percentage": 85.3591560660684
+ },
+ {
+ "rx_pps": 236622.81767304175,
+ "rx_pkts": 2351913,
+ "time_ms": 1646282661925,
+ "drop_pct": 11715524,
+ "total_tx_pps": 1406743,
+ "tx_pps": 1415306,
+ "tx_pkts": 14067437,
+ "drop_percentage": 83.28115491116114
+ },
+ {
+ "rx_pps": 357701.18149108754,
+ "rx_pkts": 3555014,
+ "time_ms": 1646282674452,
+ "drop_pct": 3477987,
+ "total_tx_pps": 703300,
+ "tx_pps": 707652,
+ "tx_pkts": 7033001,
+ "drop_percentage": 49.45238881666589
+ },
+ {
+ "rx_pps": 353648.52806887566,
+ "rx_pkts": 3521103,
+ "time_ms": 1646282687041,
+ "drop_pct": 1767,
+ "total_tx_pps": 352287,
+ "tx_pps": 353826,
+ "tx_pkts": 3522870,
+ "drop_percentage": 0.05015796779330489
+ },
+ {
+ "rx_pps": 176912.0,
+ "rx_pkts": 1758241,
+ "time_ms": 1646282699539,
+ "drop_pct": 0,
+ "total_tx_pps": 175824,
+ "tx_pps": 176912,
+ "tx_pkts": 1758241,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 265368.28948111786,
+ "rx_pkts": 2637364,
+ "time_ms": 1646282712038,
+ "drop_pct": 17,
+ "total_tx_pps": 263738,
+ "tx_pps": 265370,
+ "tx_pkts": 2637381,
+ "drop_percentage": 0.0006445788454531218
+ },
+ {
+ "rx_pps": 309489.6445784601,
+ "rx_pkts": 3076176,
+ "time_ms": 1646282724538,
+ "drop_pct": 1077,
+ "total_tx_pps": 307725,
+ "tx_pps": 309598,
+ "tx_pkts": 3077253,
+ "drop_percentage": 0.03499874725932512
+ },
+ {
+ "rx_pps": 287373.73295271414,
+ "rx_pkts": 2856353,
+ "time_ms": 1646282737067,
+ "drop_pct": 1096,
+ "total_tx_pps": 285744,
+ "tx_pps": 287484,
+ "tx_pkts": 2857449,
+ "ndr_pps": 132685,
+ "drop_percentage": 0.03835589016636867
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "d3d2bdbb46a848a6bd1d9fceccf3e984"
+ },
+ "synthesis": {
+ "avg_delay_usec": 391.5000284374853,
+ "total_tx_rate": 263738
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "512"
+ ],
+ "rate": "ndr",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 04:48:05",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "3003c1cc691e42569317eef8cabf49f4",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "512"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_128-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "512"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_128-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "512": {
+ "ndr": {
+ "load_percent_per_direction": 1.85546875,
+ "timestamp_sec": 1646283026.276379,
+ "stats": {
+ "total_tx_rate": 216663,
+ "overall": {
+ "rx_pkts": 2166633,
+ "drop_percentage": 9.230904143983643e-05,
+ "drop_pct": 2,
+ "max_delay_usec": 3778,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2166635,
+ "avg_delay_usec": 293.49982068952147,
+ "min_delay_usec": 38,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1083261,
+ "min_delay_usec": 38,
+ "drop_pct": 2,
+ "max_delay_usec": 2864,
+ "tx_pkts": 1083372,
+ "avg_delay_usec": 297,
+ "drop_percentage": 0.00018460879550145288
+ },
+ "0": {
+ "rx_pkts": 1083372,
+ "min_delay_usec": 43,
+ "drop_pct": 0,
+ "max_delay_usec": 3778,
+ "tx_pkts": 1083263,
+ "avg_delay_usec": 290,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 922117728.0,
+ "theoretical_tx_rate_pps": 11748120.30075188
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 3.7109375,
+ "duration_sec": 10.0,
+ "l2frame_size": "512",
+ "rate_pps": 217982,
+ "rate_bps": 927734374.0,
+ "time_taken_sec": 137.69713401794434
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 455331.51681267726,
+ "rx_pkts": 4337032,
+ "time_ms": 1646282901128,
+ "drop_pct": 107563793,
+ "total_tx_pps": 11190082,
+ "tx_pps": 11748120,
+ "tx_pkts": 111900825,
+ "drop_percentage": 96.12421802967047
+ },
+ {
+ "rx_pps": 440270.9763230637,
+ "rx_pkts": 4375633,
+ "time_ms": 1646282913629,
+ "drop_pct": 54003711,
+ "total_tx_pps": 5837934,
+ "tx_pps": 5874060,
+ "tx_pkts": 58379344,
+ "drop_percentage": 92.50482670719973
+ },
+ {
+ "rx_pps": 515017.8171997763,
+ "rx_pkts": 5119020,
+ "time_ms": 1646282926174,
+ "drop_pct": 24073592,
+ "total_tx_pps": 2919261,
+ "tx_pps": 2937030,
+ "tx_pkts": 29192612,
+ "drop_percentage": 82.46467291107764
+ },
+ {
+ "rx_pps": 328003.16112234007,
+ "rx_pkts": 3259860,
+ "time_ms": 1646282938675,
+ "drop_pct": 11334969,
+ "total_tx_pps": 1459482,
+ "tx_pps": 1468514,
+ "tx_pkts": 14594829,
+ "drop_percentage": 77.66428095868748
+ },
+ {
+ "rx_pps": 517398.77960233815,
+ "rx_pkts": 5142169,
+ "time_ms": 1646282951182,
+ "drop_pct": 2155236,
+ "total_tx_pps": 729740,
+ "tx_pps": 734256,
+ "tx_pkts": 7297405,
+ "drop_percentage": 29.534279651465145
+ },
+ {
+ "rx_pps": 366808.26589116355,
+ "rx_pkts": 3645894,
+ "time_ms": 1646282963699,
+ "drop_pct": 3178,
+ "total_tx_pps": 364907,
+ "tx_pps": 367128,
+ "tx_pkts": 3649072,
+ "drop_percentage": 0.08709063564654246
+ },
+ {
+ "rx_pps": 183564.0,
+ "rx_pkts": 1825087,
+ "time_ms": 1646282976228,
+ "drop_pct": 0,
+ "total_tx_pps": 182508,
+ "tx_pps": 183564,
+ "tx_pkts": 1825087,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 275044.7500159553,
+ "rx_pkts": 2739035,
+ "time_ms": 1646282988754,
+ "drop_pct": 3000,
+ "total_tx_pps": 274203,
+ "tx_pps": 275346,
+ "tx_pkts": 2742035,
+ "drop_percentage": 0.10940779384654098
+ },
+ {
+ "rx_pps": 229445.14599323669,
+ "rx_pkts": 2280456,
+ "time_ms": 1646283001254,
+ "drop_pct": 88,
+ "total_tx_pps": 228054,
+ "tx_pps": 229454,
+ "tx_pkts": 2280544,
+ "drop_percentage": 0.0038587284437397395
+ },
+ {
+ "rx_pps": 206508.0,
+ "rx_pkts": 2052588,
+ "time_ms": 1646283013764,
+ "drop_pct": 0,
+ "total_tx_pps": 205258,
+ "tx_pps": 206508,
+ "tx_pkts": 2052588,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 217981.7987829053,
+ "rx_pkts": 2166633,
+ "time_ms": 1646283026275,
+ "drop_pct": 2,
+ "total_tx_pps": 216663,
+ "tx_pps": 217982,
+ "tx_pkts": 2166635,
+ "ndr_pps": 108991,
+ "drop_percentage": 9.230904143983643e-05
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "3003c1cc691e42569317eef8cabf49f4"
+ },
+ "synthesis": {
+ "avg_delay_usec": 293.49982068952147,
+ "total_tx_rate": 216663
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "768"
+ ],
+ "rate": "ndr",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 05:00:08",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "65d6a678b0ba42a49b38c9efd82efd93",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "768"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_128-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "768"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_128-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "768": {
+ "ndr": {
+ "load_percent_per_direction": 3.3203125,
+ "timestamp_sec": 1646283748.6846843,
+ "stats": {
+ "total_tx_rate": 261728,
+ "overall": {
+ "rx_pkts": 2617285,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 700,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2617285,
+ "avg_delay_usec": 417.5000750778001,
+ "min_delay_usec": 47,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1308577,
+ "min_delay_usec": 57,
+ "drop_pct": 0,
+ "max_delay_usec": 658,
+ "tx_pkts": 1308708,
+ "avg_delay_usec": 416,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1308708,
+ "min_delay_usec": 47,
+ "drop_pct": 0,
+ "max_delay_usec": 700,
+ "tx_pkts": 1308577,
+ "avg_delay_usec": 419,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 1649933312.0,
+ "theoretical_tx_rate_pps": 7931472.081218274
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 6.640625,
+ "duration_sec": 10.0,
+ "l2frame_size": "768",
+ "rate_pps": 263348,
+ "rate_bps": 1660156250.0,
+ "time_taken_sec": 137.7285816669464
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 575501.9363137981,
+ "rx_pkts": 5571778,
+ "time_ms": 1646283623454,
+ "drop_pct": 71217540,
+ "total_tx_pps": 7678931,
+ "tx_pps": 7931472,
+ "tx_pkts": 76789318,
+ "drop_percentage": 92.74407151265493
+ },
+ {
+ "rx_pps": 340865.59968071827,
+ "rx_pkts": 3387693,
+ "time_ms": 1646283635959,
+ "drop_pct": 36025777,
+ "total_tx_pps": 3941347,
+ "tx_pps": 3965736,
+ "tx_pkts": 39413470,
+ "drop_percentage": 91.40473295043547
+ },
+ {
+ "rx_pps": 249221.15639844484,
+ "rx_pkts": 2477134,
+ "time_ms": 1646283648464,
+ "drop_pct": 17231585,
+ "total_tx_pps": 1970871,
+ "tx_pps": 1982868,
+ "tx_pkts": 19708719,
+ "drop_percentage": 87.43127851180992
+ },
+ {
+ "rx_pps": 240158.13023928663,
+ "rx_pkts": 2391135,
+ "time_ms": 1646283661049,
+ "drop_pct": 7480080,
+ "total_tx_pps": 987121,
+ "tx_pps": 991434,
+ "tx_pkts": 9871215,
+ "drop_percentage": 75.7766901034979
+ },
+ {
+ "rx_pps": 459235.5137965551,
+ "rx_pkts": 4564574,
+ "time_ms": 1646283673551,
+ "drop_pct": 362598,
+ "total_tx_pps": 492717,
+ "tx_pps": 495716,
+ "tx_pkts": 4927172,
+ "drop_percentage": 7.359150441673235
+ },
+ {
+ "rx_pps": 247858.0,
+ "rx_pkts": 2463587,
+ "time_ms": 1646283686050,
+ "drop_pct": 0,
+ "total_tx_pps": 246358,
+ "tx_pps": 247858,
+ "tx_pkts": 2463587,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 371300.609486956,
+ "rx_pkts": 3691660,
+ "time_ms": 1646283698553,
+ "drop_pct": 4826,
+ "total_tx_pps": 369648,
+ "tx_pps": 371786,
+ "tx_pkts": 3696486,
+ "drop_percentage": 0.13055642575137577
+ },
+ {
+ "rx_pps": 309474.9002967386,
+ "rx_pkts": 3076028,
+ "time_ms": 1646283711054,
+ "drop_pct": 3450,
+ "total_tx_pps": 307947,
+ "tx_pps": 309822,
+ "tx_pkts": 3079478,
+ "drop_percentage": 0.11203197425018137
+ },
+ {
+ "rx_pps": 278245.10146550665,
+ "rx_pkts": 2765620,
+ "time_ms": 1646283723573,
+ "drop_pct": 5913,
+ "total_tx_pps": 277153,
+ "tx_pps": 278840,
+ "tx_pkts": 2771533,
+ "drop_percentage": 0.21334763107637542
+ },
+ {
+ "rx_pps": 263348.0,
+ "rx_pkts": 2617285,
+ "time_ms": 1646283736118,
+ "drop_pct": 0,
+ "total_tx_pps": 261728,
+ "tx_pps": 263348,
+ "tx_pkts": 2617285,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 271017.63418923074,
+ "rx_pkts": 2693645,
+ "time_ms": 1646283748683,
+ "drop_pct": 759,
+ "total_tx_pps": 269440,
+ "tx_pps": 271094,
+ "tx_pkts": 2694404,
+ "ndr_pps": 131674,
+ "drop_percentage": 0.028169494997780584
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "65d6a678b0ba42a49b38c9efd82efd93"
+ },
+ "synthesis": {
+ "avg_delay_usec": 417.5000750778001,
+ "total_tx_rate": 261728
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "1024"
+ ],
+ "rate": "ndr",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 05:04:57",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "f51a51cc7fba4903b86a862ccaa87b3f",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1024"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_128-rate_ndr-1.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1024"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_128-rate_ndr-1.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1024": {
+ "ndr": {
+ "load_percent_per_direction": 4.00390625,
+ "timestamp_sec": 1646284037.5527284,
+ "stats": {
+ "total_tx_rate": 238246,
+ "overall": {
+ "rx_pkts": 2382462,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 2280,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2382462,
+ "avg_delay_usec": 422.00110809742193,
+ "min_delay_usec": 36,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1191171,
+ "min_delay_usec": 36,
+ "drop_pct": 0,
+ "max_delay_usec": 655,
+ "tx_pkts": 1191291,
+ "avg_delay_usec": 400,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1191291,
+ "min_delay_usec": 37,
+ "drop_pct": 0,
+ "max_delay_usec": 2280,
+ "tx_pkts": 1191171,
+ "avg_delay_usec": 444,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 1989830592.0,
+ "theoretical_tx_rate_pps": 5986590.038314176
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 8.0078125,
+ "duration_sec": 10.0,
+ "l2frame_size": "1024",
+ "rate_pps": 239696,
+ "rate_bps": 2001953124.0,
+ "time_taken_sec": 137.72533512115479
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 385513.1486587311,
+ "rx_pkts": 3764226,
+ "time_ms": 1646283912326,
+ "drop_pct": 54690013,
+ "total_tx_pps": 5845423,
+ "tx_pps": 5986590,
+ "tx_pkts": 58454239,
+ "drop_percentage": 93.56038832359104
+ },
+ {
+ "rx_pps": 398306.9198628332,
+ "rx_pkts": 3958773,
+ "time_ms": 1646283924836,
+ "drop_pct": 25791580,
+ "total_tx_pps": 2975035,
+ "tx_pps": 2993294,
+ "tx_pkts": 29750353,
+ "drop_percentage": 86.69335789057696
+ },
+ {
+ "rx_pps": 175559.30090151777,
+ "rx_pkts": 1745323,
+ "time_ms": 1646283937398,
+ "drop_pct": 13133585,
+ "total_tx_pps": 1487890,
+ "tx_pps": 1496646,
+ "tx_pkts": 14878908,
+ "drop_percentage": 88.26981791943334
+ },
+ {
+ "rx_pps": 444333.64431527094,
+ "rx_pkts": 4424898,
+ "time_ms": 1646283949915,
+ "drop_pct": 3027269,
+ "total_tx_pps": 745216,
+ "tx_pps": 748322,
+ "tx_pkts": 7452167,
+ "drop_percentage": 40.6226672053914
+ },
+ {
+ "rx_pps": 372829.4511323847,
+ "rx_pkts": 3705741,
+ "time_ms": 1646283962433,
+ "drop_pct": 13225,
+ "total_tx_pps": 371896,
+ "tx_pps": 374160,
+ "tx_pkts": 3718966,
+ "drop_percentage": 0.35560959686106297
+ },
+ {
+ "rx_pps": 187078.39026223953,
+ "rx_pkts": 1859467,
+ "time_ms": 1646283974959,
+ "drop_pct": 16,
+ "total_tx_pps": 185948,
+ "tx_pps": 187080,
+ "tx_pkts": 1859483,
+ "drop_percentage": 0.000860454223028659
+ },
+ {
+ "rx_pps": 280547.1520142218,
+ "rx_pkts": 2788219,
+ "time_ms": 1646283987466,
+ "drop_pct": 724,
+ "total_tx_pps": 278894,
+ "tx_pps": 280620,
+ "tx_pkts": 2788943,
+ "drop_percentage": 0.025959655683174595
+ },
+ {
+ "rx_pps": 233850.0,
+ "rx_pkts": 2324354,
+ "time_ms": 1646283999977,
+ "drop_pct": 0,
+ "total_tx_pps": 232435,
+ "tx_pps": 233850,
+ "tx_pkts": 2324354,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 257205.36675450407,
+ "rx_pkts": 2560866,
+ "time_ms": 1646284012517,
+ "drop_pct": 305,
+ "total_tx_pps": 256117,
+ "tx_pps": 257236,
+ "tx_pkts": 2561171,
+ "drop_percentage": 0.011908615238888774
+ },
+ {
+ "rx_pps": 245467.66146251332,
+ "rx_pkts": 2440196,
+ "time_ms": 1646284025026,
+ "drop_pct": 739,
+ "total_tx_pps": 244093,
+ "tx_pps": 245542,
+ "tx_pkts": 2440935,
+ "drop_percentage": 0.030275283856391097
+ },
+ {
+ "rx_pps": 239696.0,
+ "rx_pkts": 2382462,
+ "time_ms": 1646284037551,
+ "drop_pct": 0,
+ "total_tx_pps": 238246,
+ "tx_pps": 239696,
+ "tx_pkts": 2382462,
+ "ndr_pps": 119848,
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "f51a51cc7fba4903b86a862ccaa87b3f"
+ },
+ "synthesis": {
+ "avg_delay_usec": 422.00110809742193,
+ "total_tx_rate": 238246
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "1280"
+ ],
+ "rate": "ndr",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 05:12:10",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "80d26043cfdb45c3ae62d6de43f557e6",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1280"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_128-rate_ndr-1.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1280"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_128-rate_ndr-1.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1280": {
+ "ndr": {
+ "load_percent_per_direction": 4.39453125,
+ "timestamp_sec": 1646284470.8886955,
+ "stats": {
+ "total_tx_rate": 209995,
+ "overall": {
+ "rx_pkts": 2099959,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 7375,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2099959,
+ "avg_delay_usec": 417.999049981452,
+ "min_delay_usec": 30,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1049927,
+ "min_delay_usec": 30,
+ "drop_pct": 0,
+ "max_delay_usec": 3319,
+ "tx_pkts": 1050032,
+ "avg_delay_usec": 437,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1050032,
+ "min_delay_usec": 40,
+ "drop_pct": 0,
+ "max_delay_usec": 7375,
+ "tx_pkts": 1049927,
+ "avg_delay_usec": 399,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 2183948000.0,
+ "theoretical_tx_rate_pps": 4807692.307692308
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 8.7890625,
+ "duration_sec": 10.0,
+ "l2frame_size": "1280",
+ "rate_pps": 211274,
+ "rate_bps": 2197265624.0,
+ "time_taken_sec": 137.58449530601501
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 445313.368302234,
+ "rx_pkts": 4370570,
+ "time_ms": 1646284345792,
+ "drop_pct": 42814976,
+ "total_tx_pps": 4718554,
+ "tx_pps": 4807692,
+ "tx_pkts": 47185546,
+ "drop_percentage": 90.73748134651234
+ },
+ {
+ "rx_pps": 124940.5018865484,
+ "rx_pkts": 1242346,
+ "time_ms": 1646284358300,
+ "drop_pct": 22660299,
+ "total_tx_pps": 2390264,
+ "tx_pps": 2403846,
+ "tx_pkts": 23902645,
+ "drop_percentage": 94.80247478887797
+ },
+ {
+ "rx_pps": 191703.051128334,
+ "rx_pkts": 1905433,
+ "time_ms": 1646284370806,
+ "drop_pct": 10041074,
+ "total_tx_pps": 1194650,
+ "tx_pps": 1201922,
+ "tx_pkts": 11946507,
+ "drop_percentage": 84.05029185518411
+ },
+ {
+ "rx_pps": 456071.17274298525,
+ "rx_pkts": 4533121,
+ "time_ms": 1646284383305,
+ "drop_pct": 1440123,
+ "total_tx_pps": 597324,
+ "tx_pps": 600960,
+ "tx_pkts": 5973244,
+ "drop_percentage": 24.109562576047455
+ },
+ {
+ "rx_pps": 298776.8979556851,
+ "rx_pkts": 2969696,
+ "time_ms": 1646284395827,
+ "drop_pct": 16928,
+ "total_tx_pps": 298662,
+ "tx_pps": 300480,
+ "tx_pkts": 2986624,
+ "drop_percentage": 0.566793811340162
+ },
+ {
+ "rx_pps": 150240.0,
+ "rx_pkts": 1493238,
+ "time_ms": 1646284408345,
+ "drop_pct": 0,
+ "total_tx_pps": 149323,
+ "tx_pps": 150240,
+ "tx_pkts": 1493238,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 225283.22787322282,
+ "rx_pkts": 2238978,
+ "time_ms": 1646284420849,
+ "drop_pct": 763,
+ "total_tx_pps": 223974,
+ "tx_pps": 225360,
+ "tx_pkts": 2239741,
+ "drop_percentage": 0.034066438932001515
+ },
+ {
+ "rx_pps": 187800.0,
+ "rx_pkts": 1866452,
+ "time_ms": 1646284433379,
+ "drop_pct": 0,
+ "total_tx_pps": 186645,
+ "tx_pps": 187800,
+ "tx_pkts": 1866452,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 206580.0,
+ "rx_pkts": 2053097,
+ "time_ms": 1646284445878,
+ "drop_pct": 0,
+ "total_tx_pps": 205309,
+ "tx_pps": 206580,
+ "tx_pkts": 2053097,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 215836.3783602464,
+ "rx_pkts": 2145092,
+ "time_ms": 1646284458378,
+ "drop_pct": 1328,
+ "total_tx_pps": 214642,
+ "tx_pps": 215970,
+ "tx_pkts": 2146420,
+ "drop_percentage": 0.06187046337622646
+ },
+ {
+ "rx_pps": 211274.0,
+ "rx_pkts": 2099959,
+ "time_ms": 1646284470887,
+ "drop_pct": 0,
+ "total_tx_pps": 209995,
+ "tx_pps": 211274,
+ "tx_pkts": 2099959,
+ "ndr_pps": 105637,
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "80d26043cfdb45c3ae62d6de43f557e6"
+ },
+ "synthesis": {
+ "avg_delay_usec": 417.999049981452,
+ "total_tx_rate": 209995
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "1518"
+ ],
+ "rate": "ndr",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 05:16:59",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "fab39ed6c612445784e1e24574be97e2",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1518"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_128-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1518"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_128-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1518": {
+ "ndr": {
+ "load_percent_per_direction": 6.25,
+ "timestamp_sec": 1646284759.8324285,
+ "stats": {
+ "total_tx_rate": 252445,
+ "overall": {
+ "rx_pkts": 2524456,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 13375,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2524456,
+ "avg_delay_usec": 557.5041177188274,
+ "min_delay_usec": 43,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1262165,
+ "min_delay_usec": 43,
+ "drop_pct": 0,
+ "max_delay_usec": 657,
+ "tx_pkts": 1262291,
+ "avg_delay_usec": 475,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1262291,
+ "min_delay_usec": 79,
+ "drop_pct": 0,
+ "max_delay_usec": 13375,
+ "tx_pkts": 1262165,
+ "avg_delay_usec": 640,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 3106083280.0,
+ "theoretical_tx_rate_pps": 4063719.1157347206
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 12.5,
+ "duration_sec": 10.0,
+ "l2frame_size": "1518",
+ "rate_pps": 253982,
+ "rate_bps": 3125000000.0,
+ "time_taken_sec": 137.6273422241211
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 348467.55522107193,
+ "rx_pkts": 3427071,
+ "time_ms": 1646284634724,
+ "drop_pct": 36538343,
+ "total_tx_pps": 3996541,
+ "tx_pps": 4063718,
+ "tx_pkts": 39965414,
+ "drop_percentage": 91.42490804674262
+ },
+ {
+ "rx_pps": 194182.29947632473,
+ "rx_pkts": 1929881,
+ "time_ms": 1646284647240,
+ "drop_pct": 18263742,
+ "total_tx_pps": 2019362,
+ "tx_pps": 2031858,
+ "tx_pkts": 20193623,
+ "drop_percentage": 90.44311662151958
+ },
+ {
+ "rx_pps": 179396.25923534992,
+ "rx_pkts": 1782930,
+ "time_ms": 1646284659752,
+ "drop_pct": 8313872,
+ "total_tx_pps": 1009680,
+ "tx_pps": 1015928,
+ "tx_pkts": 10096802,
+ "drop_percentage": 82.3416364904452
+ },
+ {
+ "rx_pps": 444172.416750406,
+ "rx_pkts": 4414410,
+ "time_ms": 1646284672259,
+ "drop_pct": 633993,
+ "total_tx_pps": 504840,
+ "tx_pps": 507964,
+ "tx_pkts": 5048403,
+ "drop_percentage": 12.5582882349131
+ },
+ {
+ "rx_pps": 253982.0,
+ "rx_pkts": 2524456,
+ "time_ms": 1646284684759,
+ "drop_pct": 0,
+ "total_tx_pps": 252445,
+ "tx_pps": 253982,
+ "tx_pkts": 2524456,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 380480.22499434196,
+ "rx_pkts": 3781785,
+ "time_ms": 1646284697283,
+ "drop_pct": 4888,
+ "total_tx_pps": 378667,
+ "tx_pps": 380972,
+ "tx_pkts": 3786673,
+ "drop_percentage": 0.12908429114423137
+ },
+ {
+ "rx_pps": 316051.2110285178,
+ "rx_pkts": 3141708,
+ "time_ms": 1646284709792,
+ "drop_pct": 14183,
+ "total_tx_pps": 315589,
+ "tx_pps": 317478,
+ "tx_pkts": 3155891,
+ "drop_percentage": 0.44941349368530153
+ },
+ {
+ "rx_pps": 285668.0250878956,
+ "rx_pkts": 2839399,
+ "time_ms": 1646284722300,
+ "drop_pct": 616,
+ "total_tx_pps": 284001,
+ "tx_pps": 285730,
+ "tx_pkts": 2840015,
+ "drop_percentage": 0.02169002628507244
+ },
+ {
+ "rx_pps": 269807.1017426643,
+ "rx_pkts": 2681614,
+ "time_ms": 1646284734800,
+ "drop_pct": 486,
+ "total_tx_pps": 268210,
+ "tx_pps": 269856,
+ "tx_pkts": 2682100,
+ "drop_percentage": 0.018120129749077216
+ },
+ {
+ "rx_pps": 261898.78374930617,
+ "rx_pkts": 2603144,
+ "time_ms": 1646284747309,
+ "drop_pct": 191,
+ "total_tx_pps": 260333,
+ "tx_pps": 261918,
+ "tx_pkts": 2603335,
+ "drop_percentage": 0.007336743062264364
+ },
+ {
+ "rx_pps": 257926.4552171562,
+ "rx_pkts": 2563404,
+ "time_ms": 1646284759831,
+ "drop_pct": 234,
+ "total_tx_pps": 256363,
+ "tx_pps": 257950,
+ "tx_pkts": 2563638,
+ "ndr_pps": 126991,
+ "drop_percentage": 0.009127653748306118
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "fab39ed6c612445784e1e24574be97e2"
+ },
+ "synthesis": {
+ "avg_delay_usec": 557.5041177188274,
+ "total_tx_rate": 252445
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "IMIX"
+ ],
+ "rate": "ndr",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 05:24:12",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "ceb21980b7a54cfca27c2be13acbe3fd",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "IMIX"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_128-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "IMIX"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_128-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "IMIX": {
+ "ndr": {
+ "load_percent_per_direction": 1.171875,
+ "timestamp_sec": 1646285193.3781986,
+ "stats": {
+ "total_tx_rate": 190656,
+ "overall": {
+ "rx_pkts": 1906560,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 3445,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 1906560,
+ "avg_delay_usec": 366.4996223564955,
+ "min_delay_usec": 49,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 953232,
+ "min_delay_usec": 54,
+ "drop_pct": 0,
+ "max_delay_usec": 3445,
+ "tx_pkts": 953328,
+ "avg_delay_usec": 374,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 953328,
+ "min_delay_usec": 49,
+ "drop_pct": 0,
+ "max_delay_usec": 3400,
+ "tx_pkts": 953232,
+ "avg_delay_usec": 359,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 582390528.0,
+ "theoretical_tx_rate_pps": 16368398.079441292
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 2.34375,
+ "duration_sec": 10.0,
+ "l2frame_size": "IMIX",
+ "rate_pps": 191816,
+ "rate_bps": 585937500.0,
+ "time_taken_sec": 137.84817028045654
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 527518.6982376295,
+ "rx_pkts": 4594899,
+ "time_ms": 1646285068098,
+ "drop_pct": 137980399,
+ "total_tx_pps": 14257529,
+ "tx_pps": 16368398,
+ "tx_pkts": 142575298,
+ "warning": "WARNING: There is a significant difference between requested TX rate (16368398) and actual TX rate (14257529). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 96.77721241725898
+ },
+ {
+ "rx_pps": 649584.5882534897,
+ "rx_pkts": 6455897,
+ "time_ms": 1646285080678,
+ "drop_pct": 74882762,
+ "total_tx_pps": 8133865,
+ "tx_pps": 8184198,
+ "tx_pkts": 81338659,
+ "drop_percentage": 92.06294143600277
+ },
+ {
+ "rx_pps": 486023.50862599886,
+ "rx_pkts": 4830345,
+ "time_ms": 1646285093199,
+ "drop_pct": 35838974,
+ "total_tx_pps": 4066931,
+ "tx_pps": 4092098,
+ "tx_pkts": 40669319,
+ "drop_percentage": 88.12287710054845
+ },
+ {
+ "rx_pps": 487117.8462164386,
+ "rx_pkts": 4841709,
+ "time_ms": 1646285105721,
+ "drop_pct": 15494990,
+ "total_tx_pps": 2033669,
+ "tx_pps": 2046048,
+ "tx_pkts": 20336699,
+ "drop_percentage": 76.19225716031889
+ },
+ {
+ "rx_pps": 365059.10021687107,
+ "rx_pkts": 3628142,
+ "time_ms": 1646285118236,
+ "drop_pct": 6539188,
+ "total_tx_pps": 1016733,
+ "tx_pps": 1023024,
+ "tx_pkts": 10167330,
+ "drop_percentage": 64.31568563231448
+ },
+ {
+ "rx_pps": 470718.585949703,
+ "rx_pkts": 4678475,
+ "time_ms": 1646285130816,
+ "drop_pct": 405446,
+ "total_tx_pps": 508392,
+ "tx_pps": 511512,
+ "tx_pkts": 5083921,
+ "drop_percentage": 7.975064915446168
+ },
+ {
+ "rx_pps": 255742.51844840997,
+ "rx_pkts": 2541955,
+ "time_ms": 1646285143320,
+ "drop_pct": 134,
+ "total_tx_pps": 254208,
+ "tx_pps": 255756,
+ "tx_pkts": 2542089,
+ "drop_percentage": 0.0052712552550284435
+ },
+ {
+ "rx_pps": 127878.0,
+ "rx_pkts": 1271047,
+ "time_ms": 1646285155820,
+ "drop_pct": 0,
+ "total_tx_pps": 127104,
+ "tx_pps": 127878,
+ "tx_pkts": 1271047,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 191816.0,
+ "rx_pkts": 1906560,
+ "time_ms": 1646285168332,
+ "drop_pct": 0,
+ "total_tx_pps": 190656,
+ "tx_pps": 191816,
+ "tx_pkts": 1906560,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 223586.05076246973,
+ "rx_pkts": 2225246,
+ "time_ms": 1646285180872,
+ "drop_pct": 1990,
+ "total_tx_pps": 222723,
+ "tx_pps": 223786,
+ "tx_pkts": 2227236,
+ "drop_percentage": 0.08934841211259158
+ },
+ {
+ "rx_pps": 207747.38173291675,
+ "rx_pkts": 2064908,
+ "time_ms": 1646285193377,
+ "drop_pct": 523,
+ "total_tx_pps": 206543,
+ "tx_pps": 207800,
+ "tx_pkts": 2065431,
+ "ndr_pps": 95908,
+ "drop_percentage": 0.02532159147412816
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "ceb21980b7a54cfca27c2be13acbe3fd"
+ },
+ "synthesis": {
+ "avg_delay_usec": 366.4996223564955,
+ "total_tx_rate": 190656
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_128-rate_ndr-2.json",
+ "frame_sizes": [
+ "9000"
+ ],
+ "rate": "ndr",
+ "flow_count": "128",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 05:31:26",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "7d83b94d43e942238d6c50de662d6dcf",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "9000"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 128,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_128-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "9000"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_128-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "9000": {
+ "ndr": {
+ "load_percent_per_direction": 22.65625,
+ "timestamp_sec": 1646285626.5736058,
+ "stats": {
+ "total_tx_rate": 156036,
+ "overall": {
+ "rx_pkts": 1560365,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 5728,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 1560365,
+ "avg_delay_usec": 587.9997974832811,
+ "min_delay_usec": 58,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 780143,
+ "min_delay_usec": 58,
+ "drop_pct": 0,
+ "max_delay_usec": 1773,
+ "tx_pkts": 780222,
+ "avg_delay_usec": 592,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 780222,
+ "min_delay_usec": 59,
+ "drop_pct": 0,
+ "max_delay_usec": 5728,
+ "tx_pkts": 780143,
+ "avg_delay_usec": 584,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 11259557760.0,
+ "theoretical_tx_rate_pps": 692904.6563192905
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 45.3125,
+ "duration_sec": 10.0,
+ "l2frame_size": "9000",
+ "rate_pps": 156986,
+ "rate_bps": 11328125000.0,
+ "time_taken_sec": 137.71946001052856
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 81808.84100646983,
+ "rx_pkts": 816086,
+ "time_ms": 1646285501423,
+ "drop_pct": 6095994,
+ "total_tx_pps": 691208,
+ "tx_pps": 692904,
+ "tx_pkts": 6912080,
+ "drop_percentage": 88.19333688267497
+ },
+ {
+ "rx_pps": 174051.7277974219,
+ "rx_pkts": 1729814,
+ "time_ms": 1646285513938,
+ "drop_pct": 1713401,
+ "total_tx_pps": 344321,
+ "tx_pps": 346452,
+ "tx_pkts": 3443215,
+ "drop_percentage": 49.761661702798115
+ },
+ {
+ "rx_pps": 173173.57764485295,
+ "rx_pkts": 1721087,
+ "time_ms": 1646285526441,
+ "drop_pct": 521,
+ "total_tx_pps": 172160,
+ "tx_pps": 173226,
+ "tx_pkts": 1721608,
+ "drop_percentage": 0.030262405843839015
+ },
+ {
+ "rx_pps": 86612.0,
+ "rx_pkts": 860882,
+ "time_ms": 1646285539000,
+ "drop_pct": 0,
+ "total_tx_pps": 86088,
+ "tx_pps": 86612,
+ "tx_pkts": 860882,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 129918.0,
+ "rx_pkts": 1293789,
+ "time_ms": 1646285551538,
+ "drop_pct": 0,
+ "total_tx_pps": 129378,
+ "tx_pps": 129918,
+ "tx_pkts": 1293789,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 151572.0,
+ "rx_pkts": 1506400,
+ "time_ms": 1646285564049,
+ "drop_pct": 0,
+ "total_tx_pps": 150640,
+ "tx_pps": 151572,
+ "tx_pkts": 1506400,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 162238.83736784133,
+ "rx_pkts": 1612576,
+ "time_ms": 1646285576558,
+ "drop_pct": 1582,
+ "total_tx_pps": 161415,
+ "tx_pps": 162398,
+ "tx_pkts": 1614158,
+ "drop_percentage": 0.09800775388778546
+ },
+ {
+ "rx_pps": 156986.0,
+ "rx_pkts": 1560365,
+ "time_ms": 1646285589058,
+ "drop_pct": 0,
+ "total_tx_pps": 156036,
+ "tx_pps": 156986,
+ "tx_pkts": 1560365,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 159630.32079097626,
+ "rx_pkts": 1586489,
+ "time_ms": 1646285601557,
+ "drop_pct": 613,
+ "total_tx_pps": 158710,
+ "tx_pps": 159692,
+ "tx_pkts": 1587102,
+ "drop_percentage": 0.03862385656372432
+ },
+ {
+ "rx_pps": 155353.5470980394,
+ "rx_pkts": 1543982,
+ "time_ms": 1646285614056,
+ "drop_pct": 29661,
+ "total_tx_pps": 157364,
+ "tx_pps": 158338,
+ "tx_pkts": 1573643,
+ "drop_percentage": 1.8848620684615252
+ },
+ {
+ "rx_pps": 157653.74926958897,
+ "rx_pkts": 1566844,
+ "time_ms": 1646285626572,
+ "drop_pct": 82,
+ "total_tx_pps": 156692,
+ "tx_pps": 157662,
+ "tx_pkts": 1566926,
+ "ndr_pps": 78493,
+ "drop_percentage": 0.005233176295498319
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 128,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "7d83b94d43e942238d6c50de662d6dcf"
+ },
+ "synthesis": {
+ "avg_delay_usec": 587.9997974832811,
+ "total_tx_rate": 156036
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "64"
+ ],
+ "rate": "ndr",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 05:38:39",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "7bffd833c7684dd6ad3c6fb4392fd892",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "64"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_10k-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "64"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_10k-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "64": {
+ "ndr": {
+ "load_percent_per_direction": 0.390625,
+ "timestamp_sec": 1646286062.320283,
+ "stats": {
+ "total_tx_rate": 289377,
+ "overall": {
+ "rx_pkts": 2893779,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 4256,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2893779,
+ "avg_delay_usec": 430.4998222048055,
+ "min_delay_usec": 52,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1446816,
+ "min_delay_usec": 52,
+ "drop_pct": 0,
+ "max_delay_usec": 4256,
+ "tx_pkts": 1446963,
+ "avg_delay_usec": 434,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1446963,
+ "min_delay_usec": 57,
+ "drop_pct": 0,
+ "max_delay_usec": 948,
+ "tx_pkts": 1446816,
+ "avg_delay_usec": 427,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 194461344.0,
+ "theoretical_tx_rate_pps": 74404761.90476191
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 0.78125,
+ "duration_sec": 10.0,
+ "l2frame_size": "64",
+ "rate_pps": 290642,
+ "rate_bps": 195312500.0,
+ "time_taken_sec": 137.67585062980652
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 1060675.9533262525,
+ "rx_pkts": 3801256,
+ "time_ms": 1646285937162,
+ "drop_pct": 262850910,
+ "total_tx_pps": 26665216,
+ "tx_pps": 74404760,
+ "tx_pkts": 266652166,
+ "warning": "WARNING: There is a significant difference between requested TX rate (74404760) and actual TX rate (26665216). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 98.57445148223547
+ },
+ {
+ "rx_pps": 549084.4052686733,
+ "rx_pkts": 3959911,
+ "time_ms": 1646285949709,
+ "drop_pct": 264337845,
+ "total_tx_pps": 26829775,
+ "tx_pps": 37202380,
+ "tx_pkts": 268297756,
+ "warning": "WARNING: There is a significant difference between requested TX rate (37202380) and actual TX rate (26829775). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 98.52406108085377
+ },
+ {
+ "rx_pps": 369990.33655168186,
+ "rx_pkts": 3683809,
+ "time_ms": 1646285962227,
+ "drop_pct": 181518950,
+ "total_tx_pps": 18520275,
+ "tx_pps": 18601190,
+ "tx_pkts": 185202759,
+ "drop_percentage": 98.01093189977802
+ },
+ {
+ "rx_pps": 384612.35211511684,
+ "rx_pkts": 3822471,
+ "time_ms": 1646285974730,
+ "drop_pct": 88611510,
+ "total_tx_pps": 9243398,
+ "tx_pps": 9300594,
+ "tx_pkts": 92433981,
+ "drop_percentage": 95.86464743956013
+ },
+ {
+ "rx_pps": 168933.23502156153,
+ "rx_pkts": 1678943,
+ "time_ms": 1646285987251,
+ "drop_pct": 44538025,
+ "total_tx_pps": 4621696,
+ "tx_pps": 4650296,
+ "tx_pkts": 46216968,
+ "drop_percentage": 96.36725844932104
+ },
+ {
+ "rx_pps": 159074.18157372237,
+ "rx_pkts": 1580959,
+ "time_ms": 1646285999771,
+ "drop_pct": 21527528,
+ "total_tx_pps": 2310848,
+ "tx_pps": 2325148,
+ "tx_pkts": 23108487,
+ "drop_percentage": 93.15853521695297
+ },
+ {
+ "rx_pps": 171386.32143951976,
+ "rx_pkts": 1703323,
+ "time_ms": 1646286012283,
+ "drop_pct": 9850919,
+ "total_tx_pps": 1155424,
+ "tx_pps": 1162574,
+ "tx_pkts": 11554242,
+ "drop_percentage": 85.25802904249366
+ },
+ {
+ "rx_pps": 512810.1541521316,
+ "rx_pkts": 5097079,
+ "time_ms": 1646286024781,
+ "drop_pct": 680616,
+ "total_tx_pps": 577769,
+ "tx_pps": 581286,
+ "tx_pkts": 5777695,
+ "drop_percentage": 11.780061079721238
+ },
+ {
+ "rx_pps": 290642.0,
+ "rx_pkts": 2893779,
+ "time_ms": 1646286037314,
+ "drop_pct": 0,
+ "total_tx_pps": 289377,
+ "tx_pps": 290642,
+ "tx_pkts": 2893779,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 417277.35359887895,
+ "rx_pkts": 4147530,
+ "time_ms": 1646286049813,
+ "drop_pct": 185736,
+ "total_tx_pps": 433326,
+ "tx_pps": 435964,
+ "tx_pkts": 4333266,
+ "drop_percentage": 4.28628198684318
+ },
+ {
+ "rx_pps": 363141.5007727034,
+ "rx_pkts": 3609085,
+ "time_ms": 1646286062319,
+ "drop_pct": 1615,
+ "total_tx_pps": 361070,
+ "tx_pps": 363304,
+ "tx_pkts": 3610700,
+ "ndr_pps": 145321,
+ "drop_percentage": 0.044728169053092195
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "7bffd833c7684dd6ad3c6fb4392fd892"
+ },
+ "synthesis": {
+ "avg_delay_usec": 430.4998222048055,
+ "total_tx_rate": 289377
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "128"
+ ],
+ "rate": "ndr",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 05:45:59",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "fcb4e242cc2c4c36873e6f0361cb9a5f",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "128"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_10k-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "128"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_10k-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "128": {
+ "ndr": {
+ "load_percent_per_direction": 0.78125,
+ "timestamp_sec": 1646286501.6585698,
+ "stats": {
+ "total_tx_rate": 328252,
+ "overall": {
+ "rx_pkts": 3282523,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 5743,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 3282523,
+ "avg_delay_usec": 504.00045239591617,
+ "min_delay_usec": 59,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1641179,
+ "min_delay_usec": 60,
+ "drop_pct": 0,
+ "max_delay_usec": 5743,
+ "tx_pkts": 1641344,
+ "avg_delay_usec": 495,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1641344,
+ "min_delay_usec": 59,
+ "drop_pct": 0,
+ "max_delay_usec": 5416,
+ "tx_pkts": 1641179,
+ "avg_delay_usec": 513,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 388650368.0,
+ "theoretical_tx_rate_pps": 42229729.72972973
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 1.5625,
+ "duration_sec": 10.0,
+ "l2frame_size": "128",
+ "rate_pps": 329918,
+ "rate_bps": 390625000.0,
+ "time_taken_sec": 137.7171869277954
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 669022.1950312835,
+ "rx_pkts": 4088190,
+ "time_ms": 1646286376431,
+ "drop_pct": 253964761,
+ "total_tx_pps": 25805295,
+ "tx_pps": 42229728,
+ "tx_pkts": 258052951,
+ "warning": "WARNING: There is a significant difference between requested TX rate (42229728) and actual TX rate (25805295). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 98.41575537727526
+ },
+ {
+ "rx_pps": 399023.3302773898,
+ "rx_pkts": 3965614,
+ "time_ms": 1646286388930,
+ "drop_pct": 205880262,
+ "total_tx_pps": 20984587,
+ "tx_pps": 21114864,
+ "tx_pkts": 209845876,
+ "drop_percentage": 98.11022543040112
+ },
+ {
+ "rx_pps": 447142.9301377911,
+ "rx_pkts": 4443482,
+ "time_ms": 1646286401505,
+ "drop_pct": 100470978,
+ "total_tx_pps": 10491446,
+ "tx_pps": 10557432,
+ "tx_pkts": 104914460,
+ "drop_percentage": 95.7646619922554
+ },
+ {
+ "rx_pps": 346951.3718415911,
+ "rx_pkts": 3448177,
+ "time_ms": 1646286414004,
+ "drop_pct": 49014354,
+ "total_tx_pps": 5246253,
+ "tx_pps": 5278716,
+ "tx_pkts": 52462531,
+ "drop_percentage": 93.42735294261728
+ },
+ {
+ "rx_pps": 215866.7599879869,
+ "rx_pkts": 2145392,
+ "time_ms": 1646286426523,
+ "drop_pct": 24085870,
+ "total_tx_pps": 2623126,
+ "tx_pps": 2639358,
+ "tx_pkts": 26231262,
+ "drop_percentage": 91.82123986257314
+ },
+ {
+ "rx_pps": 149781.0398090949,
+ "rx_pkts": 1488599,
+ "time_ms": 1646286439020,
+ "drop_pct": 11627022,
+ "total_tx_pps": 1311562,
+ "tx_pps": 1319678,
+ "tx_pkts": 13115621,
+ "drop_percentage": 88.65018286210008
+ },
+ {
+ "rx_pps": 498086.9811686903,
+ "rx_pkts": 4950239,
+ "time_ms": 1646286451572,
+ "drop_pct": 1607563,
+ "total_tx_pps": 655780,
+ "tx_pps": 659838,
+ "tx_pkts": 6557802,
+ "drop_percentage": 24.51374713661681
+ },
+ {
+ "rx_pps": 329918.0,
+ "rx_pkts": 3282523,
+ "time_ms": 1646286464132,
+ "drop_pct": 0,
+ "total_tx_pps": 328252,
+ "tx_pps": 329918,
+ "tx_pkts": 3282523,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 478526.7821332745,
+ "rx_pkts": 4756319,
+ "time_ms": 1646286476632,
+ "drop_pct": 162523,
+ "total_tx_pps": 491884,
+ "tx_pps": 494878,
+ "tx_pkts": 4918842,
+ "drop_percentage": 3.3040906782531336
+ },
+ {
+ "rx_pps": 411878.7378240714,
+ "rx_pkts": 4093705,
+ "time_ms": 1646286489150,
+ "drop_pct": 5161,
+ "total_tx_pps": 409886,
+ "tx_pps": 412398,
+ "tx_pkts": 4098866,
+ "drop_percentage": 0.12591287443893018
+ },
+ {
+ "rx_pps": 371054.5743320845,
+ "rx_pkts": 3688099,
+ "time_ms": 1646286501657,
+ "drop_pct": 1028,
+ "total_tx_pps": 368912,
+ "tx_pps": 371158,
+ "tx_pkts": 3689127,
+ "ndr_pps": 164959,
+ "drop_percentage": 0.027865671200801707
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "fcb4e242cc2c4c36873e6f0361cb9a5f"
+ },
+ "synthesis": {
+ "avg_delay_usec": 504.00045239591617,
+ "total_tx_rate": 328252
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "256"
+ ],
+ "rate": "ndr",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 05:55:45",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "e09f10fc7dc54e4a9b8a1c58b88028df",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "256"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_10k-rate_ndr-1.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "256"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_10k-rate_ndr-1.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "256": {
+ "ndr": {
+ "load_percent_per_direction": 1.3671875,
+ "timestamp_sec": 1646287087.8915067,
+ "stats": {
+ "total_tx_rate": 307709,
+ "overall": {
+ "rx_pkts": 3077097,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 3367,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 3077097,
+ "avg_delay_usec": 432.50000146241734,
+ "min_delay_usec": 38,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1538548,
+ "min_delay_usec": 38,
+ "drop_pct": 0,
+ "max_delay_usec": 3281,
+ "tx_pkts": 1538549,
+ "avg_delay_usec": 428,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1538549,
+ "min_delay_usec": 55,
+ "drop_pct": 0,
+ "max_delay_usec": 3367,
+ "tx_pkts": 1538548,
+ "avg_delay_usec": 437,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 679421472.0,
+ "theoretical_tx_rate_pps": 22644927.536231883
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 2.734375,
+ "duration_sec": 10.0,
+ "l2frame_size": "256",
+ "rate_pps": 309598,
+ "rate_bps": 683593750.0,
+ "time_taken_sec": 137.742746591568
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 255672.565299537,
+ "rx_pkts": 2319871,
+ "time_ms": 1646286962658,
+ "drop_pct": 203151166,
+ "total_tx_pps": 20547103,
+ "tx_pps": 22644926,
+ "tx_pkts": 205471037,
+ "drop_percentage": 98.87094987504248
+ },
+ {
+ "rx_pps": 335448.3699684173,
+ "rx_pkts": 3333855,
+ "time_ms": 1646286975189,
+ "drop_pct": 109194480,
+ "total_tx_pps": 11252833,
+ "tx_pps": 11322462,
+ "tx_pkts": 112528335,
+ "drop_percentage": 97.03731953378676
+ },
+ {
+ "rx_pps": 130166.49486928145,
+ "rx_pkts": 1293660,
+ "time_ms": 1646286987760,
+ "drop_pct": 54970487,
+ "total_tx_pps": 5626414,
+ "tx_pps": 5661230,
+ "tx_pkts": 56264147,
+ "drop_percentage": 97.70073826943471
+ },
+ {
+ "rx_pps": 188671.05892669645,
+ "rx_pkts": 1875296,
+ "time_ms": 1646287000320,
+ "drop_pct": 26259592,
+ "total_tx_pps": 2813488,
+ "tx_pps": 2830614,
+ "tx_pkts": 28134888,
+ "drop_percentage": 93.33462425725668
+ },
+ {
+ "rx_pps": 208503.260507737,
+ "rx_pkts": 2075129,
+ "time_ms": 1646287012832,
+ "drop_pct": 12010706,
+ "total_tx_pps": 1408583,
+ "tx_pps": 1415306,
+ "tx_pkts": 14085835,
+ "drop_percentage": 85.2679731091554
+ },
+ {
+ "rx_pps": 401016.7055138048,
+ "rx_pkts": 3985506,
+ "time_ms": 1646287025334,
+ "drop_pct": 3047496,
+ "total_tx_pps": 703300,
+ "tx_pps": 707652,
+ "tx_pkts": 7033002,
+ "drop_percentage": 43.331368311853176
+ },
+ {
+ "rx_pps": 353769.4579762555,
+ "rx_pkts": 3516295,
+ "time_ms": 1646287037843,
+ "drop_pct": 562,
+ "total_tx_pps": 351685,
+ "tx_pps": 353826,
+ "tx_pkts": 3516857,
+ "drop_percentage": 0.01598017775530822
+ },
+ {
+ "rx_pps": 176912.0,
+ "rx_pkts": 1758241,
+ "time_ms": 1646287050350,
+ "drop_pct": 0,
+ "total_tx_pps": 175824,
+ "tx_pps": 176912,
+ "tx_pkts": 1758241,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 265370.0,
+ "rx_pkts": 2637382,
+ "time_ms": 1646287062871,
+ "drop_pct": 0,
+ "total_tx_pps": 263738,
+ "tx_pps": 265370,
+ "tx_pkts": 2637382,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 309598.0,
+ "rx_pkts": 3077097,
+ "time_ms": 1646287075371,
+ "drop_pct": 0,
+ "total_tx_pps": 307709,
+ "tx_pps": 309598,
+ "tx_pkts": 3077097,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 331394.0121815451,
+ "rx_pkts": 3300519,
+ "time_ms": 1646287087890,
+ "drop_pct": 3167,
+ "total_tx_pps": 330368,
+ "tx_pps": 331712,
+ "tx_pkts": 3303686,
+ "ndr_pps": 154799,
+ "drop_percentage": 0.09586262132660307
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "e09f10fc7dc54e4a9b8a1c58b88028df"
+ },
+ "synthesis": {
+ "avg_delay_usec": 432.50000146241734,
+ "total_tx_rate": 307709
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "512"
+ ],
+ "rate": "ndr",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 06:00:38",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "32f6745439f040fa96de86e0a3ad0abf",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "512"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_10k-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "512"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_10k-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "512": {
+ "ndr": {
+ "load_percent_per_direction": 2.34375,
+ "timestamp_sec": 1646287380.6742508,
+ "stats": {
+ "total_tx_rate": 273652,
+ "overall": {
+ "rx_pkts": 2736528,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 2723,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2736528,
+ "avg_delay_usec": 410.4993787748563,
+ "min_delay_usec": 41,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1368196,
+ "min_delay_usec": 45,
+ "drop_pct": 0,
+ "max_delay_usec": 2723,
+ "tx_pkts": 1368332,
+ "avg_delay_usec": 423,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1368332,
+ "min_delay_usec": 41,
+ "drop_pct": 0,
+ "max_delay_usec": 2679,
+ "tx_pkts": 1368196,
+ "avg_delay_usec": 398,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 1164662912.0,
+ "theoretical_tx_rate_pps": 11748120.30075188
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 4.6875,
+ "duration_sec": 10.0,
+ "l2frame_size": "512",
+ "rate_pps": 275346,
+ "rate_bps": 1171875000.0,
+ "time_taken_sec": 137.6094572544098
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 422261.6287427662,
+ "rx_pkts": 4008862,
+ "time_ms": 1646287255615,
+ "drop_pct": 107525288,
+ "total_tx_pps": 11153415,
+ "tx_pps": 11748120,
+ "tx_pkts": 111534150,
+ "drop_percentage": 96.40570892412772
+ },
+ {
+ "rx_pps": 235563.01252603848,
+ "rx_pkts": 2345619,
+ "time_ms": 1646287268137,
+ "drop_pct": 56145341,
+ "total_tx_pps": 5849096,
+ "tx_pps": 5874060,
+ "tx_pkts": 58490960,
+ "drop_percentage": 95.98977517209497
+ },
+ {
+ "rx_pps": 214956.55098821394,
+ "rx_pkts": 2136346,
+ "time_ms": 1646287280641,
+ "drop_pct": 27053331,
+ "total_tx_pps": 2918967,
+ "tx_pps": 2937030,
+ "tx_pkts": 29189677,
+ "drop_percentage": 92.68115916459097
+ },
+ {
+ "rx_pps": 98852.65115506016,
+ "rx_pkts": 982546,
+ "time_ms": 1646287293143,
+ "drop_pct": 13613750,
+ "total_tx_pps": 1459629,
+ "tx_pps": 1468514,
+ "tx_pkts": 14596296,
+ "drop_percentage": 93.26852511075413
+ },
+ {
+ "rx_pps": 374357.7867755638,
+ "rx_pkts": 3720931,
+ "time_ms": 1646287305644,
+ "drop_pct": 3577210,
+ "total_tx_pps": 729814,
+ "tx_pps": 734256,
+ "tx_pkts": 7298141,
+ "drop_percentage": 49.01535884275187
+ },
+ {
+ "rx_pps": 366719.5290001208,
+ "rx_pkts": 3645011,
+ "time_ms": 1646287318156,
+ "drop_pct": 4060,
+ "total_tx_pps": 364907,
+ "tx_pps": 367128,
+ "tx_pkts": 3649071,
+ "drop_percentage": 0.11126119497263824
+ },
+ {
+ "rx_pps": 183564.0,
+ "rx_pkts": 1824537,
+ "time_ms": 1646287330655,
+ "drop_pct": 0,
+ "total_tx_pps": 182453,
+ "tx_pps": 183564,
+ "tx_pkts": 1824537,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 275346.0,
+ "rx_pkts": 2736528,
+ "time_ms": 1646287343177,
+ "drop_pct": 0,
+ "total_tx_pps": 273652,
+ "tx_pps": 275346,
+ "tx_pkts": 2736528,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 321054.59355599707,
+ "rx_pkts": 3190964,
+ "time_ms": 1646287355673,
+ "drop_pct": 1803,
+ "total_tx_pps": 319276,
+ "tx_pps": 321236,
+ "tx_pkts": 3192767,
+ "drop_percentage": 0.056471392995480096
+ },
+ {
+ "rx_pps": 298206.68394270656,
+ "rx_pkts": 2964029,
+ "time_ms": 1646287368173,
+ "drop_pct": 848,
+ "total_tx_pps": 296487,
+ "tx_pps": 298292,
+ "tx_pkts": 2964877,
+ "drop_percentage": 0.028601523773161584
+ },
+ {
+ "rx_pps": 286576.03641464544,
+ "rx_pkts": 2848426,
+ "time_ms": 1646287380673,
+ "drop_pct": 2405,
+ "total_tx_pps": 285083,
+ "tx_pps": 286818,
+ "tx_pkts": 2850831,
+ "ndr_pps": 137673,
+ "drop_percentage": 0.08436136691371744
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "32f6745439f040fa96de86e0a3ad0abf"
+ },
+ "synthesis": {
+ "avg_delay_usec": 410.4993787748563,
+ "total_tx_rate": 273652
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "768"
+ ],
+ "rate": "ndr",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 06:12:50",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "7df3eeb5c69345d0a0f89371dec4d8c6",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "768"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_10k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "768"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_10k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "768": {
+ "ndr": {
+ "load_percent_per_direction": 3.22265625,
+ "timestamp_sec": 1646288112.949391,
+ "stats": {
+ "total_tx_rate": 254057,
+ "overall": {
+ "rx_pkts": 2540579,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 6615,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2540579,
+ "avg_delay_usec": 476.00064985186447,
+ "min_delay_usec": 33,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1270226,
+ "min_delay_usec": 33,
+ "drop_pct": 0,
+ "max_delay_usec": 6615,
+ "tx_pkts": 1270353,
+ "avg_delay_usec": 463,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1270353,
+ "min_delay_usec": 36,
+ "drop_pct": 0,
+ "max_delay_usec": 4615,
+ "tx_pkts": 1270226,
+ "avg_delay_usec": 489,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 1601575328.0,
+ "theoretical_tx_rate_pps": 7931472.081218274
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 6.4453125,
+ "duration_sec": 10.0,
+ "l2frame_size": "768",
+ "rate_pps": 255604,
+ "rate_bps": 1611328124.0,
+ "time_taken_sec": 137.60951566696167
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 401443.3266594298,
+ "rx_pkts": 3873721,
+ "time_ms": 1646287987827,
+ "drop_pct": 72660892,
+ "total_tx_pps": 7653461,
+ "tx_pps": 7931472,
+ "tx_pkts": 76534613,
+ "drop_percentage": 94.9386024856492
+ },
+ {
+ "rx_pps": 270999.9900496978,
+ "rx_pkts": 2693334,
+ "time_ms": 1646288000350,
+ "drop_pct": 36720142,
+ "total_tx_pps": 3941347,
+ "tx_pps": 3965736,
+ "tx_pkts": 39413476,
+ "drop_percentage": 93.16646418093141
+ },
+ {
+ "rx_pps": 198550.00234079146,
+ "rx_pkts": 1973488,
+ "time_ms": 1646288012848,
+ "drop_pct": 17735231,
+ "total_tx_pps": 1970871,
+ "tx_pps": 1982868,
+ "tx_pkts": 19708719,
+ "drop_percentage": 89.98672617941328
+ },
+ {
+ "rx_pps": 199910.28390347675,
+ "rx_pkts": 1986809,
+ "time_ms": 1646288025358,
+ "drop_pct": 7866561,
+ "total_tx_pps": 985337,
+ "tx_pps": 991434,
+ "tx_pkts": 9853370,
+ "drop_percentage": 79.83624891788291
+ },
+ {
+ "rx_pps": 472617.2657889759,
+ "rx_pkts": 4697582,
+ "time_ms": 1646288037860,
+ "drop_pct": 229590,
+ "total_tx_pps": 492717,
+ "tx_pps": 495716,
+ "tx_pkts": 4927172,
+ "drop_percentage": 4.6596709024974166
+ },
+ {
+ "rx_pps": 247858.0,
+ "rx_pkts": 2463586,
+ "time_ms": 1646288050400,
+ "drop_pct": 0,
+ "total_tx_pps": 246358,
+ "tx_pps": 247858,
+ "tx_pkts": 2463586,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 369515.96694294043,
+ "rx_pkts": 3672805,
+ "time_ms": 1646288062900,
+ "drop_pct": 22563,
+ "total_tx_pps": 369536,
+ "tx_pps": 371786,
+ "tx_pkts": 3695368,
+ "drop_percentage": 0.6105751849342204
+ },
+ {
+ "rx_pps": 309577.99963821407,
+ "rx_pkts": 3076744,
+ "time_ms": 1646288075398,
+ "drop_pct": 2425,
+ "total_tx_pps": 307916,
+ "tx_pps": 309822,
+ "tx_pkts": 3079169,
+ "drop_percentage": 0.07875501474586162
+ },
+ {
+ "rx_pps": 278814.24160118186,
+ "rx_pkts": 2770997,
+ "time_ms": 1646288087918,
+ "drop_pct": 256,
+ "total_tx_pps": 277125,
+ "tx_pps": 278840,
+ "tx_pkts": 2771253,
+ "drop_percentage": 0.009237698615030819
+ },
+ {
+ "rx_pps": 263259.7617543409,
+ "rx_pkts": 2616539,
+ "time_ms": 1646288100438,
+ "drop_pct": 877,
+ "total_tx_pps": 261741,
+ "tx_pps": 263348,
+ "tx_pkts": 2617416,
+ "drop_percentage": 0.03350632837882859
+ },
+ {
+ "rx_pps": 255604.0,
+ "rx_pkts": 2540579,
+ "time_ms": 1646288112948,
+ "drop_pct": 0,
+ "total_tx_pps": 254057,
+ "tx_pps": 255604,
+ "tx_pkts": 2540579,
+ "ndr_pps": 127802,
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "7df3eeb5c69345d0a0f89371dec4d8c6"
+ },
+ "synthesis": {
+ "avg_delay_usec": 476.00064985186447,
+ "total_tx_rate": 254057
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "1024"
+ ],
+ "rate": "ndr",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 06:20:09",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "cd0872af22cc4e368a8a824b8f85ff54",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1024"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_10k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1024"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_10k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1024": {
+ "ndr": {
+ "load_percent_per_direction": 4.4921875,
+ "timestamp_sec": 1646288552.3423898,
+ "stats": {
+ "total_tx_rate": 267301,
+ "overall": {
+ "rx_pkts": 2673012,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 8541,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2673012,
+ "avg_delay_usec": 483.49946577119744,
+ "min_delay_usec": 33,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1336438,
+ "min_delay_usec": 38,
+ "drop_pct": 0,
+ "max_delay_usec": 8541,
+ "tx_pkts": 1336574,
+ "avg_delay_usec": 494,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1336574,
+ "min_delay_usec": 33,
+ "drop_pct": 0,
+ "max_delay_usec": 7095,
+ "tx_pkts": 1336438,
+ "avg_delay_usec": 473,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 2232497952.0,
+ "theoretical_tx_rate_pps": 5986590.038314176
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 8.984375,
+ "duration_sec": 10.0,
+ "l2frame_size": "1024",
+ "rate_pps": 268928,
+ "rate_bps": 2246093750.0,
+ "time_taken_sec": 137.60198616981506
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 288161.597988842,
+ "rx_pkts": 2804152,
+ "time_ms": 1646288427250,
+ "drop_pct": 55452425,
+ "total_tx_pps": 5825657,
+ "tx_pps": 5986590,
+ "tx_pkts": 58256577,
+ "drop_percentage": 95.1865486363883
+ },
+ {
+ "rx_pps": 213298.5964799784,
+ "rx_pkts": 2119868,
+ "time_ms": 1646288439760,
+ "drop_pct": 27628983,
+ "total_tx_pps": 2974885,
+ "tx_pps": 2993294,
+ "tx_pkts": 29748851,
+ "drop_percentage": 92.8741180625766
+ },
+ {
+ "rx_pps": 131366.48872957594,
+ "rx_pkts": 1305586,
+ "time_ms": 1646288452271,
+ "drop_pct": 13568832,
+ "total_tx_pps": 1487441,
+ "tx_pps": 1496646,
+ "tx_pkts": 14874418,
+ "drop_percentage": 91.22260783581582
+ },
+ {
+ "rx_pps": 290509.78790066997,
+ "rx_pkts": 2887523,
+ "time_ms": 1646288464771,
+ "drop_pct": 4550426,
+ "total_tx_pps": 743794,
+ "tx_pps": 748322,
+ "tx_pkts": 7437949,
+ "drop_percentage": 61.17850498840473
+ },
+ {
+ "rx_pps": 373382.29544448643,
+ "rx_pkts": 3711236,
+ "time_ms": 1646288477284,
+ "drop_pct": 7730,
+ "total_tx_pps": 371896,
+ "tx_pps": 374160,
+ "tx_pkts": 3718966,
+ "drop_percentage": 0.20785347325036044
+ },
+ {
+ "rx_pps": 187080.0,
+ "rx_pkts": 1863037,
+ "time_ms": 1646288489810,
+ "drop_pct": 0,
+ "total_tx_pps": 186303,
+ "tx_pps": 187080,
+ "tx_pkts": 1863037,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 280389.9082326065,
+ "rx_pkts": 2786939,
+ "time_ms": 1646288502310,
+ "drop_pct": 2287,
+ "total_tx_pps": 278922,
+ "tx_pps": 280620,
+ "tx_pkts": 2789226,
+ "drop_percentage": 0.0819940729076812
+ },
+ {
+ "rx_pps": 233850.0,
+ "rx_pkts": 2324119,
+ "time_ms": 1646288514811,
+ "drop_pct": 0,
+ "total_tx_pps": 232411,
+ "tx_pps": 233850,
+ "tx_pkts": 2324119,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 257236.0,
+ "rx_pkts": 2556543,
+ "time_ms": 1646288527323,
+ "drop_pct": 0,
+ "total_tx_pps": 255654,
+ "tx_pps": 257236,
+ "tx_pkts": 2556543,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 268928.0,
+ "rx_pkts": 2673012,
+ "time_ms": 1646288539831,
+ "drop_pct": 0,
+ "total_tx_pps": 267301,
+ "tx_pps": 268928,
+ "tx_pkts": 2673012,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 274722.439659442,
+ "rx_pkts": 2733353,
+ "time_ms": 1646288552341,
+ "drop_pct": 513,
+ "total_tx_pps": 273386,
+ "tx_pps": 274774,
+ "tx_pkts": 2733866,
+ "ndr_pps": 134464,
+ "drop_percentage": 0.018764635867302933
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "cd0872af22cc4e368a8a824b8f85ff54"
+ },
+ "synthesis": {
+ "avg_delay_usec": 483.49946577119744,
+ "total_tx_rate": 267301
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "1280"
+ ],
+ "rate": "ndr",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 06:25:02",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "8be1bcbbe7c94f8f94b64ab8ff667462",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1280"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_10k-rate_ndr-1.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1280"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_10k-rate_ndr-1.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1280": {
+ "ndr": {
+ "load_percent_per_direction": 6.25,
+ "timestamp_sec": 1646288845.323408,
+ "stats": {
+ "total_tx_rate": 298647,
+ "overall": {
+ "rx_pkts": 2986473,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 784,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2986473,
+ "avg_delay_usec": 509.001702007686,
+ "min_delay_usec": 55,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1493087,
+ "min_delay_usec": 76,
+ "drop_pct": 0,
+ "max_delay_usec": 766,
+ "tx_pkts": 1493386,
+ "avg_delay_usec": 492,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1493386,
+ "min_delay_usec": 55,
+ "drop_pct": 0,
+ "max_delay_usec": 784,
+ "tx_pkts": 1493087,
+ "avg_delay_usec": 526,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 3105928800.0,
+ "theoretical_tx_rate_pps": 4807692.307692308
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 12.5,
+ "duration_sec": 10.0,
+ "l2frame_size": "1280",
+ "rate_pps": 300480,
+ "rate_bps": 3125000000.0,
+ "time_taken_sec": 137.64375615119934
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 328796.88960086054,
+ "rx_pkts": 3216282,
+ "time_ms": 1646288720187,
+ "drop_pct": 43812427,
+ "total_tx_pps": 4702870,
+ "tx_pps": 4807692,
+ "tx_pkts": 47028709,
+ "drop_percentage": 93.16102425860765
+ },
+ {
+ "rx_pps": 137967.17788955485,
+ "rx_pkts": 1371187,
+ "time_ms": 1646288732685,
+ "drop_pct": 22519440,
+ "total_tx_pps": 2389062,
+ "tx_pps": 2403846,
+ "tx_pkts": 23890627,
+ "drop_percentage": 94.26056503247068
+ },
+ {
+ "rx_pps": 118105.52734564139,
+ "rx_pkts": 1173792,
+ "time_ms": 1646288745223,
+ "drop_pct": 10771512,
+ "total_tx_pps": 1194530,
+ "tx_pps": 1201922,
+ "tx_pkts": 11945304,
+ "drop_percentage": 90.17361132039838
+ },
+ {
+ "rx_pps": 421709.7198215352,
+ "rx_pkts": 4191374,
+ "time_ms": 1646288757729,
+ "drop_pct": 1781569,
+ "total_tx_pps": 597294,
+ "tx_pps": 600960,
+ "tx_pkts": 5972943,
+ "drop_percentage": 29.82732297964337
+ },
+ {
+ "rx_pps": 300480.0,
+ "rx_pkts": 2986473,
+ "time_ms": 1646288770264,
+ "drop_pct": 0,
+ "total_tx_pps": 298647,
+ "tx_pps": 300480,
+ "tx_pkts": 2986473,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 418310.83577366004,
+ "rx_pkts": 4157802,
+ "time_ms": 1646288782786,
+ "drop_pct": 322131,
+ "total_tx_pps": 447993,
+ "tx_pps": 450720,
+ "tx_pkts": 4479933,
+ "drop_percentage": 7.190531644111642
+ },
+ {
+ "rx_pps": 374651.06490817876,
+ "rx_pkts": 3723473,
+ "time_ms": 1646288795289,
+ "drop_pct": 9431,
+ "total_tx_pps": 373290,
+ "tx_pps": 375600,
+ "tx_pkts": 3732904,
+ "drop_percentage": 0.2526451256180175
+ },
+ {
+ "rx_pps": 337828.9123930734,
+ "rx_pkts": 3357682,
+ "time_ms": 1646288807790,
+ "drop_pct": 2098,
+ "total_tx_pps": 335978,
+ "tx_pps": 338040,
+ "tx_pkts": 3359780,
+ "drop_percentage": 0.062444564822696724
+ },
+ {
+ "rx_pps": 318795.6445763084,
+ "rx_pkts": 3168353,
+ "time_ms": 1646288820308,
+ "drop_pct": 4615,
+ "total_tx_pps": 317296,
+ "tx_pps": 319260,
+ "tx_pkts": 3172968,
+ "drop_percentage": 0.14544741705557698
+ },
+ {
+ "rx_pps": 309849.17401039106,
+ "rx_pkts": 3079747,
+ "time_ms": 1646288832818,
+ "drop_pct": 207,
+ "total_tx_pps": 307995,
+ "tx_pps": 309870,
+ "tx_pkts": 3079954,
+ "drop_percentage": 0.006720879597552431
+ },
+ {
+ "rx_pps": 305137.8923991017,
+ "rx_pkts": 3033835,
+ "time_ms": 1646288845322,
+ "drop_pct": 359,
+ "total_tx_pps": 303419,
+ "tx_pps": 305174,
+ "tx_pkts": 3034194,
+ "ndr_pps": 150240,
+ "drop_percentage": 0.011831807722248478
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "8be1bcbbe7c94f8f94b64ab8ff667462"
+ },
+ "synthesis": {
+ "avg_delay_usec": 509.001702007686,
+ "total_tx_rate": 298647
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "1518"
+ ],
+ "rate": "ndr",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 06:29:56",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "4235eac7551b4b33aa00fd498105e51e",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1518"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_10k-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1518"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_10k-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1518": {
+ "ndr": {
+ "load_percent_per_direction": 6.640625,
+ "timestamp_sec": 1646289138.556028,
+ "stats": {
+ "total_tx_rate": 268223,
+ "overall": {
+ "rx_pkts": 2682236,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 6699,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2682236,
+ "avg_delay_usec": 468.9993408484563,
+ "min_delay_usec": 54,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1341050,
+ "min_delay_usec": 57,
+ "drop_pct": 0,
+ "max_delay_usec": 6699,
+ "tx_pkts": 1341186,
+ "avg_delay_usec": 482,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1341186,
+ "min_delay_usec": 54,
+ "drop_pct": 0,
+ "max_delay_usec": 2508,
+ "tx_pkts": 1341050,
+ "avg_delay_usec": 456,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 3300215792.0,
+ "theoretical_tx_rate_pps": 4063719.1157347206
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 13.28125,
+ "duration_sec": 10.0,
+ "l2frame_size": "1518",
+ "rate_pps": 269856,
+ "rate_bps": 3320312500.0,
+ "time_taken_sec": 137.53674697875977
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 280327.64801039256,
+ "rx_pkts": 2747650,
+ "time_ms": 1646289013507,
+ "drop_pct": 37083151,
+ "total_tx_pps": 3983080,
+ "tx_pps": 4063718,
+ "tx_pkts": 39830801,
+ "drop_percentage": 93.10169534376173
+ },
+ {
+ "rx_pps": 139771.86715044265,
+ "rx_pkts": 1389067,
+ "time_ms": 1646289026009,
+ "drop_pct": 18803744,
+ "total_tx_pps": 2019281,
+ "tx_pps": 2031858,
+ "tx_pkts": 20192811,
+ "drop_percentage": 93.12098251204353
+ },
+ {
+ "rx_pps": 207291.5107155712,
+ "rx_pkts": 2060167,
+ "time_ms": 1646289038511,
+ "drop_pct": 8036635,
+ "total_tx_pps": 1009680,
+ "tx_pps": 1015928,
+ "tx_pkts": 10096802,
+ "drop_percentage": 79.59584628875558
+ },
+ {
+ "rx_pps": 448511.248959259,
+ "rx_pkts": 4460221,
+ "time_ms": 1646289051022,
+ "drop_pct": 591228,
+ "total_tx_pps": 505144,
+ "tx_pps": 507964,
+ "tx_pkts": 5051449,
+ "drop_percentage": 11.704126875278757
+ },
+ {
+ "rx_pps": 253982.0,
+ "rx_pkts": 2524203,
+ "time_ms": 1646289063521,
+ "drop_pct": 0,
+ "total_tx_pps": 252420,
+ "tx_pps": 253982,
+ "tx_pkts": 2524203,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 380882.85178005294,
+ "rx_pkts": 3785406,
+ "time_ms": 1646289076021,
+ "drop_pct": 886,
+ "total_tx_pps": 378629,
+ "tx_pps": 380972,
+ "tx_pkts": 3786292,
+ "drop_percentage": 0.02340020262568233
+ },
+ {
+ "rx_pps": 313470.2547614981,
+ "rx_pkts": 3115426,
+ "time_ms": 1646289088528,
+ "drop_pct": 39831,
+ "total_tx_pps": 315525,
+ "tx_pps": 317478,
+ "tx_pkts": 3155257,
+ "drop_percentage": 1.262369436150526
+ },
+ {
+ "rx_pps": 285724.4659684076,
+ "rx_pkts": 2839674,
+ "time_ms": 1646289101027,
+ "drop_pct": 55,
+ "total_tx_pps": 283972,
+ "tx_pps": 285730,
+ "tx_pkts": 2839729,
+ "drop_percentage": 0.001936804533108617
+ },
+ {
+ "rx_pps": 269856.0,
+ "rx_pkts": 2682236,
+ "time_ms": 1646289113526,
+ "drop_pct": 0,
+ "total_tx_pps": 268223,
+ "tx_pps": 269856,
+ "tx_pkts": 2682236,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 277476.3853338296,
+ "rx_pkts": 2758810,
+ "time_ms": 1646289126038,
+ "drop_pct": 3138,
+ "total_tx_pps": 276194,
+ "tx_pps": 277792,
+ "tx_pkts": 2761948,
+ "drop_percentage": 0.11361546270965275
+ },
+ {
+ "rx_pps": 273634.23308427056,
+ "rx_pkts": 2719516,
+ "time_ms": 1646289138555,
+ "drop_pct": 1886,
+ "total_tx_pps": 272140,
+ "tx_pps": 273824,
+ "tx_pkts": 2721402,
+ "ndr_pps": 134928,
+ "drop_percentage": 0.06930251392480788
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "4235eac7551b4b33aa00fd498105e51e"
+ },
+ "synthesis": {
+ "avg_delay_usec": 468.9993408484563,
+ "total_tx_rate": 268223
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "IMIX"
+ ],
+ "rate": "ndr",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 06:37:15",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "a5aadad5b25f444399ba2b3406c29196",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "IMIX"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_10k-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "IMIX"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_10k-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "IMIX": {
+ "ndr": {
+ "load_percent_per_direction": 1.7578125,
+ "timestamp_sec": 1646289577.9506223,
+ "stats": {
+ "total_tx_rate": 285983,
+ "overall": {
+ "rx_pkts": 2859836,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 2310,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2859836,
+ "avg_delay_usec": 433.0000503525377,
+ "min_delay_usec": 38,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1429846,
+ "min_delay_usec": 44,
+ "drop_pct": 0,
+ "max_delay_usec": 1917,
+ "tx_pkts": 1429990,
+ "avg_delay_usec": 432,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1429990,
+ "min_delay_usec": 38,
+ "drop_pct": 0,
+ "max_delay_usec": 2310,
+ "tx_pkts": 1429846,
+ "avg_delay_usec": 434,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 873582737.3333333,
+ "theoretical_tx_rate_pps": 16368398.079441292
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 3.515625,
+ "duration_sec": 10.0,
+ "l2frame_size": "IMIX",
+ "rate_pps": 287724,
+ "rate_bps": 878906250.0,
+ "time_taken_sec": 137.6145327091217
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 427548.78458777367,
+ "rx_pkts": 3713299,
+ "time_ms": 1646289452854,
+ "drop_pct": 138447685,
+ "total_tx_pps": 14216098,
+ "tx_pps": 16368398,
+ "tx_pkts": 142160984,
+ "warning": "WARNING: There is a significant difference between requested TX rate (16368398) and actual TX rate (14216098). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 97.38796194601467
+ },
+ {
+ "rx_pps": 409967.19737723225,
+ "rx_pkts": 4074459,
+ "time_ms": 1646289465351,
+ "drop_pct": 77264193,
+ "total_tx_pps": 8133865,
+ "tx_pps": 8184198,
+ "tx_pkts": 81338652,
+ "drop_percentage": 94.99074683460454
+ },
+ {
+ "rx_pps": 260283.02132755163,
+ "rx_pkts": 2586823,
+ "time_ms": 1646289477850,
+ "drop_pct": 38082496,
+ "total_tx_pps": 4066931,
+ "tx_pps": 4092098,
+ "tx_pkts": 40669319,
+ "drop_percentage": 93.63937468439046
+ },
+ {
+ "rx_pps": 169274.29595105443,
+ "rx_pkts": 1682333,
+ "time_ms": 1646289490349,
+ "drop_pct": 18652320,
+ "total_tx_pps": 2033465,
+ "tx_pps": 2046048,
+ "tx_pkts": 20334653,
+ "drop_percentage": 91.72676809385437
+ },
+ {
+ "rx_pps": 213995.76989708896,
+ "rx_pkts": 2126798,
+ "time_ms": 1646289502858,
+ "drop_pct": 8040531,
+ "total_tx_pps": 1016732,
+ "tx_pps": 1023024,
+ "tx_pkts": 10167329,
+ "drop_percentage": 79.0820381636121
+ },
+ {
+ "rx_pps": 485832.8535943681,
+ "rx_pkts": 4828938,
+ "time_ms": 1646289515358,
+ "drop_pct": 255238,
+ "total_tx_pps": 508417,
+ "tx_pps": 511512,
+ "tx_pkts": 5084176,
+ "drop_percentage": 5.020243201651556
+ },
+ {
+ "rx_pps": 255755.89938127328,
+ "rx_pkts": 2541832,
+ "time_ms": 1646289527874,
+ "drop_pct": 1,
+ "total_tx_pps": 254183,
+ "tx_pps": 255756,
+ "tx_pkts": 2541833,
+ "drop_percentage": 3.934168767184941e-05
+ },
+ {
+ "rx_pps": 383459.02405717666,
+ "rx_pkts": 3811011,
+ "time_ms": 1646289540375,
+ "drop_pct": 1739,
+ "total_tx_pps": 381275,
+ "tx_pps": 383634,
+ "tx_pkts": 3812750,
+ "drop_percentage": 0.045610123926299914
+ },
+ {
+ "rx_pps": 319404.44880279334,
+ "rx_pkts": 3174727,
+ "time_ms": 1646289552880,
+ "drop_pct": 2878,
+ "total_tx_pps": 317760,
+ "tx_pps": 319694,
+ "tx_pkts": 3177605,
+ "drop_percentage": 0.09057135798817034
+ },
+ {
+ "rx_pps": 287724.0,
+ "rx_pkts": 2859836,
+ "time_ms": 1646289565399,
+ "drop_pct": 0,
+ "total_tx_pps": 285983,
+ "tx_pps": 287724,
+ "tx_pkts": 2859836,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 303577.59912532725,
+ "rx_pkts": 3017413,
+ "time_ms": 1646289577949,
+ "drop_pct": 1316,
+ "total_tx_pps": 301872,
+ "tx_pps": 303710,
+ "tx_pkts": 3018729,
+ "ndr_pps": 143862,
+ "drop_percentage": 0.043594506164680566
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "a5aadad5b25f444399ba2b3406c29196"
+ },
+ "synthesis": {
+ "avg_delay_usec": 433.0000503525377,
+ "total_tx_rate": 285983
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_10k-rate_ndr-2.json",
+ "frame_sizes": [
+ "9000"
+ ],
+ "rate": "ndr",
+ "flow_count": "10k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 06:47:01",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "7a447e0402ad455cad8e943d344bd43d",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "9000"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 10000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_10k-rate_ndr-1.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "9000"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_10k-rate_ndr-1.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "9000": {
+ "ndr": {
+ "load_percent_per_direction": 25.0,
+ "timestamp_sec": 1646290163.7212827,
+ "stats": {
+ "total_tx_rate": 172160,
+ "overall": {
+ "rx_pkts": 1721608,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 8987,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 1721608,
+ "avg_delay_usec": 803.0008178400658,
+ "min_delay_usec": 86,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 860760,
+ "min_delay_usec": 86,
+ "drop_pct": 0,
+ "max_delay_usec": 7359,
+ "tx_pkts": 860848,
+ "avg_delay_usec": 787,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 860848,
+ "min_delay_usec": 90,
+ "drop_pct": 0,
+ "max_delay_usec": 8987,
+ "tx_pkts": 860760,
+ "avg_delay_usec": 819,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 12423065600.0,
+ "theoretical_tx_rate_pps": 692904.6563192905
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 50.0,
+ "duration_sec": 10.0,
+ "l2frame_size": "9000",
+ "rate_pps": 173226,
+ "rate_bps": 12500000000.0,
+ "time_taken_sec": 137.66240000724792
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 88271.08377210896,
+ "rx_pkts": 877835,
+ "time_ms": 1646290038548,
+ "drop_pct": 6012931,
+ "total_tx_pps": 689076,
+ "tx_pps": 692904,
+ "tx_pkts": 6890766,
+ "drop_percentage": 87.26070512334913
+ },
+ {
+ "rx_pps": 161139.26939074945,
+ "rx_pkts": 1601483,
+ "time_ms": 1646290051049,
+ "drop_pct": 1841731,
+ "total_tx_pps": 344321,
+ "tx_pps": 346452,
+ "tx_pkts": 3443214,
+ "drop_percentage": 53.48871722756704
+ },
+ {
+ "rx_pps": 173226.0,
+ "rx_pkts": 1721608,
+ "time_ms": 1646290063550,
+ "drop_pct": 0,
+ "total_tx_pps": 172160,
+ "tx_pps": 173226,
+ "tx_pkts": 1721608,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 211452.66814074648,
+ "rx_pkts": 2101524,
+ "time_ms": 1646290076054,
+ "drop_pct": 480878,
+ "total_tx_pps": 258240,
+ "tx_pps": 259838,
+ "tx_pkts": 2582402,
+ "drop_percentage": 18.62134555348083
+ },
+ {
+ "rx_pps": 212334.58730374108,
+ "rx_pkts": 2110288,
+ "time_ms": 1646290088562,
+ "drop_pct": 41716,
+ "total_tx_pps": 215200,
+ "tx_pps": 216532,
+ "tx_pkts": 2152004,
+ "drop_percentage": 1.9384722333229865
+ },
+ {
+ "rx_pps": 192487.71171054075,
+ "rx_pkts": 1915062,
+ "time_ms": 1646290101091,
+ "drop_pct": 23781,
+ "total_tx_pps": 193884,
+ "tx_pps": 194878,
+ "tx_pkts": 1938843,
+ "drop_percentage": 1.2265562502997922
+ },
+ {
+ "rx_pps": 183024.18234314685,
+ "rx_pkts": 1819170,
+ "time_ms": 1646290113598,
+ "drop_pct": 10216,
+ "total_tx_pps": 182938,
+ "tx_pps": 184052,
+ "tx_pkts": 1829386,
+ "drop_percentage": 0.5584387329956608
+ },
+ {
+ "rx_pps": 176570.2910542118,
+ "rx_pkts": 1755021,
+ "time_ms": 1646290126107,
+ "drop_pct": 20552,
+ "total_tx_pps": 177557,
+ "tx_pps": 178638,
+ "tx_pkts": 1775573,
+ "drop_percentage": 1.1574854990473498
+ },
+ {
+ "rx_pps": 175689.4205205337,
+ "rx_pkts": 1746179,
+ "time_ms": 1646290138633,
+ "drop_pct": 2411,
+ "total_tx_pps": 174859,
+ "tx_pps": 175932,
+ "tx_pkts": 1748590,
+ "drop_percentage": 0.13788252248954871
+ },
+ {
+ "rx_pps": 174555.66489782277,
+ "rx_pkts": 1734998,
+ "time_ms": 1646290151222,
+ "drop_pct": 222,
+ "total_tx_pps": 173522,
+ "tx_pps": 174578,
+ "tx_pkts": 1735220,
+ "drop_percentage": 0.012793766784615208
+ },
+ {
+ "rx_pps": 173460.8309452305,
+ "rx_pkts": 1724114,
+ "time_ms": 1646290163720,
+ "drop_pct": 4385,
+ "total_tx_pps": 172849,
+ "tx_pps": 173902,
+ "tx_pkts": 1728499,
+ "ndr_pps": 86613,
+ "drop_percentage": 0.2536883157005008
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 10000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "7a447e0402ad455cad8e943d344bd43d"
+ },
+ "synthesis": {
+ "avg_delay_usec": 803.0008178400658,
+ "total_tx_rate": 172160
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "64"
+ ],
+ "rate": "ndr",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 06:54:21",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "c1e2fef7bb47473781a088db8235dca5",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "64"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_100k-rate_ndr-1.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "64"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_64-fc_100k-rate_ndr-1.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "64": {
+ "ndr": {
+ "load_percent_per_direction": 0.390625,
+ "timestamp_sec": 1646290604.5060358,
+ "stats": {
+ "total_tx_rate": 288854,
+ "overall": {
+ "rx_pkts": 2888548,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 5341,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2888548,
+ "avg_delay_usec": 455.49962091680663,
+ "min_delay_usec": 47,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1444201,
+ "min_delay_usec": 47,
+ "drop_pct": 0,
+ "max_delay_usec": 5341,
+ "tx_pkts": 1444347,
+ "avg_delay_usec": 463,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1444347,
+ "min_delay_usec": 59,
+ "drop_pct": 0,
+ "max_delay_usec": 5267,
+ "tx_pkts": 1444201,
+ "avg_delay_usec": 448,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 194109888.0,
+ "theoretical_tx_rate_pps": 74404761.90476191
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 0.78125,
+ "duration_sec": 10.0,
+ "l2frame_size": "64",
+ "rate_pps": 290642,
+ "rate_bps": 195312500.0,
+ "time_taken_sec": 137.62960720062256
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 1053954.263475746,
+ "rx_pkts": 3807089,
+ "time_ms": 1646290479366,
+ "drop_pct": 264957461,
+ "total_tx_pps": 26876455,
+ "tx_pps": 74404760,
+ "tx_pkts": 268764550,
+ "warning": "WARNING: There is a significant difference between requested TX rate (74404760) and actual TX rate (26876455). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 98.58348543362582
+ },
+ {
+ "rx_pps": 406661.06757053314,
+ "rx_pkts": 2956606,
+ "time_ms": 1646290491895,
+ "drop_pct": 267521167,
+ "total_tx_pps": 27047777,
+ "tx_pps": 37202380,
+ "tx_pkts": 270477773,
+ "warning": "WARNING: There is a significant difference between requested TX rate (37202380) and actual TX rate (27047777). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 98.90689502238692
+ },
+ {
+ "rx_pps": 148664.22620742844,
+ "rx_pkts": 1477497,
+ "time_ms": 1646290504402,
+ "drop_pct": 183390128,
+ "total_tx_pps": 18486762,
+ "tx_pps": 18601190,
+ "tx_pkts": 184867625,
+ "drop_percentage": 99.20078109944886
+ },
+ {
+ "rx_pps": 118020.08758137107,
+ "rx_pkts": 1172942,
+ "time_ms": 1646290516918,
+ "drop_pct": 91260961,
+ "total_tx_pps": 9243390,
+ "tx_pps": 9300594,
+ "tx_pkts": 92433903,
+ "drop_percentage": 98.73104784940219
+ },
+ {
+ "rx_pps": 400017.6984889188,
+ "rx_pkts": 3975576,
+ "time_ms": 1646290529444,
+ "drop_pct": 42241392,
+ "total_tx_pps": 4621696,
+ "tx_pps": 4650296,
+ "tx_pkts": 46216968,
+ "drop_percentage": 91.39801641682769
+ },
+ {
+ "rx_pps": 118631.30644199387,
+ "rx_pkts": 1181390,
+ "time_ms": 1646290541984,
+ "drop_pct": 21973599,
+ "total_tx_pps": 2315498,
+ "tx_pps": 2325148,
+ "tx_pkts": 23154989,
+ "drop_percentage": 94.89790299619663
+ },
+ {
+ "rx_pps": 213393.54643034592,
+ "rx_pkts": 2120812,
+ "time_ms": 1646290554504,
+ "drop_pct": 9433431,
+ "total_tx_pps": 1155424,
+ "tx_pps": 1162574,
+ "tx_pkts": 11554243,
+ "drop_percentage": 81.64473431967807
+ },
+ {
+ "rx_pps": 570597.5399708707,
+ "rx_pkts": 5671457,
+ "time_ms": 1646290567004,
+ "drop_pct": 106238,
+ "total_tx_pps": 577769,
+ "tx_pps": 581286,
+ "tx_pkts": 5777695,
+ "drop_percentage": 1.8387609591714342
+ },
+ {
+ "rx_pps": 290642.0,
+ "rx_pkts": 2888548,
+ "time_ms": 1646290579503,
+ "drop_pct": 0,
+ "total_tx_pps": 288854,
+ "tx_pps": 290642,
+ "tx_pkts": 2888548,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 434891.10995581164,
+ "rx_pkts": 4322604,
+ "time_ms": 1646290592004,
+ "drop_pct": 10664,
+ "total_tx_pps": 433326,
+ "tx_pps": 435964,
+ "tx_pkts": 4333268,
+ "drop_percentage": 0.24609601806304157
+ },
+ {
+ "rx_pps": 362705.9824699818,
+ "rx_pkts": 3605119,
+ "time_ms": 1646290604505,
+ "drop_pct": 5944,
+ "total_tx_pps": 361106,
+ "tx_pps": 363304,
+ "tx_pkts": 3611063,
+ "ndr_pps": 145321,
+ "drop_percentage": 0.1646052699717507
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "c1e2fef7bb47473781a088db8235dca5"
+ },
+ "synthesis": {
+ "avg_delay_usec": 455.49962091680663,
+ "total_tx_rate": 288854
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "128"
+ ],
+ "rate": "ndr",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 06:59:13",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "1b62171069bc40c7914f84ffbb050f31",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "128"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_100k-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "128"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_128-fc_100k-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "128": {
+ "ndr": {
+ "load_percent_per_direction": 0.68359375,
+ "timestamp_sec": 1646290896.3823671,
+ "stats": {
+ "total_tx_rate": 286902,
+ "overall": {
+ "rx_pkts": 2869029,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 2743,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2869029,
+ "avg_delay_usec": 464.9996511014702,
+ "min_delay_usec": 58,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1434443,
+ "min_delay_usec": 62,
+ "drop_pct": 0,
+ "max_delay_usec": 2743,
+ "tx_pkts": 1434586,
+ "avg_delay_usec": 472,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1434586,
+ "min_delay_usec": 58,
+ "drop_pct": 0,
+ "max_delay_usec": 1909,
+ "tx_pkts": 1434443,
+ "avg_delay_usec": 458,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 339691968.0,
+ "theoretical_tx_rate_pps": 42229729.72972973
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 1.3671875,
+ "duration_sec": 10.0,
+ "l2frame_size": "128",
+ "rate_pps": 288678,
+ "rate_bps": 341796874.0,
+ "time_taken_sec": 137.53828620910645
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 654315.3293594539,
+ "rx_pkts": 4006536,
+ "time_ms": 1646290771352,
+ "drop_pct": 254576624,
+ "total_tx_pps": 25858316,
+ "tx_pps": 42229728,
+ "tx_pkts": 258583160,
+ "warning": "WARNING: There is a significant difference between requested TX rate (42229728) and actual TX rate (25858316). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 98.45058123661262
+ },
+ {
+ "rx_pps": 362626.5714189805,
+ "rx_pkts": 3603602,
+ "time_ms": 1646290783851,
+ "drop_pct": 206225385,
+ "total_tx_pps": 20982898,
+ "tx_pps": 21114864,
+ "tx_pkts": 209828987,
+ "drop_percentage": 98.28260048741502
+ },
+ {
+ "rx_pps": 399253.9049378252,
+ "rx_pkts": 3967988,
+ "time_ms": 1646290796350,
+ "drop_pct": 100957131,
+ "total_tx_pps": 10492511,
+ "tx_pps": 10557432,
+ "tx_pkts": 104925119,
+ "drop_percentage": 96.21826685752913
+ },
+ {
+ "rx_pps": 328008.7854675711,
+ "rx_pkts": 3259916,
+ "time_ms": 1646290808847,
+ "drop_pct": 49202614,
+ "total_tx_pps": 5246253,
+ "tx_pps": 5278716,
+ "tx_pkts": 52462530,
+ "drop_percentage": 93.78620131358514
+ },
+ {
+ "rx_pps": 431037.2563654665,
+ "rx_pkts": 4283865,
+ "time_ms": 1646290821368,
+ "drop_pct": 21947402,
+ "total_tx_pps": 2623126,
+ "tx_pps": 2639358,
+ "tx_pkts": 26231267,
+ "drop_percentage": 83.6688597619017
+ },
+ {
+ "rx_pps": 132040.09847098283,
+ "rx_pkts": 1312941,
+ "time_ms": 1646290833872,
+ "drop_pct": 11809280,
+ "total_tx_pps": 1312222,
+ "tx_pps": 1319678,
+ "tx_pkts": 13122221,
+ "drop_percentage": 89.99452150668702
+ },
+ {
+ "rx_pps": 466334.61032833933,
+ "rx_pkts": 4635133,
+ "time_ms": 1646290846377,
+ "drop_pct": 1923327,
+ "total_tx_pps": 655846,
+ "tx_pps": 659838,
+ "tx_pkts": 6558460,
+ "drop_percentage": 29.325893578675483
+ },
+ {
+ "rx_pps": 329647.56411198626,
+ "rx_pkts": 3276535,
+ "time_ms": 1646290858875,
+ "drop_pct": 2688,
+ "total_tx_pps": 327922,
+ "tx_pps": 329918,
+ "tx_pkts": 3279223,
+ "drop_percentage": 0.08197063755651872
+ },
+ {
+ "rx_pps": 164958.0,
+ "rx_pkts": 1639603,
+ "time_ms": 1646290871373,
+ "drop_pct": 0,
+ "total_tx_pps": 163960,
+ "tx_pps": 164958,
+ "tx_pkts": 1639603,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 247438.0,
+ "rx_pkts": 2459165,
+ "time_ms": 1646290883873,
+ "drop_pct": 0,
+ "total_tx_pps": 245916,
+ "tx_pps": 247438,
+ "tx_pkts": 2459165,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 288678.0,
+ "rx_pkts": 2869029,
+ "time_ms": 1646290896381,
+ "drop_pct": 0,
+ "total_tx_pps": 286902,
+ "tx_pps": 288678,
+ "tx_pkts": 2869029,
+ "ndr_pps": 144339,
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "1b62171069bc40c7914f84ffbb050f31"
+ },
+ "synthesis": {
+ "avg_delay_usec": 464.9996511014702,
+ "total_tx_rate": 286902
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "256"
+ ],
+ "rate": "ndr",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 07:11:26",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "d4e52542fffb464dab4ee0f0bbe41424",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "256"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_100k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "256"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_256-fc_100k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "256": {
+ "ndr": {
+ "load_percent_per_direction": 1.3671875,
+ "timestamp_sec": 1646291629.1270602,
+ "stats": {
+ "total_tx_rate": 307725,
+ "overall": {
+ "rx_pkts": 3077236,
+ "drop_percentage": 0.0005199444179417221,
+ "drop_pct": 16,
+ "max_delay_usec": 4557,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 3077252,
+ "avg_delay_usec": 448.49974847558,
+ "min_delay_usec": 39,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1538532,
+ "min_delay_usec": 41,
+ "drop_pct": 16,
+ "max_delay_usec": 4557,
+ "tx_pkts": 1538704,
+ "avg_delay_usec": 453,
+ "drop_percentage": 0.0010398361218272
+ },
+ "0": {
+ "rx_pkts": 1538704,
+ "min_delay_usec": 39,
+ "drop_pct": 0,
+ "max_delay_usec": 4475,
+ "tx_pkts": 1538548,
+ "avg_delay_usec": 444,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 679456800.0,
+ "theoretical_tx_rate_pps": 22644927.536231883
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 2.734375,
+ "duration_sec": 10.0,
+ "l2frame_size": "256",
+ "rate_pps": 309598,
+ "rate_bps": 683593750.0,
+ "time_taken_sec": 137.6123342514038
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 454315.7916803991,
+ "rx_pkts": 4114594,
+ "time_ms": 1646291504021,
+ "drop_pct": 200973317,
+ "total_tx_pps": 20508791,
+ "tx_pps": 22644926,
+ "tx_pkts": 205087911,
+ "drop_percentage": 97.99374132783477
+ },
+ {
+ "rx_pps": 341741.1574105596,
+ "rx_pkts": 3396225,
+ "time_ms": 1646291516524,
+ "drop_pct": 109126448,
+ "total_tx_pps": 11252267,
+ "tx_pps": 11322462,
+ "tx_pkts": 112522673,
+ "drop_percentage": 96.98174162641871
+ },
+ {
+ "rx_pps": 161288.4881766711,
+ "rx_pkts": 1602966,
+ "time_ms": 1646291529028,
+ "drop_pct": 54661181,
+ "total_tx_pps": 5626414,
+ "tx_pps": 5661230,
+ "tx_pkts": 56264147,
+ "drop_percentage": 97.15099919669981
+ },
+ {
+ "rx_pps": 115955.83218252,
+ "rx_pkts": 1152543,
+ "time_ms": 1646291541545,
+ "drop_pct": 26982345,
+ "total_tx_pps": 2813488,
+ "tx_pps": 2830614,
+ "tx_pkts": 28134888,
+ "drop_percentage": 95.90350955013577
+ },
+ {
+ "rx_pps": 161080.9212724765,
+ "rx_pkts": 1600903,
+ "time_ms": 1646291554048,
+ "drop_pct": 12465118,
+ "total_tx_pps": 1406602,
+ "tx_pps": 1415306,
+ "tx_pkts": 14066021,
+ "drop_percentage": 88.61865057644944
+ },
+ {
+ "rx_pps": 427270.71843328327,
+ "rx_pkts": 4246431,
+ "time_ms": 1646291566567,
+ "drop_pct": 2786570,
+ "total_tx_pps": 703300,
+ "tx_pps": 707652,
+ "tx_pkts": 7033001,
+ "drop_percentage": 39.62135082875717
+ },
+ {
+ "rx_pps": 353642.3849503518,
+ "rx_pkts": 3524578,
+ "time_ms": 1646291579093,
+ "drop_pct": 1830,
+ "total_tx_pps": 352640,
+ "tx_pps": 353826,
+ "tx_pkts": 3526408,
+ "drop_percentage": 0.051894165394361626
+ },
+ {
+ "rx_pps": 176912.0,
+ "rx_pkts": 1758331,
+ "time_ms": 1646291591612,
+ "drop_pct": 0,
+ "total_tx_pps": 175833,
+ "tx_pps": 176912,
+ "tx_pkts": 1758331,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 265370.0,
+ "rx_pkts": 2637515,
+ "time_ms": 1646291604122,
+ "drop_pct": 0,
+ "total_tx_pps": 263751,
+ "tx_pps": 265370,
+ "tx_pkts": 2637515,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 309596.39026248094,
+ "rx_pkts": 3077236,
+ "time_ms": 1646291616626,
+ "drop_pct": 16,
+ "total_tx_pps": 307725,
+ "tx_pps": 309598,
+ "tx_pkts": 3077252,
+ "drop_percentage": 0.0005199444179417221
+ },
+ {
+ "rx_pps": 331593.3824199975,
+ "rx_pkts": 3295874,
+ "time_ms": 1646291629126,
+ "drop_pct": 1179,
+ "total_tx_pps": 329705,
+ "tx_pps": 331712,
+ "tx_pkts": 3297053,
+ "ndr_pps": 154799,
+ "drop_percentage": 0.035759206782541866
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "d4e52542fffb464dab4ee0f0bbe41424"
+ },
+ "synthesis": {
+ "avg_delay_usec": 448.49974847558,
+ "total_tx_rate": 307725
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "512"
+ ],
+ "rate": "ndr",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 07:13:52",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "25dca33bff7e45b3aef3a47996f30aaa",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "512"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_100k-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "512"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_512-fc_100k-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "512": {
+ "ndr": {
+ "load_percent_per_direction": 2.1484375,
+ "timestamp_sec": 1646291775.9324973,
+ "stats": {
+ "total_tx_rate": 250873,
+ "overall": {
+ "rx_pkts": 2508732,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 4401,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2508732,
+ "avg_delay_usec": 351.5005273580438,
+ "min_delay_usec": 37,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1254303,
+ "min_delay_usec": 39,
+ "drop_pct": 0,
+ "max_delay_usec": 3459,
+ "tx_pkts": 1254429,
+ "avg_delay_usec": 341,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1254429,
+ "min_delay_usec": 37,
+ "drop_pct": 0,
+ "max_delay_usec": 4401,
+ "tx_pkts": 1254303,
+ "avg_delay_usec": 362,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 1067715488.0,
+ "theoretical_tx_rate_pps": 11748120.30075188
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 4.296875,
+ "duration_sec": 10.0,
+ "l2frame_size": "512",
+ "rate_pps": 252400,
+ "rate_bps": 1074218750.0,
+ "time_taken_sec": 137.65872263908386
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 396012.6918251163,
+ "rx_pkts": 3753919,
+ "time_ms": 1646291650778,
+ "drop_pct": 107609913,
+ "total_tx_pps": 11136383,
+ "tx_pps": 11748120,
+ "tx_pkts": 111363832,
+ "drop_percentage": 96.62913988089059
+ },
+ {
+ "rx_pps": 366842.0367461427,
+ "rx_pkts": 3645860,
+ "time_ms": 1646291663279,
+ "drop_pct": 54733492,
+ "total_tx_pps": 5837935,
+ "tx_pps": 5874060,
+ "tx_pkts": 58379352,
+ "drop_percentage": 93.75488100655862
+ },
+ {
+ "rx_pps": 145725.16553904826,
+ "rx_pkts": 1448144,
+ "time_ms": 1646291675798,
+ "drop_pct": 27738595,
+ "total_tx_pps": 2918673,
+ "tx_pps": 2937030,
+ "tx_pkts": 29186739,
+ "drop_percentage": 95.03834943670823
+ },
+ {
+ "rx_pps": 117366.44222363783,
+ "rx_pkts": 1166564,
+ "time_ms": 1646291688313,
+ "drop_pct": 13429734,
+ "total_tx_pps": 1459629,
+ "tx_pps": 1468514,
+ "tx_pkts": 14596298,
+ "drop_percentage": 92.00780910337676
+ },
+ {
+ "rx_pps": 388855.0412373564,
+ "rx_pkts": 3865026,
+ "time_ms": 1646291700839,
+ "drop_pct": 3433114,
+ "total_tx_pps": 729814,
+ "tx_pps": 734256,
+ "tx_pkts": 7298140,
+ "drop_percentage": 47.04094467905521
+ },
+ {
+ "rx_pps": 358806.9628110826,
+ "rx_pkts": 3566364,
+ "time_ms": 1646291713349,
+ "drop_pct": 82707,
+ "total_tx_pps": 364907,
+ "tx_pps": 367128,
+ "tx_pkts": 3649071,
+ "drop_percentage": 2.2665220819216727
+ },
+ {
+ "rx_pps": 183564.0,
+ "rx_pkts": 1824354,
+ "time_ms": 1646291725861,
+ "drop_pct": 0,
+ "total_tx_pps": 182435,
+ "tx_pps": 183564,
+ "tx_pkts": 1824354,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 275341.37200471794,
+ "rx_pkts": 2736758,
+ "time_ms": 1646291738359,
+ "drop_pct": 46,
+ "total_tx_pps": 273680,
+ "tx_pps": 275346,
+ "tx_pkts": 2736804,
+ "drop_percentage": 0.001680792632574346
+ },
+ {
+ "rx_pps": 229454.0,
+ "rx_pkts": 2280430,
+ "time_ms": 1646291750900,
+ "drop_pct": 0,
+ "total_tx_pps": 228043,
+ "tx_pps": 229454,
+ "tx_pkts": 2280430,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 252400.0,
+ "rx_pkts": 2508732,
+ "time_ms": 1646291763421,
+ "drop_pct": 0,
+ "total_tx_pps": 250873,
+ "tx_pps": 252400,
+ "tx_pkts": 2508732,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 263683.34931604785,
+ "rx_pkts": 2620750,
+ "time_ms": 1646291775931,
+ "drop_pct": 1875,
+ "total_tx_pps": 262262,
+ "tx_pps": 263872,
+ "tx_pkts": 2622625,
+ "ndr_pps": 126200,
+ "drop_percentage": 0.07149325580286926
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "25dca33bff7e45b3aef3a47996f30aaa"
+ },
+ "synthesis": {
+ "avg_delay_usec": 351.5005273580438,
+ "total_tx_rate": 250873
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "768"
+ ],
+ "rate": "ndr",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 07:26:05",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "99f490ebe6c2437a9632bddc2ea7163b",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "768"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_100k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "768"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_768-fc_100k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "768": {
+ "ndr": {
+ "load_percent_per_direction": 3.7109375,
+ "timestamp_sec": 1646292508.196054,
+ "stats": {
+ "total_tx_rate": 292520,
+ "overall": {
+ "rx_pkts": 2925176,
+ "drop_percentage": 0.000854642125447106,
+ "drop_pct": 25,
+ "max_delay_usec": 794,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2925201,
+ "avg_delay_usec": 440.00094079809213,
+ "min_delay_usec": 38,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1462502,
+ "min_delay_usec": 38,
+ "drop_pct": 25,
+ "max_delay_usec": 698,
+ "tx_pkts": 1462674,
+ "avg_delay_usec": 424,
+ "drop_percentage": 0.0017091983586226321
+ },
+ "0": {
+ "rx_pkts": 1462674,
+ "min_delay_usec": 39,
+ "drop_pct": 0,
+ "max_delay_usec": 794,
+ "tx_pkts": 1462527,
+ "avg_delay_usec": 456,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 1844046080.0,
+ "theoretical_tx_rate_pps": 7931472.081218274
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 7.421875,
+ "duration_sec": 10.0,
+ "l2frame_size": "768",
+ "rate_pps": 294330,
+ "rate_bps": 1855468750.0,
+ "time_taken_sec": 137.6208794116974
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 359474.4042878791,
+ "rx_pkts": 3462705,
+ "time_ms": 1646292383075,
+ "drop_pct": 72938695,
+ "total_tx_pps": 7640140,
+ "tx_pps": 7931472,
+ "tx_pkts": 76401400,
+ "drop_percentage": 95.46774666432815
+ },
+ {
+ "rx_pps": 221917.01896656543,
+ "rx_pkts": 2205522,
+ "time_ms": 1646292395578,
+ "drop_pct": 37207940,
+ "total_tx_pps": 3941346,
+ "tx_pps": 3965736,
+ "tx_pkts": 39413462,
+ "drop_percentage": 94.40414039243748
+ },
+ {
+ "rx_pps": 120218.84357194848,
+ "rx_pkts": 1194795,
+ "time_ms": 1646292408080,
+ "drop_pct": 18511939,
+ "total_tx_pps": 1970673,
+ "tx_pps": 1982868,
+ "tx_pkts": 19706734,
+ "drop_percentage": 93.93712321889564
+ },
+ {
+ "rx_pps": 237679.50037510015,
+ "rx_pkts": 2362178,
+ "time_ms": 1646292420599,
+ "drop_pct": 7491190,
+ "total_tx_pps": 985336,
+ "tx_pps": 991434,
+ "tx_pkts": 9853368,
+ "drop_percentage": 76.02669462867925
+ },
+ {
+ "rx_pps": 467656.5430226268,
+ "rx_pkts": 4647806,
+ "time_ms": 1646292433101,
+ "drop_pct": 278869,
+ "total_tx_pps": 492667,
+ "tx_pps": 495716,
+ "tx_pkts": 4926675,
+ "drop_percentage": 5.660389613684686
+ },
+ {
+ "rx_pps": 247858.0,
+ "rx_pkts": 2463587,
+ "time_ms": 1646292445616,
+ "drop_pct": 0,
+ "total_tx_pps": 246358,
+ "tx_pps": 247858,
+ "tx_pkts": 2463587,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 371611.02398405195,
+ "rx_pkts": 3693258,
+ "time_ms": 1646292458113,
+ "drop_pct": 1739,
+ "total_tx_pps": 369499,
+ "tx_pps": 371786,
+ "tx_pkts": 3694997,
+ "drop_percentage": 0.04706363767007118
+ },
+ {
+ "rx_pps": 309695.5350187483,
+ "rx_pkts": 3078222,
+ "time_ms": 1646292470645,
+ "drop_pct": 1257,
+ "total_tx_pps": 307947,
+ "tx_pps": 309822,
+ "tx_pkts": 3079479,
+ "drop_percentage": 0.04081859301524706
+ },
+ {
+ "rx_pps": 278840.0,
+ "rx_pkts": 2775715,
+ "time_ms": 1646292483196,
+ "drop_pct": 0,
+ "total_tx_pps": 277571,
+ "tx_pps": 278840,
+ "tx_pkts": 2775715,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 294327.48453183216,
+ "rx_pkts": 2925176,
+ "time_ms": 1646292495696,
+ "drop_pct": 25,
+ "total_tx_pps": 292520,
+ "tx_pps": 294330,
+ "tx_pkts": 2925201,
+ "drop_percentage": 0.000854642125447106
+ },
+ {
+ "rx_pps": 301774.3450893266,
+ "rx_pkts": 2999187,
+ "time_ms": 1646292508195,
+ "drop_pct": 2998,
+ "total_tx_pps": 300218,
+ "tx_pps": 302076,
+ "tx_pkts": 3002185,
+ "ndr_pps": 147165,
+ "drop_percentage": 0.09986060152855337
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "99f490ebe6c2437a9632bddc2ea7163b"
+ },
+ "synthesis": {
+ "avg_delay_usec": 440.00094079809213,
+ "total_tx_rate": 292520
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "1024"
+ ],
+ "rate": "ndr",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 07:33:24",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "e7ae74dbcfeb4aaf8774388598c054af",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1024"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_100k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1024"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1024-fc_100k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1024": {
+ "ndr": {
+ "load_percent_per_direction": 4.78515625,
+ "timestamp_sec": 1646292947.5717177,
+ "stats": {
+ "total_tx_rate": 284733,
+ "overall": {
+ "rx_pkts": 2847306,
+ "drop_percentage": 0.0009131355247649378,
+ "drop_pct": 26,
+ "max_delay_usec": 4486,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2847332,
+ "avg_delay_usec": 460.00053735004246,
+ "min_delay_usec": 38,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1423568,
+ "min_delay_usec": 38,
+ "drop_pct": 26,
+ "max_delay_usec": 829,
+ "tx_pkts": 1423738,
+ "avg_delay_usec": 451,
+ "drop_percentage": 0.0018261786929898618
+ },
+ "0": {
+ "rx_pkts": 1423738,
+ "min_delay_usec": 38,
+ "drop_pct": 0,
+ "max_delay_usec": 4486,
+ "tx_pkts": 1423594,
+ "avg_delay_usec": 469,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 2378090016.0,
+ "theoretical_tx_rate_pps": 5986590.038314176
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 9.5703125,
+ "duration_sec": 10.0,
+ "l2frame_size": "1024",
+ "rate_pps": 286466,
+ "rate_bps": 2392578124.0,
+ "time_taken_sec": 137.69065976142883
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 385174.3857818964,
+ "rx_pkts": 3744698,
+ "time_ms": 1646292822382,
+ "drop_pct": 54457437,
+ "total_tx_pps": 5820213,
+ "tx_pps": 5986590,
+ "tx_pkts": 58202135,
+ "drop_percentage": 93.5660470187219
+ },
+ {
+ "rx_pps": 371064.1070337179,
+ "rx_pkts": 3687635,
+ "time_ms": 1646292834881,
+ "drop_pct": 26059720,
+ "total_tx_pps": 2974735,
+ "tx_pps": 2993294,
+ "tx_pkts": 29747355,
+ "drop_percentage": 87.6034860914525
+ },
+ {
+ "rx_pps": 122785.19012242564,
+ "rx_pkts": 1220301,
+ "time_ms": 1646292847393,
+ "drop_pct": 13654120,
+ "total_tx_pps": 1487442,
+ "tx_pps": 1496646,
+ "tx_pkts": 14874421,
+ "drop_percentage": 91.7959764618737
+ },
+ {
+ "rx_pps": 352679.3934021328,
+ "rx_pkts": 3505458,
+ "time_ms": 1646292859908,
+ "drop_pct": 3932491,
+ "total_tx_pps": 743794,
+ "tx_pps": 748322,
+ "tx_pkts": 7437949,
+ "drop_percentage": 52.87063678441463
+ },
+ {
+ "rx_pps": 366733.73037974344,
+ "rx_pkts": 3649920,
+ "time_ms": 1646292872437,
+ "drop_pct": 73910,
+ "total_tx_pps": 372383,
+ "tx_pps": 374160,
+ "tx_pkts": 3723830,
+ "drop_percentage": 1.9847844826428704
+ },
+ {
+ "rx_pps": 187080.0,
+ "rx_pkts": 1859483,
+ "time_ms": 1646292884943,
+ "drop_pct": 0,
+ "total_tx_pps": 185948,
+ "tx_pps": 187080,
+ "tx_pkts": 1859483,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 280617.78649908,
+ "rx_pkts": 2789062,
+ "time_ms": 1646292897503,
+ "drop_pct": 22,
+ "total_tx_pps": 278908,
+ "tx_pps": 280620,
+ "tx_pkts": 2789084,
+ "drop_percentage": 0.0007887894376791807
+ },
+ {
+ "rx_pps": 327295.7202511058,
+ "rx_pkts": 3252831,
+ "time_ms": 1646292910003,
+ "drop_pct": 937,
+ "total_tx_pps": 325376,
+ "tx_pps": 327390,
+ "tx_pkts": 3253768,
+ "drop_percentage": 0.028797381989127683
+ },
+ {
+ "rx_pps": 303993.8263549052,
+ "rx_pkts": 3021548,
+ "time_ms": 1646292922504,
+ "drop_pct": 121,
+ "total_tx_pps": 302166,
+ "tx_pps": 304006,
+ "tx_pkts": 3021669,
+ "drop_percentage": 0.004004409483633052
+ },
+ {
+ "rx_pps": 291422.317994849,
+ "rx_pkts": 2896594,
+ "time_ms": 1646292935071,
+ "drop_pct": 8843,
+ "total_tx_pps": 290543,
+ "tx_pps": 292312,
+ "tx_pkts": 2905437,
+ "drop_percentage": 0.3043604111877146
+ },
+ {
+ "rx_pps": 286463.38417718763,
+ "rx_pkts": 2847306,
+ "time_ms": 1646292947570,
+ "drop_pct": 26,
+ "total_tx_pps": 284733,
+ "tx_pps": 286466,
+ "tx_pkts": 2847332,
+ "ndr_pps": 143233,
+ "drop_percentage": 0.0009131355247649378
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "e7ae74dbcfeb4aaf8774388598c054af"
+ },
+ "synthesis": {
+ "avg_delay_usec": 460.00053735004246,
+ "total_tx_rate": 284733
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "1280"
+ ],
+ "rate": "ndr",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 07:40:43",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "3fddc9f03eab4c30982c44200d95ef6f",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1280"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_100k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1280"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1280-fc_100k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1280": {
+ "ndr": {
+ "load_percent_per_direction": 4.98046875,
+ "timestamp_sec": 1646293386.7455893,
+ "stats": {
+ "total_tx_rate": 237983,
+ "overall": {
+ "rx_pkts": 2379828,
+ "drop_percentage": 0.0002941380389816941,
+ "drop_pct": 7,
+ "max_delay_usec": 9438,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2379835,
+ "avg_delay_usec": 386.4999609215456,
+ "min_delay_usec": 33,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1189917,
+ "min_delay_usec": 33,
+ "drop_pct": 0,
+ "max_delay_usec": 9438,
+ "tx_pkts": 1189918,
+ "avg_delay_usec": 371,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1189911,
+ "min_delay_usec": 38,
+ "drop_pct": 7,
+ "max_delay_usec": 3960,
+ "tx_pkts": 1189917,
+ "avg_delay_usec": 402,
+ "drop_percentage": 0.000588276325155452
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 2475023200.0,
+ "theoretical_tx_rate_pps": 4807692.307692308
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 9.9609375,
+ "duration_sec": 10.0,
+ "l2frame_size": "1280",
+ "rate_pps": 239444,
+ "rate_bps": 2490234374.0,
+ "time_taken_sec": 137.611346244812
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 358534.3786509994,
+ "rx_pkts": 3500830,
+ "time_ms": 1646293261625,
+ "drop_pct": 43442820,
+ "total_tx_pps": 4694365,
+ "tx_pps": 4807692,
+ "tx_pkts": 46943650,
+ "drop_percentage": 92.54248444677822
+ },
+ {
+ "rx_pps": 334304.0766214427,
+ "rx_pkts": 3322481,
+ "time_ms": 1646293274141,
+ "drop_pct": 20568142,
+ "total_tx_pps": 2389062,
+ "tx_pps": 2403846,
+ "tx_pkts": 23890623,
+ "drop_percentage": 86.09294952249675
+ },
+ {
+ "rx_pps": 116658.3609443631,
+ "rx_pkts": 1159526,
+ "time_ms": 1646293286673,
+ "drop_pct": 10786980,
+ "total_tx_pps": 1194650,
+ "tx_pps": 1201922,
+ "tx_pkts": 11946506,
+ "drop_percentage": 90.29401567286703
+ },
+ {
+ "rx_pps": 285569.6450320203,
+ "rx_pkts": 2838420,
+ "time_ms": 1646293299173,
+ "drop_pct": 3134823,
+ "total_tx_pps": 597324,
+ "tx_pps": 600960,
+ "tx_pkts": 5973243,
+ "drop_percentage": 52.48108941826074
+ },
+ {
+ "rx_pps": 300333.21198330424,
+ "rx_pkts": 2985163,
+ "time_ms": 1646293311671,
+ "drop_pct": 1459,
+ "total_tx_pps": 298662,
+ "tx_pps": 300480,
+ "tx_pkts": 2986622,
+ "drop_percentage": 0.04885117701537054
+ },
+ {
+ "rx_pps": 150240.0,
+ "rx_pkts": 1493236,
+ "time_ms": 1646293324172,
+ "drop_pct": 0,
+ "total_tx_pps": 149323,
+ "tx_pps": 150240,
+ "tx_pkts": 1493236,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 225358.89330561867,
+ "rx_pkts": 2239957,
+ "time_ms": 1646293336698,
+ "drop_pct": 11,
+ "total_tx_pps": 223996,
+ "tx_pps": 225360,
+ "tx_pkts": 2239968,
+ "drop_percentage": 0.0004910784439777711
+ },
+ {
+ "rx_pps": 262884.3287803163,
+ "rx_pkts": 2616225,
+ "time_ms": 1646293349210,
+ "drop_pct": 355,
+ "total_tx_pps": 261658,
+ "tx_pps": 262920,
+ "tx_pkts": 2616580,
+ "drop_percentage": 0.01356732834463307
+ },
+ {
+ "rx_pps": 244032.44942784897,
+ "rx_pkts": 2425563,
+ "time_ms": 1646293361717,
+ "drop_pct": 1069,
+ "total_tx_pps": 242663,
+ "tx_pps": 244140,
+ "tx_pkts": 2426632,
+ "drop_percentage": 0.04405282712829964
+ },
+ {
+ "rx_pps": 234750.0,
+ "rx_pkts": 2333417,
+ "time_ms": 1646293374219,
+ "drop_pct": 0,
+ "total_tx_pps": 233341,
+ "tx_pps": 234750,
+ "tx_pkts": 2333417,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 239443.29570411396,
+ "rx_pkts": 2379828,
+ "time_ms": 1646293386744,
+ "drop_pct": 7,
+ "total_tx_pps": 237983,
+ "tx_pps": 239444,
+ "tx_pkts": 2379835,
+ "ndr_pps": 119722,
+ "drop_percentage": 0.0002941380389816941
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "3fddc9f03eab4c30982c44200d95ef6f"
+ },
+ "synthesis": {
+ "avg_delay_usec": 386.4999609215456,
+ "total_tx_rate": 237983
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "1518"
+ ],
+ "rate": "ndr",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 07:43:10",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "6b244dd30f8e44208781c5d3283e8419",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1518"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_100k-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1518"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_1518-fc_100k-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1518": {
+ "ndr": {
+ "load_percent_per_direction": 6.4453125,
+ "timestamp_sec": 1646293533.4203305,
+ "stats": {
+ "total_tx_rate": 260333,
+ "overall": {
+ "rx_pkts": 2603335,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 7928,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2603335,
+ "avg_delay_usec": 480.00050320070216,
+ "min_delay_usec": 36,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1301602,
+ "min_delay_usec": 36,
+ "drop_pct": 0,
+ "max_delay_usec": 4539,
+ "tx_pkts": 1301733,
+ "avg_delay_usec": 470,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1301733,
+ "min_delay_usec": 36,
+ "drop_pct": 0,
+ "max_delay_usec": 7928,
+ "tx_pkts": 1301602,
+ "avg_delay_usec": 490,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 3203137232.0,
+ "theoretical_tx_rate_pps": 4063719.1157347206
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 12.890625,
+ "duration_sec": 10.0,
+ "l2frame_size": "1518",
+ "rate_pps": 261918,
+ "rate_bps": 3222656250.0,
+ "time_taken_sec": 137.72056579589844
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 325019.5206093959,
+ "rx_pkts": 3180144,
+ "time_ms": 1646293408209,
+ "drop_pct": 36581186,
+ "total_tx_pps": 3976133,
+ "tx_pps": 4063718,
+ "tx_pkts": 39761330,
+ "drop_percentage": 92.00191744089044
+ },
+ {
+ "rx_pps": 198729.36341220207,
+ "rx_pkts": 1975072,
+ "time_ms": 1646293420770,
+ "drop_pct": 18218551,
+ "total_tx_pps": 2019362,
+ "tx_pps": 2031858,
+ "tx_pkts": 20193623,
+ "drop_percentage": 90.21932815126834
+ },
+ {
+ "rx_pps": 157447.46203090227,
+ "rx_pkts": 1564792,
+ "time_ms": 1646293433286,
+ "drop_pct": 8532011,
+ "total_tx_pps": 1009680,
+ "tx_pps": 1015928,
+ "tx_pkts": 10096803,
+ "drop_percentage": 84.5021042799389
+ },
+ {
+ "rx_pps": 421490.29917415866,
+ "rx_pkts": 4189406,
+ "time_ms": 1646293445790,
+ "drop_pct": 859506,
+ "total_tx_pps": 504891,
+ "tx_pps": 507964,
+ "tx_pkts": 5048912,
+ "drop_percentage": 17.023588448362737
+ },
+ {
+ "rx_pps": 253980.49087030665,
+ "rx_pkts": 2524440,
+ "time_ms": 1646293458316,
+ "drop_pct": 15,
+ "total_tx_pps": 252445,
+ "tx_pps": 253982,
+ "tx_pkts": 2524455,
+ "drop_percentage": 0.0005941876563456271
+ },
+ {
+ "rx_pps": 378640.39427867,
+ "rx_pkts": 3763497,
+ "time_ms": 1646293470857,
+ "drop_pct": 23175,
+ "total_tx_pps": 378667,
+ "tx_pps": 380972,
+ "tx_pkts": 3786672,
+ "drop_percentage": 0.6120149830774886
+ },
+ {
+ "rx_pps": 316623.8329401139,
+ "rx_pkts": 3147085,
+ "time_ms": 1646293483376,
+ "drop_pct": 8490,
+ "total_tx_pps": 315557,
+ "tx_pps": 317478,
+ "tx_pkts": 3155575,
+ "drop_percentage": 0.26904763791068187
+ },
+ {
+ "rx_pps": 285718.32940377796,
+ "rx_pkts": 2839900,
+ "time_ms": 1646293495874,
+ "drop_pct": 116,
+ "total_tx_pps": 284001,
+ "tx_pps": 285730,
+ "tx_pkts": 2840016,
+ "drop_percentage": 0.004084484031075882
+ },
+ {
+ "rx_pps": 269556.6592924742,
+ "rx_pkts": 2678991,
+ "time_ms": 1646293508370,
+ "drop_pct": 2975,
+ "total_tx_pps": 268196,
+ "tx_pps": 269856,
+ "tx_pkts": 2681966,
+ "drop_percentage": 0.11092608929419687
+ },
+ {
+ "rx_pps": 261918.0,
+ "rx_pkts": 2603335,
+ "time_ms": 1646293520881,
+ "drop_pct": 0,
+ "total_tx_pps": 260333,
+ "tx_pps": 261918,
+ "tx_pkts": 2603335,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 265870.23458103574,
+ "rx_pkts": 2647670,
+ "time_ms": 1646293533419,
+ "drop_pct": 157,
+ "total_tx_pps": 264782,
+ "tx_pps": 265886,
+ "tx_pkts": 2647827,
+ "ndr_pps": 130959,
+ "drop_percentage": 0.005929390402016446
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "6b244dd30f8e44208781c5d3283e8419"
+ },
+ "synthesis": {
+ "avg_delay_usec": 480.00050320070216,
+ "total_tx_rate": 260333
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "IMIX"
+ ],
+ "rate": "ndr",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 07:52:56",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "62ffc44b9e274050bf0a7f2c90f3d093",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "IMIX"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_100k-rate_ndr-1.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "IMIX"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_IMIX-fc_100k-rate_ndr-1.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "IMIX": {
+ "ndr": {
+ "load_percent_per_direction": 1.66015625,
+ "timestamp_sec": 1646294119.6733074,
+ "stats": {
+ "total_tx_rate": 270069,
+ "overall": {
+ "rx_pkts": 2700692,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 6573,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2700692,
+ "avg_delay_usec": 496.00005109801486,
+ "min_delay_usec": 44,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1350277,
+ "min_delay_usec": 44,
+ "drop_pct": 0,
+ "max_delay_usec": 6573,
+ "tx_pkts": 1350415,
+ "avg_delay_usec": 495,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1350415,
+ "min_delay_usec": 48,
+ "drop_pct": 0,
+ "max_delay_usec": 6316,
+ "tx_pkts": 1350277,
+ "avg_delay_usec": 497,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 824970772.0,
+ "theoretical_tx_rate_pps": 16368398.079441292
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 3.3203125,
+ "duration_sec": 10.0,
+ "l2frame_size": "IMIX",
+ "rate_pps": 271740,
+ "rate_bps": 830078124.0,
+ "time_taken_sec": 137.6471085548401
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 480448.74165268464,
+ "rx_pkts": 4165250,
+ "time_ms": 1646293994528,
+ "drop_pct": 137740564,
+ "total_tx_pps": 14190581,
+ "tx_pps": 16368398,
+ "tx_pkts": 141905814,
+ "warning": "WARNING: There is a significant difference between requested TX rate (16368398) and actual TX rate (14190581). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 97.06477847341759
+ },
+ {
+ "rx_pps": 416594.083252382,
+ "rx_pkts": 4140320,
+ "time_ms": 1646294007091,
+ "drop_pct": 77198326,
+ "total_tx_pps": 8133864,
+ "tx_pps": 8184198,
+ "tx_pkts": 81338646,
+ "drop_percentage": 94.90977511477139
+ },
+ {
+ "rx_pps": 415810.74435162114,
+ "rx_pkts": 4132536,
+ "time_ms": 1646294019594,
+ "drop_pct": 36536789,
+ "total_tx_pps": 4066932,
+ "tx_pps": 4092098,
+ "tx_pkts": 40669325,
+ "drop_percentage": 89.83869046265214
+ },
+ {
+ "rx_pps": 227881.88764751662,
+ "rx_pkts": 2269362,
+ "time_ms": 1646294032114,
+ "drop_pct": 18106209,
+ "total_tx_pps": 2037557,
+ "tx_pps": 2046048,
+ "tx_pkts": 20375571,
+ "drop_percentage": 88.86233912168646
+ },
+ {
+ "rx_pps": 184754.45000274904,
+ "rx_pkts": 1836183,
+ "time_ms": 1646294044616,
+ "drop_pct": 8331146,
+ "total_tx_pps": 1016732,
+ "tx_pps": 1023024,
+ "tx_pkts": 10167329,
+ "drop_percentage": 81.9403601476848
+ },
+ {
+ "rx_pps": 434731.4595380578,
+ "rx_pkts": 4320582,
+ "time_ms": 1646294057121,
+ "drop_pct": 763084,
+ "total_tx_pps": 508366,
+ "tx_pps": 511512,
+ "tx_pkts": 5083666,
+ "drop_percentage": 15.010506197692767
+ },
+ {
+ "rx_pps": 255756.0,
+ "rx_pkts": 2541835,
+ "time_ms": 1646294069630,
+ "drop_pct": 0,
+ "total_tx_pps": 254183,
+ "tx_pps": 255756,
+ "tx_pkts": 2541835,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 381383.3612061213,
+ "rx_pkts": 3790383,
+ "time_ms": 1646294082142,
+ "drop_pct": 22368,
+ "total_tx_pps": 381275,
+ "tx_pps": 383634,
+ "tx_pkts": 3812751,
+ "drop_percentage": 0.5866630157594871
+ },
+ {
+ "rx_pps": 319677.01936570305,
+ "rx_pkts": 3181590,
+ "time_ms": 1646294094664,
+ "drop_pct": 169,
+ "total_tx_pps": 318175,
+ "tx_pps": 319694,
+ "tx_pkts": 3181759,
+ "drop_percentage": 0.005311527365837576
+ },
+ {
+ "rx_pps": 286984.929988342,
+ "rx_pkts": 2852492,
+ "time_ms": 1646294107173,
+ "drop_pct": 7346,
+ "total_tx_pps": 285983,
+ "tx_pps": 287724,
+ "tx_pkts": 2859838,
+ "drop_percentage": 0.2568676967017013
+ },
+ {
+ "rx_pps": 271740.0,
+ "rx_pkts": 2700692,
+ "time_ms": 1646294119672,
+ "drop_pct": 0,
+ "total_tx_pps": 270069,
+ "tx_pps": 271740,
+ "tx_pkts": 2700692,
+ "ndr_pps": 135870,
+ "drop_percentage": 0.0
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "62ffc44b9e274050bf0a7f2c90f3d093"
+ },
+ "synthesis": {
+ "avg_delay_usec": 496.00005109801486,
+ "total_tx_rate": 270069
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.intensive",
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "9000"
+ ],
+ "rate": "ndr",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "user_label": "amical_tc6_intensive"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-03 08:02:44",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "917d50701d4e429dad9083ff419756ca",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "9000"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 0,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_100k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "9000"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2504,
+ 2515
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": false,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc6_intensive",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.intensive",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/characterization/nfvbench-throughput-fs_9000-fc_100k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/characterization/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "9000": {
+ "ndr": {
+ "load_percent_per_direction": 22.265625,
+ "timestamp_sec": 1646294707.7233596,
+ "stats": {
+ "total_tx_rate": 153337,
+ "overall": {
+ "rx_pkts": 1533368,
+ "drop_percentage": 0.00019564736779292163,
+ "drop_pct": 3,
+ "max_delay_usec": 18880,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 1533371,
+ "avg_delay_usec": 987.5007708521373,
+ "min_delay_usec": 54,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 766686,
+ "min_delay_usec": 54,
+ "drop_pct": 0,
+ "max_delay_usec": 18880,
+ "tx_pkts": 766685,
+ "avg_delay_usec": 1283,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 766682,
+ "min_delay_usec": 54,
+ "drop_pct": 3,
+ "max_delay_usec": 16438,
+ "tx_pkts": 766686,
+ "avg_delay_usec": 692,
+ "drop_percentage": 0.00039129448040005945
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 11064797920.0,
+ "theoretical_tx_rate_pps": 692904.6563192905
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 44.53125,
+ "duration_sec": 10.0,
+ "l2frame_size": "9000",
+ "rate_pps": 154278,
+ "rate_bps": 11132812500.0,
+ "time_taken_sec": 137.58272123336792
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 90494.832576641,
+ "rx_pkts": 898795,
+ "time_ms": 1646294582631,
+ "drop_pct": 5983130,
+ "total_tx_pps": 688192,
+ "tx_pps": 692904,
+ "tx_pkts": 6881925,
+ "drop_percentage": 86.93977339189253
+ },
+ {
+ "rx_pps": 140749.47686318654,
+ "rx_pkts": 1398839,
+ "time_ms": 1646294595149,
+ "drop_pct": 2044375,
+ "total_tx_pps": 344321,
+ "tx_pps": 346452,
+ "tx_pkts": 3443214,
+ "drop_percentage": 59.374032517293436
+ },
+ {
+ "rx_pps": 173212.0139973792,
+ "rx_pkts": 1721469,
+ "time_ms": 1646294607646,
+ "drop_pct": 139,
+ "total_tx_pps": 172160,
+ "tx_pps": 173226,
+ "tx_pkts": 1721608,
+ "drop_percentage": 0.008073847240486801
+ },
+ {
+ "rx_pps": 86612.0,
+ "rx_pkts": 860795,
+ "time_ms": 1646294620168,
+ "drop_pct": 0,
+ "total_tx_pps": 86079,
+ "tx_pps": 86612,
+ "tx_pkts": 860795,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 129918.0,
+ "rx_pkts": 1291191,
+ "time_ms": 1646294632678,
+ "drop_pct": 0,
+ "total_tx_pps": 129119,
+ "tx_pps": 129918,
+ "tx_pkts": 1291191,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 151570.89330603922,
+ "rx_pkts": 1506541,
+ "time_ms": 1646294645208,
+ "drop_pct": 11,
+ "total_tx_pps": 150655,
+ "tx_pps": 151572,
+ "tx_pkts": 1506552,
+ "drop_percentage": 0.0007301440640615127
+ },
+ {
+ "rx_pps": 162054.72678886072,
+ "rx_pkts": 1611232,
+ "time_ms": 1646294657720,
+ "drop_pct": 3413,
+ "total_tx_pps": 161464,
+ "tx_pps": 162398,
+ "tx_pkts": 1614645,
+ "drop_percentage": 0.2113777331859325
+ },
+ {
+ "rx_pps": 156960.74598503095,
+ "rx_pkts": 1560035,
+ "time_ms": 1646294670223,
+ "drop_pct": 251,
+ "total_tx_pps": 156028,
+ "tx_pps": 156986,
+ "tx_pkts": 1560286,
+ "drop_percentage": 0.016086794344113836
+ },
+ {
+ "rx_pps": 154277.69815915392,
+ "rx_pkts": 1533368,
+ "time_ms": 1646294682722,
+ "drop_pct": 3,
+ "total_tx_pps": 153337,
+ "tx_pps": 154278,
+ "tx_pkts": 1533371,
+ "drop_percentage": 0.0001956473677929216
+ },
+ {
+ "rx_pps": 155550.0040687643,
+ "rx_pkts": 1546092,
+ "time_ms": 1646294695224,
+ "drop_pct": 815,
+ "total_tx_pps": 154690,
+ "tx_pps": 155632,
+ "tx_pkts": 1546907,
+ "drop_percentage": 0.05268577878308134
+ },
+ {
+ "rx_pps": 153977.28138199815,
+ "rx_pkts": 1530304,
+ "time_ms": 1646294707722,
+ "drop_pct": 9727,
+ "total_tx_pps": 154003,
+ "tx_pps": 154956,
+ "tx_pkts": 1540031,
+ "ndr_pps": 77139,
+ "drop_percentage": 0.6316106623827702
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "917d50701d4e429dad9083ff419756ca"
+ },
+ "synthesis": {
+ "avg_delay_usec": 987.5007708521373,
+ "total_tx_rate": 153337
+ }
+ }
+ ]
+ },
+ "fail_tests": 0,
+ "total_tests": 1,
+ "pass_tests": 1
+ }
+ }
+ ]
+}
diff --git a/test/ut_behave_tests/test_data/project=nfvbench&case=non-regression&criteria=PASS&page=1.json b/test/ut_behave_tests/test_data/project=nfvbench&case=non-regression&criteria=PASS&page=1.json
new file mode 100644
index 0000000..6af5404
--- /dev/null
+++ b/test/ut_behave_tests/test_data/project=nfvbench&case=non-regression&criteria=PASS&page=1.json
@@ -0,0 +1,8124 @@
+{
+ "pagination": {
+ "current_page": 1,
+ "total_pages": 1
+ },
+ "results": [
+ {
+ "project_name": "nfvbench",
+ "scenario": "basic",
+ "stop_date": "2022-03-30 06:48:26",
+ "case_name": "non-regression",
+ "build_tag": "RPDOUC5V2ARA",
+ "version": "unknown",
+ "pod_name": "AMICAL",
+ "criteria": "PASS",
+ "installer": "unknown",
+ "_id": "6243fd3bc0d88e001ca15689",
+ "start_date": "2022-03-30 06:15:40",
+ "details": {
+ "tests": [
+ {
+ "status": "passed",
+ "elements": [
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size -- @1.1 Frame sizes",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010585784912109375,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "64 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "64"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.799003601074219e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 0.00010967254638671875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.608268737792969e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 10.035421133041382,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 449.58826899528503,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00013637542724609375,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0003008842468261719,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "verify throughput result is in same range as the previous result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:14",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:333"
+ },
+ "result": {
+ "duration": 0.02466893196105957,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "verify throughput result is in same range as the characterization result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:15",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:409"
+ },
+ "result": {
+ "duration": 0.6800198554992676,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:19",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size -- @1.2 Frame sizes",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00011587142944335938,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "768 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "768"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.00011491775512695312,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.5367431640625e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.322166442871094e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008649349212646484,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.46048855781555,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012159347534179688,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.0003330707550048828,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "verify throughput result is in same range as the previous result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:14",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:333"
+ },
+ "result": {
+ "duration": 0.023331880569458008,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "verify throughput result is in same range as the characterization result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:15",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:409"
+ },
+ "result": {
+ "duration": 0.690040111541748,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:20",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size -- @1.3 Frame sizes",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010156631469726562,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1518 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1518"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.584426879882812e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.489059448242188e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 9.632110595703125e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008922100067138672,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 441.5395607948303,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012230873107910156,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.00034332275390625,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "verify throughput result is in same range as the previous result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:14",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:333"
+ },
+ "result": {
+ "duration": 0.022931814193725586,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "verify throughput result is in same range as the characterization result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:15",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:409"
+ },
+ "result": {
+ "duration": 0.5106196403503418,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:21",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a NDR test for a defined frame size -- @1.4 Frame sizes",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "throughput"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:6",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010037422180175781,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "9000 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:7",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "9000"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.560585021972656e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:8",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.465217590332031e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "ndr rate",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:9",
+ "match": {
+ "arguments": [
+ {
+ "name": "rate",
+ "value": "ndr"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:119"
+ },
+ "result": {
+ "duration": 0.000102996826171875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:10",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.00852203369140625,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "3 runs are started and waiting for maximum result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:11",
+ "match": {
+ "arguments": [
+ {
+ "name": "repeat",
+ "value": 3,
+ "original": "3"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 439.5287985801697,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:12",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012087821960449219,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "extract offered rate result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:13",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:327"
+ },
+ "result": {
+ "duration": 0.000316619873046875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "verify throughput result is in same range as the previous result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:14",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:333"
+ },
+ "result": {
+ "duration": 0.02317047119140625,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "verify throughput result is in same range as the characterization result",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:15",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:409"
+ },
+ "result": {
+ "duration": 0.6906359195709229,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:22",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.1 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:27",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.0001735687255859375,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "64 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:28",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "64"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.799003601074219e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:29",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.751319885253906e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "packet rate equal to 70% of max throughput of last characterization",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:30",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage",
+ "value": "70%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:137"
+ },
+ "result": {
+ "duration": 3.042870044708252,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:31",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.00884389877319336,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:32",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 20.07615303993225,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:33",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012111663818359375,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "verify latency result is lower than 1000 microseconds",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:34",
+ "match": {
+ "arguments": [
+ {
+ "name": "max_avg_latency_usec",
+ "value": 1000.0,
+ "original": "1000"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:351"
+ },
+ "result": {
+ "duration": 0.0001919269561767578,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:38",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.2 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:27",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010085105895996094,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "64 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:28",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "64"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.00011873245239257812,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:29",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.560585021972656e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "packet rate equal to 90% of max throughput of last characterization",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:30",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage",
+ "value": "90%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:137"
+ },
+ "result": {
+ "duration": 2.90081524848938,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:31",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008797883987426758,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:32",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 20.11899709701538,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:33",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00013256072998046875,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "verify latency result is lower than 1000 microseconds",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:34",
+ "match": {
+ "arguments": [
+ {
+ "name": "max_avg_latency_usec",
+ "value": 1000.0,
+ "original": "1000"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:351"
+ },
+ "result": {
+ "duration": 0.0001926422119140625,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:39",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.3 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:27",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.822845458984375e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "768 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:28",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "768"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 0.00011396408081054688,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:29",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.775161743164062e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "packet rate equal to 70% of max throughput of last characterization",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:30",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage",
+ "value": "70%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:137"
+ },
+ "result": {
+ "duration": 3.1052234172821045,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:31",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008736610412597656,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:32",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 20.07916784286499,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:33",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011897087097167969,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "verify latency result is lower than 1000 microseconds",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:34",
+ "match": {
+ "arguments": [
+ {
+ "name": "max_avg_latency_usec",
+ "value": 1000.0,
+ "original": "1000"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:351"
+ },
+ "result": {
+ "duration": 0.0002129077911376953,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:40",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.4 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:27",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010061264038085938,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "768 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:28",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "768"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.560585021972656e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:29",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.632110595703125e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "packet rate equal to 90% of max throughput of last characterization",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:30",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage",
+ "value": "90%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:137"
+ },
+ "result": {
+ "duration": 2.9584743976593018,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:31",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008613348007202148,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:32",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 20.074522256851196,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:33",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.0001220703125,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "verify latency result is lower than 1000 microseconds",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:34",
+ "match": {
+ "arguments": [
+ {
+ "name": "max_avg_latency_usec",
+ "value": 1000.0,
+ "original": "1000"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:351"
+ },
+ "result": {
+ "duration": 0.00019407272338867188,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:41",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.5 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:27",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010061264038085938,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1518 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:28",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1518"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.703636169433594e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:29",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 0.00011610984802246094,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "packet rate equal to 70% of max throughput of last characterization",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:30",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage",
+ "value": "70%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:137"
+ },
+ "result": {
+ "duration": 3.118863821029663,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:31",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008606433868408203,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:32",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 20.080474376678467,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:33",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012254714965820312,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "verify latency result is lower than 1000 microseconds",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:34",
+ "match": {
+ "arguments": [
+ {
+ "name": "max_avg_latency_usec",
+ "value": 1000.0,
+ "original": "1000"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:351"
+ },
+ "result": {
+ "duration": 0.00019216537475585938,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:42",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.6 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:27",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010013580322265625,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "1518 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:28",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "1518"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.942054748535156e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:29",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.703636169433594e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "packet rate equal to 90% of max throughput of last characterization",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:30",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage",
+ "value": "90%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:137"
+ },
+ "result": {
+ "duration": 2.9169235229492188,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:31",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008793830871582031,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:32",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 18.160871744155884,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:33",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00012159347534179688,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "verify latency result is lower than 1000 microseconds",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:34",
+ "match": {
+ "arguments": [
+ {
+ "name": "max_avg_latency_usec",
+ "value": 1000.0,
+ "original": "1000"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:351"
+ },
+ "result": {
+ "duration": 0.00019097328186035156,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:43",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.7 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:27",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 9.965896606445312e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "9000 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:28",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "9000"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.918212890625e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:29",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.655952453613281e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "packet rate equal to 70% of max throughput of last characterization",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:30",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage",
+ "value": "70%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:137"
+ },
+ "result": {
+ "duration": 2.906872272491455,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:31",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008602142333984375,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:32",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 20.075267791748047,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:33",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011920928955078125,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "verify latency result is lower than 1000 microseconds",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:34",
+ "match": {
+ "arguments": [
+ {
+ "name": "max_avg_latency_usec",
+ "value": 1000.0,
+ "original": "1000"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:351"
+ },
+ "result": {
+ "duration": 0.00020933151245117188,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:44",
+ "type": "scenario"
+ },
+ {
+ "status": "passed",
+ "name": "Run a latency test for a defined frame size and throughput percentage -- @1.8 Frame sizes and throughput percentages",
+ "keyword": "Scenario Outline",
+ "tags": [
+ "latency"
+ ],
+ "steps": [
+ {
+ "name": "10 sec run duration",
+ "keyword": "Given",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:27",
+ "match": {
+ "arguments": [
+ {
+ "name": "duration",
+ "value": "10"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:124"
+ },
+ "result": {
+ "duration": 0.00010251998901367188,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "9000 frame size",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:28",
+ "match": {
+ "arguments": [
+ {
+ "name": "frame_size",
+ "value": "9000"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:109"
+ },
+ "result": {
+ "duration": 9.72747802734375e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "100k flow count",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:29",
+ "match": {
+ "arguments": [
+ {
+ "name": "flow_count",
+ "value": "100k"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:114"
+ },
+ "result": {
+ "duration": 9.465217590332031e-05,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "packet rate equal to 90% of max throughput of last characterization",
+ "keyword": "And",
+ "step_type": "given",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:30",
+ "match": {
+ "arguments": [
+ {
+ "name": "percentage",
+ "value": "90%"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:137"
+ },
+ "result": {
+ "duration": 2.828930139541626,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "NFVbench API is ready",
+ "keyword": "When",
+ "step_type": "when",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:31",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:210"
+ },
+ "result": {
+ "duration": 0.008794546127319336,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "run is started and waiting for result",
+ "keyword": "Then",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:32",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:264"
+ },
+ "result": {
+ "duration": 20.077053785324097,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "push result to database",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:33",
+ "match": {
+ "arguments": [],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:426"
+ },
+ "result": {
+ "duration": 0.00011849403381347656,
+ "status": "passed"
+ }
+ },
+ {
+ "name": "verify latency result is lower than 1000 microseconds",
+ "keyword": "And",
+ "step_type": "then",
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:34",
+ "match": {
+ "arguments": [
+ {
+ "name": "max_avg_latency_usec",
+ "value": 1000.0,
+ "original": "1000"
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/steps/steps.py:351"
+ },
+ "result": {
+ "duration": 0.0002167224884033203,
+ "status": "passed"
+ }
+ }
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:45",
+ "type": "scenario"
+ }
+ ],
+ "name": "non-regression",
+ "keyword": "Feature",
+ "tags": [
+ "non-regression"
+ ],
+ "location": "../../opt/nfvbench/behave_tests/features/non-regression.feature:2"
+ }
+ ],
+ "skip_tests": 0,
+ "links": [
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/xtesting.log",
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/non-regression/nfvbench-throughput-fs_768-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/non-regression/nfvbench-throughput-fs_1518-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/non-regression/nfvbench-throughput-fs_9000-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/non-regression/output.html",
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/non-regression/nfvbench-throughput-fs_9000-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/non-regression/nfvbench-throughput-fs_64-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/non-regression/nfvbench-latency-fs_64-fc_100k-rate_70%.json",
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/non-regression/nfvbench-throughput-fs_64-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/non-regression/nfvbench-throughput-fs_1518-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/non-regression/behave_tests.log",
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/non-regression/nfvbench-latency-fs_9000-fc_100k-rate_70%.json",
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/non-regression/nfvbench-throughput-fs_768-fc_100k-rate_ndr-1.json",
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/non-regression/campaign_result.json",
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/non-regression/nfvbench-latency-fs_768-fc_100k-rate_90%.json",
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/non-regression/nfvbench-throughput-fs_64-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/non-regression/nfvbench-latency-fs_1518-fc_100k-rate_90%.json",
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/non-regression/nfvbench-throughput-fs_9000-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/non-regression/nfvbench-throughput-fs_1518-fc_100k-rate_ndr-0.json",
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/non-regression/nfvbench-throughput-fs_768-fc_100k-rate_ndr-2.json",
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/non-regression/nfvbench-latency-fs_64-fc_100k-rate_90%.json",
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/non-regression/TESTS-non-regression.xml",
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/non-regression/nfvbench-latency-fs_768-fc_100k-rate_70%.json",
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/non-regression/nfvbench.log",
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/non-regression/nfvbench-latency-fs_9000-fc_100k-rate_90%.json",
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/non-regression/nfvbench-latency-fs_1518-fc_100k-rate_70%.json",
+ "http://172.20.73.203:8181/RPDOUC5V2ARA/nfvbench-amical-e2e-basic-_-nfvbench-launcher-latest-devel-nfvbench_e2e_only_test_non-regression-run-41/non-regression/output.json"
+ ],
+ "results": {
+ "latency": [
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/non-regression/nfvbench-latency-fs_64-fc_100k-rate_70%.json",
+ "frame_sizes": [
+ "64"
+ ],
+ "rate": "70%",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/non-regression/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-30 06:45:29",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "75ed0568a3cf49929e20d9d4c44a23a0",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "404398pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "64"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/non-regression/nfvbench-latency-fs_64-fc_100k-rate_70%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "64"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2512,
+ 2517
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/non-regression/nfvbench-latency-fs_64-fc_100k-rate_70%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/non-regression/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "64": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 0.5414414208000001,
+ "rate_pps": 201429,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 135360355
+ },
+ "tx": {
+ "rate_percent": 0.5414497536,
+ "rate_pps": 201432,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 135362438
+ },
+ "orig": {
+ "rate_percent": 0.543510912,
+ "rate_pps": 202199,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 135877728
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 1.082844672,
+ "rate_pps": 402843.0,
+ "rate_bps": 270711167.0
+ },
+ "tx": {
+ "rate_percent": 1.0828995072,
+ "rate_pps": 402864.0,
+ "rate_bps": 270724876.0
+ },
+ "orig": {
+ "rate_percent": 1.087021824,
+ "rate_pps": 404398.0,
+ "rate_bps": 271755456.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 0.5414032511999999,
+ "rate_pps": 201414,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 135350812
+ },
+ "tx": {
+ "rate_percent": 0.5414497536,
+ "rate_pps": 201432,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 135362438
+ },
+ "orig": {
+ "rate_percent": 0.543510912,
+ "rate_pps": 202199,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 135877728
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9937,
+ 9937
+ ],
+ "lat_max_usec": 4057,
+ "lat_avg_usec": 78,
+ "lat_min_usec": 31,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9937,
+ 9937
+ ],
+ "lat_max_usec": 5209,
+ "lat_avg_usec": 76,
+ "lat_min_usec": 32,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 402864,
+ "overall": {
+ "drop_rate_percent": 0.005063738568113737,
+ "rx": {
+ "dropped_pkts": 204,
+ "pkt_bit_rate": 109803088.0,
+ "pkt_rate": 201839.0,
+ "max_delay_usec": 5209,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 76.99996475062306,
+ "total_pkt_bytes": 273933920,
+ "total_pkts": 4028440,
+ "min_delay_usec": 31
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 273947792,
+ "total_pkts": 4028644,
+ "pkt_bit_rate": 109803752.0,
+ "pkt_rate": 201840.5
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.0015389793687404496,
+ "rx": {
+ "dropped_pkts": 31,
+ "pkt_bit_rate": 109811680,
+ "pkt_rate": 201855,
+ "max_delay_usec": 5209,
+ "total_pkt_bytes": 136971788,
+ "avg_delay_usec": 76,
+ "total_pkts": 2014291,
+ "min_delay_usec": 32
+ },
+ "tx": {
+ "total_pkt_bytes": 136973896,
+ "total_pkts": 2014322,
+ "pkt_bit_rate": 109806936,
+ "pkt_rate": 201846
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.008588497767487026,
+ "rx": {
+ "dropped_pkts": 173,
+ "pkt_bit_rate": 109794496,
+ "pkt_rate": 201823,
+ "max_delay_usec": 4057,
+ "total_pkt_bytes": 136962132,
+ "avg_delay_usec": 78,
+ "total_pkts": 2014149,
+ "min_delay_usec": 31
+ },
+ "tx": {
+ "total_pkt_bytes": 136973896,
+ "total_pkts": 2014322,
+ "pkt_bit_rate": 109800568,
+ "pkt_rate": 201835
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 270724608.0,
+ "theoretical_tx_rate_pps": 74404761.90476191
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "75ed0568a3cf49929e20d9d4c44a23a0"
+ },
+ "synthesis": {
+ "avg_delay_usec": 76.99996475062306,
+ "total_tx_rate": 402864
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/non-regression/nfvbench-latency-fs_64-fc_100k-rate_90%.json",
+ "frame_sizes": [
+ "64"
+ ],
+ "rate": "90%",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/non-regression/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-30 06:45:52",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "79137fde73644833ac7d36e6523616ef",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "519940pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "64"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/non-regression/nfvbench-latency-fs_64-fc_100k-rate_90%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "64"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2512,
+ 2517
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/non-regression/nfvbench-latency-fs_64-fc_100k-rate_90%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/non-regression/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "64": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 0.6964035456000001,
+ "rate_pps": 259078,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 174100886
+ },
+ "tx": {
+ "rate_percent": 0.6964035456000001,
+ "rate_pps": 259078,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 174100886
+ },
+ "orig": {
+ "rate_percent": 0.69879936,
+ "rate_pps": 259970,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 174699840
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 1.3929753599999999,
+ "rate_pps": 518219.0,
+ "rate_bps": 348243839.0
+ },
+ "tx": {
+ "rate_percent": 1.3929753599999999,
+ "rate_pps": 518219.0,
+ "rate_bps": 348243839.0
+ },
+ "orig": {
+ "rate_percent": 1.39759872,
+ "rate_pps": 519940.0,
+ "rate_bps": 349399680.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 0.6965718143999999,
+ "rate_pps": 259141,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 174142953
+ },
+ "tx": {
+ "rate_percent": 0.6965718143999999,
+ "rate_pps": 259141,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 174142953
+ },
+ "orig": {
+ "rate_percent": 0.69879936,
+ "rate_pps": 259970,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 174699840
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9943,
+ 9943
+ ],
+ "lat_max_usec": 769,
+ "lat_avg_usec": 108,
+ "lat_min_usec": 36,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9948,
+ 9948
+ ],
+ "lat_max_usec": 6239,
+ "lat_avg_usec": 113,
+ "lat_min_usec": 34,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 518220,
+ "overall": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 141244984.0,
+ "pkt_rate": 259641.0,
+ "max_delay_usec": 6239,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 110.49969800470842,
+ "total_pkt_bytes": 352389600,
+ "total_pkts": 5182200,
+ "min_delay_usec": 34
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 352389600,
+ "total_pkts": 5182200,
+ "pkt_bit_rate": 141253832.0,
+ "pkt_rate": 259656.5
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 141247136,
+ "pkt_rate": 259645,
+ "max_delay_usec": 6239,
+ "total_pkt_bytes": 176173516,
+ "avg_delay_usec": 113,
+ "total_pkts": 2590787,
+ "min_delay_usec": 34
+ },
+ "tx": {
+ "total_pkt_bytes": 176216084,
+ "total_pkts": 2591413,
+ "pkt_bit_rate": 141261952,
+ "pkt_rate": 259671
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 141242832,
+ "pkt_rate": 259637,
+ "max_delay_usec": 769,
+ "total_pkt_bytes": 176216084,
+ "avg_delay_usec": 108,
+ "total_pkts": 2591413,
+ "min_delay_usec": 36
+ },
+ "tx": {
+ "total_pkt_bytes": 176173516,
+ "total_pkts": 2590787,
+ "pkt_bit_rate": 141245712,
+ "pkt_rate": 259642
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 348243840.0,
+ "theoretical_tx_rate_pps": 74404761.90476191
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "79137fde73644833ac7d36e6523616ef"
+ },
+ "synthesis": {
+ "avg_delay_usec": 110.49969800470842,
+ "total_tx_rate": 518220
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/non-regression/nfvbench-latency-fs_768-fc_100k-rate_70%.json",
+ "frame_sizes": [
+ "768"
+ ],
+ "rate": "70%",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/non-regression/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-30 06:46:15",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "018ded21d6884356b306acecf1de061e",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "323313pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "768"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/non-regression/nfvbench-latency-fs_768-fc_100k-rate_70%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "768"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2512,
+ 2517
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/non-regression/nfvbench-latency-fs_768-fc_100k-rate_70%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/non-regression/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "768": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 4.060615692799999,
+ "rate_pps": 161033,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1015153923
+ },
+ "tx": {
+ "rate_percent": 4.060615692799999,
+ "rate_pps": 161033,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1015153923
+ },
+ "orig": {
+ "rate_percent": 4.076330304,
+ "rate_pps": 161656,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1019082576
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 8.1214759808,
+ "rate_pps": 322076.0,
+ "rate_bps": 2030368995.0
+ },
+ "tx": {
+ "rate_percent": 8.1214759808,
+ "rate_pps": 322076.0,
+ "rate_bps": 2030368995.0
+ },
+ "orig": {
+ "rate_percent": 8.152660608,
+ "rate_pps": 323312.0,
+ "rate_bps": 2038165152.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 4.060860288,
+ "rate_pps": 161043,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1015215072
+ },
+ "tx": {
+ "rate_percent": 4.060860288,
+ "rate_pps": 161043,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1015215072
+ },
+ "orig": {
+ "rate_percent": 4.076330304,
+ "rate_pps": 161656,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1019082576
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9936,
+ 9936
+ ],
+ "lat_max_usec": 372,
+ "lat_avg_usec": 145,
+ "lat_min_usec": 54,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9937,
+ 9937
+ ],
+ "lat_max_usec": 4837,
+ "lat_avg_usec": 145,
+ "lat_min_usec": 60,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 322076,
+ "overall": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 997521760.0,
+ "pkt_rate": 161515.5,
+ "max_delay_usec": 4837,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 145.0,
+ "total_pkt_bytes": 2486429036,
+ "total_pkts": 3220763,
+ "min_delay_usec": 54
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 2486429036,
+ "total_pkts": 3220763,
+ "pkt_bit_rate": 997554144.0,
+ "pkt_rate": 161520.5
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 997543808,
+ "pkt_rate": 161519,
+ "max_delay_usec": 4837,
+ "total_pkt_bytes": 1243177076,
+ "avg_delay_usec": 145,
+ "total_pkts": 1610333,
+ "min_delay_usec": 60
+ },
+ "tx": {
+ "total_pkt_bytes": 1243251960,
+ "total_pkts": 1610430,
+ "pkt_bit_rate": 997507712,
+ "pkt_rate": 161513
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 997499712,
+ "pkt_rate": 161512,
+ "max_delay_usec": 372,
+ "total_pkt_bytes": 1243251960,
+ "avg_delay_usec": 145,
+ "total_pkts": 1610430,
+ "min_delay_usec": 54
+ },
+ "tx": {
+ "total_pkt_bytes": 1243177076,
+ "total_pkts": 1610333,
+ "pkt_bit_rate": 997600576,
+ "pkt_rate": 161528
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 2030367104.0,
+ "theoretical_tx_rate_pps": 7931472.081218274
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "018ded21d6884356b306acecf1de061e"
+ },
+ "synthesis": {
+ "avg_delay_usec": 145.0,
+ "total_tx_rate": 322076
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/non-regression/nfvbench-latency-fs_768-fc_100k-rate_90%.json",
+ "frame_sizes": [
+ "768"
+ ],
+ "rate": "90%",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/non-regression/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-30 06:46:38",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "ad05bbb2c1a747e2a90c860566eea05b",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "415688pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "768"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/non-regression/nfvbench-latency-fs_768-fc_100k-rate_90%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "768"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2512,
+ 2517
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/non-regression/nfvbench-latency-fs_768-fc_100k-rate_90%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/non-regression/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "768": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 5.2271154176,
+ "rate_pps": 207293,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1306778854
+ },
+ "tx": {
+ "rate_percent": 5.2271154176,
+ "rate_pps": 207293,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1306778854
+ },
+ "orig": {
+ "rate_percent": 5.240994304,
+ "rate_pps": 207844,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1310248576
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 10.454548556800003,
+ "rate_pps": 414599.0,
+ "rate_bps": 2613637138.0
+ },
+ "tx": {
+ "rate_percent": 10.454548556800003,
+ "rate_pps": 414599.0,
+ "rate_bps": 2613637138.0
+ },
+ "orig": {
+ "rate_percent": 10.481988608,
+ "rate_pps": 415688.0,
+ "rate_bps": 2620497152.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 5.227433139200001,
+ "rate_pps": 207306,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1306858284
+ },
+ "tx": {
+ "rate_percent": 5.227433139200001,
+ "rate_pps": 207306,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1306858284
+ },
+ "orig": {
+ "rate_percent": 5.240994304,
+ "rate_pps": 207844,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 1310248576
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9956,
+ 9956
+ ],
+ "lat_max_usec": 213,
+ "lat_avg_usec": 79,
+ "lat_min_usec": 33,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9958,
+ 9958
+ ],
+ "lat_max_usec": 3751,
+ "lat_avg_usec": 80,
+ "lat_min_usec": 32,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 414599,
+ "overall": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 1277907840.0,
+ "pkt_rate": 206914.5,
+ "max_delay_usec": 3751,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 79.49998480462364,
+ "total_pkt_bytes": 3200710456,
+ "total_pkts": 4145998,
+ "min_delay_usec": 32
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 3200710456,
+ "total_pkts": 4145998,
+ "pkt_bit_rate": 1279049856.0,
+ "pkt_rate": 207099.5
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 1275807616,
+ "pkt_rate": 206575,
+ "max_delay_usec": 3751,
+ "total_pkt_bytes": 1600306592,
+ "avg_delay_usec": 80,
+ "total_pkts": 2072936,
+ "min_delay_usec": 32
+ },
+ "tx": {
+ "total_pkt_bytes": 1600403864,
+ "total_pkts": 2073062,
+ "pkt_bit_rate": 1279909120,
+ "pkt_rate": 207239
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 1280008064,
+ "pkt_rate": 207254,
+ "max_delay_usec": 213,
+ "total_pkt_bytes": 1600403864,
+ "avg_delay_usec": 79,
+ "total_pkts": 2073062,
+ "min_delay_usec": 33
+ },
+ "tx": {
+ "total_pkt_bytes": 1600306592,
+ "total_pkts": 2072936,
+ "pkt_bit_rate": 1278190592,
+ "pkt_rate": 206960
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 2613632096.0,
+ "theoretical_tx_rate_pps": 7931472.081218274
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "ad05bbb2c1a747e2a90c860566eea05b"
+ },
+ "synthesis": {
+ "avg_delay_usec": 79.49998480462364,
+ "total_tx_rate": 414599
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/non-regression/nfvbench-latency-fs_1518-fc_100k-rate_70%.json",
+ "frame_sizes": [
+ "1518"
+ ],
+ "rate": "70%",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/non-regression/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-30 06:47:01",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "cc041b8004d74c0a8d8594f9b1cb7094",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "353370pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1518"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/non-regression/nfvbench-latency-fs_1518-fc_100k-rate_70%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1518"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2512,
+ 2517
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/non-regression/nfvbench-latency-fs_1518-fc_100k-rate_70%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/non-regression/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1518": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 8.6593927872,
+ "rate_pps": 175946,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 2164848196
+ },
+ "tx": {
+ "rate_percent": 8.662744396799999,
+ "rate_pps": 176014,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 2165686099
+ },
+ "orig": {
+ "rate_percent": 8.69572896,
+ "rate_pps": 176685,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 2173932240
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 17.321684396800002,
+ "rate_pps": 351951.0,
+ "rate_bps": 4330421098.0
+ },
+ "tx": {
+ "rate_percent": 17.326015404799996,
+ "rate_pps": 352039.0,
+ "rate_bps": 4331503851.0
+ },
+ "orig": {
+ "rate_percent": 17.39145792,
+ "rate_pps": 353370.0,
+ "rate_bps": 4347864480.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 8.6622916096,
+ "rate_pps": 176005,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 2165572902
+ },
+ "tx": {
+ "rate_percent": 8.663271007999999,
+ "rate_pps": 176025,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 2165817752
+ },
+ "orig": {
+ "rate_percent": 8.69572896,
+ "rate_pps": 176685,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 2173932240
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9938,
+ "-4 (-0.0402%)"
+ ],
+ "lat_max_usec": 2443,
+ "lat_avg_usec": 112,
+ "lat_min_usec": 36,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9939,
+ 9939
+ ],
+ "lat_max_usec": 12936,
+ "lat_avg_usec": 116,
+ "lat_min_usec": 38,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 352040,
+ "overall": {
+ "drop_rate_percent": 0.02499713811174459,
+ "rx": {
+ "dropped_pkts": 880,
+ "pkt_bit_rate": 2018299584.0,
+ "pkt_rate": 165760.0,
+ "max_delay_usec": 12936,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 113.99966529555283,
+ "total_pkt_bytes": 5356714006,
+ "total_pkts": 3519523,
+ "min_delay_usec": 36
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 5358053366,
+ "total_pkts": 3520403,
+ "pkt_bit_rate": 2018089472.0,
+ "pkt_rate": 165742.5
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.03868757651590252,
+ "rx": {
+ "dropped_pkts": 681,
+ "pkt_bit_rate": 2007099776,
+ "pkt_rate": 164840,
+ "max_delay_usec": 12936,
+ "total_pkt_bytes": 2677908774,
+ "avg_delay_usec": 116,
+ "total_pkts": 1759467,
+ "min_delay_usec": 38
+ },
+ "tx": {
+ "total_pkt_bytes": 2679108110,
+ "total_pkts": 1760255,
+ "pkt_bit_rate": 2018672768,
+ "pkt_rate": 165791
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.011305867461145312,
+ "rx": {
+ "dropped_pkts": 199,
+ "pkt_bit_rate": 2029499392,
+ "pkt_rate": 166680,
+ "max_delay_usec": 2443,
+ "total_pkt_bytes": 2678805232,
+ "avg_delay_usec": 112,
+ "total_pkts": 1760056,
+ "min_delay_usec": 36
+ },
+ "tx": {
+ "total_pkt_bytes": 2678945256,
+ "total_pkts": 1760148,
+ "pkt_bit_rate": 2017506176,
+ "pkt_rate": 165694
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 4331500160.0,
+ "theoretical_tx_rate_pps": 4063719.1157347206
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "cc041b8004d74c0a8d8594f9b1cb7094"
+ },
+ "synthesis": {
+ "avg_delay_usec": 113.99966529555283,
+ "total_tx_rate": 352040
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/non-regression/nfvbench-latency-fs_1518-fc_100k-rate_90%.json",
+ "frame_sizes": [
+ "1518"
+ ],
+ "rate": "90%",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/non-regression/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-30 06:47:24",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "c882cf33b2e045618c1b76b924573708",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "454333pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1518"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/non-regression/nfvbench-latency-fs_1518-fc_100k-rate_90%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1518"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2512,
+ 2517
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/non-regression/nfvbench-latency-fs_1518-fc_100k-rate_90%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/non-regression/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1518": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 11.1361683008,
+ "rate_pps": 226271,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 2784042075
+ },
+ "tx": {
+ "rate_percent": 11.137846566399999,
+ "rate_pps": 226305,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 2784461641
+ },
+ "orig": {
+ "rate_percent": 11.180226464,
+ "rate_pps": 227166,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 2795056616
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 22.2746891264,
+ "rate_pps": 452590.0,
+ "rate_bps": 5568672281.0
+ },
+ "tx": {
+ "rate_percent": 22.276367391999997,
+ "rate_pps": 452624.0,
+ "rate_bps": 5569091847.0
+ },
+ "orig": {
+ "rate_percent": 22.360452928,
+ "rate_pps": 454332.0,
+ "rate_bps": 5590113232.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 11.1385208256,
+ "rate_pps": 226319,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 2784630206
+ },
+ "tx": {
+ "rate_percent": 11.1385208256,
+ "rate_pps": 226319,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 2784630206
+ },
+ "orig": {
+ "rate_percent": 11.180226464,
+ "rate_pps": 227166,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 2795056616
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9937,
+ "-1 (-0.0101%)"
+ ],
+ "lat_max_usec": 198,
+ "lat_avg_usec": 90,
+ "lat_min_usec": 37,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9938,
+ 9938
+ ],
+ "lat_max_usec": 5322,
+ "lat_avg_usec": 93,
+ "lat_min_usec": 35,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 452624,
+ "overall": {
+ "drop_rate_percent": 0.007533838755966591,
+ "rx": {
+ "dropped_pkts": 341,
+ "pkt_bit_rate": 2761265024.0,
+ "pkt_rate": 226779.0,
+ "max_delay_usec": 5322,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 91.4998415786106,
+ "total_pkt_bytes": 6888425888,
+ "total_pkts": 4525904,
+ "min_delay_usec": 35
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 6888944890,
+ "total_pkts": 4526245,
+ "pkt_bit_rate": 2761356672.0,
+ "pkt_rate": 226786.5
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.015067221458551222,
+ "rx": {
+ "dropped_pkts": 341,
+ "pkt_bit_rate": 2761269504,
+ "pkt_rate": 226779,
+ "max_delay_usec": 5322,
+ "total_pkt_bytes": 3443849186,
+ "avg_delay_usec": 93,
+ "total_pkts": 2262713,
+ "min_delay_usec": 35
+ },
+ "tx": {
+ "total_pkt_bytes": 3444576702,
+ "total_pkts": 2263191,
+ "pkt_bit_rate": 2761352192,
+ "pkt_rate": 226786
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 2761260544,
+ "pkt_rate": 226779,
+ "max_delay_usec": 198,
+ "total_pkt_bytes": 3444576702,
+ "avg_delay_usec": 90,
+ "total_pkts": 2263191,
+ "min_delay_usec": 37
+ },
+ "tx": {
+ "total_pkt_bytes": 3444368188,
+ "total_pkts": 2263054,
+ "pkt_bit_rate": 2761361152,
+ "pkt_rate": 226787
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 5569085696.0,
+ "theoretical_tx_rate_pps": 4063719.1157347206
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "c882cf33b2e045618c1b76b924573708"
+ },
+ "synthesis": {
+ "avg_delay_usec": 91.4998415786106,
+ "total_tx_rate": 452624
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/non-regression/nfvbench-latency-fs_9000-fc_100k-rate_70%.json",
+ "frame_sizes": [
+ "9000"
+ ],
+ "rate": "70%",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/non-regression/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-30 06:47:45",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "c78cef8058b74f9885f125b3bf43f1da",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "183574pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "9000"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/non-regression/nfvbench-latency-fs_9000-fc_100k-rate_70%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "9000"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2512,
+ 2517
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/non-regression/nfvbench-latency-fs_9000-fc_100k-rate_70%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/non-regression/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "9000": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 26.390961344,
+ "rate_pps": 91432,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 6597740336
+ },
+ "tx": {
+ "rate_percent": 26.390961344,
+ "rate_pps": 91432,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 6597740336
+ },
+ "orig": {
+ "rate_percent": 26.493399680000003,
+ "rate_pps": 91787,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 6623349920
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 52.783539071999996,
+ "rate_pps": 182869.0,
+ "rate_bps": 13195884768.0
+ },
+ "tx": {
+ "rate_percent": 52.783539071999996,
+ "rate_pps": 182869.0,
+ "rate_bps": 13195884768.0
+ },
+ "orig": {
+ "rate_percent": 52.986799360000006,
+ "rate_pps": 183574.0,
+ "rate_bps": 13246699840.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 26.392577728,
+ "rate_pps": 91437,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 6598144432
+ },
+ "tx": {
+ "rate_percent": 26.392577728,
+ "rate_pps": 91437,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 6598144432
+ },
+ "orig": {
+ "rate_percent": 26.493399680000003,
+ "rate_pps": 91787,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 6623349920
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9937,
+ 9937
+ ],
+ "lat_max_usec": 4143,
+ "lat_avg_usec": 306,
+ "lat_min_usec": 66,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9938,
+ 9938
+ ],
+ "lat_max_usec": 6704,
+ "lat_avg_usec": 322,
+ "lat_min_usec": 65,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 182869,
+ "overall": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 6603213824.0,
+ "pkt_rate": 91670.5,
+ "max_delay_usec": 6704,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 313.9997550169574,
+ "total_pkt_bytes": 16465596792,
+ "total_pkts": 1828698,
+ "min_delay_usec": 65
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 16465596792,
+ "total_pkts": 1828698,
+ "pkt_bit_rate": 6603036928.0,
+ "pkt_rate": 91668.5
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 6603323392,
+ "pkt_rate": 91672,
+ "max_delay_usec": 6704,
+ "total_pkt_bytes": 8232546284,
+ "avg_delay_usec": 322,
+ "total_pkts": 914321,
+ "min_delay_usec": 65
+ },
+ "tx": {
+ "total_pkt_bytes": 8233050508,
+ "total_pkts": 914377,
+ "pkt_bit_rate": 6603299840,
+ "pkt_rate": 91672
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 6603104256,
+ "pkt_rate": 91669,
+ "max_delay_usec": 4143,
+ "total_pkt_bytes": 8233050508,
+ "avg_delay_usec": 306,
+ "total_pkts": 914377,
+ "min_delay_usec": 66
+ },
+ "tx": {
+ "total_pkt_bytes": 8232546284,
+ "total_pkts": 914321,
+ "pkt_bit_rate": 6602774016,
+ "pkt_rate": 91665
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 13195827040.0,
+ "theoretical_tx_rate_pps": 692904.6563192905
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "c78cef8058b74f9885f125b3bf43f1da"
+ },
+ "synthesis": {
+ "avg_delay_usec": 313.9997550169574,
+ "total_tx_rate": 182869
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/non-regression/nfvbench-latency-fs_9000-fc_100k-rate_90%.json",
+ "frame_sizes": [
+ "9000"
+ ],
+ "rate": "90%",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/non-regression/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-30 06:48:08",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "4a306639173f4526b3a835abe92c709d",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "236023pps",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "9000"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": false,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/non-regression/nfvbench-latency-fs_9000-fc_100k-rate_90%.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": true,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "9000"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2512,
+ 2517
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/non-regression/nfvbench-latency-fs_9000-fc_100k-rate_90%.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/non-regression/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "9000": {
+ "run_config": {
+ "direction-forward": {
+ "rx": {
+ "rate_percent": 33.933413184,
+ "rate_pps": 117563,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 8483353296
+ },
+ "tx": {
+ "rate_percent": 33.933413184,
+ "rate_pps": 117563,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 8483353296
+ },
+ "orig": {
+ "rate_percent": 34.062839360000005,
+ "rate_pps": 118011,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 8515709840
+ }
+ },
+ "direction-total": {
+ "rx": {
+ "rate_percent": 67.868846848,
+ "rate_pps": 235133.0,
+ "rate_bps": 16967211712.0
+ },
+ "tx": {
+ "rate_percent": 67.868846848,
+ "rate_pps": 235133.0,
+ "rate_bps": 16967211712.0
+ },
+ "orig": {
+ "rate_percent": 68.12567872000001,
+ "rate_pps": 236022.0,
+ "rate_bps": 17031419680.0
+ }
+ },
+ "direction-reverse": {
+ "rx": {
+ "rate_percent": 33.935433663999994,
+ "rate_pps": 117570,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 8483858416
+ },
+ "tx": {
+ "rate_percent": 33.935433663999994,
+ "rate_pps": 117570,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 8483858416
+ },
+ "orig": {
+ "rate_percent": 34.062839360000005,
+ "rate_pps": 118011,
+ "initial_rate_type": "rate_pps",
+ "rate_bps": 8515709840
+ }
+ }
+ },
+ "packet_path_stats": {
+ "Forward": {
+ "interfaces": [
+ "TRex.TX.p0",
+ "TRex.RX.p1"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9938,
+ 9938
+ ],
+ "lat_max_usec": 3154,
+ "lat_avg_usec": 503,
+ "lat_min_usec": 113,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ },
+ "Reverse": {
+ "interfaces": [
+ "TRex.TX.p1",
+ "TRex.RX.p0"
+ ],
+ "chains": {
+ "0": {
+ "packets": [
+ 9938,
+ 9938
+ ],
+ "lat_max_usec": 6539,
+ "lat_avg_usec": 390,
+ "lat_min_usec": 114,
+ "hdrh": "HISTFAAAAB54nJNpmSzMwMDAyAABzFAawp8xrcH+A1QAAE9IBCo=",
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ }
+ }
+ }
+ }
+ },
+ "stats": {
+ "total_tx_rate": 235133,
+ "overall": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 8493890560.0,
+ "pkt_rate": 117917.5,
+ "max_delay_usec": 6539,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "avg_delay_usec": 446.5016820253371,
+ "total_pkt_bytes": 21171393328,
+ "total_pkts": 2351332,
+ "min_delay_usec": 113
+ },
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg=",
+ "tx": {
+ "total_pkt_bytes": 21171393328,
+ "total_pkts": 2351332,
+ "pkt_bit_rate": 8494719232.0,
+ "pkt_rate": 117929.0
+ }
+ },
+ "1": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 8494009856,
+ "pkt_rate": 117919,
+ "max_delay_usec": 6539,
+ "total_pkt_bytes": 10585381524,
+ "avg_delay_usec": 390,
+ "total_pkts": 1175631,
+ "min_delay_usec": 114
+ },
+ "tx": {
+ "total_pkt_bytes": 10586011804,
+ "total_pkts": 1175701,
+ "pkt_bit_rate": 8494438400,
+ "pkt_rate": 117925
+ }
+ },
+ "0": {
+ "drop_rate_percent": 0.0,
+ "rx": {
+ "dropped_pkts": 0,
+ "pkt_bit_rate": 8493771264,
+ "pkt_rate": 117916,
+ "max_delay_usec": 3154,
+ "total_pkt_bytes": 10586011804,
+ "avg_delay_usec": 503,
+ "total_pkts": 1175701,
+ "min_delay_usec": 113
+ },
+ "tx": {
+ "total_pkt_bytes": 10585381524,
+ "total_pkts": 1175631,
+ "pkt_bit_rate": 8495000064,
+ "pkt_rate": 117933
+ }
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 16967197280.0,
+ "theoretical_tx_rate_pps": 692904.6563192905
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "4a306639173f4526b3a835abe92c709d"
+ },
+ "synthesis": {
+ "avg_delay_usec": 446.5016820253371,
+ "total_tx_rate": 235133
+ }
+ }
+ ],
+ "throughput": [
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/non-regression/nfvbench-throughput-fs_64-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "64"
+ ],
+ "rate": "ndr",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/non-regression/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-30 06:20:56",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "38389ab0308e45b1a8769cbbff9ef2b2",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "64"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/non-regression/nfvbench-throughput-fs_64-fc_100k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "64"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2512,
+ 2517
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/non-regression/nfvbench-throughput-fs_64-fc_100k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/non-regression/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "64": {
+ "ndr": {
+ "load_percent_per_direction": 0.78125,
+ "timestamp_sec": 1648621399.3161063,
+ "stats": {
+ "total_tx_rate": 577711,
+ "overall": {
+ "rx_pkts": 5777112,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 518,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 5777112,
+ "avg_delay_usec": 108.49992470286192,
+ "min_delay_usec": 29,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 2888411,
+ "min_delay_usec": 29,
+ "drop_pct": 0,
+ "max_delay_usec": 263,
+ "tx_pkts": 2888701,
+ "avg_delay_usec": 110,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 2888701,
+ "min_delay_usec": 31,
+ "drop_pct": 0,
+ "max_delay_usec": 518,
+ "tx_pkts": 2888411,
+ "avg_delay_usec": 107,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 388221792.0,
+ "theoretical_tx_rate_pps": 74404761.90476191
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 1.5625,
+ "duration_sec": 10.0,
+ "l2frame_size": "64",
+ "rate_pps": 581286,
+ "rate_bps": 390625000.0,
+ "time_taken_sec": 137.66617798805237
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 1275063.5983414354,
+ "rx_pkts": 7250590,
+ "time_ms": 1648621274137,
+ "drop_pct": 415848626,
+ "total_tx_pps": 42309921,
+ "tx_pps": 74404760,
+ "tx_pkts": 423099216,
+ "warning": "WARNING: There is a significant difference between requested TX rate (74404760) and actual TX rate (42309921). The traffic generator may not have sufficient CPU to achieve the requested TX rate.",
+ "drop_percentage": 98.28631447995876
+ },
+ {
+ "rx_pps": 1826535.749662823,
+ "rx_pkts": 18151199,
+ "time_ms": 1648621286633,
+ "drop_pct": 351547452,
+ "total_tx_pps": 36969865,
+ "tx_pps": 37202380,
+ "tx_pkts": 369698651,
+ "drop_percentage": 95.09027177921729
+ },
+ {
+ "rx_pps": 1361841.6268887145,
+ "rx_pkts": 13533302,
+ "time_ms": 1648621299138,
+ "drop_pct": 171316035,
+ "total_tx_pps": 18484933,
+ "tx_pps": 18601190,
+ "tx_pkts": 184849337,
+ "drop_percentage": 92.678739226422
+ },
+ {
+ "rx_pps": 774061.5668982501,
+ "rx_pkts": 7703074,
+ "time_ms": 1648621311660,
+ "drop_pct": 84851791,
+ "total_tx_pps": 9255486,
+ "tx_pps": 9300594,
+ "tx_pkts": 92554865,
+ "drop_percentage": 91.67728892479072
+ },
+ {
+ "rx_pps": 792412.735924586,
+ "rx_pkts": 7874998,
+ "time_ms": 1648621324177,
+ "drop_pct": 38339645,
+ "total_tx_pps": 4621464,
+ "tx_pps": 4650296,
+ "tx_pkts": 46214643,
+ "drop_percentage": 82.9599505940141
+ },
+ {
+ "rx_pps": 1930194.9831442875,
+ "rx_pkts": 19183245,
+ "time_ms": 1648621336700,
+ "drop_pct": 3925241,
+ "total_tx_pps": 2310848,
+ "tx_pps": 2325148,
+ "tx_pkts": 23108486,
+ "drop_percentage": 16.986145262826824
+ },
+ {
+ "rx_pps": 1161679.8008522235,
+ "rx_pkts": 11545357,
+ "time_ms": 1648621349196,
+ "drop_pct": 8887,
+ "total_tx_pps": 1155424,
+ "tx_pps": 1162574,
+ "tx_pkts": 11554244,
+ "drop_percentage": 0.07691546067401726
+ },
+ {
+ "rx_pps": 581286.0,
+ "rx_pkts": 5777112,
+ "time_ms": 1648621361693,
+ "drop_pct": 0,
+ "total_tx_pps": 577711,
+ "tx_pps": 581286,
+ "tx_pkts": 5777112,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 871250.6221139021,
+ "rx_pkts": 8658928,
+ "time_ms": 1648621374223,
+ "drop_pct": 6752,
+ "total_tx_pps": 866568,
+ "tx_pps": 871930,
+ "tx_pkts": 8665680,
+ "drop_percentage": 0.07791656280868899
+ },
+ {
+ "rx_pps": 726098.0996491228,
+ "rx_pkts": 7223952,
+ "time_ms": 1648621386809,
+ "drop_pct": 5073,
+ "total_tx_pps": 722902,
+ "tx_pps": 726608,
+ "tx_pkts": 7229025,
+ "drop_percentage": 0.07017543859649122
+ },
+ {
+ "rx_pps": 653878.4654382298,
+ "rx_pkts": 6497920,
+ "time_ms": 1648621399315,
+ "drop_pct": 691,
+ "total_tx_pps": 649861,
+ "tx_pps": 653948,
+ "tx_pkts": 6498611,
+ "ndr_pps": 290643,
+ "drop_percentage": 0.010633041429930181
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "38389ab0308e45b1a8769cbbff9ef2b2"
+ },
+ "synthesis": {
+ "avg_delay_usec": 108.49992470286192,
+ "total_tx_rate": 577711
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/non-regression/nfvbench-throughput-fs_768-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "768"
+ ],
+ "rate": "ndr",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/non-regression/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-30 06:25:50",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "42bb799d87974e05a9480378a9074174",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "768"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/non-regression/nfvbench-throughput-fs_768-fc_100k-rate_ndr-1.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "768"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2512,
+ 2517
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/non-regression/nfvbench-throughput-fs_768-fc_100k-rate_ndr-1.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/non-regression/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "768": {
+ "ndr": {
+ "load_percent_per_direction": 6.640625,
+ "timestamp_sec": 1648621693.1637194,
+ "stats": {
+ "total_tx_rate": 523406,
+ "overall": {
+ "rx_pkts": 5234062,
+ "drop_percentage": 1.910561642074236e-05,
+ "drop_pct": 1,
+ "max_delay_usec": 318,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 5234063,
+ "avg_delay_usec": 106.50022525526063,
+ "min_delay_usec": 32,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 2616900,
+ "min_delay_usec": 32,
+ "drop_pct": 0,
+ "max_delay_usec": 273,
+ "tx_pkts": 2617163,
+ "avg_delay_usec": 102,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 2617162,
+ "min_delay_usec": 32,
+ "drop_pct": 1,
+ "max_delay_usec": 318,
+ "tx_pkts": 2616900,
+ "avg_delay_usec": 111,
+ "drop_percentage": 3.821315296725133e-05
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 3299551424.0,
+ "theoretical_tx_rate_pps": 7931472.081218274
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 13.28125,
+ "duration_sec": 10.0,
+ "l2frame_size": "768",
+ "rate_pps": 526698,
+ "rate_bps": 3320312500.0,
+ "time_taken_sec": 137.53268241882324
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 1419133.1802420425,
+ "rx_pkts": 13668934,
+ "time_ms": 1648621568128,
+ "drop_pct": 62726128,
+ "total_tx_pps": 7639506,
+ "tx_pps": 7931472,
+ "tx_pkts": 76395062,
+ "drop_percentage": 82.10756868028983
+ },
+ {
+ "rx_pps": 1499465.703933795,
+ "rx_pkts": 14900941,
+ "time_ms": 1648621580622,
+ "drop_pct": 24508562,
+ "total_tx_pps": 3940950,
+ "tx_pps": 3965736,
+ "tx_pkts": 39409503,
+ "drop_percentage": 62.189472422425624
+ },
+ {
+ "rx_pps": 1746588.0892852556,
+ "rx_pkts": 17356722,
+ "time_ms": 1648621593115,
+ "drop_pct": 2348032,
+ "total_tx_pps": 1970475,
+ "tx_pps": 1982868,
+ "tx_pkts": 19704754,
+ "drop_percentage": 11.916068579186526
+ },
+ {
+ "rx_pps": 991022.0667012471,
+ "rx_pkts": 9849275,
+ "time_ms": 1648621605613,
+ "drop_pct": 4094,
+ "total_tx_pps": 985336,
+ "tx_pps": 991434,
+ "tx_pkts": 9853369,
+ "drop_percentage": 0.0415492406708812
+ },
+ {
+ "rx_pps": 495716.0,
+ "rx_pkts": 4926180,
+ "time_ms": 1648621618110,
+ "drop_pct": 0,
+ "total_tx_pps": 492618,
+ "tx_pps": 495716,
+ "tx_pkts": 4926180,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 743159.3083655083,
+ "rx_pkts": 7385149,
+ "time_ms": 1648621630627,
+ "drop_pct": 4121,
+ "total_tx_pps": 738927,
+ "tx_pps": 743574,
+ "tx_pkts": 7389270,
+ "drop_percentage": 0.05577005577005577
+ },
+ {
+ "rx_pps": 619263.0064059279,
+ "rx_pkts": 6153928,
+ "time_ms": 1648621643143,
+ "drop_pct": 3806,
+ "total_tx_pps": 615773,
+ "tx_pps": 619646,
+ "tx_pkts": 6157734,
+ "drop_percentage": 0.06180845096589102
+ },
+ {
+ "rx_pps": 557594.6752731256,
+ "rx_pkts": 5541656,
+ "time_ms": 1648621655641,
+ "drop_pct": 848,
+ "total_tx_pps": 554250,
+ "tx_pps": 557680,
+ "tx_pkts": 5542504,
+ "drop_percentage": 0.015299943852092844
+ },
+ {
+ "rx_pps": 526697.8993711005,
+ "rx_pkts": 5234062,
+ "time_ms": 1648621668148,
+ "drop_pct": 1,
+ "total_tx_pps": 523406,
+ "tx_pps": 526698,
+ "tx_pkts": 5234063,
+ "drop_percentage": 1.9105616420742355e-05
+ },
+ {
+ "rx_pps": 542111.0142915759,
+ "rx_pkts": 5387774,
+ "time_ms": 1648621680646,
+ "drop_pct": 785,
+ "total_tx_pps": 538855,
+ "tx_pps": 542190,
+ "tx_pkts": 5388559,
+ "drop_percentage": 0.01456790210518248
+ },
+ {
+ "rx_pps": 534373.8016685186,
+ "rx_pkts": 5321028,
+ "time_ms": 1648621693162,
+ "drop_pct": 699,
+ "total_tx_pps": 532172,
+ "tx_pps": 534444,
+ "tx_pkts": 5321727,
+ "ndr_pps": 263349,
+ "drop_percentage": 0.013134833861263458
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "42bb799d87974e05a9480378a9074174"
+ },
+ "synthesis": {
+ "avg_delay_usec": 106.50022525526063,
+ "total_tx_rate": 523406
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/non-regression/nfvbench-throughput-fs_1518-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "1518"
+ ],
+ "rate": "ndr",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/non-regression/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-30 06:30:43",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "53e4dda50a71447681903270ab2e5a3e",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "1518"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/non-regression/nfvbench-throughput-fs_1518-fc_100k-rate_ndr-0.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "1518"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2512,
+ 2517
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/non-regression/nfvbench-throughput-fs_1518-fc_100k-rate_ndr-0.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/non-regression/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "1518": {
+ "ndr": {
+ "load_percent_per_direction": 12.6953125,
+ "timestamp_sec": 1648621986.5806987,
+ "stats": {
+ "total_tx_rate": 512701,
+ "overall": {
+ "rx_pkts": 5127015,
+ "drop_percentage": 3.900903780892476e-05,
+ "drop_pct": 2,
+ "max_delay_usec": 304,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 5127017,
+ "avg_delay_usec": 148.00000409595057,
+ "min_delay_usec": 34,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 2563507,
+ "min_delay_usec": 34,
+ "drop_pct": 2,
+ "max_delay_usec": 304,
+ "tx_pkts": 2563508,
+ "avg_delay_usec": 127,
+ "drop_percentage": 7.801809083490279e-05
+ },
+ "0": {
+ "rx_pkts": 2563508,
+ "min_delay_usec": 35,
+ "drop_pct": 0,
+ "max_delay_usec": 301,
+ "tx_pkts": 2563509,
+ "avg_delay_usec": 169,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 6308273104.0,
+ "theoretical_tx_rate_pps": 4063719.1157347206
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 25.390625,
+ "duration_sec": 10.0,
+ "l2frame_size": "1518",
+ "rate_pps": 515900,
+ "rate_bps": 6347656250.0,
+ "time_taken_sec": 137.57492327690125
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 1534778.8969990357,
+ "rx_pkts": 15015623,
+ "time_ms": 1648621861490,
+ "drop_pct": 24742063,
+ "total_tx_pps": 3975768,
+ "tx_pps": 4063718,
+ "tx_pkts": 39757686,
+ "drop_percentage": 62.23215053310698
+ },
+ {
+ "rx_pps": 1446228.6489812837,
+ "rx_pkts": 14371898,
+ "time_ms": 1648621874016,
+ "drop_pct": 5819692,
+ "total_tx_pps": 2019159,
+ "tx_pps": 2031858,
+ "tx_pkts": 20191590,
+ "drop_percentage": 28.822356238414113
+ },
+ {
+ "rx_pps": 1015743.6478261326,
+ "rx_pkts": 10093954,
+ "time_ms": 1648621886513,
+ "drop_pct": 1832,
+ "total_tx_pps": 1009578,
+ "tx_pps": 1015928,
+ "tx_pkts": 10095786,
+ "drop_percentage": 0.018146184952811003
+ },
+ {
+ "rx_pps": 507963.59748457576,
+ "rx_pkts": 5047892,
+ "time_ms": 1648621899009,
+ "drop_pct": 4,
+ "total_tx_pps": 504789,
+ "tx_pps": 507964,
+ "tx_pkts": 5047896,
+ "drop_percentage": 7.9240935233214e-05
+ },
+ {
+ "rx_pps": 761669.4717574592,
+ "rx_pkts": 7569092,
+ "time_ms": 1648621911525,
+ "drop_pct": 2748,
+ "total_tx_pps": 757184,
+ "tx_pps": 761946,
+ "tx_pkts": 7571840,
+ "drop_percentage": 0.0362923675090863
+ },
+ {
+ "rx_pps": 634709.9871290971,
+ "rx_pkts": 6308068,
+ "time_ms": 1648621924063,
+ "drop_pct": 2445,
+ "total_tx_pps": 631051,
+ "tx_pps": 634956,
+ "tx_pkts": 6310513,
+ "drop_percentage": 0.038744869077997304
+ },
+ {
+ "rx_pps": 570817.786304882,
+ "rx_pkts": 5672503,
+ "time_ms": 1648621936573,
+ "drop_pct": 6382,
+ "total_tx_pps": 567888,
+ "tx_pps": 571460,
+ "tx_pkts": 5678885,
+ "drop_percentage": 0.11238121567878201
+ },
+ {
+ "rx_pps": 539659.9475749807,
+ "rx_pkts": 5370429,
+ "time_ms": 1648621949076,
+ "drop_pct": 518,
+ "total_tx_pps": 537094,
+ "tx_pps": 539712,
+ "tx_pkts": 5370947,
+ "drop_percentage": 0.009644481690100461
+ },
+ {
+ "rx_pps": 523812.0403582982,
+ "rx_pkts": 5205908,
+ "time_ms": 1648621961578,
+ "drop_pct": 258,
+ "total_tx_pps": 520616,
+ "tx_pps": 523838,
+ "tx_pkts": 5206166,
+ "drop_percentage": 0.004955662189795715
+ },
+ {
+ "rx_pps": 515899.79875237396,
+ "rx_pkts": 5127015,
+ "time_ms": 1648621974085,
+ "drop_pct": 2,
+ "total_tx_pps": 512701,
+ "tx_pps": 515900,
+ "tx_pkts": 5127017,
+ "drop_percentage": 3.900903780892476e-05
+ },
+ {
+ "rx_pps": 519853.3979002963,
+ "rx_pkts": 5166564,
+ "time_ms": 1648621986579,
+ "drop_pct": 165,
+ "total_tx_pps": 516672,
+ "tx_pps": 519870,
+ "tx_pkts": 5166729,
+ "ndr_pps": 257950,
+ "drop_percentage": 0.003193509858945573
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "53e4dda50a71447681903270ab2e5a3e"
+ },
+ "synthesis": {
+ "avg_delay_usec": 148.00000409595057,
+ "total_tx_rate": 512701
+ }
+ },
+ {
+ "input": {
+ "duration_sec": "10",
+ "flavor_type": "nfvbench.loop.basic",
+ "json": "/var/lib/xtesting/results/non-regression/nfvbench-throughput-fs_9000-fc_100k-rate_ndr-2.json",
+ "frame_sizes": [
+ "9000"
+ ],
+ "rate": "ndr",
+ "flow_count": "100k",
+ "log_file": "/var/lib/xtesting/results/non-regression/nfvbench.log",
+ "user_label": "amical_tc12_basic"
+ },
+ "output": {
+ "status": "OK",
+ "result": {
+ "date": "2022-03-30 06:42:59",
+ "nfvbench_version": "5.0.4.dev29",
+ "config": {
+ "compute_nodes": null,
+ "traffic_generator": {
+ "mac_addrs_left": null,
+ "gateway_ip_addrs": [
+ "192.168.30.2",
+ "192.168.31.2"
+ ],
+ "mac_addrs_right": null,
+ "default_profile": "trex-local",
+ "src_vteps": null,
+ "generator_profile": [
+ {
+ "intf_speed": null,
+ "name": "trex-local",
+ "ip": "127.0.0.1",
+ "zmq_rpc_port": 4501,
+ "tool": "TRex",
+ "platform": {
+ "master_thread_id": "0",
+ "latency_thread_id": "1",
+ "dual_if": [
+ {
+ "threads": [
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "socket": 0
+ }
+ ]
+ },
+ "zmq_pub_port": 4500,
+ "interfaces": [
+ {
+ "switch": null,
+ "pci": "0000:00:05.0",
+ "port": 0
+ },
+ {
+ "switch": null,
+ "pci": "0000:00:06.0",
+ "port": 1
+ }
+ ],
+ "cores": 5,
+ "software_mode": false
+ }
+ ],
+ "vtep_gateway_ips": null,
+ "tg_gateway_ip_addrs_step": "0.0.0.1",
+ "udp_port_step": "1",
+ "udp_src_port": [
+ "49152",
+ "49168"
+ ],
+ "gateway_ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_addrs": [
+ "192.168.30.1",
+ "192.168.31.1"
+ ],
+ "ip_addrs": [
+ "198.18.0.0/16",
+ "198.19.0.0/16"
+ ],
+ "ip_src_static": true,
+ "host_name": "nfvbench_tg",
+ "ip_addrs_step": "0.0.0.1",
+ "tg_gateway_ip_cidrs": [
+ "192.168.1.0/24",
+ "192.168.2.0/24"
+ ],
+ "dst_vtep": null,
+ "vtep_vlan": null,
+ "udp_dst_port": [
+ "49152",
+ "49168"
+ ]
+ },
+ "availability_zone": "nova",
+ "vif_multiqueue_size": 8,
+ "periodic_gratuitous_arp": false,
+ "flavor": {
+ "vcpus": 2,
+ "disk": 0,
+ "extra_specs": {
+ "hw:cpu_policy": "dedicated",
+ "hw:mem_page_size": "large"
+ },
+ "ram": 4096
+ },
+ "floating_network": {
+ "subnet": "nfvbench-floating-subnet",
+ "name": "nfvbench-floating-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "network_type": "vlan"
+ },
+ "user_info": null,
+ "service_chain": "PVP",
+ "sriov": false,
+ "vxlan": false,
+ "intf_speed_detected": 25000000000.0,
+ "pause_sec": 2.0,
+ "internal_networks": {
+ "middle": {
+ "subnet": "nfvbench-msubnet",
+ "name": "nfvbench-mnet",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.3.0/24",
+ "network_type": "vlan"
+ },
+ "right": {
+ "subnet": "subnet_nfvbench_vn2bis",
+ "name": "net_nfvbench_vn2bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.31.0/24",
+ "network_type": "vlan"
+ },
+ "left": {
+ "subnet": "subnet_nfvbench_vn1bis",
+ "name": "net_nfvbench_vn1bis",
+ "segmentation_id": null,
+ "physical_network": null,
+ "mpls_transport_labels": null,
+ "cidr": "192.168.30.0/24",
+ "network_type": "vlan"
+ }
+ },
+ "no_vswitch_access": false,
+ "traffic": {
+ "bidirectional": true,
+ "profile": "custom_traffic_profile"
+ },
+ "restart": false,
+ "vm_image_file": "nfvbenchvm-0.15.0901.qcow2",
+ "name": "nfvbench.conf",
+ "std_json": null,
+ "l2_loopback": false,
+ "request_id": "f621b77faf384c08b3fcb9b6a3ec9523",
+ "debug": false,
+ "group_id": null,
+ "loop_vm_name": "nfvbench-loop-vm",
+ "check_traffic_time_sec": 200,
+ "num_mbufs": 128000,
+ "rate": "ndr",
+ "service_chain_count": 1,
+ "service_chain_shared_net": true,
+ "measurement": {
+ "NDR": 0.001,
+ "PDR": 0.1,
+ "load_epsilon": 0.1
+ },
+ "l3_router": false,
+ "debug_mask": 0,
+ "factory_class": "BasicFactory",
+ "tg-tool": "TRex",
+ "frame_sizes": [
+ "9000"
+ ],
+ "service_mode": false,
+ "edge_networks": {
+ "right": {
+ "subnet": "nfvbench-subnet3",
+ "name": "nfvbench-net3",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.4.0/24",
+ "router_name": "router_right",
+ "gateway": null
+ },
+ "left": {
+ "subnet": "nfvbench-subnet2",
+ "name": "nfvbench-net2",
+ "segmentation_id": null,
+ "network_type": null,
+ "physical_network": null,
+ "cidr": "192.168.3.0/24",
+ "router_name": "router_left",
+ "gateway": null
+ }
+ },
+ "ndr_run": true,
+ "use_management_port": false,
+ "hypervisor_hostname": "localdomain",
+ "cache_size": 16,
+ "pdr_run": false,
+ "vlan_tagging": false,
+ "fluentd": [
+ {
+ "ip": "172.20.73.203",
+ "result_tag": "nfvbench.results.amical",
+ "logging_tag": "nfvbench.logs.amical",
+ "port": 25225
+ }
+ ],
+ "use_floating_ip": false,
+ "flow_count": 100000,
+ "loop_vm_arp": false,
+ "user_id": null,
+ "openrc_file": null,
+ "disable_hdrh": false,
+ "json": "/var/lib/xtesting/results/non-regression/nfvbench-throughput-fs_9000-fc_100k-rate_ndr-2.json",
+ "vm_forwarder": "vpp",
+ "factory_module": "nfvbench.factory",
+ "no_latency_streams": false,
+ "single_run": false,
+ "no_arp": false,
+ "cores_used": 5,
+ "traffic_profile": [
+ {
+ "l2frame_size": [
+ "9000"
+ ],
+ "name": "custom_traffic_profile"
+ }
+ ],
+ "vlans": [
+ 2512,
+ 2517
+ ],
+ "tg-name": "trex-local",
+ "management_network": {
+ "subnet": "nfvbench-management-subnet",
+ "name": "nfvbench-management-net",
+ "segmentation_id": null,
+ "network_type": "vlan",
+ "physical_network": null,
+ "cidr": "192.168.0.0/24",
+ "gateway": "192.168.0.254"
+ },
+ "no_traffic": false,
+ "mpls": false,
+ "duration_sec": 10.0,
+ "clouds_detail": "openstack",
+ "mbuf_64": null,
+ "generic_poll_sec": 2,
+ "idle_interfaces_per_vm": 0,
+ "no_flow_stats": true,
+ "lat_percentiles": [
+ 25,
+ 75,
+ 99
+ ],
+ "no_cleanup": true,
+ "no_e2e_check": false,
+ "intf_speed_used": 25000000000.0,
+ "generator_profile": "trex-local",
+ "mbuf_factor": 0.2,
+ "user_label": "amical_tc12_basic",
+ "intf_speed": null,
+ "generic_retry_count": 100,
+ "flavor_type": "nfvbench.loop.basic",
+ "use_sriov_middle_net": false,
+ "json_file": "/var/lib/xtesting/results/non-regression/nfvbench-throughput-fs_9000-fc_100k-rate_ndr-2.json",
+ "std_json_path": null,
+ "unidir_reverse_traffic_pps": 1,
+ "i40e_mixed": "ignore",
+ "gratuitous_arp_pps": 1,
+ "idle_networks": {
+ "subnet": "nfvbench-idle-subnet",
+ "name": "nfvbench-idle-net",
+ "segmentation_id": null,
+ "physical_network": null,
+ "cidr": "192.169.1.0/24",
+ "network_type": "vlan"
+ },
+ "interval_sec": 10.0,
+ "no_latency_stats": false,
+ "cores": null,
+ "log_file": "/var/lib/xtesting/results/non-regression/nfvbench.log",
+ "external_networks": {
+ "right": null,
+ "left": null
+ }
+ },
+ "benchmarks": {
+ "network": {
+ "service_chain": {
+ "PVP": {
+ "result": {
+ "compute_nodes": {},
+ "profile": "custom_traffic_profile",
+ "service_chain_count": 1,
+ "result": {
+ "9000": {
+ "ndr": {
+ "load_percent_per_direction": 39.84375,
+ "timestamp_sec": 1648622722.125216,
+ "stats": {
+ "total_tx_rate": 274380,
+ "overall": {
+ "rx_pkts": 2743802,
+ "drop_percentage": 0.0,
+ "drop_pct": 0,
+ "max_delay_usec": 1244,
+ "lat_percentile": {
+ "99": "n/a",
+ "25": "n/a",
+ "75": "n/a"
+ },
+ "tx_pkts": 2743802,
+ "avg_delay_usec": 641.5002263282846,
+ "min_delay_usec": 72,
+ "hdrh": "HISTFAAAABt4nJNpmSzMgADMUJoRTM6Y1mD/ASIAAEr9BCg="
+ },
+ "1": {
+ "rx_pkts": 1371832,
+ "min_delay_usec": 74,
+ "drop_pct": 0,
+ "max_delay_usec": 1244,
+ "tx_pkts": 1371970,
+ "avg_delay_usec": 637,
+ "drop_percentage": 0.0
+ },
+ "0": {
+ "rx_pkts": 1371970,
+ "min_delay_usec": 72,
+ "drop_pct": 0,
+ "max_delay_usec": 1235,
+ "tx_pkts": 1371832,
+ "avg_delay_usec": 646,
+ "drop_percentage": 0.0
+ },
+ "theoretical_tx_rate_bps": 50000000000.0,
+ "offered_tx_rate_bps": 19799260800.0,
+ "theoretical_tx_rate_pps": 692904.6563192905
+ },
+ "initial_rate_type": "rate_percent",
+ "rate_percent": 79.6875,
+ "duration_sec": 10.0,
+ "l2frame_size": "9000",
+ "rate_pps": 276078,
+ "rate_bps": 19921875000.0,
+ "time_taken_sec": 137.65054941177368
+ },
+ "iteration_stats": {
+ "ndr_pdr": [
+ {
+ "rx_pps": 273698.46051110676,
+ "rx_pkts": 2718128,
+ "time_ms": 1648622596961,
+ "drop_pct": 4163174,
+ "total_tx_pps": 688130,
+ "tx_pps": 692904,
+ "tx_pkts": 6881302,
+ "drop_percentage": 60.49980076444836
+ },
+ {
+ "rx_pps": 276582.23920405895,
+ "rx_pkts": 2748537,
+ "time_ms": 1648622609474,
+ "drop_pct": 694331,
+ "total_tx_pps": 344286,
+ "tx_pps": 346452,
+ "tx_pkts": 3442868,
+ "drop_percentage": 20.167226858537706
+ },
+ {
+ "rx_pps": 173226.0,
+ "rx_pkts": 1721434,
+ "time_ms": 1648622622000,
+ "drop_pct": 0,
+ "total_tx_pps": 172143,
+ "tx_pps": 173226,
+ "tx_pkts": 1721434,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 259838.0,
+ "rx_pkts": 2582143,
+ "time_ms": 1648622634517,
+ "drop_pct": 0,
+ "total_tx_pps": 258214,
+ "tx_pps": 259838,
+ "tx_pkts": 2582143,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 276973.17842007434,
+ "rx_pkts": 2752701,
+ "time_ms": 1648622647105,
+ "drop_pct": 260099,
+ "total_tx_pps": 301280,
+ "tx_pps": 303144,
+ "tx_pkts": 3012800,
+ "drop_percentage": 8.633131970260223
+ },
+ {
+ "rx_pps": 276794.44570930133,
+ "rx_pkts": 2750648,
+ "time_ms": 1648622659614,
+ "drop_pct": 46682,
+ "total_tx_pps": 279733,
+ "tx_pps": 281492,
+ "tx_pkts": 2797330,
+ "drop_percentage": 1.6688056110648368
+ },
+ {
+ "rx_pps": 270664.0,
+ "rx_pkts": 2694191,
+ "time_ms": 1648622672130,
+ "drop_pct": 0,
+ "total_tx_pps": 269419,
+ "tx_pps": 270664,
+ "tx_pkts": 2694191,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 276078.0,
+ "rx_pkts": 2743802,
+ "time_ms": 1648622684633,
+ "drop_pct": 0,
+ "total_tx_pps": 274380,
+ "tx_pps": 276078,
+ "tx_pkts": 2743802,
+ "drop_percentage": 0.0
+ },
+ {
+ "rx_pps": 276955.355288579,
+ "rx_pkts": 2752523,
+ "time_ms": 1648622697132,
+ "drop_pct": 18174,
+ "total_tx_pps": 277069,
+ "tx_pps": 278784,
+ "tx_pkts": 2770697,
+ "drop_percentage": 0.6559360334240807
+ },
+ {
+ "rx_pps": 276409.30910346564,
+ "rx_pkts": 2746820,
+ "time_ms": 1648622709624,
+ "drop_pct": 10163,
+ "total_tx_pps": 275698,
+ "tx_pps": 277432,
+ "tx_pkts": 2756983,
+ "drop_percentage": 0.3686275903768721
+ },
+ {
+ "rx_pps": 276744.94431529724,
+ "rx_pkts": 2750432,
+ "time_ms": 1648622722124,
+ "drop_pct": 90,
+ "total_tx_pps": 275052,
+ "tx_pps": 276754,
+ "tx_pkts": 2750522,
+ "ndr_pps": 138039,
+ "drop_percentage": 0.003272106167483845
+ }
+ ]
+ }
+ }
+ },
+ "flow_count": 100000,
+ "bidirectional": true
+ }
+ }
+ },
+ "versions": {
+ "Traffic_Generator": {
+ "build_date": "Apr 14 2021",
+ "version": "v2.89",
+ "built_by": "hhaim",
+ "mode": "STL",
+ "build_time": "11:22:15"
+ }
+ }
+ }
+ }
+ },
+ "request_id": "f621b77faf384c08b3fcb9b6a3ec9523"
+ },
+ "synthesis": {
+ "avg_delay_usec": 641.5002263282846,
+ "total_tx_rate": 274380
+ }
+ }
+ ]
+ },
+ "fail_tests": 0,
+ "total_tests": 1,
+ "pass_tests": 1
+ }
+ }
+ ]
+}
diff --git a/test/ut_behave_tests/test_steps.py b/test/ut_behave_tests/test_steps.py
new file mode 100644
index 0000000..ae6df45
--- /dev/null
+++ b/test/ut_behave_tests/test_steps.py
@@ -0,0 +1,151 @@
+#!/usr/bin/env python
+# Copyright 2022 Orange
+#
+# 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.
+#
+
+"""
+Unit tests for some of the functions found in behave_tests/features/steps/steps.py
+"""
+
+import logging
+import unittest
+from unittest.mock import call, Mock, patch
+
+from behave_tests.features.steps.steps import get_last_result
+from .test_utils import setup_logging, stub_requests_get
+
+
+def setUpModule():
+ setup_logging()
+
+
+class TestGetLastResult(unittest.TestCase):
+ def setUp(self):
+ # Mock requests.get() so that TestAPI results come from JSON files
+ # found in test_data/ directory.
+ patcher = patch('behave_tests.features.steps.testapi.requests')
+ self._mock_requests = patcher.start()
+ self._mock_requests.get.side_effect = stub_requests_get
+ self.addCleanup(patcher.stop)
+
+ # Setup a mock for behave context
+ self._context = Mock()
+ self._context.data = {
+ 'PROJECT_NAME': "nfvbench",
+ 'TEST_DB_URL': "http://127.0.0.1:8000/api/v1/results"
+ }
+ self._context.logger = logging.getLogger("behave_tests")
+
+ def test_get_last_result_throughput_characterization(self):
+ self._context.json = {
+ "frame_sizes": ['64'],
+ "flow_count": "100k",
+ "duration_sec": '10',
+ "rate": "ndr",
+ "user_label": "amical_tc18_loopback"
+ }
+ self._context.tag = "throughput"
+
+ last_result = get_last_result(self._context, reference=True)
+
+ self.assertIsNotNone(last_result)
+ self.assertEqual(16765582, last_result["synthesis"]["total_tx_rate"])
+ self.assertEqual(25, round(last_result["synthesis"]["avg_delay_usec"]))
+
+ self._mock_requests.get.assert_called_once_with(
+ "http://127.0.0.1:8000/api/v1/results?"
+ "project=nfvbench&case=characterization&criteria=PASS&page=1")
+
+ def test_get_last_result_latency_characterization(self):
+ self._context.json = {
+ "frame_sizes": ['768'],
+ "flow_count": "100k",
+ "duration_sec": '10',
+ "rate": "90%",
+ "user_label": "amical_tc6_intensive"
+ }
+ self._context.tag = "latency"
+
+ last_result = get_last_result(self._context, reference=True)
+
+ self.assertIsNotNone(last_result)
+ self.assertEqual(262275, last_result["synthesis"]["total_tx_rate"])
+ self.assertEqual(353, round(last_result["synthesis"]["avg_delay_usec"]))
+
+ self._mock_requests.get.assert_has_calls([
+ call("http://127.0.0.1:8000/api/v1/results?"
+ "project=nfvbench&case=characterization&criteria=PASS&page=1"),
+ call("http://127.0.0.1:8000/api/v1/results?"
+ "project=nfvbench&case=characterization&criteria=PASS&page=2")])
+
+ def test_last_result_not_found(self):
+ self._context.json = {
+ "frame_sizes": ['64'],
+ "flow_count": "100k",
+ "duration_sec": '10',
+ "rate": "ndr",
+ "user_label": "toto_titi_tata" # User label not in test data
+ }
+ self._context.tag = "throughput"
+
+ with self.assertRaises(AssertionError):
+ get_last_result(self._context, reference=True)
+
+ self._mock_requests.get.assert_has_calls([
+ call("http://127.0.0.1:8000/api/v1/results?"
+ "project=nfvbench&case=characterization&criteria=PASS&page=1"),
+ call("http://127.0.0.1:8000/api/v1/results?"
+ "project=nfvbench&case=characterization&criteria=PASS&page=2")])
+
+ def test_get_last_result_throughput_non_regression(self):
+ self._context.CASE_NAME = "non-regression"
+ self._context.json = {
+ "frame_sizes": ['1518'],
+ "flow_count": "100k",
+ "duration_sec": '10',
+ "rate": "ndr",
+ "user_label": "amical_tc12_basic"
+ }
+ self._context.tag = "throughput"
+
+ last_result = get_last_result(self._context)
+
+ self.assertIsNotNone(last_result)
+ self.assertEqual(512701, last_result["synthesis"]["total_tx_rate"])
+ self.assertEqual(148, round(last_result["synthesis"]["avg_delay_usec"]))
+
+ self._mock_requests.get.assert_called_once_with(
+ "http://127.0.0.1:8000/api/v1/results?"
+ "project=nfvbench&case=non-regression&criteria=PASS&page=1")
+
+ def test_get_last_result_latency_non_regression(self):
+ self._context.CASE_NAME = "non-regression"
+ self._context.json = {
+ "frame_sizes": ['1518'],
+ "flow_count": "100k",
+ "duration_sec": '10',
+ "rate": "70%",
+ "user_label": "amical_tc12_basic"
+ }
+ self._context.tag = "latency"
+
+ last_result = get_last_result(self._context)
+
+ self.assertIsNotNone(last_result)
+ self.assertEqual(352040, last_result["synthesis"]["total_tx_rate"])
+ self.assertEqual(114, round(last_result["synthesis"]["avg_delay_usec"]))
+
+ self._mock_requests.get.assert_called_once_with(
+ "http://127.0.0.1:8000/api/v1/results?"
+ "project=nfvbench&case=non-regression&criteria=PASS&page=1")
diff --git a/test/ut_behave_tests/test_testapi.py b/test/ut_behave_tests/test_testapi.py
new file mode 100644
index 0000000..0fbcd96
--- /dev/null
+++ b/test/ut_behave_tests/test_testapi.py
@@ -0,0 +1,132 @@
+#!/usr/bin/env python
+# Copyright 2022 Orange
+#
+# 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.
+#
+
+"""
+Unit tests for the testapi module found in behave_tests/features/steps.
+"""
+
+import unittest
+from unittest.mock import call, patch
+
+from behave_tests.features.steps.testapi import TestapiClient
+from .test_utils import setup_logging, stub_requests_get
+
+
+def setUpModule():
+ setup_logging(log_filename="ut_behave_tests_testapi.log")
+
+
+class TestTestapiClient(unittest.TestCase):
+ def setUp(self):
+ patcher = patch('behave_tests.features.steps.testapi.requests')
+ self.mock_requests = patcher.start()
+ self.mock_requests.get.side_effect = stub_requests_get
+ self.addCleanup(patcher.stop)
+
+ def test_find_characterization_throughput_on_page_1(self):
+ client = TestapiClient("http://127.0.0.1:8000/api/v1/results")
+ testapi_params = {"project_name": "nfvbench", "case_name": "characterization"}
+ nfvbench_test_input = {"frame_sizes": ['64'],
+ "flow_count": "100k",
+ "duration_sec": '10',
+ "rate": "ndr",
+ "user_label": "amical_tc18_loopback"}
+ last_result = client.find_last_result(testapi_params,
+ scenario_tag="throughput",
+ nfvbench_test_input=nfvbench_test_input)
+ self.assertIsNotNone(last_result)
+ self.assertEqual(16765582, last_result["synthesis"]["total_tx_rate"])
+ self.assertEqual(25, round(last_result["synthesis"]["avg_delay_usec"]))
+
+ self.mock_requests.get.assert_called_once_with(
+ "http://127.0.0.1:8000/api/v1/results?"
+ "project=nfvbench&case=characterization&criteria=PASS&page=1")
+
+ def test_find_characterization_latency_on_page_2(self):
+ client = TestapiClient("http://127.0.0.1:8000/api/v1/results")
+ testapi_params = {"project_name": "nfvbench", "case_name": "characterization"}
+ nfvbench_test_input = {"frame_sizes": ['768'],
+ "flow_count": "100k",
+ "duration_sec": '10',
+ "rate": "90%",
+ "user_label": "amical_tc6_intensive"}
+ last_result = client.find_last_result(testapi_params,
+ scenario_tag="latency",
+ nfvbench_test_input=nfvbench_test_input)
+ self.assertIsNotNone(last_result)
+ self.assertEqual(262275, last_result["synthesis"]["total_tx_rate"])
+ self.assertEqual(353, round(last_result["synthesis"]["avg_delay_usec"]))
+
+ self.mock_requests.get.assert_has_calls([
+ call("http://127.0.0.1:8000/api/v1/results?"
+ "project=nfvbench&case=characterization&criteria=PASS&page=1"),
+ call("http://127.0.0.1:8000/api/v1/results?"
+ "project=nfvbench&case=characterization&criteria=PASS&page=2")])
+
+ def test_no_result_found(self):
+ client = TestapiClient("http://127.0.0.1:8000/api/v1/results")
+ testapi_params = {"project_name": "nfvbench", "case_name": "characterization"}
+ nfvbench_test_input = {"frame_sizes": ['768'],
+ "flow_count": "100k",
+ "duration_sec": '10',
+ "rate": "90%",
+ "user_label": "toto_titi_tata"} # User label not in test data
+ last_result = client.find_last_result(testapi_params,
+ scenario_tag="throughput",
+ nfvbench_test_input=nfvbench_test_input)
+ self.assertIsNone(last_result)
+
+ self.mock_requests.get.assert_has_calls([
+ call("http://127.0.0.1:8000/api/v1/results?"
+ "project=nfvbench&case=characterization&criteria=PASS&page=1"),
+ call("http://127.0.0.1:8000/api/v1/results?"
+ "project=nfvbench&case=characterization&criteria=PASS&page=2")])
+
+ def test_requests_errors(self):
+ """Check that an exception is raised in case of problem with requests."""
+ client = TestapiClient("http://127.0.0.1:8000/api/v1/results")
+ testapi_params = {"project_name": "foo", # non-existent project
+ "case_name": "characterization"}
+ nfvbench_test_input = {"frame_sizes": ['768'],
+ "flow_count": "100k",
+ "duration_sec": '10',
+ "rate": "90%",
+ "user_label": "amical_tc6_intensive"}
+
+ with self.assertRaises(ValueError):
+ client.find_last_result(testapi_params, scenario_tag="throughput",
+ nfvbench_test_input=nfvbench_test_input)
+
+ def test_flavor_is_ignored(self):
+ """Check that lookup in TestAPI does not filter on the flavor_type."""
+ client = TestapiClient("http://127.0.0.1:8000/api/v1/results")
+ testapi_params = {"project_name": "nfvbench", "case_name": "characterization"}
+ nfvbench_test_input = {"frame_sizes": ['64'],
+ "flow_count": "100k",
+ "duration_sec": '10',
+ "rate": "ndr",
+ "user_label": "amical_tc18_loopback",
+ "flavor_type": "no_such_flavor"}
+ last_result = client.find_last_result(testapi_params,
+ scenario_tag="throughput",
+ nfvbench_test_input=nfvbench_test_input)
+ self.assertIsNotNone(last_result)
+ self.assertEqual(16765582, last_result["synthesis"]["total_tx_rate"])
+ self.assertEqual(25, round(last_result["synthesis"]["avg_delay_usec"]))
+
+ self.mock_requests.get.assert_called_once_with(
+ "http://127.0.0.1:8000/api/v1/results?"
+ "project=nfvbench&case=characterization&criteria=PASS&page=1")
diff --git a/test/ut_behave_tests/test_utils.py b/test/ut_behave_tests/test_utils.py
new file mode 100644
index 0000000..0d06707
--- /dev/null
+++ b/test/ut_behave_tests/test_utils.py
@@ -0,0 +1,119 @@
+#!/usr/bin/env python
+# Copyright 2022 Orange
+#
+# 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.
+#
+
+"""
+Utility functions for unit tests.
+"""
+
+import json
+import logging
+import pathlib
+import unittest
+from unittest.mock import Mock
+
+
+# -----------------------------------------------------------------------------------------
+# Logging helpers
+# -----------------------------------------------------------------------------------------
+
+def setup_logging(log_filename="ut_behave_tests.log", *, log_to_console=False):
+ """Setup logging for unit tests.
+
+ Principles:
+ - re-use the global "behave_tests" logger
+ - if `log_to_console` is True, log messages up to INFO level to the console
+ (can be useful when running tests with unittest instead of pytest)
+ - if `log_filename` is provided, log messages up to DEBUG level to the log file
+ """
+ logger = logging.getLogger("behave_tests")
+ logger.setLevel(logging.DEBUG)
+ formatter = logging.Formatter("%(levelname)s:%(filename)s:%(lineno)s: %(message)s")
+
+ # Configure logging to the console
+ if log_to_console:
+ ch = logging.StreamHandler()
+ ch.setLevel(logging.INFO)
+ ch.setFormatter(formatter)
+ logger.addHandler(ch)
+
+ # Configure logging to the log file
+ if log_filename is not None:
+ fh = logging.FileHandler(filename=log_filename, mode='w')
+ fh.setLevel(logging.DEBUG)
+ fh.setFormatter(formatter)
+ logger.addHandler(fh)
+
+ return logger
+
+
+# -----------------------------------------------------------------------------------------
+# Test data helpers
+# -----------------------------------------------------------------------------------------
+
+def get_test_data_dir() -> pathlib.Path:
+ """Get absolute path of the test_data/ dir.
+
+ We need this because the unit tests can be run from different locations
+ depending on the context (tox, development, ...)
+ """
+ return pathlib.Path(__file__).parent / 'test_data'
+
+
+def stub_requests_get(testapi_url):
+ """Mock a request to TestAPI results database.
+
+ Instead of doing a real request, build a filename from the URL suffix, find
+ the file in the `test_data` directory and return the contents of the file.
+
+ Args:
+ testapi_url: a URL starting with `http://127.0.0.1:8000/api/v1/results?`
+ and followed by the results file name without extension.
+
+ Returns:
+ A mock of a `requests.Response` object with the attributes `text` and
+ `status_code` and the method `json()`.
+ """
+ response = Mock()
+ filename_prefix = testapi_url.replace('http://127.0.0.1:8000/api/v1/results?', '')
+ if filename_prefix == testapi_url:
+ raise ValueError("For unit tests, TestAPI URL must start with "
+ "http://127.0.0.1:8000/api/v1/results?")
+ page_filename = get_test_data_dir() / (filename_prefix + ".json")
+ try:
+ with open(page_filename, 'r', encoding='utf-8') as results:
+ response.text = results.read()
+ response.json = lambda: json.loads(response.text)
+ response.status_code = 200
+ return response
+ except FileNotFoundError as e:
+ logging.getLogger("behave_tests").exception(e)
+ raise ValueError(f"No test data available for TestAPI URL: {testapi_url}") from e
+
+
+class TestStubRequestsGet(unittest.TestCase):
+ def test_valid_url(self):
+ response = stub_requests_get("http://127.0.0.1:8000/api/v1/results?"
+ "project=nfvbench&case=characterization&criteria=PASS&page=1")
+ self.assertEqual(200, response.status_code)
+ self.assertEqual("nfvbench", response.json()["results"][0]["project_name"])
+
+ def test_bad_prefix(self):
+ with self.assertRaises(ValueError):
+ stub_requests_get("http://no.way/api/v1/results?" "dummy_suffix")
+
+ def test_file_not_found(self):
+ with self.assertRaises(ValueError):
+ stub_requests_get("http://127.0.0.1:8000/api/v1/results?" "dummy_suffix")
diff --git a/tox.ini b/tox.ini
index 337ee0d..9b4d218 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,6 +1,6 @@
[tox]
minversion = 1.6
-envlist = py27,pep8,lint,docs,docs-linkcheck
+envlist = py38,pep8,lint,docs,docs-linkcheck
skipsdist = True
[testenv]
@@ -8,46 +8,77 @@ usedevelop = True
install_command = pip install -U {opts} {packages}
setenv =
VIRTUAL_ENV={envdir}
-deps = -r{toxinidir}/requirements.txt
- -r{toxinidir}/test-requirements.txt
-commands = py.test -q --basetemp={envtmpdir} {posargs}
+deps =
+ -chttps://opendev.org/openstack/requirements/raw/branch/stable/yoga/upper-constraints.txt
+ -r{toxinidir}/requirements.txt
+ -r{toxinidir}/test-requirements.txt
+commands = py.test -q --basetemp={envtmpdir} {posargs} test/
[testenv:pep8]
+basepython = python3.8
+skip_install = True
commands = flake8 {toxinidir}
[testenv:lint]
+basepython = python3.8
+skip_install = True
commands = pylint --rcfile pylint.rc nfvbench test
-[testenv:venv]
-commands = {posargs}
-
-[testenv:cover]
-commands = python setup.py testr --coverage --testr-args='{posargs}'
-
[flake8]
# H803 skipped on purpose per list discussion.
# E123, E125 skipped as they are invalid PEP-8.
+# E117,E126,E127,E128,E211,E226,E231,E252,E305,E731,W503,W504 skipped as they
+# are introduced by newer versions of flake8 (update from 2.2.4 to 3.9.2)
+# H216,H301,H401 skipped as they are introduced by newer version of hacking
+# (update from 0.10.3 to 4.1.0)
max-line-length = 100
show-source = True
+#E117: over-indented (comment)
+#E126: continuation line over-indented for hanging indent
+#E127: continuation line over-indented for visual indent
+#E128: continuation line under-indented for visual indent
+#E211: whitespace before '('
+#E226: missing whitespace around arithmetic operator
+#E231: missing whitespace after ','
+#E252: missing whitespace around parameter equals
#E302: expected 2 blank linee
#E303: too many blank lines (2)
+#E305: expected 2 blank lines after class or function definition, found 1
+#E731: do not assign a lambda expression, use a def
+#W503: line break before binary operator
+#W504: line break after binary operator
+#H101: Use TODO(NAME)
+#H216: The unittest.mock module should be used rather than the third party mock package unless actually needed. If so, disable the H216 check in hacking config and ensure mock is declared in the project's requirements.
#H233: Python 3.x incompatible use of print operator
#H236: Python 3.x incompatible __metaclass__, use six.add_metaclass()
+#H301: one import per line
#H302: import only modules.
+#H304: No relative imports
+#H306: imports not in alphabetical order
+#H401: docstring should not start with a space
#H404: multi line docstring should start without a leading new line
#H405: multi line docstring summary not separated with an empty line
#H904: Wrap long lines in parentheses instead of a backslash
-ignore = E123,E125,H803,E302,E303,H104,H233,H236,H302,H404,H405,H904,D102,D100,D107
+ignore = E117,E123,E125,E126,E127,E128,E211,E226,E231,E252,E302,E303,E305,E731,W503,W504,H101,H104,H216,H233,H236,H301,H302,H304,H306,H401,H404,H405,H803,H904,D102,D100,D107
builtins = _
-exclude=venv,.git,.tox,dist,doc,*openstack/common*,*lib/python*,*egg,build,dib-venv
+exclude=venv,.git,.tox,dist,doc,*openstack/common*,*lib/python*,*egg,build,nfvbenchvm
[testenv:docs]
-deps = -rdocs/requirements.txt
+basepython = python3.8
+deps =
+ -chttps://opendev.org/openstack/requirements/raw/branch/stable/yoga/upper-constraints.txt
+ -rdocs/requirements.txt
+skip_install = True
commands =
sphinx-build -b html -n -d {envtmpdir}/doctrees ./docs/ {toxinidir}/docs/_build/html
echo "Generated docs available in {toxinidir}/docs/_build/html"
whitelist_externals = echo
[testenv:docs-linkcheck]
-deps = -rdocs/requirements.txt
+basepython = python3.8
+deps =
+ -chttps://opendev.org/openstack/requirements/raw/branch/stable/yoga/upper-constraints.txt
+ -rdocs/requirements.txt
+skip_install = True
+passenv = http_proxy https_proxy no_proxy
commands = sphinx-build -b linkcheck -d {envtmpdir}/doctrees ./docs/ {toxinidir}/docs/_build/linkcheck
diff --git a/xtesting/ansible/host_vars/127.0.0.1 b/xtesting/ansible/host_vars/127.0.0.1
new file mode 100644
index 0000000..52d44a6
--- /dev/null
+++ b/xtesting/ansible/host_vars/127.0.0.1
@@ -0,0 +1,10 @@
+docker_args:
+ env: {}
+ params:
+ net: host
+ privileged: true
+ volumes:
+ - /lib/modules/$(uname -r):/lib/modules/$(uname -r)
+ - /usr/src/kernels:/usr/src/kernels -v /dev:/dev
+ - /home/opnfv/nfvbench/config:/etc/nfvbench
+ - /home/opnfv/nfvbench/results:/var/lib/xtesting/results
diff --git a/xtesting/ansible/site.yml b/xtesting/ansible/site.yml
new file mode 100644
index 0000000..37fa6c3
--- /dev/null
+++ b/xtesting/ansible/site.yml
@@ -0,0 +1,22 @@
+---
+- hosts:
+ - 127.0.0.1
+ roles:
+ - role: collivier.xtesting
+ project: nfvbench
+ gerrit_project: nfvbench
+ builds:
+ steps:
+ - name: build opnfv/nfvbench
+ containers:
+ - name: nfvbench
+ ref_arg: BRANCH
+ path: docker
+ suites:
+ - container: nfvbench
+ tests:
+ - 10kpps-pvp-run
+ - characterization
+ - non-regression
+ properties:
+ execution-type: SEQUENTIALLY \ No newline at end of file
diff --git a/xtesting/testcases.yaml b/xtesting/testcases.yaml
new file mode 100644
index 0000000..03579b7
--- /dev/null
+++ b/xtesting/testcases.yaml
@@ -0,0 +1,101 @@
+---
+tiers:
+ -
+ name: nfvbench
+ order: 1
+ description: 'Data Plane Performance Testing'
+ testcases:
+ -
+ case_name: characterization
+ project_name: nfvbench
+ criteria: 100
+ blocking: true
+ clean_flag: false
+ description: ''
+ run:
+ name: 'nfvbench_behaveframework'
+ args:
+ suites:
+ - /opt/nfvbench/behave_tests/features/characterization-full.feature
+ tags:
+ - characterization
+ console:
+ - true
+ -
+ case_name: non-regression
+ project_name: nfvbench
+ criteria: 100
+ blocking: true
+ clean_flag: false
+ description: ''
+ run:
+ name: 'nfvbench_behaveframework'
+ args:
+ suites:
+ - /opt/nfvbench/behave_tests/features/non-regression.feature
+ tags:
+ - non-regression
+ console:
+ - true
+
+ -
+ name: nfvbench-rapid-characterization
+ order: 2
+ description: 'Data Plane Performance Testing'
+ testcases:
+ -
+ case_name: rapid-characterization
+ project_name: nfvbench
+ criteria: 100
+ blocking: true
+ clean_flag: false
+ description: ''
+ run:
+ name: 'nfvbench_behaveframework'
+ args:
+ suites:
+ - /opt/nfvbench/behave_tests/features/characterization-samples.feature
+ tags:
+ - characterization
+ console:
+ - true
+ -
+ name: quick-test-10kpps
+ order: 3
+ description: 'Quick nfvbench test at low packet rate'
+ testcases:
+ -
+ case_name: quick-test-10kpps
+ project_name: nfvbench
+ criteria: 100
+ blocking: true
+ clean_flag: false
+ description: ''
+ run:
+ name: 'nfvbench_behaveframework'
+ args:
+ suites:
+ - /opt/nfvbench/behave_tests/features/quick-test-10kpps.feature
+ tags:
+ - quick-test-10kpps
+ console:
+ - true
+ -
+ name: nfvbench-demo
+ order: 4
+ description: 'Data Plane Performance Testing'
+ testcases:
+ -
+ case_name: 10kpps-pvp-run
+ project_name: nfvbench
+ criteria: 100
+ blocking: true
+ clean_flag: false
+ description: ''
+ run:
+ name: 'bashfeature'
+ args:
+ cmd:
+ - nfvbench -c /etc/nfvbench/nfvbench.cfg --rate 10kpps
+ console:
+ - true